home *** CD-ROM | disk | FTP | other *** search
- Here is a set of patches I've made to the CP/M Aztec Vers. 1.06D
- C library which I consider to be bug fixes. They have been tested
- to my satisfaction; I use them myself. Of course, if you apply
- these "changes" to some other version of an Aztec C library,
- you're on your own. The code fragments shown are bracketed vertically
- by ********'s. Lines which were deleted begin with '-' and lines
- which were modified or added begin with '+'.
- Howard Johnson, 11 Dec '85
-
- This modification of FSUBS.ASM fixes an obscure bug which is manifest
- on overflow when converting a floating point number to a long integer.
-
- ******** FSUBS.ASM, starting near line 1261
- ltoobig:
- xchg
- mov a,c
- ora a
- jm bigneg
- + mvi m,0ffH ; was 07fH
- inx h
- mvi m,0ffH
- inx h
- mvi m,0ffH
- inx h
- + mvi m,07fH ; was 0ffH
- jmp oflow
- bigneg:
- + mvi m,0 ; was 080H
- inx h
- mvi m,0
- inx h
- mvi m,0
- inx h
- + mvi m,080H ; was 0
- jmp oflow
- ********
-
- This modification of FTOA.ASM was made so floating point numbers
- get printed the same way they would be printed under UNIX.
- N.B.: These changes are rather subtle.
-
- ******** FTOA.ASM, starting near line 168
- jm chkm4
- mov a,c
- cmp l
- + mvi a,2 ;%g -> %e
- + jnc setformat
- + mvi a,3 ;exp < maxdig, so use %g -> %f
- jmp setformat
- ;
- chkm4:
- ******** FTOA.ASM, starting near line 215
- call .utod ;and repair if necessary
- inx b
- lda fflag
- + ani 1 ; was ora a
- jz rndok
- lhld ndig
- inx h
- shld ndig
- rndok:
- mov h,b
- mov l,c
- shld exp
- lda fflag
- + ani 1 ; was ora a
- jz unpack
- mov a,b
- ora a
- ******** FTOA.ASM, starting near line 312
- ;
- unpdone:
- lda fflag
- + ani 2 ; originally %g ?
- + jz nochop
- + mvi a,'0'
- + lhld chrptr
- + chopdig:
- + dcx h
- + cmp m
- + jz chopdig
- + mvi a,'.'
- + cmp m
- + jz chopdun
- + inx h
- + chopdun:
- + shld chrptr
- + nochop:
- + lda fflag
- + ani 1 ;%f or %g -> %f ?
- jnz alldone
- ;
- lhld chrptr
- ********
-
- This modification to SCAN.C changes the %[ conversion of scanf() to work
- the way it does under UNIX. It no longer skips over blank characters
- before reading characters from the specified set.
- N.B.: The skip-over-blanks peculiarity is documented in Aztec scanf()
- manuals. Changing "%[a-z]" to " %[a-z]" will fix existing Aztec C programs
- broken by this modification.
-
- ******** SCAN.C, starting near line 113
- for (cp = tlist ; (c = *fmt++) != ']' ; )
- *cp++ = c;
- *cp = 0;
- + goto charstring; /* instead of goto string */
- case 's':
- lflag = 1;
- tlist[0] = ' ';
- ********
-
- This modification to IOCTL.C initializes the internal tty structure to
- values a program calling ioctl(fd, TIOCGETP, &tty) might expect to see.
-
- ******** IOCTL.C, starting near line 9
- extern int (*Rd_tab[])();
- extern int (*Wrt_tab[])();
-
- + struct sgttyb Tty_ctl = { '\b', '\030', CRMOD|ECHO };
- extern char _Eol;
- extern int tty_rd();
- static int raw_rd(), raw_wr();
- ********