ftp.nice.ch/pub/next/connectivity/news/Alexandra-0.9.s.tar.gz#/alex/iso88591hack.c

This is iso88591hack.c in view mode; [Download] [Up]

#import <string.h>
#import <stdio.h>

// This is a hack.  The proper place for this kind of translation is probably NNTP.m

#import "iso88591hack.h"
#import "iso2next.tab"	// includes table (twice. NNTP.m does so too.) Yuck! 

// Hack =?ISO-8859-1?Q? ... =XX ... ?= translations, in-place.

void iso_8859_1_hack(char *buf)
{
	static char iso_8859_1_Q[] = "=?ISO-8859-1?Q?"; 
	char *s = strchr(buf, '='), *t;
	
	if (s == NULL) return;
	if (strncasecmp(s, iso_8859_1_Q, sizeof(iso_8859_1_Q)-1) != 0) return;
	strcpy(s, s + sizeof(iso_8859_1_Q)-1);

	for (; (t = strchr(s, '=')) != 0;  s = t)
	{
		if (t > s && t[-1] == '?')
		{
			// ?= is end quote.
			strcpy(t-1, t+1);
			break;
		}
		else
		{
			//  parse "=XX" where XX is a 2-digit hex number
			unsigned c = 0;

			sscanf(t+1, "%2x", &c);
			if (c < CHARNUM && c_iso2next[c] != 0)
			{
				*t = c_iso2next[c];
				strcpy(t+1, t+3);
			}
			++t;
		}
	}
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.