Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

RU.PASCAL. FAQ.

eManual.ru - электронная документация

Секция 1 из 2 - Предыдущая - Следующая

From: Faq Keeper, 2:5020/1816.7@FidoNet (01 Sep 00 10:47) RU.PASCAL.* FAQ Прочитайте это перед тем как пистаь в эху. За вопросы из фака будут наказания. За ответы тем более. Данный фак постится в эху раз в две недели. Если вам надоели эти письма то рекомендую выставить твит на имя "Faq Keeper". Все вопросы и предложения принимаются по адресу: 2:5020/1816.7 Dze@Chat.ru ------------------------------------------------------------------------------ Последнее обновление: Fri 01 Sep 2000 Дык! Вернулся я после затяжных отпусков и усердного спиртопотребления и снова начинаю постить фак. емного его даже обновил, почитав мыльницу. адеюсь, ещё не забыли, что он вообще есть. ------------------------------------------------------------------------------ Dze Pascal FAQ v 1.0.b.8 (x) Copyleft by Dze aka Geniya Bocharov // [DzeSoft] 1999-1900 Последнее обновление: Fri 01 Sep 2000 Эпиграф: "RTFM! LMD! FAQ! А чё это я хоть сказал-то?" (С) не скажу =) Ещё один: "С точки зpения банальной эpудиции каждый индивидуум, кpитически..." (С) все знают =) ------------------------------------------------------------------------------ Данный FAQ был составлен, исходя из наиболее общих вопросов, которые слишком уж часто возникали в эхоконференцях RU.PASCAL.* (и частично SU.PASCAL.MODULA.ADA) сети FidoNet. Большая просьба прочитать его перед тем, как писать в эху. За заданные в эхе вопросы рассмотренные в данном FAQ, вы получите как минимум [*]. За ответ в эхе на подобные вопросы, вы будете наказаны строже... ------------------------------------------------------------------------------ На какие эхи рекомендуется подписаться: RU.PASCAL - наиболее общие вопросы по языку програмирования, разновидноcтям компилляторов итд RU.PASCAL.SOURCES - обмен исходными текстами на Паскале RU.PASCAL.CHAINIK - эха для начинающих. SU.PASCAL.MODULA.ADA - общесовковая эха по Паскалю. XSU.PMA.FAQ - её придаток, в котором обсуждаются вопросы из тамошнего FAQ RU.TMT - особенности программирования на TMT Pascal RU.VP - особенности программирования на Virtual Pascal RU.DELPHI.* - всё, что касается Дельфи. SU.FLAME, NetMail - для выяснения кто из вас ламер и какой паскаль круче. ------------------------------------------------------------------------------ Обновлённая версия данного фака всегда доступна на DzeServer'е по адресу 2:5020/1816.7 по алиасу %faq. Там же доступно большое количество рабочих исходником для любых целей. Перед тем как что-то просить или что-то юючить, посмотрите, может это уже есть на сервере: ------------------------------------------------------------------------------ Имена, адреса и команды программерских серверов: DzeServer 2:5020/1816.7 %help %list Creeping FAQRobot 2:5023/23.21 %help %list %prog PdvFAQserver 2:5030/175.62 %help %list SliderFAQ 2:5010/215.215 %list <none> <none> <none> (Кто хочет добавить сюда информацию о себе - пишите мылом) ------------------------------------------------------------------------------ Если вы заметили ошибку в этом факе, большая просьба сообщить мне о ней. Если у вас есть добавления или замечания - тоже пишите мне, все копирайты будут сохранены. Но! Не нужно делать этого в эхе. Для таких вещей есть нетмэйл. ------------------------------------------------------------------------------ Кроме того, если кто-то соберется нарисовать красивое ASCII Лого для данного фака - буду очень благодарен =) ------------------------------------------------------------------------------ thanks to: Dmitry Suhodoev 2:5010/150.16 Andrew Lening 2:5026/49.11 Diman Petrov 2:5023/27.18 Max Alekseyev 2:5015/60 ------------------------------------------------------------------------------ Содержание (обновления выделены '>') 1. Общие вопросы. 1.1 Какие бывают Паскали? 1.2 Какой Паскаль лучше? 1.3 Что сделать с откомпиленными в TP6 модулями, чтоб работать в TP7? 1.4 Чем отличаться TP7 и BP7? 1.5 Где взять инфу по прерываниям, портам и т.д.? 1.6 Что за ошибка 200 (Divide by Zero) и как лечить? 1.7 А у кого есть содержимое дискетки, идущей вместе с книгой Фаронова? 1.8 А есть ли русский хелп для BP? 1.9 А может заюючить в эху модули Фаронова, сорцы Д или русский хелп для BP? 2. Вопросы касающиеся программирования 2.1 А как ..?! 2.2 Проблемы в текстовом режиме 2.2.1 Как писать/читать напрямую в видеопамять (в т. ч. и в DPMI)? 2.2.2 Как выключать/менять размеры курсора? 2.2.3 Как включить/выключить бит мигания? 2.2.4 Как скрыть сообщения от запускаемой через Exec программы? 2.2.5 Как переключать видеостраницы? 2.3 Проблемы с мат частью 2.3.1 Как возводить в степень (в т. ч. и дробную)? 2.3.2 Как работать с отдельными битами? 2.3.4 Как проверить простое ли число? 2.3.3 Как _быстро_ проверить простое ли число? 2.3.4 Как перевести число из одной системы счисления в другую? 2.4 System & OS functions 2.4.1 Как узнать состояние клавиш Shift, Alt, Ctrl, Num Lock, Caps Lock, Scroll Lock и искусственно переключать их? 2.4.2 Как осуществить холодную перезагрузку? 2.4.3 Как скопировать файл? 2.4.4 Как определить под какой операционкой мы запустились? 2.4.5 Как читать клавиши курсора, F1-F12 и т.д.? 2.4.5 Как получить в свое распоряжение больше чем 640 кило памяти? 2.4.6 Как в BP юзать 32-разрядный асм? 2.4.7 Как писать TSR'ы? 2.4.8 Как осуществить поиск файла по всем директориям? 2.5 Файлы 2.5.1 Где взять описание <такого-то> формата файлов? 2.5.2 Как прочитать mp3 tag? 2.5.3 Как прочитать файлы с картинками? 2.5.4 Как удалить строку из текстового файла? 2.5.5 Как читать .ctl/.cfg -файлы 2.5.5.1 Как обрабатывать INCLUDE? 2.5.6 Как дописать в конец .exe-файла? 2.5.6.1 свою программу? 2.5.6.2 свои настройки, как это делает сам BP/TP? >--- Часть 1. Общие вопросы. ------------------------------------------------- Q:> 1.1 Какие бывают Паскали? A:> Паскали бывают хорошими и плохими, разными и хорошими, рулезные и саксовые, халявные и ... хм тоже халявные, борландовские и нет. А если конкретно, то наиболее распространены сейчас следующие компиляторы: Borland Pascal 7.x (BP7) Turbo Pascal 7.x (TP7) TMT Pascal (TMT) Virtual Pascal (VP) Free Pascal Compiler (FP) Inprise Delphi - что строго говоря не есть паскаль в чистом виде, поэтому здесь говорить о нём не будем. Остальные компиляоры не обсуждаются в силу малораспространенности и неактуальности сегодняшним задчам. =) ------------------------------------------------------------------------------ Q:> 1.2 Какой Паскаль лучше? A:> Как и на любой из подобных вопросов ответ один: смотря для чего. Если вы - новичок или пишите простенькие лабы для универа, то вам хватит BP или TP. Если вам нужен неплохой, несколько глюкавый, но стpемительно pазвивающийся и коммеpческий компилятоp для dos dpmi32, то есть смысл остановить свой выбоp на tmt pascal. На нем очень пpиятно и удобно писать демки, так как tmt pascal имеет в поставке мощный модуль graph. Веpсия 2.12, котоpая доступна на любой файлопомойке может компилять только под dos dpmi32, но сейчас уже есть в наличии веpсия 3.20, котоpая может компилять под os/2, dos dpmi32, win32. Пpичем под последние две платфоpмы также имеется мощный модуль graph. Для win32 этот модуль постpоен на технологии directx. Если вам нужен пpостой и мощный компилеp для win32 и os/2 консоли, а также для os/2 presentation manager, то вам опpеделенно нужен Virtual Pascal 2.0. Также для Virtual Pascal 2.0 есть пpисадки (к сожалению несколько глюкавые) для компиляции под dos dpmi32, и linux. Если же вам нужно компилять только под os/2 presentation manager, то лучше все таки остановиться на Virtual Pascal 1.11. Почему? А глюков меньше. Очень он уж вылизан. Если вы разрабатываете базы данных или просто предпочитаете визуальное программирование, то без Дельфи вам не обойтись. И наконец, если вы хотите пожертвовать некоторыми удобствами в пользу бесплатности - юзайте FPC. ------------------------------------------------------------------------------ Q:> 1.3 Что сделать с откомпиленными в TP6 модулями, чтоб работать в TP7? A:> Ничего. Компания Борланд поддерживает несовместимость откомпиленных модулей. BTW, именно поэтому не рекомендуется постить в эху *.tpu модули. ------------------------------------------------------------------------------ Q:> 1.4 Чем отличаются TP7 и BP7? A:> TP7 - это самостоятельный пакет, который тем не менее очень похож на BP7 и, по своей сути являясь упрощённой версией BP7, даже входит в комплект поставки Borland Pascal'я 7. Основные возможности BP7, котоpых нет в TP7 это компиляция под DPMI 16-bitи 16-bit win, а также бpаузеp. Следует отметить, что хотя BP7 и компилит под DPMI и windows, хотя pеально под компиляцией под windows мало кто пользуется. Во-пеpвых из-за 16-битности, а во втоpых из-за невозможности ноpмальной отладки в этом pежиме. ------------------------------------------------------------------------------ Q:> 1.5 Где взять инфу по прерываниям, портам и т.д.? A:> Как правило многие функции операционной системы или железа не всегда реализованы в виде стандартных Паскалевских функций. Поэтому возникает необходимость получения инфы по тем или иным прерываниям или портам. Как правило юзаются следующие вещи: Interrupt List by Ralf Brown - наиболее популярная и полная справочная система по железу IBM PC. Tech Help! - также весьма и весьма неплохая электронная справочная система Последняя версия насколько мне известно - 6.0 К сожалению, по некоторым отзывам в ней иногда бывают ошибки. Из бумажной литературы весьма рекомендую книгу Питера Нортона "Персональный компьютер фирмы IBM и операционная система MS-DOS" Весьма занятное чтиво, хотя и несколько устаревшее. Tech! Help, как и List Брауна выложены на DzeServer'е. Однако, в силу не самого маленького объёма последнего постарайтесь найти его где-нибудь ещё =) ------------------------------------------------------------------------------ Q:> 1.6 Что за ошибка 200 (Divide by Zero) и как лечить? A:> В связи с кривизной модуля CRT на быстрых машинах типа iPentium II/III, iCeleron программы откомпиленные на BP7/TP7 при запуске вылетают с run-time error 200 - деление на ноль. Причём ошибка эта появляется при подключение модуля даже если вы и не вызывали процедуру Delay, которая там криво написана. Суть проблемы состоит в том, что в этом модуле время измерялась через производительность процессора - в то давнее древнее время, как сами понимаете, не было столь быстрых процессоров и не было этой ошибки. Для того, чтобы ваши программы не вылетали вам нужно установить пропатченный вариант CRT. Достать его не проблема, BTW, он есть на DzeServer'е. Кроме того можно пропатчить уже откомпиленные программы. Более полную инфу как это делать ищите там же. ------------------------------------------------------------------------------ Q:> 1.7 А у кого есть содержимое дискетки, идущей вместе с книгой Фаронова? A:> Есть. По-моему уже у всех, кому надо было. Искать на DzeServer'е ------------------------------------------------------------------------------ Q:> 1.8 А есть ли русский хелп для BP? A:> Есть. Глюкавый, нелитературный, но есть. ------------------------------------------------------------------------------ Q:> 1.9 А может заюючить в эху модули Фаронова, сорцы Д или русский хелп для BP? A:> НЕ НАДО. достали. блин. =) В любом случае все исходники больших размеров публикуются только в RU.PASCAL.SOURCES и только с разрешения (ко)модератора если они уж очень большие. И тем более не рекомендуется юючить вещи, которые и так есть у доброй половины эхи. >--- Часть 1. А как ..?! ----------------------------------------------------- Прежде всего посмотрите в справке. В справке и демках BP можно найти очень интересные сведения не поднимая бессмысленной переписки в эхе. Далее ищите в свагах. SWAG Pascal Snippets (SWAG - SourceWare Archival Group) - там вы найдёте очень много исходников для чего угодно. http://www.gdsoft.com/swag/swag.html - официальный сайт SWAG http://seagull.rinet.ru/rswag/index.html - официальный сайт русского SWAG 2:5020/293, 2:00-5:30, 7:30-8:30, FREQ files ------------------------------------------------------------------------------ Q:> 2.2 Проблемы в текстовом режиме Как правило все вопросы про текстовый режим заканчиваются прямым доступом к видеопамяти или использованием функций int 10h (видео- сервис). Здесь собраны только наиболее надоевшие вопросы. ------------------------------------------------------------------------------ Q:> 2.2.1 Как писать/читать напрямую в видеопамять (в т. ч. и в DPMI) A:> Писать напрямую в видео пямять намного быстрее и удобнее, чем выводить символы на экран через БИОС. Строго говоря, процедура Write (WriteLN) тоже может писать в видео память напрямую. Тем не менее обычно лучше пользоваться своими процедурами для вывода символов. В реале видео память располагается начиная с $B800:0000. На каждый символ отводится 2 байта: сам символ и его атрибуты. Таким образом на экран 80*25 нужно 4000 байт. В DPMI никаких принципиальных отличий нет. Просто вместо адреса $B800:0000 нужно писать типизированную константу SegB800, которая будет указывать при прогоне на начало видеопамяти. Таким образом определив следующий массив var Screen: Array[1..2000,1..2] of byte absolute $B800:0; мы получаем доступ к любому символу и его атрибуту по порядковому номеру символа. Т.е. для точки (1,1) Screen[1,1] будет ASCII код того, что на экране, а Screen[1,2] - его атрибуты. ------------------------------------------------------------------------------ Q:> 2.2.2 Как выключать/менять размеры курсора A:> Функция 01h прерывания 10h (видео сервис) изменяет размеры курсора. Следующая процедура позволяет управлять размерами курсора. procedure SetCursor(startline, endline: byte); assembler; asm mov ch, [startline] mov cl, [endline] mov ah, 01 int 10h End; Диапазон значений 0h-1Fh. При указании startline=20h курсор не отображается. ------------------------------------------------------------------------------ Q:> 2.2.3 Как включить/выключить бит мигания. A:> Как и в предыдущем вопросе все дело сводиться к юзанью прерывания 10h (видео сервис). procedure Blinking(On: boolean); assembler; asm mov bl, [On] mov ax, 1003h int 10h End; Эта процедура включает или выключает мигание в зависимости от параметра On. ------------------------------------------------------------------------------ Q:> 2.2.4 Как скрыть сообщения от запускаемой через Exec программы? A:> 1) попытаться использовать возможности самих программ, например параметров командной строки типа '/q' 2) Использовать возможности переопределения вывода от Дос т. е. добавлять в параметры ' > nul '. 3) Пpотив тех, кто напpямyю пишет в видеопамять тоже есть методы: изменять активнyю видеостpаницy. (см ниже) ------------------------------------------------------------------------------ Q:> 2.2.5 Как переключать видеостраницы? A:> Пример процедуры, делающей активной страницу номер PageNo (для VGA, EGA, CGA от 0 до 7): procedure SetVideoPage(PageNo:byte); assembler; asm mov ah, 05 mov al, PageNo int 10h end; ------------------------------------------------------------------------------ Q:> 2.3 Проблемы с мат частью A:> Почти все подобные проблемы возникают из-за того, что кто-то уж очень сильно не любит математику/информатику или просто не желает думать. ------------------------------------------------------------------------------ Q:> 2.3.1 Как возводить в степень (в т. ч. и дробную) A:> В Паскале нет функций возведения в степень. Есть только функции SQR и SQRT - возведение в квадрат и извлечение корня. Тем не менее знания математики на уровне средней школы достаточно для написания подобной функции: function Power(Base,Exponent: Real): Real; var Tmp: Real; begin Power:=0; if Int(Exponent/2)=Exponent/2 then Base:=Abs(Base); if Exponent=0 then begin Power:=1; Exit end; if Base=0 then begin power:=0; exit end; if Base>0 then begin Tmp:=Exp((Abs(Exponent))*Ln(Base)); if Exponent>0 then begin power:=Tmp; exit end; if Exponent<0 then begin power:=1/Tmp; exit end; end; if Base<0 then begin Tmp :=Exp((Abs(Exponent))*Ln(Abs(Base))); if Exponent>0 then begin power:=-Tmp; exit end; if Exponent<0 then begin power:=-1/Tmp; exit end; end; end; A:> Кроме того вот более быстрая функция из vp'шного math.pas: function Power(Base, Exponent: Extended): Extended; assembler; {&Frame-} {&Uses none} asm fld Exponent fld Base fabs fyl2x fld st frndint fsub st(1),st fxch st(1) ftst fstsw ax sahf jb @L0 f2xm1 jmp @L1 @L0: fchs f2xm1 fld1 fadd st,st(1) fdivp st(1),st fchs @L1: fld1 faddp st(1),st fscale fstp st(1) end; ------------------------------------------------------------------------------ Q:> 2.3.2 Как работать с отдельными битами A:> Вариантов огромное кол-во. Imho наиболее просто пользоваться логическими функциями OR и AND. Например: Включить(сделать единицей =) первый бит в переменной b b:=b or 1; Включить второй бит в переменной b b:=b or 2; третий: b:=b or 4; Для проверки включённости бита можно юзать AND. То есть выражение (b and 1 <> 0) будет true, если первый бит включён. Думаю, идея ясна, а извращаться можно уж как угодно: писать функции и процедуры, что тоже есть рулез. Другой вариант выключения/сброса бита procedure SetBit(var B : Byte; BitNo : Byte); begin B := B or ($01 shl BitNo); end; procedure ResetBit(var B : Byte; BitNo : Byte); begin B := B and (not ($01 shl BitNo)); end; ------------------------------------------------------------------------------ Q:> 2.3.3 Как проверить простое ли число? A:> Вот функция (вполне подходит для не самых больших чисел): function isPrime(X: word): boolean; var i: integer; Begin isPrime:=false; for i:=2 to sqrt(x) do if x mod i = 0 then Exit; isPrime:=true; End; ------------------------------------------------------------------------------ Q:> 2.3.3.1 Как _быстро_ проверить простое ли число? A:> Вот программа. Работает действительно очень быстро и достаточно точно. К сожалению в предыдущем варианте фака в этой программе содержалась ошибка. Теперь её вроде как нет. =) {IsPrime.Pas (c) Max Alekseyev, FidoNet: 2:5015/60, e-mail: relf@os2.ru} {Реализация вероятностного алгоритма Миллера-Рабина с 20 раундами. Для примера выдает простые на отрезке [1000000000,1000100000]} function mulmod(x,y,m:longint):longint; assembler; asm mov eax,x mul y div m mov eax,edx end; function powmod(x,a,m:longint):longint; var r:longint; begin r:=1; while a>0 do begin if odd(a) then r:=mulmod(r,x,m); a:=a shr 1; x:=mulmod(x,x,m); end; powmod:=r; end; function isprime(p:longint):boolean; var q,i,a:longint; const rounds=20; begin if odd(p) then begin isprime:=true; q:=p-1; while not odd(q) do q:=q shr 1; for i:=1 to rounds do begin a:=Random(p-2)+2; if powmod(a,p-1,p)<>1 then begin isprime:=false; break; end; a:=powmod(a,q,p); if a<>1 then begin while (a<>1) and (a<>p-1) do a:=mulmod(a,a,p); if a=1 then begin isprime:=false; break; end; end; end; end else isprime:=(p=2); end; var t:longint; begin Randomize; for t:=1000000000 to 1000100000 do if isprime(t) then writeln(t); end. A:> Кроме того вот ещё один вариант алгоритма: программа-пример от Зюзика (хотя вроде как помедленней предыдущего). Program ZuzikNumbers; {(c) Andrew Lening, 1999}{TurboPascal v7.0} uses Crt,Dos; var n,k,Check1,Check2,SqRoot,Temp,FoundCount: LongInt; tHour,tMin,tSec,tSec100: Word; TimeWhenProgRunned,TimeWhenProgStopped: LongInt; IsBasic1,IsBasic2: Boolean; begin Write('Введите N (от 3 до 2*10^9): '); ReadLn(n); If (n<3) or (n>2000000000) then begin WriteLn('Сам дурак. Тут же проверка на тебя есть...'); Halt(1); end; FoundCount:=0; GetTime(tHour,tMin,tSec,tSec100); TimeWhenProgRunned:=tHour*3600+tMin*60+tSec; For k:=1 to (n div 6) do begin Check1:=6*k-1; Check2:=6*k+1; IsBasic1:=True; IsBasic2:=True; SqRoot:=Round(sqrt(6*k+1)); For Temp:=3 to SqRoot do If (Check1 mod Temp)=0 then IsBasic1:=False; For Temp:=3 to SqRoot do If (Check2 mod Temp)=0 then IsBasic2:=False; If IsBasic1 then begin WriteLn(Check1); Inc(FoundCount); end; If IsBasic2 then begin WriteLn(Check2); Inc(FoundCount); end; end; GetTime(tHour,tMin,tSec,tSec100); TimeWhenProgStopped:=tHour*3600+tMin*60+tSec; WriteLn('Программа нашла ',FoundCount,' простых чисел от 3'); WriteLn('до ',n,' за ',TimeWhenProgStopped- TimeWhenProgRunned, ' секунд(у,ы).Крюто.'); WriteLn('Самое время что-нибудь нажать'); repeat until KeyPressed; end. Вот. Для пpавильного опpеделения вpемени не запускайте в полночь :-) Алгоpитм спеpт у босса. Можно pешетом Эpатосфена, но это не быстpее и гемоp вообще. Программа немного перенавороченная - она выводит на экран и считает время, сколько работала. btw, если убрать вывод на экран, то все будет вообще резвее. (тормозит он =) ------------------------------------------------------------------------------ Q:> 2.3.4 Как перевести число из одной системы счисления в другую? A:> Вот две процедуры. Одна переводит из любой системы счисления в десятичную, вторая наобормот =) function FromDec(n, radix:longint):string; {перевод числа n из radix c/c в 10-ую} var s: String; const digit: string[16]='0123456789ABCDEF'; begin s:=''; repeat s:=digit[(n mod radix)+1]+s; n:=n div radix; until n=0; FromDec:=s; end; function ToDec(n:string; radix:longint):longint; {перевод числа n из 10-ной с/с в radix} var m, i: longint; const digit: string[16]='0123456789ABCDEF'; begin m:=0; while n[1]='0' do delete(n,1,1); for i:=1 to length(n) do m:=m*radix+pos(n[i],digit)-1; ToDec:=m; end; ------------------------------------------------------------------------------ Q:> 2.4 System & OS functions Вопросы, сводящиеся к использованию функций операционной системы, прямого доступа к оборудованию и т.д. ------------------------------------------------------------------------------ Q:> 2.4.1 Как узнать состояние клавиш Shift, Alt, Ctrl, Num Lock, Caps Lock, Scroll Lock и искусственно переключать их? A:> Состояние этих клавиш храниться в памяти по адресу 0:$417. Каждой из этих клавиш в байте по этому адресу соответствует свой бит. Следующие процедуры показывает как можно читать и изменять состояния клавиш Type TKeytype=(ktCaps, ktNum, ktScroll, ktCtrl, ktAlt, ktLShift, ktRShift); function GetLock(lock:TKeytype):Boolean; var b:byte; begin case lock of ktCaps : b:=$40; ktNum : b:=$20; ktScroll : b:=$10; ktCtrl : b:=$04; ktAlt : b:=$08; ktLShift : b:=$02; ktRShift : b:=$01; end; if (mem[0:$417] and b)<>0 then GetLock:=true else GetLock:=false; end; procedure SetLock(lock:TKeytype; On:Boolean); var b:byte; begin case lock of ktCaps : b:=$40; ktNum : b:=$20; ktScroll : b:=$10; ktCtrl : b:=$04; ktAlt : b:=$08; ktLShift : b:=$02; ktRShift : b:=$01; end; if On then mem[0:$417]:=mem[0:$417] or b Else mem[0:$417]:=mem[0:$417] and not b; end; ------------------------------------------------------------------------------ Q:> 2.4.2 Как осуществить холодную перезагрузку? A:> Попробуйте вот это Procedure ColdBoot; Begin InLine ($B8/$40/$00 /$8E/$D8 /$89/$C3 /$B8/$00/$00 /$A3/$72/$00 /$EA/$00/$00/$FF/$FF); End; или как более "паскалевский" вариант. procedure ColdBoolt1; Begin MemW[$40:$72] := 0; Inline($EA/00/00/$FF/$FF); End; На самом это одно и то же... ------------------------------------------------------------------------------ Q:> 2.4.3 Как скопировать файл? A:> Читать его в буфер через BlockWrite, а затем записывать через BlockWrite. Например: procedure FileCopy(fileFrom, fileTo: string); var f1,f2:file; p:pointer; rb:word; Begin Assign(f1,fs); FileMode:=0; Reset(f1,1); Assign(f2,fd); ReWrite(f1,1); GetMem(p,32768); If p=nil then begin WriteLn('Not enough memory !'); Halt; end;

Секция 1 из 2 - Предыдущая - Следующая



  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте