示例#1
0
char * _add_str(char * a, char * b, unsigned long p, unsigned long q) {
    unsigned long len = _maxval(p,q)+1;
    char * m = malloc(len);
    int carry=0;
    unsigned long ai,bi,t;
    memset(m,0,len);
    bi = q-1;
    ai = p-1;

    for( t=len-1;t!=0;--t) {
        if( ai != -1 && bi != -1 ) {
            m[t] = _ctoi(a[ai--]) + _ctoi(b[bi--]) + carry;
        } else if( ai != -1 ) {
            m[t] = _ctoi(a[ai--]) + carry;
        } else if( bi != -1 ) {
            m[t] = _ctoi(b[bi--]) + carry;
        } else {
            break;
        }
        if( m[t] >= 10 ) {
            carry = m[t]/10;
            m[t] -= 10;
        } else {
            carry = 0;
        }
    }
    if( carry > 0 ) {
        m[0] = carry;
    }
    return _to_ascii(m, len);
}
示例#2
0
BOOL
UfsFile::setRoot(TCHAR *drive)
{
	char name[MAX_PATH];
	int unit;

	_to_ascii(name, drive, MAX_PATH);
	if ('1' <= name[0] && name[0] <= '9' && name[1] == ':')
		unit = name[0] - '0';
	else
		unit = 1;

	winblkopen(_f, "DSK", unit, 0);

	return TRUE;
}
示例#3
0
char * _mul_str(char * a, char * b, unsigned long p, unsigned long q) {
    unsigned long len = p+q;
    char * m = malloc(len);
    int carry=0;
    unsigned long ai,bi;
    memset(m,0,len);
    for( bi = q-1; bi != -1; --bi ) {
        for( ai = p-1; ai != -1; --ai ) {
            m[ai + bi+1] += carry + _ctoi(a[ai]) * _ctoi(b[bi]);
            carry = m[ai + bi+1] / 10;
            m[ai + bi+1] %= 10;
        }
        m[bi] += carry;
        carry=0;
    }
    return _to_ascii(m, len);
}
示例#4
0
BOOL
UfsFile::open(const TCHAR *name, uint32_t flags)
{
	int error;

	if (!_to_ascii(_ascii_filename, name, MAX_PATH))
		return FALSE;

	error = ufs_open(_ascii_filename, _f);
	DPRINTF((TEXT("open file \"%s\" "), name));

	if (!error)
		DPRINTF((TEXT("(%d byte).\n"), size()));
	else
		DPRINTF((TEXT("failed.\n")));

	return !error;
}
BOOL
UfsFile::setRoot(TCHAR *drive)
{
	char name[MAX_PATH];
	char devname[4] = "DSK";
	int unit = 1;

	_to_ascii(name, drive, MAX_PATH);
	if ('1' <= name[0] && name[0] <= '9' && name[1] == ':')
		unit = name[0] - '0';
	else if (isalpha((unsigned char)name[0]) &&
	    isalpha((unsigned char)name[1]) &&
	    isalpha((unsigned char)name[2]) &&
	    '1' <= name[3] && name[3] <= '9' && name[4] == ':') {
		devname[0] = name[0];
		devname[1] = name[1];
		devname[2] = name[2];
		unit = name[3] - '0';
	}

	winblkopen(_f, devname, unit, 0);

	return TRUE;
}