Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.009 c
6-90034
Garin
2003-09-11 12:33
2003.11.27
Отправка почты (SMS)


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


4-90172
AGGRESSOR
2003-10-02 12:13
2003.11.27
Undeclared identifier: AbnormalTermination


1-89808
ruslan_as
2003-11-18 16:56
2003.11.27
Как считать логическое and


3-89679
lovres
2003-11-06 09:26
2003.11.27
Как подключиться к Paradox-таблице без BDE?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский