A Few "C Puzzles"

Thanks to Alan Feuer, "The C Puzzle Book"

What does the following program print?

<<<< First File >>>>

int i = 1;

int next(void);
int last(void);
int new(int i);
int reset(void);

void main(void) {
    int i, j;

    i = reset();

    for (j = 1; j <= 3; j++) {
        PRINT(i, j);
        PRINT(next());
        PRINT(last());
        PRINT(new(i + j));
    }
}

<<<<< In Another File: >>>>>

static int i = 10;

int next(void) {
    return i += 1;
}

int last(void) {
    return i -= 1;
}

int new(int i) {
    static int j = 5;

    return i = j += i;
}

<<<<<< In Another File: >>>>>

extern int i;

int reset(void) {
    return i;
}