Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.27;
Скачать: CL | DM;

Вниз

Кросплатформенность... ;-)   Найти похожие ветки 

 
Nick Denry ©   (2003-11-01 13:14) [0]

Всем привет!

Не совсем так, но все - же об этом. Точнее DOS-WINDOWS (!)платформенное....

компоновка РE-файла, насколько я знаю выглядит так:

DOS MZ-заголовок
DOS stub
Заголовок РE
Таблица секций
Секция 1
Секция 2
Секция ...
Секция n

Вопрос - возможно ли на дельфи (если нет, то на чем возможно написать кросс-платформенное (!)) приложение, как например выглядит scandisk в виндовс 98.... , т.е. и под дос и под виндовс...

из (С) Iczelion

Вышеприведенная таблица представляет собой общую струтуру РE-файла. Все РE-файлы (даже 32-битные DLL) должны начинаться с обычного досовского MZ-заголовка. Обычно он нам не очень интересен, так как нужен лишь для того, чтобы если программа будет вдруг запущена из-под DOS"а, он мог распознать ее как исполняемый файл и мог запустить DOS-stub, который находится за MZ-заголовком. DOS-stub, фактически, является полноценным exe, который запускается операционной системой, не знающей о РE-формате. Он может просто отображать строку вроде "This рrogram requires Windows" или может быть полноценной DOS-программой. Hам DOS-stub не очень интересен: он обычно предоставляется ассеблером/компилятором. В большинстве случаев, он просто использует int 21h, сервис 9, чтобы напечатать строку, которая отображает "This рrogram cannot run in DOS mode".

Так думаю понятнее. И еще :
из-под доса можно перезагрузить комп :

Program restart;
Begin
asm
mov ax,$f000;
push ax;
mov ax,$fff0;
push ax;
retf;
end;
end.
- это на турбо паскеле - встроенный АСМ - тоже самое работает и в TASM.

Вопрос №2 - как выключить компьютер из-под ДОС"a?

С уважением, Nick Denry


 
Ketmar ©   (2003-11-01 14:04) [1]

для объёдинения PE и DOS-EXE нужна отдельная софтина. дельфи тут совершенно не при чём.
для выключения -- воспользоваться APM в биосе.


 
SPeller ©   (2003-11-01 14:07) [2]


> возможно ли на дельфи

Вряд ли.


> то на чем возможно написать кросс-платформенное (!)) приложение

В вашей интерпретации кроссплатформенности - наверное на каком-нибудь СИ, мелкософт ведь написал. Точно не знаю, но могу предположить, что всё это делалось из-под какого-то ассемблера, который особым образом линковал 16 и 32-разрядные какие-нибудь объектные файлы.


 
Nick Denry ©   (2003-11-01 14:17) [3]

Можно подробнее?


 
Ketmar ©   (2003-11-01 14:19) [4]

>SPeller
не надо дезинформации. всё проще: пишем на дельфи одно. пишем на любом дос-компилере другое. потом спецутилитой (входит в поставку мсвц, или пишется за 10 мин) "соединяем" два файла. всё. более ничего сложного нет.


 
Nick Denry ©   (2003-11-01 16:21) [5]

2>[4](входит в поставку мсвц, или пишется за 10 мин)?

1. Входит в поставку чего?
2. Пишется как?

3. Две программы есть....
4. Пожалуйста подробнее... если можно


 
Nick Denry ©   (2003-11-01 19:47) [6]

[C] Svet(R)off

Важно! При компоновке stub-программы в командной строке компоновщика укажите недокументированную и загадочно звучащую опцию /KNOWEAS. Это опция вносит некие изменения в заголовок exe-файла. Если опцию не указать, то компоновка Windows-приложения со stub-программой окажется некорректна, о чем вы получите соответствующее предупреждение от линкера.

Подозреваем, что не все компоновщики поддерживают эту опцию. Однако link.exe из состава MS Developer Studio, конечно же, поддерживает.
Написанную stub-программу используйте на этапе компоновки своего Windows-приложения. Для этого в командную строку компоновщика добавьте опцию /STUB:"filename.exe", где filename.exe, как вы можете догадаться - это имя вашей stub-программы, при необходимости с путем. Обнаружив эту опцию, компоновщик заменит стандартную stub-программу на вашу.

Возможно ли в Delphi что то подобное?


 
Nick Denry ©   (2003-11-01 20:30) [7]

И еще про перезагруку UP


 
Nick Denry ©   (2003-11-02 12:15) [8]

UP if Available (jnz)


 
app ©   (2003-11-02 12:18) [9]

Кончай делать UP, может быть down, противоречие правилам - создание пустых сообщений


 
Nick Denry ©   (2003-11-02 12:20) [10]

Понял.Извиняюсь.Больше_не_буду;
:)


 
Opuhshii ©   (2003-11-02 13:12) [11]

линкер дельфи подобным не занимается,
но это можешь сделать сам читай спецификацию PE....

http://vh224401.truman.edu/%7edbindner/freeware/index.html#power
пример работы с APM BIOS,....


 
Nick Denry ©   (2003-11-02 15:31) [12]

Про выключение питания нашел на Delphi world:

mov ax,5301h
sub bx,bx
int 15h
jb stop
mov ax,530eh
sub bx,bx
int 15h
jb stop
mov ax,5307h
mov bx,0001h
mov cx,0003h
int 15h
stop: int 20h



или

mov ax,5301h
sub bx,bx
int 15h
jc @@finish
mov ax,530Eh
sub bx,bx
mov cx,102h
int 15h
jc @@finish
mov ax,5307h
mov bx,1
mov cx,3
int 15h
@@finish:
int 20h

Вот-так. Так что с этим пока отбой, хотя за ссылки спасибо.

А с ДОС стабом - переписал вин прогу на МАСМе - теперь пишу ДОСовскюу часть на ТАСМе.
ПВозник вопрос по ходу ДОСовской части - вывод сообщения - 21h, а как сменить цвет текста на зеленый?

С уважением, Nick D.


 
DiamondShark ©   (2003-11-02 16:33) [13]


> а как сменить цвет текста на зеленый?


Видеофункции -- int 10h


 
Nick Denry ©   (2003-11-02 18:00) [14]

А нет ли справочника по функциям (прерываниям) ДОС/БИОС или учебника по АСМу для ДОС (желат. ТАСМ) в электронном виде у кого?


 
Anatoly Podgoretsky ©   (2003-11-02 18:11) [15]

Книг по прерывания очень много, кто то специально ведет список этих прерываний, фамилию забыд, так бы можно было найти в Сети, кроме этого есть электронные справочник Norton Guide, TechHelp и жругие.
Книги по ТАСМ есть на поем сайте. Там же и другие.


 
Nick Denry ©   (2003-11-02 18:32) [16]

2>Anatoly Podgoretsky ©

Спасибо огромное. Повторюсь, но http://www.podgoretsky.com - весьма интересный ресурс...


 
Nick Denry ©   (2003-11-03 18:50) [17]

Готово, правда все-таки без зеленого текста....


 
Pat ©   (2003-11-03 20:52) [18]

>Готово, правда все-таки без зеленого текста....
Ну расскажи хоть, как сделал


 
Nick Denry ©   (2003-11-04 13:55) [19]

Рассказываю:
- Сидели они однажды тихим осенним вечерком у камина и линковали, линковали......

Часть МАСМ (выключение):
.486
.model flat, stdcall
option casemap : none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\advapi32.inc
includelib \masm32\lib\user32.lib ; calls to functions in user32.lib and kernel32.lib
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\advapi32.lib

;WinMain proto

WriteLN macro
invoke lstrlen, addr en ;


 
Nick Denry ©   (2003-11-04 13:57) [20]

Часть ТАСМ (Выключение):


masm
model small

.code
main proc
mov ax,5301h
sub bx,bx
int 15h
jc @@finish
mov ax,530Eh
sub bx,bx
mov cx,102h
int 15h
jc @@finish
mov ax,5307h
mov bx,1
mov cx,3
int 15h
@@finish:
int 20h

main endp

end main



 
Nick Denry ©   (2003-11-04 13:58) [21]

Как линковали:


d:
cd \
cd masm32
cd bin
@Echo Press a key to build restart.exe
pause
link /subsystem:windows /libpath:d:\masm32\lib /knoweas /stub:D:\Programs\Borland\Delphi7\Projects\ASM\offer\offdos.exe D:\Programs\Borland\Delphi7\Projects\ASM\offer\poweroff.obj D:\Programs\Borland\Delphi7\Projects\ASM\offer\1.obj
pause
copy d:\masm32\bin\poweroff.exe D:\Programs\Borland\Delphi7\Projects\ASM\offer\poweroff.exe
del d:\masm32\bin\poweroff.exe
@echo restart.exe complite


 
Nick Denry ©   (2003-11-04 13:59) [22]

Аналолгично сделан restart.exe


 
Nick Denry ©   (2003-11-04 14:06) [23]

Да еще : размер ккаждого екзешника 4,5 кБ!!!



Страницы: 1 вся ветка

Текущий архив: 2003.11.27;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.018 c
1-89939
Мыш
2003-11-18 09:07
2003.11.27
Published property


1-89812
KIE
2003-11-14 23:42
2003.11.27
объединение ресурсов двух программ


3-89747
Dark Elf
2003-11-07 18:01
2003.11.27
Ширина DBGrid


1-89936
Pattern
2003-11-17 13:53
2003.11.27
Время создания динамических компанентов


3-89705
ruslan_as
2003-11-10 11:39
2003.11.27
Decode в InterBase