Hi All,
While recently performing a re-install of everything (System Commander Multiple
DOS, Windows, Linux booting) on my Pentium Pro, I discovered a minor
compatibility issue regarding ANSI.SYS support. Without digging into it more, I
cannot say if the issue is NANSI.SYS or elsewhere in FreeDOS.
Basically, one of the versions of my ancient (written back in the early 90’s)
Turbo Pascal directory listing programs used ANSI escape sequences to provide
color. Instead of blindly assuming ANSI support is present, it first probes DOS
to verify the functionality. It performs the probe through standard DOS I/O
function calls and works on other DOS platforms (such as MS-DOS, PC-DOS and
DR-DOS). However, the test fails under FreeDOS.
function DetectAnsi : boolean; assembler;
asm
MOV DI, OFFSET @AnsiTestStr
@2:
MOV DL, CS:[DI]
INC DI
CMP DL, 0
JE @3
MOV AH, $02
INT $21
JMP @2
@3:
MOV AH, $06
MOV DL, $FF
INT $21
JZ @5
CMP AL, 27
JNE @5
MOV AH, $06
MOV DL, $FF
INT $21
JZ @5
CMP AL, '['
JNE @5
@4:
MOV AH, $06
MOV DL, $FF
INT $21
JZ @5
CMP AL,'R'
JNE @4
@5:
MOV AH, $06
MOV DL, $FF
INT $21
JZ @6
CMP AL,13
JNE @5
MOV AL, True
JMP @Done
@6: { Not Found }
MOV DI, OFFSET @AnsiTestStr
@7:
MOV DL, CS:[DI]
INC DI
CMP DL, 0
JE @8
MOV AH, $02
MOV DL, 8
INT $21
MOV AH, $02
MOV DL, 32
INT $21
MOV AH, $02
MOV DL, 8
INT $21
JMP @7
@8:
MOV AL, False
JMP @Done
@AnsiTestStr:
DB 27,'[6n',0
@Done:
MOV AnsiFound, AL
end;
Sorry, I was never one for doing a lot of code comments. And yes, it is far
from efficient, elegant or pretty. But, the snippet of code is roughly 30 years
old.
:-)
As you can see, it sends an escape sequence to request information. If it
receives the data, the test passes. Otherwise, it cleans up the displayed
garbage and moves along without ANSI support.
I wouldn’t call it a serious compatibility issue. Even this ancient directory
lister provides support to bypass the probe and force ANSI support OFF or ON.
dir l:
Interestingly, this same program reveals a couple other cross DOS compatibility
issues as well. For example, under MSDOS using MSCDEX + OAKCDROM driver, the CD
can be listed. It also likes NWCDEX + OAKCDROM under DR-DOS. However, not under
FreeDOS using our supplied drivers (invalid drive reported) and crashes (divide
by zero) when accessing the CD under PC-DOS with IBMIDECD + MSCDEX.
Anyhow, the program source is available on GitHub under
https://github.com/shidel/DustyTP7/tree/master/D
<https://github.com/shidel/DustyTP7/tree/master/D> and a precompiled binary at
https://github.com/shidel/DustyTP7/blob/master/bin/D.EXE
<https://github.com/shidel/DustyTP7/blob/master/bin/D.EXE>
:-)
Jerome
_______________________________________________
Freedos-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freedos-devel