Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!wuarchive!udel!sbcs!eeserv1.ic.sunysb.edu!jallen From: jallen@eeserv1.ic.sunysb.edu (Joseph Allen) Newsgroups: comp.unix.xenix.sco Subject: Bugs Message-ID: <1991Apr29.172335.573@sbcs.sunysb.edu> Date: 29 Apr 91 17:23:35 GMT Sender: usenet@sbcs.sunysb.edu (Usenet poster) Organization: State University of New York at Stony Brook Lines: 103 Originator: jallen@eeserv1.ic.sunysb.edu 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@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