ftp.nice.ch/pub/next/graphics/video/VideoTeXT.1.1a.N.bs.tar.gz#/VideoTeXT1.1a/Quelltexte/pageNumber.c

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

/* (c) 1992 Dirk Schwarzhans, Matthias Braun
   Use under the terms of the GNU General Public License */
   
#import "pageNumber.h"

#define BIN2ASC(a) (((a) < 10) ? ((a) + '0') : ((a) + 'A' - 10))

void VTNumbersFromPageData(VTPageNumber *pageNumber, VTSubpageNumber *subpageNumber,
						   const unsigned char *data)
{
	*pageNumber = ((data[1008] & 0x7) << 8) | ((data[1001] & 0xF) << 4) |
				  (data[1000] & 0xF);
				   
	*subpageNumber = ((data[1005] & 0x3) << 11) | ((data[1004] & 0xF) << 7) |
	 				 ((data[1003] & 0x7) << 4) | (data[1002] & 0xF);
}

void VTNumbersFromInt(VTPageNumber *pageNumber, VTSubpageNumber *subpageNumber,
					  int pageInt, int subpageInt)
{
	pageInt %= 1000;
	*pageNumber = ((pageInt / 100) & 7) << 8;
	pageInt %= 100;
	*pageNumber |= (pageInt / 10) << 4;
	pageInt %= 10;
	*pageNumber |= pageInt;
	
	subpageInt %= 10000;
	*subpageNumber = ((subpageInt / 1000) & 3) << 11;
	subpageInt %= 1000;
	*subpageNumber |= (subpageInt / 100) << 7;
	subpageInt %= 100;
	*subpageNumber |= ((subpageInt / 10) & 7) << 4;
	subpageInt %= 10;
	*subpageNumber |= subpageInt;
}

void stringFromVTPageNumber(char *string, VTPageNumber pageNumber)
{
	string[0] = BIN2ASC(((pageNumber >> 8) & 7) ? ((pageNumber >> 8) & 7) : 8);
	string[1] = BIN2ASC((pageNumber >> 4) & 0xF);
	string[2] = BIN2ASC(pageNumber & 0xF);
	string[3] = 0;
}

void stringFromVTsubpageNumber(char *string, VTSubpageNumber subpageNumber)
{
	string[0] = BIN2ASC((subpageNumber >> 11) & 3);
	string[1] = BIN2ASC((subpageNumber >> 7) & 0xF);
	string[2] = BIN2ASC((subpageNumber >> 4) & 7);
	string[3] = BIN2ASC(subpageNumber & 0xF);
	string[4] = 0;

}

int intFromVTPageNumber(VTPageNumber pageNumber)
{
	int intNumber;
	
	intNumber = 0;
	intNumber += (((pageNumber >> 8) & 7) ? ((pageNumber >> 8) & 7) : 8) * 100;
	intNumber += ((pageNumber >> 4) & 0xF) * 10;
	intNumber += (pageNumber & 0xF);

	return intNumber;
}

int intFromVTSubpageNumber(VTSubpageNumber subpageNumber)
{
	int intNumber;
	
	intNumber = 0;
	intNumber = ((subpageNumber >> 11) & 3) * 1000;
	intNumber += ((subpageNumber >> 7) & 0xF) * 100;
	intNumber += ((subpageNumber >> 4) & 7) * 10;
	intNumber += (subpageNumber & 0xF);

	return intNumber;
}

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