Part 2...
On 1/1/07, Eric Auer <[EMAIL PROTECTED]> wrote:
> inthndlr.c: Toms version modifies DL on return from int 21.3301
> (set ctrl c flag), while the CVS does not - CVS is better.
TA -- discussed earlier
> The CVS version uses the new dpb16to32 function for shorter code.
CN
> TOMS version has some interesting extra error handling, maybe
> this can be added to the CVS version: Around line 430, Tom does
> "if ErrorMode && AH>=0c && AH neither 30 nor 59 then { ErrorMode=0;
> fnode[0].f_count = 0; fnode[1].f_count = 0; }" - in other words,
> for the non-reentrant DOS functions, make sure to mark all near
> fnodes as unused on entrance to int 21.
> Later, around line 1550, if not both fnode counts are 0, force
> them to be 0, but display a warning if ErrorMode was 0. Explanation:
> An int24, for example in FindFirst, is handled by an app by NOT
> returning to the kernel (possible). That way, resources are never
> freed and ErrorMode is never reset...
> Note that Tom only forces fnode freeing, not ErrorMode reset.
TA. This is also in the UNSTABLE kernel, to be exact I ported it from there.
> FatGetDrvData modifies AX in Toms version and AL in CVS, which of
> the two is better? See fcbfns.c
> The FcbParseFname call of int 21.29 modifies AL directly in CVS,
> while Toms version also updates rc. WHICH OF THE TWO IS BETTER?
CN (both)
> Tom re-orders some register writes, which looks as if he tried
> to set lr.ES / lr.DI as late as possible. Why? Optimizes better?
TA. Probably to allow the compiler to do common tail optimization. It
saves a few bytes.
> The CVS version returns CX = 0 on int 21.30, while Tom returns
> the REVISION numbers. A comment in CVS tells that CX must be 0
> for 32RTM compatibility - found by Michael.
> The int 21.36 implementation follows the different DosGetFree
> parameter / return value structure in both versions.
> The function int 21.??0a, set extended error, looks more optimized
> in the CVS version. Both seem to have the same effect. COMMENTS?
> In the CVS version, int 21.5f checks if cdsp->cdsDpb has a zero
> offset, according to comments this checks if a drive is physical.
> Sounds good...? This affects the handling of the AL==7 case.
> The CVS version provides a more extended stub for the DBCS API
> int 21.63xx ;-).
CN
> The int2F_12_handler of the CVS version supports several new
> functions: 26 (open), 27 (close), 29 (read). HOWEVER, the new
> code for function 28 (seek) is disabled. WHY?
> There is also a SET DOS VERSION DX interface at function 2f.
CN
> - intr.asm: Toms version has the following additional code:
> global INTR / INTR: INTR (between the no_read_error: ret and
> the segment INIT_TEXT around line 125). What is that used for?
> Where is INTR defined?
TNA
right at the beginning: %macro INTR 0
called by Tom in two places.
> - ioctl.c looks BETTER IN TOMS version: r_command of the request
> header is set based on al, using a table with the entries
> 0,0,C_IOCTLIN,C_IOCTLOUT,C_IOCTLIN,C_IOCTLOUT,C_ISTAT,C_OSTAT,
> C_REMMEDIA,0,0,0,C_GENIOCTL,C_GENIOCTL,C_GETLDEV,C_SETLDEV,
> C_IOCTLQRY,C_IOCTLQRY at slots 0..11 (hex). The CVS code, on
> the other hand, spreads this information over two switch / case
> areas which first set a nMode variable and later set r_command.
TA: This is a little optimization that is also present in the UNSTABLE
ioctl.c (which takes things a bit further). The table saves doing
everything seperately in switch cases. Actually ioctl can be made a
lot simpler with that table. Done in UNSTABLE, but I could do better
myself (saving ~200 bytes in the process), not applied yet.
> - main.c has an updated copyright string year in the CVS version.
> Other differences seem to be whitespace-only around line 570 and
> correcting a typo: TOM has the corrected "boot from" string around
> line 735, while the CVS version writes "booot from". One more diff
> is around line 690: Is EmulatedDriveStatus "nothing/void" (Toms
> version) or is it "STATIC int" (CVS version)...?
TA (for booot), the rest is CN.
> - memmgr.c: The CVS version allows double free of memory blocks,
> which is necessary to be compatible with a flaw in QBasic 4...
CN
> - nls.c: TOMS version quotes quite some ASM code and sets many
> registers before calling intr(0x2f,&r): BH=0x14 BL=subfct CX=bufsize
> SI=(short)&nlsinfo BP=bp BX=cp DX=cntry ES:DI = pointer bp.
> The CVS version, on the other hand, uses call_nls(subfct,
> &nlsInfo, bp, cp, cntry, bufsize, buf, id). WHICH OF THEM IS BETTER?
TO (none :) I applied something else that puts "id" in the high part
of a long, and no intr. It's a tricky variable because SS!=DS in that
code.
> - proto.h: The parameters / return types differ for DosGetFree,
> FcbParseFname and FatGetDrvData. The CVS also has dpb16to32...
CN
> - serial.asm: The CVS version has ComInStat, which allows polling
> the serial port status. Implemented based on a feature request
> from our SourceForge trackers. The tests for DSR / al,20h of the
> GetComStat output are commented out in the CVS version, better?
CN
> - sys.c: Tom uses fat32readwrite... as prototype, CVS uses
> int fat32readwrite - WHICH return type is better?
CN. Newer OW doesn't like it.
> TOM uses
> the OEMID string "FRDOS5.1" which matches MS style better
> than "FreeDOS ": The string should be 5 uppercase letters,
> 1 digit, dot, another digit.
TA
Bart
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Freedos-kernel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freedos-kernel