Use an enumeration for DOS flavor.

This commit is contained in:
2021-03-11 05:22:27 +00:00
parent 4a8f69152b
commit ebf91976c3
2 changed files with 68 additions and 47 deletions

View File

@@ -3,7 +3,7 @@
------------------------------------------------------------------------ ------------------------------------------------------------------------
Filename : dosuname.c Filename : dosuname.c
Version : 0.08 Version : 0.09
Author(s) : Natalia Portillo Author(s) : Natalia Portillo
Component : UNAME for DOS Component : UNAME for DOS
@@ -50,6 +50,7 @@
easily detected, without exact knowledge of the versions by easily detected, without exact knowledge of the versions by
this program. this program.
0.08: Changed function parameters to use a struct. 0.08: Changed function parameters to use a struct.
0.09: Use an enumeration for DOS flavor.
--[ How to compile ]---------------------------------------------------- --[ How to compile ]----------------------------------------------------
@@ -91,7 +92,7 @@ void getdosver(struct dosuname_version_t* version)
union REGS regs; union REGS regs;
int dos_temp, nt_flag; int dos_temp, nt_flag;
nt_flag = 0; nt_flag = 0;
version->flavor = 0; version->flavor = DOS_FLAVOR_UNKNOWN;
regs.x.ax = 0x3306; /* Set function 3306h */ regs.x.ax = 0x3306; /* Set function 3306h */
int86(0x21, &regs, &regs); /* Call INT 21h */ int86(0x21, &regs, &regs); /* Call INT 21h */
@@ -130,20 +131,20 @@ void getdosver(struct dosuname_version_t* version)
} }
/* Set DOS to DOS type */ /* Set DOS to DOS type */
if(dos_temp == 0 && version->major <= 3) { version->flavor = 12; } if(dos_temp == 0 && version->major <= 3) { version->flavor = DOS_FLAVOR_MSPCDOS; }
if(dos_temp == 0 && version->major >= 4) { version->flavor = 2; } if(dos_temp == 0 && version->major >= 4) { version->flavor = DOS_FLAVOR_PCDOS; }
if(dos_temp == 0 && version->major >= 10) { version->flavor = 7; } if(dos_temp == 0 && version->major >= 10) { version->flavor = DOS_FLAVOR_OS2; }
if(dos_temp == 0xff && version->major <= 6) { version->flavor = 1; } if(dos_temp == 0xff && version->major <= 6) { version->flavor = DOS_FLAVOR_MSDOS; }
if(dos_temp == 0xff && version->major == 7) if(dos_temp == 0xff && version->major == 7)
{ {
if(version->minor == 0) { version->flavor = 5; } if(version->minor == 0) { version->flavor = DOS_FLAVOR_WIN95; }
if(version->minor == 10) { version->flavor = 13; } if(version->minor == 10) { version->flavor = DOS_FLAVOR_WIN9X; }
} }
if(dos_temp == 0xff && version->major == 8) { version->flavor = 14; } if(dos_temp == 0xff && version->major == 8) { version->flavor = DOS_FLAVOR_WINME; }
if(dos_temp == 253) { version->flavor = 4; } if(dos_temp == 253) { version->flavor = DOS_FLAVOR_FREEDOS; }
if(dos_temp == 0xff && nt_flag == 1) { version->flavor = 6; } if(dos_temp == 0xff && nt_flag == 1) { version->flavor = DOS_FLAVOR_WINNT; }
if(dos_temp == 0x66) { version->flavor = 8; } if(dos_temp == 0x66) { version->flavor = DOS_FLAVOR_PTSDOS; }
if(dos_temp == 0x5E) { version->flavor = 9; } if(dos_temp == 0x5E) { version->flavor = DOS_FLAVOR_RXDOS; }
/* Check for Concurrent DOS versions */ /* Check for Concurrent DOS versions */
regs.x.ax = 0x4451; /* Set function 4451h */ regs.x.ax = 0x4451; /* Set function 4451h */
@@ -152,43 +153,43 @@ void getdosver(struct dosuname_version_t* version)
{ {
version->major = 3; version->major = 3;
version->minor = 2; version->minor = 2;
version->flavor = 10; version->flavor = DOS_FLAVOR_CONCURRENTDOS;
} }
if(regs.h.al == 0x41) if(regs.h.al == 0x41)
{ {
version->major = 4; version->major = 4;
version->minor = 1; version->minor = 1;
version->flavor = 10; version->flavor = DOS_FLAVOR_CONCURRENTDOS;
} }
if(regs.h.al == 0x50) if(regs.h.al == 0x50)
{ {
version->major = 5; version->major = 5;
version->minor = 0; version->minor = 0;
version->flavor = 10; version->flavor = DOS_FLAVOR_CONCURRENTDOS;
} }
if(regs.h.al == 0x60) if(regs.h.al == 0x60)
{ {
version->major = 6; version->major = 6;
version->minor = 0; version->minor = 0;
version->flavor = 10; version->flavor = DOS_FLAVOR_CONCURRENTDOS;
} }
if(regs.h.al == 0x62) if(regs.h.al == 0x62)
{ {
version->major = 6; version->major = 6;
version->minor = 2; version->minor = 2;
version->flavor = 10; version->flavor = DOS_FLAVOR_CONCURRENTDOS;
} }
if(regs.h.al == 0x66) if(regs.h.al == 0x66)
{ {
version->major = 5; version->major = 5;
version->minor = 1; version->minor = 1;
version->flavor = 6; version->flavor = DOS_FLAVOR_WINNT;
} }
if(regs.h.al == 0x67) if(regs.h.al == 0x67)
{ {
version->major = 5; version->major = 5;
version->minor = 1; version->minor = 1;
version->flavor = 10; version->flavor = DOS_FLAVOR_CONCURRENTDOS;
} }
/* End of check for Concurrent DOS versions */ /* End of check for Concurrent DOS versions */
@@ -199,55 +200,55 @@ void getdosver(struct dosuname_version_t* version)
{ {
version->major = 1; version->major = 1;
version->minor = 2; version->minor = 2;
version->flavor = 3; version->flavor = DOS_FLAVOR_DRDOS;
} }
if(regs.h.al == 0x60) if(regs.h.al == 0x60)
{ {
version->major = 2; version->major = 2;
version->minor = 0; version->minor = 0;
version->flavor = 3; version->flavor = DOS_FLAVOR_DRDOS;
} }
if(regs.h.al == 0x63) if(regs.h.al == 0x63)
{ {
version->major = 3; version->major = 3;
version->minor = 41; version->minor = 41;
version->flavor = 3; version->flavor = DOS_FLAVOR_DRDOS;
} }
if(regs.h.al == 0x64) if(regs.h.al == 0x64)
{ {
version->major = 3; version->major = 3;
version->minor = 42; version->minor = 42;
version->flavor = 3; version->flavor = DOS_FLAVOR_DRDOS;
} }
if(regs.h.al == 0x65) if(regs.h.al == 0x65)
{ {
version->major = 5; version->major = 5;
version->minor = 0; version->minor = 0;
version->flavor = 3; version->flavor = DOS_FLAVOR_DRDOS;
} }
if(regs.h.al == 0x67) if(regs.h.al == 0x67)
{ {
version->major = 6; version->major = 6;
version->minor = 0; version->minor = 0;
version->flavor = 3; version->flavor = DOS_FLAVOR_DRDOS;
} }
if(regs.h.al == 0x71) if(regs.h.al == 0x71)
{ {
version->major = 6; version->major = 6;
version->minor = 0; version->minor = 0;
version->flavor = 3; version->flavor = DOS_FLAVOR_DRDOS;
} }
if(regs.h.al == 0x72) if(regs.h.al == 0x72)
{ {
version->major = 7; version->major = 7;
version->minor = 0; version->minor = 0;
version->flavor = 11; version->flavor = DOS_FLAVOR_NOVELLDOS;
} }
if(regs.h.al == 0x73) if(regs.h.al == 0x73)
{ {
version->major = 7; version->major = 7;
version->minor = 0; version->minor = 0;
version->flavor = 3; version->flavor = DOS_FLAVOR_DRDOS;
} }
/* End of check for DR-DOS_FLAVOR versions */ /* End of check for DR-DOS_FLAVOR versions */
version->dos_oem = dos_temp; version->dos_oem = dos_temp;

View File

@@ -3,7 +3,7 @@
------------------------------------------------------------------------ ------------------------------------------------------------------------
Filename : dosuname.h Filename : dosuname.h
Version : 0.07 Version : 0.09
Author(s) : Natalia Portillo Author(s) : Natalia Portillo
Component : UNAME for DOS Component : UNAME for DOS
@@ -46,25 +46,45 @@
#ifndef DOS_DOSUNAME_H_ #ifndef DOS_DOSUNAME_H_
#define DOS_DOSUNAME_H_ #define DOS_DOSUNAME_H_
typedef enum
{
DOS_FLAVOR_UNKNOWN,
DOS_FLAVOR_MSDOS,
DOS_FLAVOR_PCDOS,
DOS_FLAVOR_DRDOS,
DOS_FLAVOR_FREEDOS,
DOS_FLAVOR_WIN95,
DOS_FLAVOR_WINNT,
DOS_FLAVOR_OS2,
DOS_FLAVOR_PTSDOS,
DOS_FLAVOR_RXDOS,
DOS_FLAVOR_CONCURRENTDOS,
DOS_FLAVOR_NOVELLDOS,
DOS_FLAVOR_MSPCDOS,
DOS_FLAVOR_WIN9X,
DOS_FLAVOR_WINME,
} dosuname_flavor;
struct dosuname_version_t struct dosuname_version_t
{ {
int flavor; dosuname_flavor flavor;
int major; int major;
int minor; int minor;
int simulated_major; int simulated_major;
int simulated_minor; int simulated_minor;
int dos_oem; int dos_oem;
int desqview_major; int desqview_major;
int desqview_minor; int desqview_minor;
int _4dos_major; int _4dos_major;
int _4dos_minor; int _4dos_minor;
int ndos_major; int ndos_major;
int ndos_minor; int ndos_minor;
int windows_major; int windows_major;
int windows_minor; int windows_minor;
int windows_mode; int windows_mode;
int softice_major; int softice_major;
int softice_minor; int softice_minor;
}; };
#endif // DOS_DOSUNAME_H_ #endif // DOS_DOSUNAME_H_