home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
ENTERPRS
/
CPM
/
UTILS
/
A
/
AZTECLIB.PAT
< prev
next >
Wrap
Text File
|
2000-06-30
|
3KB
|
125 lines
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();
********