/* *@@sourcefile standards.h: * some things that are always needed and never * declared in a common place. Here you go. * * Note: Version numbering in this file relates to XWorkplace version * numbering. * *@@include #include "helpers\standards.h" */ /* Copyright (C) 2001 Ulrich M”ller. * This file is part of the "XWorkplace helpers" source package. * This 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, in version 2 as it comes in the * "COPYING" file of the XWorkplace main distribution. * 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. */ #ifndef STANDARDS_HEADER_INCLUDED #define STANDARDS_HEADER_INCLUDED /* *@@ NEW: * wrapper around the typical malloc struct * sequence. * * Usage: * + STRUCT *p = NEW(STRUCT); * * This expands to: * + STRUCT *p = (STRUCT *)malloc(sizeof(STRUCT)); * *@@added V0.9.9 (2001-04-01) [umoeller] */ #define NEW(type) (type *)malloc(sizeof(type)) /* *@@ ZERO: * wrapper around the typical zero-struct * sequence. * * Usage: * + ZERO(p) * * This expands to: * + memset(p, 0, sizeof(*p)); * *@@added V0.9.9 (2001-04-01) [umoeller] */ #define ZERO(ptr) memset(ptr, 0, sizeof(*ptr)) /* *@@ FREE: * wrapper around the typical free() sequence. * * Usage: * + FREE(p) * * This expands to: * + if (p) + { + free(p); + p = NULL; + } * *@@added V0.9.16 (2001-12-08) [umoeller] */ #define FREE(ptr) { if ((ptr)) { free(ptr); ptr = NULL; } } /* *@@ ARRAYITEMCOUNT: * helpful macro to count the count of items * in an array. Use this to avoid typos when * having to pass the array item count to * a function. * * ULONG aul[] = { 0, 1, 2, 3, 4 }; * * ARRAYITEMCOUNT(aul) then expands to: * + sizeof(aul) / sizeof(aul[0]) * * which should return 5. Note that the compiler * should calculate this at compile-time, so that * there is no run-time overhead... and this will * never miscount the array item size. * *@@added V0.9.9 (2001-01-29) [umoeller] */ #define ARRAYITEMCOUNT(array) (sizeof(array) / sizeof(array[0])) /* *@@ STRINGORNULL: * helpful macro to avoid passing null strings * to debugging printf calls. * *@@added V0.9.16 (2002-01-05) [umoeller] */ #define STRINGORNULL(s) (s) ? (s) : "NULL" /* *@@ STOREIFMAX: * helpful macro to store a in b if it is * larger than b. * *@@added V1.0.1 (2002-11-30) [umoeller] */ #define STOREIFMAX(a, b) if ((a) > (b)) { b = a; } #ifdef _PMPRINTF_ #define PMPF_RECT(s, prect) _PmpfF(("%s: xLeft %d, xRight %d, yBottom %d, yTop %d", (s), (prect)->xLeft, (prect)->xRight, (prect)->yBottom, (prect)->yTop)) #else #define PMPF_RECT(s, prect) #endif #endif