/trunk/Aysalia DOS/AyDos.exe |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/trunk/Aysalia DOS/AyDos.mnu |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/trunk/Aysalia DOS/Source/AyDos.dpr |
---|
8,12 → 8,6 |
// centers the window and changes the window title and icon at runtime. |
uses |
dialogs, |
SysUtils, |
ShellAPI, |
Windows, |
23,7 → 17,6 |
const |
DOSBOX_EXE = 'DOSBox.exe'; |
AYDOS_MNU = 'AyDos.mnu'; |
var |
hPsApiDll: Cardinal = 0; |
186,52 → 179,10 |
until (result <> WAIT_TIMEOUT); |
end; |
function CanRunDosBox: boolean; |
var |
windir: array[0..MAX_PATH] of char; |
osVerInfo: TOSVersionInfo; |
begin |
osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); |
if GetVersionEx(osVerInfo) then |
begin |
// DOSBox does not work with Windows 95 |
// It works on Windows 98 (but the VC++ Runtime must be installed) |
if osVerInfo.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS then |
begin |
result := (osVerInfo.dwMajorVersion > 4) or |
((osVerInfo.dwMajorVersion = 4) and (osVerInfo.dwMinorVersion >= 10{Win98})); |
end |
else if osVerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then |
begin |
result := true; |
end |
else |
begin |
// This should not happen |
result := false; |
end; |
end |
else |
begin |
if GetWindowsDirectory(windir, sizeof(windir)) > 0 then |
begin |
// In case GetVersionEx fails, we are trying to see if command.com exists |
result := FileExists(windir + '\command.com'); |
end |
else |
begin |
// This should never happen |
result := false; |
end; |
end; |
end; |
function Main: Integer; |
var |
sFile: string; |
begin |
if CanRunDosBox then |
begin |
ShellExecuteWait(0, 'open', DOSBOX_EXE, '-noconsole -conf DOSBox.conf', |
PChar(ExtractFilePath(ParamStr(0))), SW_NORMAL); |
240,18 → 191,6 |
sFile := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0))) + 'stderr.txt'; |
if FileExists(sFile) then DeleteFile(PChar(sFile)); |
end |
else |
begin |
// SEE_MASK_CLASSNAME cannot be used with pure MZ files (it does only work for NE/PE files!) |
// So we need to do the dirty rename-hack... |
RenameFile('AyDos.mnu', 'AyDos.com'); |
try |
ShellExecuteWait(0, 'open', 'AyDos.com', '', PChar(ExtractFilePath(ParamStr(0))), SW_NORMAL); |
finally |
RenameFile('AyDos.com', 'AyDos.mnu'); |
end; |
end; |
result := 0; |
end; |
/trunk/Aysalia DOS/Source/AyDos.exe |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/trunk/Aysalia DOS/Source/Menu/AyDos.mnu |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/trunk/Aysalia DOS/Source/Menu/AyDosMnu.asm |
---|
5,7 → 5,7 |
; (C) 2018 Daniel Marschall, ViaThinkSoft |
.model small |
.stack 100h |
.stack 10h |
; ------------------------------------------------------- |
82,23 → 82,6 |
setup_paramblk ENDP |
set_numlock_on PROC |
push es |
; In Windows 98+, we cannot access the BIOS Data Area, |
; so we use this technique to check if we are inside Windows. |
; This code was taken from http://www.fysnet.net/chkwin.htm |
xor ax,ax ; point es:di to 0000:0000h |
mov es,ax ; |
mov di,ax ; |
mov ax,1602h ; Get API entry point |
int 2Fh ; call to multiplex interrupt |
mov ax,es ; |
or ax,ax ; if es:di doesn't point to 0000:0000h |
jnz short is_win ; then Windows is running a DOS box |
or di,di ; else |
jnz short is_win ; we are in True DOS |
; Now the actual code that sets numlock on |
push ds |
mov ax, 40h |
mov ds, ax ; Go to BIOS Data Area ( http://stanislavs.org/helppc/bios_data_area.html ) |
107,9 → 90,6 |
or al, 20h ; Set bit 5 (numlock) to 1 |
mov [bx], al ; Write |
pop ds |
is_win: |
pop es |
ret |
set_numlock_on ENDP |
160,8 → 140,8 |
print_color_string_again: |
mov bx, dx |
mov al, [bx] |
test al, al ; is the character zero? then we are done |
jz print_color_string_end |
cmp al, 0 ; is the character zero? then we are done |
je print_color_string_end |
mov bl, cl |
int 10h |
add dx, 1 ; go to next character |
285,15 → 265,11 |
call setup_paramblk |
; Start game 1 |
mov ax, @data ; ds:dx = ASCIZ program name (must include extension) |
mov ds, ax |
lea dx, exename1 |
mov ax, @data ; es:bx = Parameter block |
mov es, ax |
mov bx, paramblk |
mov ah, 4Bh ; execute |
mov al, 00h ; load and execute |
int 21h ; DOS API |
mov bx, paramblk |
lea dx, exename1 |
int 21h |
; Is everything OK? Or is the GAM file missing? |
jc error |
309,15 → 285,11 |
call setup_paramblk |
; Start game 2 |
mov ax, @data ; ds:dx = ASCIZ program name (must include extension) |
mov ds, ax |
lea dx, exename2 |
mov ax, @data ; es:bx = Parameter block |
mov es, ax |
mov bx, paramblk |
mov ah, 4Bh ; execute |
mov al, 00h ; load and execute |
int 21h ; DOS API |
mov bx, paramblk |
lea dx, exename2 |
int 21h |
; Is everything OK? Or is the GAM file missing? |
jc error |