home *** CD-ROM | disk | FTP | other *** search
- From sce!mitel!uunet!zephyr.ens.tek.com!tekcrl!tekgvs!toma Sun Sep 10 21:19:10 EDT 1989
- Article: 148 of comp.lang.lisp.x
- Path: cognos!sce!mitel!uunet!zephyr.ens.tek.com!tekcrl!tekgvs!toma
- From: toma@tekgvs.LABS.TEK.COM (Tom Almy)
- Newsgroups: comp.lang.lisp.x
- Subject: save/restore bug fixes!
- Message-ID: <5886@tekgvs.LABS.TEK.COM>
- Date: 6 Sep 89 13:53:17 GMT
- Reply-To: toma@tekgvs.LABS.TEK.COM (Tom Almy)
- Organization: Tektronix, Inc., Beaverton, OR.
- Lines: 56
-
- OK, so it was pretty schlocky of me to mention my previous fix postings
- rather than posting the fixes. I was just too busy to look them up.
-
- There is no promise that these changes will fix the problem with xscheme,
- but there does seem to be numerous bugs that are in both x's.
-
- Tom Almy
- toma@tekgvs.labs.tek.com
-
-
-
- *******************
- Problem: "restore" corrupts system.
- Diagnosis: argument stack not being reset -- initial garbage collect
- "marks" random memory!
-
- Solution: Add to "initialize" in xlirestore:
-
-
- xlfp = xlsp = xlargstkbase;
- *xlsp++ = NIL;
-
-
-
- *******************
- Problem: "restore" corrupts system with 8086 compilers.
- Diagnosis: cvoptr is doing improper arithmetic.
-
- Solution: CVPTR in xlisp.h needs to be defined as
- #define CVPTR(x) ((((unsigned long)(x) >> 16) << 4) + ((unsigned) x))
-
- return statement in cvoptr() (xlimage.c) needs to be changed from:
- return (off + (OFFTYPE)((p - seg->sg_nodes) << 1));
- to:
- return (off+(((CVPTR(p)-CVPTR(seg->sg_nodes))/sizeof(struct node))<<1));
-
-
- Note: for this to work with non-8086 compilers, the default for CVPTR
- should be changed from (x) to ((OFFTYPE)(x)).
-
-
- *******************
- A third problem that caused more than one restore in a session to fail had
- been fixed already in xscheme. For the record, though:
-
- BUG: Any attempt to do more than one RESTORE in a session causes the error
- "insufficient memory - segment".
-
- In file xlimage.c, function freeimage(), change
-
- if (((fp = getfile(p)) != 0) && (fp != stdin && fp != stdout))
-
- to:
-
- if (((fp = getfile(p)) != 0) &&
- (fp != stdin && fp != stdout && fp != stderr))
-
-
-