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); }
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; }
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); }
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; }