home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / PROG / MISC / XLSP21TC.ZIP / XL-004.BUG / text0000.txt < prev   
Encoding:
Text File  |  1991-04-14  |  1.6 KB  |  59 lines

  1. OK, so it was pretty schlocky of me to mention my previous fix postings
  2. rather than posting the fixes. I was just too busy to look them up.
  3.  
  4. There is no promise that these changes will fix the problem with xscheme,
  5. but there does seem to be numerous bugs that are in both x's.
  6.  
  7. Tom Almy
  8. toma@tekgvs.labs.tek.com
  9.  
  10.  
  11.  
  12. *******************
  13. Problem: "restore" corrupts system.
  14. Diagnosis: argument stack not being reset -- initial garbage collect
  15.  "marks" random memory!
  16.  
  17. Solution: Add to "initialize" in xlirestore:
  18.  
  19.  
  20.     xlfp = xlsp = xlargstkbase;
  21.     *xlsp++ = NIL;
  22.  
  23.  
  24.  
  25. *******************
  26. Problem: "restore" corrupts system with 8086 compilers.
  27. Diagnosis: cvoptr is doing improper arithmetic.
  28.  
  29. Solution: CVPTR in xlisp.h needs to be defined as 
  30. #define CVPTR(x)    ((((unsigned long)(x) >> 16) << 4) + ((unsigned) x))
  31.  
  32.     return statement in cvoptr() (xlimage.c) needs to be changed from:
  33. return (off + (OFFTYPE)((p - seg->sg_nodes) << 1));
  34.     to:
  35. return (off+(((CVPTR(p)-CVPTR(seg->sg_nodes))/sizeof(struct node))<<1));
  36.  
  37.  
  38. Note: for this to work with non-8086 compilers, the default for CVPTR
  39. should be changed from (x) to ((OFFTYPE)(x)).
  40.  
  41.  
  42. *******************
  43. A third problem that caused more than one restore in a session to fail had
  44. been fixed already in xscheme.  For the record, though:
  45.  
  46. BUG: Any attempt to do more than one RESTORE in a session causes the error
  47.     "insufficient memory - segment".
  48.  
  49. In file xlimage.c, function freeimage(), change
  50.  
  51.         if (((fp = getfile(p)) != 0) && (fp != stdin && fp != stdout))
  52.  
  53. to:
  54.  
  55.         if (((fp = getfile(p)) != 0) && 
  56.              (fp != stdin && fp != stdout && fp != stderr))
  57.  
  58.  
  59.