ftp.nice.ch/pub/next/unix/editor/e2.N.bs.tar.gz#/e2.N.bs/reconstruct.c

This is reconstruct.c in view mode; [Download] [Up]

#include "e.h"


/* 
 * reconstruct()
 *
 * Finish off the building of the new history file. Emit the directory name
 * then the history, except for hist[except] which is the new most recently 
 * used entry and so we do it last.
 *
 * After this, emit the saved line if there was one and then the rest of
 * the original history.
 *
 * Then close the two files and rename the old history to be the new one.
 * Make sure they new .e file has the same perms as the old.
 *
 */
void
reconstruct(except)
int except;
{

    register int i;
    register int c;

    /* The name of the directory goes first. */
    ok_fprintf(tmp_fp, "%s\n", cwd);

    /* Put in the lines we still want. i.e. those excluding 'except'. */
    for (i = 0; i < hist_count; i++){
        if (i != except){
            ok_fprintf(tmp_fp, "\t%s\n", hist[i]);
        }
    }

    /* Put in the new entry. */
    ok_fprintf(tmp_fp, "\t%s\n", arg);

    /* The saved line, if there was one. */
    if (saved_line){
        ok_fprintf(tmp_fp, "%s\n", saved_line);
    }

    /* The rest of the old history file. */
    while ((c = getc(hist_fp)) != EOF){
        if (putc(c, tmp_fp) == EOF){
            perror("putc");
            exit(EX_IOERR);
        }
    }

    /* Clean up etc. */
    if (fclose(hist_fp) == EOF){
        e_error("Could not close '%s'.", ehist);
    }
    if (fclose(tmp_fp) == EOF){
        e_error("Could not close '%s'.", tmp_file);
    }
#ifdef Sysv
    if (unlink(ehist) == -1){
        e_error("Could not unlink '%s'\nNew history in '%s'.", ehist, tmp_file);
    }

    if (link(tmp_file, ehist) == -1){
        e_error("Could not link '%s' to '%s'.\n", tmp_file, ehist);
    }

    if (unlink(tmp_file) == -1){
        e_error("Could not unlink '%s'.\n", tmp_file);
    }
#else
    if (rename(tmp_file, ehist) == -1){
        e_error("Could not rename '%s' to '%s'.", tmp_file, ehist);
    }
#endif
    if (chmod(ehist, emode) == -1){
        e_error("Could not chmod '%s'", ehist);
    }
    return;
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.