Bugs

Joseph Allen jallen at eeserv1.ic.sunysb.edu
Tue Apr 30 03:23:35 AEST 1991


Here's some bugs I've noticed in xenix 2.3.2.  I'm posting them to see if
others have them and to see if they've been fixed (there's a version 2.3.3 out
now yes?). 

- Ultra Rogue core-dumps when you use a scroll of electrification in a room
  where monsters sponaneously get created.  This is really the most significant
  bug I've discovered :-)

- 'badtrk' says: "couldn't malloc" when I try to do a "thorough scan" on
  200MB and 380MB disks.  Is this because I only have 4MB of ram? (I did
  allocate the maximum space on the disk for badtrk when I installed xenix)

- Using '-Ox' in cc is very very broken.  Here are some examples:

	for(x=10;x;x--) a[x]=b[x];
		This gets optimized to a "rep movsb" and is set up to do
		a reverse move but doesn't generate a 'std'.

	do { f(j); j=0; } while(--x);
		This gets optimized to:
	j=0; do f(j); while(--x);
		Which is quite wrong (actually I think it does this one
		even with just -O)

- If you use '-ltermcap' in cc and use tgetent and friends you'll find that
  a function "bclr" is missing (tgetent works if you provide a block clear
  function yourself: bclr(char *block,int size))

- Many things are screwed up with the /usr/include files.  I fixed these
  myself so I don't remember all the problems exactly.

- Reliable signals were added, but nothing generates SIGIO (there's no
  ASYNC flag for fcntl or open).
  
- I know this is a problem with UNIXs in general, but since SCO tried to
  fix this problem partially, I'd like to prompt them to finnish the job.
  
  The basic problem is that there's no consistancy or compatibily between the
  different I/O methods.  For example, there's file I/O, events, message
  passing, signals and the beginnings of streams.  I would be happy if each of
  these I/O methods could generate either a signal, a message or an event. 
  Since they don't, I have to use forks (big 'threads') and message passing if
  I want to wait for a clock tick, a keypress and IPC from my database server
  all at the same time.  And that has problems because you can't search
  through messages (to pick the one you want) and because message queues and
  buffers easily overflow. 

- There seems to be shared libraries (/bin/shlib) but no documentation for
  it.

- Stop trying to be SYSV and BSD at the same time! (just like HPUX).  Just
  pick one...

- Although it was supposed to be fixed in this version, I still have trouble
  with parallel printers with no (or small) buffers printing very slowly.
  This crude printer driver fixes the problem (and allows me to cut & jumper
  $10 printer boards so I can more than 3 printers on my system):

  int ports[]= { 0x378, 0x3bc, 0x278, 0x278 };
  ww(){}
  llp(minor,c) /* Write character to port number 'minor' */
  {
  int x=0;
  while(!(0x80&inb(ports[minor]+1))) if(x++==100) delay(1), x=0;
  outb(ports[minor],c);
  outb(ports[minor]+2,5);
  for(x=0;x!=10;x++) ww();
  outb(ports[minor]+2,4);
  }

  llwrite(minor) /* Device driver write function */
  {
  int x,c;
  while(-1!=(c=cpass()))
   {
   if(c=='\n')
    if(minor&4) c='\r';
    else if(minor&8) llp(minor&3,'\r');
   llp(minor&3,c);
   }
  }

  minor device number: 0-3 is printer number, add 4 for LF to CR translation,
  add 8 for LF to CR-LF translation.  You'll have to rework the minor device
  numbering scheme if you want more than 4 printers.  Also, the delay loops
  might have to increased if you use a 486 (works on 386SX - 33Mhz 386).

So.  Are any of these fixed in recent versions?  What should I expect with
SCO UNIX?

To be honest, I would very quickly switch to ESIX except for one feature that
SCO xenix has:  A product called the "Unterminal" from Advanced Micro Research
lets me have more than one console (using normal IBM keyboards and displays).
This and KERMIT for the few real serial terminals I have solve many human
interface problems.
--
#define h 23 /* Height */         /* jallen at ic.sunysb.edu (129.49.12.74) */
#define w 79 /* Width */                       /* Amazing */
int i,r,b[]={-w,w,1,-1},d,a[w*h];m(p){a[p]=2;while(d=(p>2*w?!a[p-w-w]?1:0:0)|(
p<w*(h-2)?!a[p+w+w]?2:0:0)|(p%w!=w-2?!a[p+2]?4:0:0)|(p%w!=1?!a[p-2]?8:0:0)){do
i=3&(r=(r*57+1))/d;while(!(d&(1<<i)));a[p+b[i]]=2;m(p+2*b[i]);}}main(){r=time(
0L);m(w+1);for(i=0;i%w?0:printf("\n"),i!=w*h;i++)printf("#\0 "+a[i]);}



More information about the Comp.unix.xenix.sco mailing list