+ ws();
+
+ if (!modules) {
+ modules = tmpModule;
+ } else {
+ nextModule->next=tmpModule;
+ }
+ nextModule=tmpModule;
+
+ if (tix_ch == ',') {
+ expect(',');
+ ws();
+ }
+ }
+ expect(']');
+ fclose(tixFile);
+}
+
+static void hpc_init(void) {
+ char *hpc_tixdir;
+ char *hpc_tixfile;
+ if (hpc_inited != 0) {
+ return;
+ }
+ hpc_inited = 1;
+ hpc_pid = getpid();
+ hpc_tixdir = getenv("HPCTIXDIR");
+ hpc_tixfile = getenv("HPCTIXFILE");
+
+ /* XXX Check results of mallocs/strdups, and check we are requesting
+ enough bytes */
+ if (hpc_tixfile != NULL) {
+ tixFilename = strdup(hpc_tixfile);
+ } else if (hpc_tixdir != NULL) {
+ /* Make sure the directory is present;
+ * conditional code for mkdir lifted from lndir.c
+ */
+#ifdef WIN32
+ mkdir(hpc_tixdir);
+#else
+ mkdir(hpc_tixdir,0777);
+#endif
+ /* Then, try open the file
+ */
+ tixFilename = (char *) malloc(strlen(hpc_tixdir) + strlen(prog_name) + 12);
+ sprintf(tixFilename,"%s/%s-%d.tix",hpc_tixdir,prog_name,(int)hpc_pid);
+ } else {
+ tixFilename = (char *) malloc(strlen(prog_name) + 6);
+ sprintf(tixFilename, "%s.tix", prog_name);
+ }