- register int c;
- register LINENO count;
- register FILE *fp;
- register LINENO linenum;
- register SEEKADDR lastaddr;
- register int slot;
-
- if (file == NIL) {
- return;
- }
- if ((fp = fopen(file, "r")) == NULL) {
- panic("can't open \"%s\"", file);
- }
- if (cursource != NIL) {
- free_seektab();
- }
- cursource = file;
- linenum = 0, count = 0, lastaddr = 0;
- while ((c = getc(fp)) != EOF) {
- count++;
- if (c == '\n') {
- slot = slotno(++linenum);
- if (slot >= NSLOTS) {
- panic("skimsource: too many lines");
- }
- if (seektab[slot] == NIL) {
- seektab[slot] = slot_alloc();
- }
- seektab[slot][index(linenum)] = lastaddr;
- lastaddr = count;
- }
+ register int c;
+ register LINENO count;
+ register FILE *fp;
+ register LINENO linenum;
+ register SEEKADDR lastaddr;
+ register int slot;
+
+ if (file == NIL || file == cursource) {
+ return;
+ }
+ if ((fp = fopen(file, "r")) == NULL) {
+ panic("can't open \"%s\"", file);
+ }
+ if (cursource != NIL) {
+ free_seektab();
+ }
+ cursource = file;
+ linenum = 0, count = 0, lastaddr = 0;
+ while ((c = getc(fp)) != EOF) {
+ count++;
+ if (c == '\n') {
+ slot = slotno(++linenum);
+ if (slot >= NSLOTS) {
+ panic("skimsource: too many lines");
+ }
+ if (seektab[slot] == NIL) {
+ seektab[slot] = slot_alloc();
+ }
+ seektab[slot][index(linenum)] = lastaddr;
+ lastaddr = count;