Bool CloseUserDictionary(uchar * DictName, voc_state *user_dict) { if (user_dict -> state & VOC_CHANGED) { char w[80]; int32_t size; int16_t h; strcpy(w, DictName); h = TGOPEN(VC_STREAM, w, O_CREAT, S_IREAD); if (h == -1) { /* MsgBox("failed to open"); */ return FALSE; } size = TGWRITE(h, V_POINT(user_dict ->vocseg, 0), user_dict ->vocfree); TGCLOSE(h); if (size != (int32_t) user_dict->vocfree) { /* MsgBox("wrong size"); */ return FALSE; } user_dict -> state &= (~VOC_CHANGED); } return TRUE; }
int16_t _IsUserDict (char * name) { char buff[128]; int16_t f; int32_t ret; f = TGOPEN( (int16_t)VC_STREAM, name, (int16_t)(O_RDONLY|O_BINARY), S_IREAD ); if ( f ==-1) { return UD_NOTEXIST; } ret = TGREAD (f, buff, sizeof(DYN_DICT_HEADER)); if ( ret != sizeof(DYN_DICT_HEADER)) { return UD_WRONGHEAD; } buff[sizeof(DYN_DICT_HEADER)] = 0; if ( strcmp(buff,DYN_DICT_HEADER) ) { return UD_WRONGHEAD; } TGCLOSE(f); return UD_PERMITTED; }
uint32_t LoadUserDict(char *DictName, char *pool, uint32_t pool_size, voc_state *user_dict) { int32_t size; pool_size = pool_size; if (_IsUserDict(DictName) != UD_PERMITTED) return 0; #ifdef TURBO_C if(TEST_PRPH(pool)) pool=ALI_PR(pool); #endif user_dict -> vocseg = (uchar *) SET_VOC_ROOT(pool); { int16_t Fh; char nm[128]; strcpy(nm, DictName); Fh = TGOPEN(VC_STREAM, nm, (int16_t)(O_RDONLY | O_BINARY), S_IREAD); if (Fh == -1) return 0; if (TGFILELTH(Fh) > MAX_VOC_SIZE) { TGCLOSE(Fh); return 0; } size = TGREAD(Fh, V_POINT(user_dict -> vocseg, 0), TGFILELTH(Fh)); TGCLOSE(Fh); } if (size <= 0) return 0; else { voc_open(user_dict); user_dict -> vocfree = (uint16_t) size; } return MAX_VOC_SIZE; }