DataMuseum.dk

Presents historical artifacts from the history of:

Commodore CBM-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Commodore CBM-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦e665ab7e9⟧ TextFile

    Length: 840 (0x348)
    Types: TextFile
    Notes: UNIX file
    Names: »atoi.c«

Derivation

└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
    └─⟦f4b8d8c84⟧ UNIX V7 Filesystem
        └─ ⟦this⟧ »cmd/rsh/atoi.c« 
        └─ ⟦this⟧ »cmd/sh/atoi.c« 

TextFile

/*
 * Non-floating ASCII to int conversion
 * int atoi(cp)
 * char *cp;
 * Modified by rec 22.Apr.82 to allow octal and hexadecimal.
 */

atoi(cp)
register char *cp;
{
	register val;
	register c;
	register base;
	int sign;

	val = sign = 0;
	while ((c = *cp)==' ' || c=='\t')
		cp++;
	if (c == '-') {
		sign = 1;
		cp++;
	} else if (c == '+')
		cp++;
	base = 10;
	if ((c = *cp) == '0') {
		cp++;
		if ((c = *cp) == 'x' || c == 'X') {
			cp++;
			base = 16;
		} else
			base = 8;
	}
	for (;;) {
		c = *cp++;
		if ((c -= '0') >= 0 && c <= 9) {
			val = val*base - c;
			continue;
		}
		if (base == 16) {
			if ((c += 10 + '0' - 'A') >= 0 && c < base) {
				val = val*base - c;
				continue;
			}
			if ((c += 'A' - 'a') >= 0 && c < base) {
				val = val*base - c;
				continue;
			}
		}
		break;
	}
	if (!sign)
		val = -val;
	return (val);
}