/*************************************************************************** (C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. For purposes of this license notice, the term Licensors shall mean, collectively, Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. The term Licensor shall mean any of the Licensors. Subject to acceptance of the following conditions, permission is hereby granted by Licensors without the need for written agreement and without license or royalty fees, to use, copy, modify and distribute this software for any purpose. The above copyright notice and the following four paragraphs must be reproduced in all copies of this software and any software including this software. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR MODIFICATIONS. IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. The software is provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the government are subject to restrictions set forth in DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. ***************************************************************************/ /* * src: vobject.c * doc: vobject and APIs to construct vobject, APIs pretty print * vobject, and convert a vobject into its textual representation. */ #ifndef MWERKS #include #endif #include "vobject.h" #include #include #include #define NAME_OF(o) o->id #define VALUE_TYPE(o) o->valType #define STRINGZ_VALUE_OF(o) o->val.strs #define USTRINGZ_VALUE_OF(o) o->val.ustrs #define INTEGER_VALUE_OF(o) o->val.i #define LONG_VALUE_OF(o) o->val.l #define ANY_VALUE_OF(o) o->val.any #define VOBJECT_VALUE_OF(o) o->val.vobj typedef union ValueItem { const char *strs; const wchar_t *ustrs; unsigned int i; unsigned long l; void *any; VObject *vobj; } ValueItem; struct VObject { VObject *next; const char *id; VObject *prop; unsigned short valType; ValueItem val; }; typedef struct StrItem StrItem; struct StrItem { StrItem *next; const char *s; unsigned int refCnt; }; const char** fieldedProp; /*---------------------------------------------------------------------- The following functions involve with memory allocation: newVObject deleteVObject dupStr deleteStr newStrItem deleteStrItem ----------------------------------------------------------------------*/ DLLEXPORT(VObject*) newVObject_(const char *id) { VObject *p = (VObject*)malloc(sizeof(VObject)); p->next = 0; p->id = id; p->prop = 0; VALUE_TYPE(p) = 0; ANY_VALUE_OF(p) = 0; return p; } DLLEXPORT(VObject*) newVObject(const char *id) { return newVObject_(lookupStr(id)); } DLLEXPORT(void) deleteVObject(VObject *p) { unUseStr(p->id); free(p); } DLLEXPORT(char*) dupStr(const char *s, unsigned int size) { char *t; if (size == 0) { size = strlen(s); } t = (char*)malloc(size+1); if (t) { memcpy(t,s,size); t[size] = 0; return t; } else { return (char*)0; } } DLLEXPORT(void) deleteStr(const char *p) { if (p) free((void*)p); } static StrItem* newStrItem(const char *s, StrItem *next) { StrItem *p = (StrItem*)malloc(sizeof(StrItem)); p->next = next; p->s = s; p->refCnt = 1; return p; } static void deleteStrItem(StrItem *p) { free((void*)p); } /*---------------------------------------------------------------------- The following function provide accesses to VObject's value. ----------------------------------------------------------------------*/ DLLEXPORT(const char*) vObjectName(VObject *o) { return NAME_OF(o); } DLLEXPORT(void) setVObjectName(VObject *o, const char* id) { NAME_OF(o) = id; } DLLEXPORT(const char*) vObjectStringZValue(VObject *o) { return STRINGZ_VALUE_OF(o); } DLLEXPORT(void) setVObjectStringZValue(VObject *o, const char *s) { STRINGZ_VALUE_OF(o) = dupStr(s,0); VALUE_TYPE(o) = VCVT_STRINGZ; } DLLEXPORT(void) setVObjectStringZValue_(VObject *o, const char *s) { STRINGZ_VALUE_OF(o) = s; VALUE_TYPE(o) = VCVT_STRINGZ; } DLLEXPORT(const wchar_t*) vObjectUStringZValue(VObject *o) { return USTRINGZ_VALUE_OF(o); } DLLEXPORT(void) setVObjectUStringZValue(VObject *o, const wchar_t *s) { USTRINGZ_VALUE_OF(o) = (wchar_t*) dupStr((char*)s,(uStrLen(s)+1)*2); VALUE_TYPE(o) = VCVT_USTRINGZ; } DLLEXPORT(void) setVObjectUStringZValue_(VObject *o, const wchar_t *s) { USTRINGZ_VALUE_OF(o) = s; VALUE_TYPE(o) = VCVT_USTRINGZ; } DLLEXPORT(unsigned int) vObjectIntegerValue(VObject *o) { return INTEGER_VALUE_OF(o); } DLLEXPORT(void) setVObjectIntegerValue(VObject *o, unsigned int i) { INTEGER_VALUE_OF(o) = i; VALUE_TYPE(o) = VCVT_UINT; } DLLEXPORT(unsigned long) vObjectLongValue(VObject *o) { return LONG_VALUE_OF(o); } DLLEXPORT(void) setVObjectLongValue(VObject *o, unsigned long l) { LONG_VALUE_OF(o) = l; VALUE_TYPE(o) = VCVT_ULONG; } DLLEXPORT(void*) vObjectAnyValue(VObject *o) { return ANY_VALUE_OF(o); } DLLEXPORT(void) setVObjectAnyValue(VObject *o, void *t) { ANY_VALUE_OF(o) = t; VALUE_TYPE(o) = VCVT_RAW; } DLLEXPORT(VObject*) vObjectVObjectValue(VObject *o) { return VOBJECT_VALUE_OF(o); } DLLEXPORT(void) setVObjectVObjectValue(VObject *o, VObject *p) { VOBJECT_VALUE_OF(o) = p; VALUE_TYPE(o) = VCVT_VOBJECT; } DLLEXPORT(int) vObjectValueType(VObject *o) { return VALUE_TYPE(o); } /*---------------------------------------------------------------------- The following functions can be used to build VObject. ----------------------------------------------------------------------*/ DLLEXPORT(VObject*) addVObjectProp(VObject *o, VObject *p) { /* circular link list pointed to tail */ /* o {next,id,prop,val} V pn {next,id,prop,val} V ... p1 {next,id,prop,val} V pn --> o {next,id,prop,val} V pn {next,id,prop,val} V p {next,id,prop,val} ... p1 {next,id,prop,val} V pn */ VObject *tail = o->prop; if (tail) { p->next = tail->next; o->prop = tail->next = p; } else { o->prop = p->next = p; } return p; } DLLEXPORT(VObject*) addProp(VObject *o, const char *id) { return addVObjectProp(o,newVObject(id)); } DLLEXPORT(VObject*) addProp_(VObject *o, const char *id) { return addVObjectProp(o,newVObject_(id)); } DLLEXPORT(void) addList(VObject **o, VObject *p) { p->next = 0; if (*o == 0) { *o = p; } else { VObject *t = *o; while (t->next) { t = t->next; } t->next = p; } } DLLEXPORT(VObject*) nextVObjectInList(VObject *o) { return o->next; } DLLEXPORT(VObject*) setValueWithSize_(VObject *prop, void *val, unsigned int size) { VObject *sizeProp; setVObjectAnyValue(prop, val); sizeProp = addProp(prop,VCDataSizeProp); setVObjectLongValue(sizeProp, size); return prop; } DLLEXPORT(VObject*) setValueWithSize(VObject *prop, void *val, unsigned int size) { void *p = dupStr((const char *)val,size); return setValueWithSize_(prop,p,p?size:0); } DLLEXPORT(void) initPropIterator(VObjectIterator *i, VObject *o) { i->start = o->prop; i->next = 0; } DLLEXPORT(void) initVObjectIterator(VObjectIterator *i, VObject *o) { i->start = o->next; i->next = 0; } DLLEXPORT(int) moreIteration(VObjectIterator *i) { return (i->start && (i->next==0 || i->next!=i->start)); } DLLEXPORT(VObject*) nextVObject(VObjectIterator *i) { if (i->start && i->next != i->start) { if (i->next == 0) { i->next = i->start->next; return i->next; } else { i->next = i->next->next; return i->next; } } else return (VObject*)0; } DLLEXPORT(VObject*) isAPropertyOf(VObject *o, const char *id) { VObjectIterator i; initPropIterator(&i,o); while (moreIteration(&i)) { VObject *each = nextVObject(&i); if (!stricmp(id,each->id)) return each; } return (VObject*)0; } DLLEXPORT(VObject*) addGroup(VObject *o, const char *g) { /* a.b.c --> prop(c) prop(VCGrouping=b) prop(VCGrouping=a) */ char *dot = strrchr(g,'.'); if (dot) { VObject *p, *t; char *gs, *n = dot+1; gs = dupStr(g,0); /* so we can write to it. */ /* used to be * t = p = addProp_(o,lookupProp_(n)); */ t = p = addProp_(o,lookupProp(n)); dot = strrchr(gs,'.'); *dot = 0; do { dot = strrchr(gs,'.'); if (dot) { n = dot+1; *dot=0; } else n = gs; /* property(VCGroupingProp=n); * and the value may have VCGrouping property */ t = addProp(t,VCGroupingProp); setVObjectStringZValue(t,lookupProp_(n)); } while (n != gs); deleteStr(gs); return p; } else return addProp_(o,lookupProp(g)); } DLLEXPORT(VObject*) addPropValue(VObject *o, const char *p, const char *v) { VObject *prop; prop = addProp(o,p); setVObjectUStringZValue_(prop, fakeUnicode(v,0)); return prop; } DLLEXPORT(VObject*) addPropSizedValue_(VObject *o, const char *p, const char *v, unsigned int size) { VObject *prop; prop = addProp(o,p); setValueWithSize_(prop, (void*)v, size); return prop; } DLLEXPORT(VObject*) addPropSizedValue(VObject *o, const char *p, const char *v, unsigned int size) { return addPropSizedValue_(o,p,dupStr(v,size),size); } /*---------------------------------------------------------------------- The following pretty print a VObject ----------------------------------------------------------------------*/ static void printVObject_(FILE *fp, VObject *o, int level); static void indent(FILE *fp, int level) { int i; for (i=0;i */ appendcOFile_(fp,0xd); appendcOFile_(fp,0xa); } else appendcOFile_(fp,c); } static void appendsOFile(OFile *fp, const char *s) { int i, slen; slen = strlen(s); for (i=0; ifp = ofp; fp->s = 0; fp->len = 0; fp->limit = 0; fp->alloc = 0; fp->fail = 0; } static void initMemOFile(OFile *fp, char *s, int len) { fp->fp = 0; fp->s = s; fp->len = 0; fp->limit = s?len:0; fp->alloc = s?0:1; fp->fail = 0; } static int writeBase64(OFile *fp, unsigned char *s, long len) { long cur = 0; int i, numQuads = 0; unsigned long trip; unsigned char b; char quad[5]; #define MAXQUADS 16 quad[4] = 0; while (cur < len) { // collect the triplet of bytes into 'trip' trip = 0; for (i = 0; i < 3; i++) { b = (cur < len) ? *(s + cur) : 0; cur++; trip = trip << 8 | b; } // fill in 'quad' with the appropriate four characters for (i = 3; i >= 0; i--) { b = (unsigned char)(trip & 0x3F); trip = trip >> 6; if ((3 - i) < (cur - len)) quad[i] = '='; // pad char else if (b < 26) quad[i] = (char)b + 'A'; else if (b < 52) quad[i] = (char)(b - 26) + 'a'; else if (b < 62) quad[i] = (char)(b - 52) + '0'; else if (b == 62) quad[i] = '+'; else quad[i] = '/'; } // now output 'quad' with appropriate whitespace and line ending appendsOFile(fp, (numQuads == 0 ? " " : "")); appendsOFile(fp, quad); appendsOFile(fp, ((cur >= len)?"\n" :(numQuads==MAXQUADS-1?"\n" : ""))); numQuads = (numQuads + 1) % MAXQUADS; } appendcOFile(fp,'\n'); return 1; } static void writeQPString(OFile *fp, const char *s) { const char *p = s; while (*p) { if (*p == '\n') { if (p[1]) appendsOFile(fp,"=0A="); } appendcOFile(fp,*p); p++; } } static void writeVObject_(OFile *fp, VObject *o); static void writeValue(OFile *fp, VObject *o, unsigned long size) { if (o == 0) return; switch (VALUE_TYPE(o)) { case VCVT_USTRINGZ: { char *s = fakeCString(USTRINGZ_VALUE_OF(o)); writeQPString(fp, s); deleteStr(s); break; } case VCVT_STRINGZ: { writeQPString(fp, STRINGZ_VALUE_OF(o)); break; } case VCVT_UINT: { char buf[16]; sprintf(buf,"%u", INTEGER_VALUE_OF(o)); appendsOFile(fp,buf); break; } case VCVT_ULONG: { char buf[16]; sprintf(buf,"%lu", LONG_VALUE_OF(o)); appendsOFile(fp,buf); break; } case VCVT_RAW: { appendcOFile(fp,'\n'); writeBase64(fp,(unsigned char*)(ANY_VALUE_OF(o)),size); break; } case VCVT_VOBJECT: appendcOFile(fp,'\n'); writeVObject_(fp,VOBJECT_VALUE_OF(o)); break; } } static void writeAttrValue(OFile *fp, VObject *o) { if (NAME_OF(o)) { struct PreDefProp *pi; pi = lookupPropInfo(NAME_OF(o)); if (pi && ((pi->flags & PD_INTERNAL) != 0)) return; appendcOFile(fp,';'); appendsOFile(fp,NAME_OF(o)); } else appendcOFile(fp,';'); if (VALUE_TYPE(o)) { appendcOFile(fp,'='); writeValue(fp,o,0); } } static void writeGroup(OFile *fp, VObject *o) { char buf1[256]; char buf2[256]; strcpy(buf1,NAME_OF(o)); while ((o=isAPropertyOf(o,VCGroupingProp)) != 0) { strcpy(buf2,STRINGZ_VALUE_OF(o)); strcat(buf2,"."); strcat(buf2,buf1); strcpy(buf1,buf2); } appendsOFile(fp,buf1); } static int inList(const char **list, const char *s) { if (list == 0) return 0; while (*list) { if (stricmp(*list,s) == 0) return 1; list++; } return 0; } static void writeProp(OFile *fp, VObject *o) { if (NAME_OF(o)) { struct PreDefProp *pi; VObjectIterator t; const char **fields_ = 0; pi = lookupPropInfo(NAME_OF(o)); if (pi && ((pi->flags & PD_BEGIN) != 0)) { writeVObject_(fp,o); return; } if (isAPropertyOf(o,VCGroupingProp)) writeGroup(fp,o); else appendsOFile(fp,NAME_OF(o)); if (pi) fields_ = pi->fields; initPropIterator(&t,o); while (moreIteration(&t)) { const char *s; VObject *eachProp = nextVObject(&t); s = NAME_OF(eachProp); if (stricmp(VCGroupingProp,s) && !inList(fields_,s)) writeAttrValue(fp,eachProp); } if (fields_) { int i = 0, n = 0; const char** fields = fields_; /* output prop as fields */ appendcOFile(fp,':'); while (*fields) { VObject *t = isAPropertyOf(o,*fields); i++; if (t) n = i; fields++; } fields = fields_; for (i=0;iflags & PD_BEGIN) != 0)) { VObjectIterator t; const char *begin = NAME_OF(o); appendsOFile(fp,"BEGIN:"); appendsOFile(fp,begin); appendcOFile(fp,'\n'); initPropIterator(&t,o); while (moreIteration(&t)) { VObject *eachProp = nextVObject(&t); writeProp(fp, eachProp); } appendsOFile(fp,"END:"); appendsOFile(fp,begin); appendsOFile(fp,"\n\n"); } } } void writeVObject(FILE *fp, VObject *o) { OFile ofp; initOFile(&ofp,fp); writeVObject_(&ofp,o); } DLLEXPORT(void) writeVObjectToFile(char *fname, VObject *o) { FILE *fp = fopen(fname,"w"); if (fp) { writeVObject(fp,o); fclose(fp); } } DLLEXPORT(void) writeVObjectsToFile(char *fname, VObject *list) { FILE *fp = fopen(fname,"w"); if (fp) { while (list) { writeVObject(fp,list); list = nextVObjectInList(list); } fclose(fp); } } DLLEXPORT(char*) writeMemVObject(char *s, int *len, VObject *o) { OFile ofp; initMemOFile(&ofp,s,len?*len:0); writeVObject_(&ofp,o); if (len) *len = ofp.len; appendcOFile(&ofp,0); return ofp.s; } DLLEXPORT(char*) writeMemVObjects(char *s, int *len, VObject *list) { OFile ofp; initMemOFile(&ofp,s,len?*len:0); while (list) { writeVObject_(&ofp,list); list = nextVObjectInList(list); } if (len) *len = ofp.len; appendcOFile(&ofp,0); return ofp.s; } /*---------------------------------------------------------------------- APIs to do fake Unicode stuff. ----------------------------------------------------------------------*/ DLLEXPORT(wchar_t*) fakeUnicode(const char *ps, int *bytes) { wchar_t *r, *pw; int len = strlen(ps)+1; pw = r = (wchar_t*)malloc(sizeof(wchar_t)*len); if (bytes) *bytes = len * sizeof(wchar_t); while (*ps) { if (*ps == '\n') *pw = (wchar_t)0x2028; else if (*ps == '\r') *pw = (wchar_t)0x2029; else *pw = (wchar_t)(unsigned char)*ps; ps++; pw++; } *pw = (wchar_t)0; return r; } DLLEXPORT(int) uStrLen(const wchar_t *u) { int i = 0; while (*u != (wchar_t)0) { u++; i++; } return i; } DLLEXPORT(char*) fakeCString(const wchar_t *u) { char *s, *t; int len = uStrLen(u) + 1; t = s = (char*)malloc(len); while (*u) { if (*u == (wchar_t)0x2028) *t = '\n'; else if (*u == (wchar_t)0x2029) *t = '\r'; else *t = (char)*u; u++; t++; } *t = 0; return s; } // end of source file vobject.c 1-0/+1 * - Update to 0.0.5.pre3pav2008-07-273-10/+12 * - Update maintainer mail addressmiwi2008-07-261-1/+1 * - Update to 2.48db2008-07-268-55/+65 * - Remove USE_GCC where it can be satisfied with base compiler on followingpav2008-07-251-1/+0 * - Correct BROKEN statement, seems to be amd64-specificdanfe2008-07-252-30/+17 * - Reformat text to fit nicer in 80-column displaydanfe2008-07-251-6/+6 * - Remove duplicates from MAKE_ENV after inclusion of CC and CXX in default MA...pav2008-07-256-7/+1 * - Update to 2.10.3db2008-07-252-5/+4 * - Mark BROKEN on 8-CURRENT: does not like hexdumppav2008-07-251-1/+7 * - Disable sgtty interface (removed from 8-CURRENT recently) and enable termiospav2008-07-252-1/+64 * - Unbreak on -CURRENTpav2008-07-242-53/+55 * - Chase lang/guile share library version bump (.18 -> .19)rafan2008-07-211-1/+1 * - ebook2cw converts text into cw as an mp3 file, useful for learning cw.db2008-07-187-0/+85 * - Update to 2.5miwi2008-07-182-5/+4 * - Add patch to allow slightly off screen resolutions to work.db2008-07-182-4/+31 * - Track pyephem changedb2008-07-181-2/+2 * Gnocky, a graphical frontend to gnokii for managing your mobile phone.danfe2008-07-175-0/+97 * - Fix build and install when CONFIGURE_TARGET is prepended to executable file...rafan2008-07-142-23/+18 * - Add missing textproc/p5-XML-Parser dependency.miwi2008-07-071-0/+4 * - Unbreak on recent 8-current (after sgtty changes).kuriyama2008-07-032-0/+19 * - Update to 0.1.4db2008-06-243-18/+51 * Fix a few typos in ports/comms.olgeni2008-06-2215-15/+14 * - *argh* missed two %%db2008-06-191-1/+1 * Implement USE_RC_SUBR and clean up rc script.cy2008-06-194-55/+5 * - Mark as BROKEN, does not compile.lippe2008-06-191-0/+2 * - Missed this in pkg-plist; port will not work properly without PORTDATA.db2008-06-191-1/+1 * - Update to 0.3.5db2008-06-185-39/+56 * Change request: comms/cutecomedwin2008-06-183-13/+24 * [PATCH] comms/mgetty: [SUMMARIZE CHANGES]edwin2008-06-181-0/+2 * [patch] comms/py-serial: install docs and examplesedwin2008-06-182-0/+25 * Reset maintainership (the domain has expired):pav2008-06-182-2/+2 * - Update to 0.6.26pav2008-06-1214-176/+117 * - Honour NOPORTEXAMPLES and use EXAMPLESDIRdb2008-06-112-35/+25 * Implmement rcNG.cy2008-06-113-33/+55 * - Honour NOPORTEXAMPLESdb2008-06-092-117/+115 * Bump portrevision due to upgrade of devel/gettext.edwin2008-06-0642-29/+42 * Major autotools-related update:ade2008-06-061-0/+3 * Correct the previous revisionpav2008-06-051-3/+0 * Dont overwrite conf file on upgradespav2008-06-052-2/+2 * - Make fetchable again, distfile repackaged with new website URLpav2008-06-052-5/+6 * Fix kdeutils for amd64-current (and perhaps other 64-bitdeischen2008-06-041-0/+92 * Updated to 1.04skv2008-06-032-4/+5 * Libsyncml is an implementation of the SyncML protocol.lippe2008-05-317-0/+127 * - Update to 8.04db2008-05-2819-2019/+280 * - Add common code to support for cmake based ports.miwi2008-05-282-18/+6 * Update port: comms/bluez-firmware email maintainer, typo'sedwin2008-05-223-6/+9 * Update port: comms/bluegps maintainer email, extra textedwin2008-05-222-3/+7 * FreeBSD driver for newer Option HSDPA USB dongles.miwi2008-05-1810-0/+178 * - Add conflict with smstools-3.*mm2008-05-182-5/+5 * The SMS Server Tools 3 is a SMS Gateway software which can send and receivemm2008-05-189-0/+321 * - Update to 1.4.9jadawin2008-05-162-4/+4 * - add CONFLICTS with new port sysutils/lbl-hfdb2008-05-141-0/+1 * - Do not use USE_GNOME=yes, use the current way (ie: USE_GNOME=foo). Themezz2008-05-131-6/+4 * Update to 1.20.0.bsam2008-05-116-12/+12 * Exclude releases less then FreeBSD 6.0-STABLE from build process.osa2008-05-041-1/+7 * - Clean up directories on deinstallpav2008-04-301-0/+2 * - Update to 123219miwi2008-04-302-13/+6 * Update to 1.0.2 (with FreeBSD 7 support).osa2008-04-283-12/+6 * - Add curl dependancytabthorpe2008-04-261-0/+4 * Ignore build for 7.x.osa2008-04-251-1/+7 * - Chase graphics/ImageMagick shlib version bumpmiwi2008-04-221-1/+2 * Add new port ib-kmod - Kyocera UTU Iburst modem driver.osa2008-04-227-0/+84 * - Remove unneeded dependency from gtk12/gtk20 [1]miwi2008-04-2013-28/+23 * Use @rmtry macro in the pkg-plist.edwin2008-04-191-1/+1 * Update to 2.3.anders2008-04-1812-137/+76 * - Take advantage of CPAN macro from bsd.sites.mk, change ${MASTER_SITE_PERL_C...araujo2008-04-178-14/+8 * - Update to 0.9.20080406rafan2008-04-133-40/+10 * - Move from versioned tcl/tk CATEGORIES to simple tcl and tk categoriespav2008-04-092-2/+2 * - update to 3.1.2db2008-03-2715-608/+248 * - Remove USE_XLIB/USE_X_PREFIX/USE_XPM in favor of USE_XORGmiwi2008-03-242-3/+2 * - Remove USE_XLIB/USE_X_PREFIX/USE_XPM in favor of USE_XORGmiwi2008-03-233-5/+3 * - Correct previous commitpav2008-03-231-2/+2 * - Add virtual category hamradio.db2008-03-231-1/+1 * - Update to release 0.96 [1]db2008-03-236-38/+44 * - Remove USE_XLIB/USE_X_PREFIX/USE_XPM in favor of USE_XORGmiwi2008-03-223-4/+2 * - Remove USE_XLIB/USE_X_PREFIX/USE_XPM in favor of USE_XORGmiwi2008-03-221-2/+1 * - Remove USE_GETOPT_LONG which is a no-op since March 2007pav2008-03-201-1/+0 * - Remove USE_GETOPT_LONG which is a no-op since March 2007pav2008-03-207-7/+0 * Cleanup USE_X_PREFIXxride2008-03-191-2/+1 * - Update to 2.43db2008-03-183-12/+12 * - Fix buildrafan2008-03-181-1/+2 * - update to fldigi 2.10db2008-03-182-6/+7 * - Update maintainer mail address.lippe2008-03-172-2/+2 * - Update to 2.5.lippe2008-03-173-7/+22 * - Fix automatic dependenciesrafan2008-03-161-4/+16 * - Chase devel/sdl12 shlib version bumpmiwi2008-03-133-1/+3 * - fix dependencyleeym2008-03-131-7/+11 * - Chase web site change.db2008-03-063-3/+29 * Chase master site move, add a mirror.lx2008-02-292-2/+3 * - Updated to 2.2.20miwi2008-02-227-161/+125 * - Fix typo in io.c, I had .INIT instead of .INIdb2008-02-222-2/+3 * - Update to 0.05gabor2008-02-202-9/+10 * - Update to 1.2.7db2008-02-193-7/+8 * - Update to 2.09db2008-02-184-25/+24 * - Fix fetchpav2008-02-171-2/+2 * - Install missing geoid icon geoid.pngdb2008-02-161-1/+3 * - Update to 0.89db2008-02-163-16/+19 * Chase libgnomeprint update for plist, bump the PORTREVISION.mezz2008-02-132-3/+3 * - Update to 1.7tabthorpe2008-02-133-15/+16 * - Let Device::Modem be also runtime dependencypav2008-02-081-0/+2 * Mark as broken on sparc64: fails to install.linimon2008-02-011-0/+3 * - update to 2.08db2008-02-015-63/+44 * Fix the plist by chase libgnomeprint update, bump the PORTREVISION.mezz2008-01-312-3/+3 * Mark BROKEN on 8.0: does not compileerwin2008-01-301-1/+7 * - Update to 1.10miwi2008-01-293-49/+23 * - Update to 1.1.0miwi2008-01-293-10/+10 * - Update to 1.2.0miwi2008-01-292-9/+9 * - aprsd is a server daemon that provides Internet gateway and clientdb2008-01-2518-0/+696 * - Remove redundant version selectdb2008-01-235-23/+6 * - fix plistdinoex2008-01-181-1/+0 * Add missing '$' (the wrong patch version has been committed).bsam2008-01-142-2/+2 * - update to 4.4.4dinoex2008-01-133-120/+13 * Make use of gammu-config script.bsam2008-01-132-0/+6 * Drop maintainership, I don't have an ltmdm based modem any more.osa2008-01-101-1/+1 * - Update to 3.1.1db2008-01-0918-218/+683 * - Update to 0.0.4.p15.araujo2008-01-048-20/+24 * - Update to latest 0.9.4 version; this version needs libcw from unixcw.db2008-01-022-7/+9 * The heart of the package is 'libcw'. This is a library which, when built,db2008-01-0214-0/+269 * - Unbreak on non i386, this disables cw keying on non i386 platforms.db2007-12-244-3/+104 * - update versiondb2007-12-243-27/+9 * Converts Lat / Lon to Maidenhead Grid Square and reversedb2007-12-247-0/+104 * - Update release. [1]db2007-12-234-25/+43 * The KB contest logging computer program runs on the Linux operating systemdb2007-12-2218-0/+2106 * Update to a bug-fix release 1.17.0:bsam2007-12-214-8/+8 * - Typo fixpav2007-12-201-1/+1 * - Update to 2.4db2007-12-194-11/+11 * - upgrade to 0.1.3db2007-12-193-4/+6 * - When reading an ADIF log, in which the frequency is given (instead ofdb2007-12-192-1/+19 * - Update to 0.7.5db2007-12-184-38/+4 * A fully automatic Morse code teaching machine. Teaches you to receivepav2007-12-175-0/+69 * . update to version 1.16.0;bsam2007-12-1712-198/+48 * - Update to 0.6.22pav2007-12-157-29/+51 * - Update to 0.4.2miwi2007-12-158-225/+32 * - Update to 1.6.2tabthorpe2007-12-133-27/+66 * - Update to 2.4tabthorpe2007-12-133-8/+9 * - Update to 3.27miwi2007-12-132-5/+6 * - Update to 1.00rafan2007-12-122-4/+4 * o Fix: correctly detect and use devel/libusblioux2007-12-121-0/+17 * - take maintanershipdinoex2007-12-121-1/+1 * Update to KDE 3.5.8lofi2007-10-302-3/+49 * - A perl based Amateur Radio logging program for general use written in perl.db2007-10-306-0/+119 * - Add a CONFLICTS with the new version of wwldb2007-10-301-0/+1 * - update to fix a bug in distance calculationsdb2007-10-303-14/+13 * - Update to 2.03 version of fldigidb2007-10-304-31/+54 * Reassign to ports@ by maintainer request.linimon2007-10-281-1/+1 * Presenting GNOME 2.20.1 and all related works for FreeBSD. The officialmarcus2007-10-2513-80/+57 * - Unbreak, tarball rerolled to address minor string buffer overflowstabthorpe2007-10-242-7/+6 * - Update to 0.02miwi2007-10-232-5/+6 * - Update to 3.26miwi2007-10-232-4/+5 * - Fix pkg-plisttmclaugh2007-10-182-5/+3 * Update to 1.003001.anders2007-10-173-10/+12 * Update to 1.48.anders2007-10-172-4/+4 * Update to 1.48.anders2007-10-162-4/+4 * - Update to 1.4.8lwhsu2007-10-142-16/+5 * Remove expired leaf ports:vd2007-10-127-136/+0 * SMS::Send::TW::emome is a SMS::Send drivermiwi2007-10-10