static dd_ErrorType FaceEnumHelper(dd_MatrixPtr M, dd_rowset R, dd_rowset S) { dd_ErrorType err; dd_rowset LL, ImL, RR, SS, Lbasis; dd_rowrange iprev = 0; dd_colrange dim; dd_LPSolutionPtr lps = NULL; set_initialize(&LL, M->rowsize); set_initialize(&RR, M->rowsize); set_initialize(&SS, M->rowsize); set_copy(LL, M->linset); set_copy(RR, R); set_copy(SS, S); /* note actual type of "value" is mpq_t (defined in cddmp.h) */ mytype value; dd_init(value); err = dd_NoError; dd_boolean foo = dd_ExistsRestrictedFace(M, R, S, &err); if (err != dd_NoError) { #ifdef MOO fprintf(stderr, "err from dd_ExistsRestrictedFace\n"); fprintf(stderr, "err = %d\n", err); #endif /* MOO */ set_free(LL); set_free(RR); set_free(SS); dd_clear(value); return err; } if (foo) { set_uni(M->linset, M->linset, R); err = dd_NoError; dd_FindRelativeInterior(M, &ImL, &Lbasis, &lps, &err); if (err != dd_NoError) { #ifdef MOO fprintf(stderr, "err from dd_FindRelativeInterior\n"); fprintf(stderr, "err = %d\n", err); #endif /* MOO */ dd_FreeLPSolution(lps); set_free(ImL); set_free(Lbasis); set_free(LL); set_free(RR); set_free(SS); dd_clear(value); return err; } dim = M->colsize - set_card(Lbasis) - 1; set_uni(M->linset, M->linset, ImL); SEXP mydim, myactive, myrip; PROTECT(mydim = ScalarInteger(dim)); PROTECT(myactive = rr_set_fwrite(M->linset)); int myd = (lps->d) - 2; PROTECT(myrip = allocVector(STRSXP, myd)); for (int j = 1; j <= myd; j++) { dd_set(value, lps->sol[j]); char *zstr = NULL; zstr = mpq_get_str(zstr, 10, value); SET_STRING_ELT(myrip, j - 1, mkChar(zstr)); free(zstr); } REPROTECT(dimlist = CONS(mydim, dimlist), dimidx); REPROTECT(riplist = CONS(myrip, riplist), ripidx); REPROTECT(activelist = CONS(myactive, activelist), activeidx); UNPROTECT(3); dd_FreeLPSolution(lps); set_free(ImL); set_free(Lbasis); if (dim > 0) { for (int i = 1; i <= M->rowsize; i++) { if ((! set_member(i, M->linset)) && (! set_member(i, S))) { set_addelem(RR, i); if (iprev) { set_delelem(RR, iprev); set_delelem(M->linset, iprev); set_addelem(SS, iprev); } iprev = i; err = FaceEnumHelper(M, RR, SS); if (err != dd_NoError) { #ifdef MOO fprintf(stderr, "err from FaceEnumHelper\n"); fprintf(stderr, "err = %d\n", err); #endif /* MOO */ set_copy(M->linset, LL); set_free(LL); set_free(RR); set_free(SS); dd_clear(value); return err; } } } } } set_copy(M->linset, LL); set_free(LL); set_free(RR); set_free(SS); dd_clear(value); return dd_NoError; }
/* * Change character sets. */ enum cs_result charset_init(const char *csname) { enum cs_result rc; char *codeset_name; const char *codepage; const char *cgcsgid; const char *dbcs_cgcsgid = NULL; const char *realname; bool is_dbcs; #if !defined(_WIN32) /*[*/ /* Get all of the locale stuff right. */ setlocale(LC_ALL, ""); /* Figure out the locale code set (character set encoding). */ codeset_name = nl_langinfo(CODESET); # if defined(__CYGWIN__) /*[*/ /* * Cygwin's locale support is quite limited. If the locale * indicates "US-ASCII", which appears to be the only supported * encoding, ignore it and use the Windows ANSI code page, which * observation indicates is what is actually supported. * * Hopefully at some point Cygwin will start returning something * meaningful here and this logic will stop triggering. */ if (!strcmp(codeset_name, "US-ASCII")) { codeset_name = lazyaf("CP%d", GetACP()); } # endif /*]*/ #else /*][*/ codeset_name = lazyaf("CP%d", appres.local_cp); #endif /*]*/ set_codeset(codeset_name, appres.utf8); /* Do nothing, successfully. */ if (csname == NULL || !strcasecmp(csname, "us")) { set_cgcsgids(NULL); set_host_codepage(NULL); set_charset_name(NULL); (void) screen_new_display_charsets(NULL, "us"); (void) set_uni(NULL, LOCAL_CODEPAGE, &codepage, &cgcsgid, NULL, NULL); (void) set_uni_dbcs("", NULL); return CS_OKAY; } if (!set_uni(csname, LOCAL_CODEPAGE, &codepage, &cgcsgid, &realname, &is_dbcs)) { return CS_NOTFOUND; } if (appres.sbcs_cgcsgid != NULL) { cgcsgid = appres.sbcs_cgcsgid; /* override */ } if (set_uni_dbcs(csname, &dbcs_cgcsgid)) { if (appres.dbcs_cgcsgid != NULL) { dbcs_cgcsgid = appres.dbcs_cgcsgid; /* override */ } cgcsgid = lazyaf("%s+%s", cgcsgid, dbcs_cgcsgid); } rc = charset_init2(csname, realname, codepage, cgcsgid, is_dbcs); if (rc != CS_OKAY) { return rc; } return CS_OKAY; }