ASL_alloc(int k) #endif { static int msize[5] = { sizeof(ASL_fg), sizeof(ASL_fg), sizeof(ASL_fgh), sizeof(ASL_pfg), sizeof(ASL_pfgh) }; ASL *a; ASLhead *h; int n; if (!Stderr) Stderr_init_ASL(); /* set Stderr if necessary */ Mach_ASL(); if (k < 1 || k > 5) return 0; a = (ASL*) mymalloc(n = msize[k-1]); memcpy(a, &edagpars_ASL, sizeof(Edagpars)); memset(&a->i, 0, n - sizeof(Edagpars)); a->i.ASLtype = k; a->i.n_prob = 1; switch(k) { case ASL_read_pfg: ((ASL_pfg*)a)->P.merge = 1; break; case ASL_read_pfgh: ((ASL_pfgh*)a)->P.merge = 1; } h = a->p.h.next = ASLhead_ASL.next; a->p.h.prev = h->prev; h->prev = ASLhead_ASL.next = &a->p.h; return cur_ASL = a; }
ASL * ASL_alloc(int k) { static int msize[5] = { sizeof(ASL_fg), sizeof(ASL_fg), sizeof(ASL_fgh), sizeof(ASL_pfg), sizeof(ASL_pfgh) }; static int first = 1; ASL *a; ASLhead *h; int n; if (first) { first = 0; if (!Stderr) Stderr_init_ASL(); /* set Stderr if necessary */ Mach_ASL(); #ifdef MULTIPLE_THREADS init_dtoa_locks(); set_max_dtoa_threads(1); #endif } if (k < 1 || k > 5) return 0; a = (ASL*) mymalloc(n = msize[k-1]); memcpy(a, &edagpars_ASL, sizeof(Edagpars)); memset(&a->i, 0, n - sizeof(Edagpars)); a->i.ASLtype = k; a->i.n_prob = 1; switch(k) { case ASL_read_pfg: ((ASL_pfg*)a)->P.merge = 1; break; case ASL_read_pfgh: ((ASL_pfgh*)a)->P.merge = 1; } h = a->p.h.next = ASLhead_ASL.next; a->p.h.prev = h->prev; h->prev = ASLhead_ASL.next = &a->p.h; return cur_ASL = a; }