1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
   2: 
   3: /*
   4:   $Header: spos.c,v 1.1 85/08/22 15:50:07 timo Exp $
   5: */
   6: 
   7: /*
   8:  * B editor -- Save and restore focus position.
   9:  */
  10: 
  11: #include "b.h"
  12: #include "bobj.h"
  13: #include "feat.h"
  14: #include "file.h"
  15: 
  16: #ifdef SAVEPOS
  17: #define MAXPATHLEN 1024 /* See getwd(3) */
  18: #define MAXSAVE 50 /* Maximum number of entries kept in SAVEPOSFILE */
  19: 
  20: #define strval(v) Str(v)
  21: 
  22: /*
  23:  * Keep a simple database of file name vs. line number, so that
  24:  * when an edit session is stopped and later continued, the focus
  25:  * is restored exactly.
  26:  * The database is kept in most-recently-used-first order.
  27:  * When it is rewritten, only its first MAXSAVE lines are saved,
  28:  * thus limiting the amount of disk space wasted by files
  29:  * that were once edited but then removed, renamed or forgotten.
  30:  */
  31: 
  32: 
  33: Visible int
  34: getpos(file)
  35:     register string file;
  36: {
  37:     register FILE *fp = fopen(posfile, "r");
  38:     char buf[BUFSIZ];
  39:     auto int l1;
  40:     int nread;
  41:     register int len = strlen(file);
  42: 
  43:     if (!fp)
  44:         return 0;
  45:     while (fgets(buf, sizeof buf, fp) != NULL) {
  46:         if (strncmp(buf, file, len) == 0
  47:             && (buf[len] == '\t' || buf[len] == ' ')) {
  48:             nread= sscanf(buf+len+1, "%d", &l1);
  49:             if (nread >= 1) {
  50:                 fclose(fp);
  51:                 return l1;
  52:             }
  53:         }
  54:     }
  55:     fclose(fp);
  56:     return 0;
  57: }
  58: 
  59: 
  60: /*
  61:  * Save focus position for file 'file'.
  62:  * Return Yes if save succeeded.
  63:  */
  64: 
  65: Visible bool
  66: savepos(file, line)
  67:     register string file;
  68:     int line;
  69: {
  70:     register int nsave = 0;
  71:     register int i;
  72:     register FILE *fp = fopen(posfile, "r");
  73:     char buf[BUFSIZ];
  74:     register int len = strlen(file);
  75:     value saved[MAXSAVE];
  76: 
  77:     if (fp) {
  78:         while (fgets(buf, sizeof buf, fp) != NULL && nsave < MAXSAVE) {
  79:             if (strncmp(file, buf, len) == 0
  80:                 && (buf[len] == ' ' || buf[len] == '\t'))
  81:                 continue;
  82:             saved[nsave] = mk_text(buf);
  83:             ++nsave;
  84:         }
  85:         fclose(fp);
  86:     }
  87:     fp = fopen(posfile, "w");
  88:     if (fp == NULL)
  89:         return No;
  90:     fprintf(fp, "%s\t%d\n", file, line);
  91:     for (i = 0; i < nsave; ++i) {
  92:         fputs(strval(saved[i]), fp);
  93:         release(saved[i]);
  94:     }
  95:     if (fclose(fp) == EOF) return No;
  96:     return Yes;
  97: }
  98: 
  99: #endif SAVEPOS

Defined functions

getpos defined in line 33; never used
savepos defined in line 65; used 2 times

Defined macros

MAXPATHLEN defined in line 17; never used
MAXSAVE defined in line 18; used 2 times
strval defined in line 20; used 1 times
  • in line 92
Last modified: 1985-08-27
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1137
Valid CSS Valid XHTML 1.0 Strict