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