htpl

 view release on metacpan or  search on metacpan

htpl-l.c  view on Meta::CPAN

 * Convert time to ASCII                                *
 ********************************************************/

STR convtime(t)
    time_t t; {

    static char stat[1024];
    pchar ch, dst;

    struct tm *timep;

    timep = localtime(&t);

    ch = asctime(timep);
    dst = stat;

    while (*ch && *ch != '\n') *dst++ = *ch++;
    *dst = '\0';
    return stat;
}

/*************************************
 * Stack implementation              *
 *************************************/

/********************
 * Push             *
 ********************/
    
void ppush(stack, elem)
    LINK_EL *stack;
    void *elem; {

    LINK_EL curr;

    curr = malloc(sizeof(struct link_el));
    curr->data = elem;
    curr->next = *stack;
    *stack = curr;
}

/*************
 * Pop       *
 *************/

void *ppop(stack) 
    LINK_EL *stack; {

    void *elem, *old;

    if (!*stack) return NULL;
    free((*stack)->data);
    old = *stack;
    *stack = (*stack)->next;
    free(old);
    if (*stack) elem = (*stack)->data; else elem = NULL;
    return elem;
}

/*************************************
 * Simple setenv function            *
 *************************************/

#ifdef HAVE_SETENV

void SETENV(key, val)
    STR key;
    STR val; {
 
    setenv(key, val, 1);
}

#else

#ifndef HAVE_PUTENV
#error You must have either putenv or setenv
#endif

void SETENV(key, val)
    STR key;
    STR val; {

    TOKEN s;
    sprintf(s, "%s=%s", key, val);
    putenv(s);
}

#endif


void getready() {
#ifdef _WIN32
        TOKEN newlib;
        STR lib = GETENV("PERL5LIB");
        if (!lib) lib = "";
        if (strstr(lib, bindir)) return;
        sprintf(newlib, "%s\\HTPL-modules\\lib;%s", bindir, lib);
        SETENV("PERL5LIB", newlib);
#endif
}


/*******************************************************
 * Spawn a Perl process                                *
 *******************************************************/

int execperl(argv, output, postdata, error, redir) 
    int redir;
    char **argv;
    STR output, postdata, error; {

    int code;
    int chld;
    int nerr, nout, nin;
    FILENAME cmd;

    if (!redir) {
        if (!(chld=fork())) {
            getready();
            execv(PERL_BIN, argv);
        }
        waitpid(chld, &code, 0);
        return code;
    }

/* Ok, we need to capture STDOUT and STDERR, and to feed STDIN */

    nout=creat(output, 0777);
    nin=open(postdata, O_RDONLY);
    nerr=creat(error, 0777);

    if (!(chld=fork())) {

        dup(0);
        close(0);
        dup(nin);



( run in 1.518 second using v1.01-cache-2.11-cpan-39bf76dae61 )