Академический Документы
Профессиональный Документы
Культура Документы
Шпак Ю.А. TurШпак Ю.Аbo Pascal 7.0 на примерах-2003
Шпак Ю.А. TurШпак Ю.Аbo Pascal 7.0 на примерах-2003
!
" ""
2003
32.973-01
83
681.3.06
/-
. .
83 Turbo Pascal 7.0 / . . . .:
, 2003. 496 ., .
ISBN 966-7323-30-7
, " ". Turbo Pascal 7.0.
,
Pascal . , ,
.
,
.
Pascal .
32.973-01
ISBN 966-7323-30-7
"", 2003
14
I. Turbo Pascal
1.
2.
3.
4.
5.
6.
7.
Turbo Pascal
, ,
15
17
28
36
44
49
55
61
II.
8.
9.
10.
11.
12.
...73
74
79
87
99
105
III.
117
13.
14.
15.
16.
17.
18.
118
132
138
162
167
187
Turbo Vision
IV.
19.
,
20.
'....
21.
. Turbo Pascal
. Turbo Pascal
.
. BIOS MS-DOS
. 8x86
. ASCII
. ,
3.
'. 205
206
218
232
260
263
269
272
312
328
331
480
14
I. Turbo Pascal
1. Turbo Pascal
Turbo Pascal
,
Turbo Pascal
Turbo Pascal
'.
Turbo Pascal
Open a File
2. , ,
Pascal
3.
:
4.
;
5.
if
if
case
..15
..'
15
17
17
18
18
19
19
20
.21
21
21
21
22
23
24
25
26
26
27
27
27
28
28
28
28
29
29
29
30
31
31
32
32
32
36
36
38
40
41
42
42
43
43
44
44
45
45
.....45
46
46
....49
49
49
50
51
6.
for
while
""
repeat
52
53
54
55
55
57
58
58
59_
7.
,
,
- -
external
forward
61
62
63
........63
64
67
67
67
68
:
69
70
70
71
71
II. .
8.
73
74
74
9.
79
10.
Pascal
87
88
75
76
with
79
79
79
81
83
83
84
11.
88
89
89
89
90
90
...90
91
92
92
93
97
99
100
101
101
12.
105
,
107
107
108
109
110
111
111
112
113
III.
117
13.
-
{$}
{$}
{$D>
{$}
{$F}
{$!}
{$
{$N}
{$}
{$>
{$Q>
{$R}
{$5}
.'
{$}
{$V}
{$}
'.
{$Y}
-
{$>
'...,.
{$0}
.
{$!}
{$
{$}
MS-DOS
Turbo Pascal
Condition
.....
Pass count
:
14.
,
Compile | Make Compile | Build
Compile | Primary file Compile | Clear primary file
15.
'.
118
..118
118
118
119
119
119
119
119
119
120
120
120
120
121
121
121
121
121
121
122
123
123
123
123
124
124
125
126
126
127
127
.'. 128
129
129
129
130
132
133
135
136
137
137
138
138
138
139
140
142
147
149
152
152
154
159'
:..
18. Turbo Vision
, Turbo Vision
Turbo Vision
IV.
19.
:
""
20.
""
21.
, "
Turbo Vision
. Turbo Pascal
Turbo Pascal 3.5"
. Turbo Pascal
.
. BIOS MS-DOS
BIOS
MS-DOS
. 8x86
ASCII-
AAD ASCII-
ASCII-
;
AAS ASCII-
'.
,
162
162
162
164
165
166
167
168
170
170
170
171
173
176
177
180
180
181
183
184
187
187
189
192
193
196
198
205
206
206
206
207
209
210
212
213
218
218
223
227
232
232
245
260
260
260
260
261
262
263
269
272
272
292
312
312
312
312
312
ADC
ADD
i
AND ""
CALL
CBW
CLC CF
CLD DF
CMC CF
CMPS (CMPSB/CMPSW/CMPSD)
CWD
DEC
DIV
:
ESC
HLT
IDIV ()
IMUL ()
IN
,
INC
INT
INTO
IRET
J-
JA/JNBE ""/" "
JAE/JNB/JNC " "/" "/
JB/JNAE/JC ""/" "/
JBE/JNA " "/" "
JE/JZ ""/""
JG/JNLE ""/" "
JGE/JNL " "/" "
JL/JNGE ""/" "
JLE/JNG " "/" "
JNE/JNZ " " " "
JNO ,
JNP/JPO , /
JNS ,
JO
JP/JPE , /
JS
JCXZ =0
JMP
LAHF
LDS
:
LEA ()
LES
LOCK
LODS (LODSB/LODSW/LODSD) -
LOOP .
]
LOOPE/LOOPZ , ""/""
LOOPNE/LOOPNZ , " "/" "
MOV
MOVS (MOVSB/MOVSW/MOVSD)
MUL
:
NEG
NOP
NOT ""
OR ""
OUT ,
POP
POPA/POPAD
POPF/POPFD
PUSH
312
313
313
313
313
313
313
314
314
314
314
314
315
315
315
315
316
316
316
316
3-17
317
317
317
317
317
317
317
318
318
318
318
318
318
318
318
318
318
319
319
319
319
319
319
319
320
320
320
320
320
321
321
321
321
322
322
322
322
322
322
323
323
. ASCII
. ,
System
Abs
Cos
Frac
Int
Pi
Sin
Sqr
Sqrt
Break
Continue
Exit
Halt
RunError
/
Eof
Eoln
FilePos
FileSize
lOResult
SeekEof
SeekEoln
Append
Assign
BlockRead
BlockWrite
Close
Flush
Read
Readln
Reset
328
331
,
.'
331
331
332
332
333
334
334
335
336
337
337
338
338
339
339
339
340
340
341
341
342
342
342
343
343
344
344
345
346
346
346
347
348
349
349
350
350
351
352
10
Rewrite
Seek
SetTextBuf
Truncate
Write
'.
Writeln
ChDir
Erase
GetDir
MkDir
Rename
RmDir
Addr
Assigned
CSeg
DSeg
Hi
Lo
MaxAvail
MemAvail
Ofs
Ptr
Seg
SizeOf
SPtr
SSeg
Swap
Dispose
FillChar...'.
FreeMem
'.
GetMem
New
Mark
Move
Release
Odd
Pred
Succ
UpCase
Dec
Inc
Concat
Length
,.
Delete
Insert
Chr
Ord
:
,
'.
'.
,
.'
.-.-
352
353
354
354
355
356
356
356
356
357
357
358
358
359
,
359
359
359
360
360
361
361
362
363
364
364
'..... 365
365
365
366
367
367
368
368
368
369
369
370
371
371
372
372
372
372
373
373
374
374
374
375
375
375
375
376
377
377
378
378
378
379
379
379
379
High
Low
ParamCount
ParamStr
Random
Exclude
Include
Randomize
Crt
KeyPressed
ReadKey
WhereX
WhereY
AssignCrt
ClrEol
ClrScr
Delay
DelLine
GotoXY
HighVideo
InsLine
LowVideo
NormVideo
NoSound
Sound
TextBackGround
TextColor
TextMode
Window
Dos
DiskFree
DiskSize
DosExitCode
DosVersion
EnvCount
EnvStr
FExpand
FSearch
GetEnv
Exec
FindFirst
FindNext
FSplit
GetCBreak
GetDate
GetFAttr
GetFTime
GetlntVec
GetTime
GetVerify
..
..,.
...'
."
'
380
380
381
381
381
382
382
382
382
383
383
384
384
,-.... 384
385
386
386
386
386
387
387
388
388
388
389
389
390
391
391
392
392
392
393
393
394
394
395
395
396
397
397
397
398
398
399
399
400
401
401
402
402
402
402
403
404
405
405
406
407
408
408
409
12
Intr
Keep
MsDos
PackTime
SetCBreak..
SetDate
SetFAttr
SetFTime
SettntVec
SetTime
SetVerify
SwapVectors
UnpackTime
Graph
GetBkColor
GetColor
GetDriverName
GetGraphMode
GetMaxCotor
GetMaxMode
GetMaxX
GetMaxY
GetModeName
GetPaletteSize ...
GetPixel
GetX
GetY
GraphErrorMsg
GraphResult
ImageSize
InstallUserFont
TextHeight
TextWidth
Arc
Circle
DrawPoly
Ellipse
FillEllipse
FillPoly
...'.
FloodFill
Getlmage
Line
LineRel
LineTo
MoveRel
Move
OutText
OutTextXY
PieSlice
Putlmage
PutPixel
Rectangle
Sector
ClearViewPort
Close.Graph
DetectGraph
'.
,
:
409
410
411
411
412
413
413
414
414
414
415
415
416
416
417
417
417
418
418
419
419
420
420
420
421
421
...422
423
423
424
424
425
426
427
427
427
427
428
429
430
...431
432
433
434
,
434
435
436
436
437
438
439
439
440
441
442
443
444
444
445
445
446
446
StrCat
StrComp
StrCopy
StrECopy
StrEnd
..
StrlComp
StrLCat
StrLCornp
,
StrLCopy
StrLen
StrLIComp
StrLower
StrMove
StrNew
StrPas
StrPCopy
StrPos
'
StrRScan
StrScan
StrUpper
StrDispose
447
447
448
449
449
450
451
.452
453
454
454
.454
455
455
456
457
458
,. 458
458
459
460
461
462
463
464
465
466
467
468
469
469
469
469
470
470
471
471
..472
472
473
474
474
475
475
476
476
477
477
478
478
..479
.479
479
'.
>.
3.
MS-DOS
-
480
480
488
489
489
489
490
, , Turbo Pascal 7.0.
Borland 1980- , Turbo Pascal 1997 ,
, -.
, 4 , " ^
".
Turbo Pascal 7.0, , Pascal.
, .
, Turbo Vision.
.
, , ,
.
, , , , ,
,
Pascal.
,
.
, , '
Pascal, Pascal,
" " ,
""
BIOS/DOS 8x86.
, . ,
.
TURBO PASCAL
i
, .
,
. (, , ..).
.
.
. .pas,
. tpu.
14.
.
Turbo Pascal ,
. , ( ).
BGI. ,
. .bgi . . chr .
BIN. Turbo Pascal.
: turbo. ^; turbo. tpl Turbo Pasca;
16
1.
SOURCE. .pas
.
UNITS. , . tpu. . .
Turbo Pascal .
.
Turbo Pascal,
.
. , tpc.exe.
.
Turbo Pascal, : , , .
.
Turbo Pascal, .
Turbo Pascal
Turbo Pascal
Turbo Pascal turbo.exe.
Turbo Pascal, . 1.1.
-
File Edit Search Run
Compile
Debug
Tools
Options
Window
Help
I
_ 1
'
!
-1
'-
' ,;
'-
J
^
' ; '"
1
I PI Help F2 Save
L
_,.
-, ..:
-.
F3 Open
:.:
ftlt*F9
\:
Compile
;;
18
1. Turbo Pascal
- , : Explorer, Windows
Commander, Norton Commander, Volkov Commander, Far ..
| . Turbo Pascal
Windows.
Turbo Pascal - , , keyrus. comv
- Turbo Pascal, turbo. exe MS-DOS
DOS- .
.
Turbo Pascal
: , , .
, <F10>.
-
<Alt> , . ,
File <Alt+F>. . ,
, .
File , , DOS Shell ( )
Exit ().
Edit , .
Search ,
.
Run. ( Run), . ,
Parameters,
.
Compile ,
.
Debug , .
Tools , ,
, Turbo Assembler.
Options ,
.
Window , .
Help , .
. , File | Save ,<2>.
.
19
, , , . Turbo Pascal
. Turbo Pascal ,
. .
, .
Turbo Pascal
Turbo Pascal
(. . 1.1).
. .
. , .
.
. [], , Help (. 1.2). , , , . 1.1.
. . :
, .
.
. .
: , -
; , ,
' ; ,
.
. . 1.1
.
1.1.
->
<->
<t>
<4>
<Ctrl+<->
<Ctrl+->>
<Ctrl+W>
<Ctrl+Z>
<Home>
20
1. Turbo Pascal
1.1
<End>
(
)
( )
()
()
<PgUp>
<PgDn>
<Ctrl+Home>
<Ctrl+End>
<Ctrl+PgUp>
<Ctrl+PgDn>
. Turbo Pascal .
,
.
Turbo Pascal
Turbo Pascal . , Debug | Watch, Watches, ( "" ). <F1>,
Help (. 1.2).
File
Edit
Search Bun
Corauile
Debu
Tools
NONflrffiffllJ.PHS
Help
watch expressions
Esc
27
Turbo Pascal
, ,
(. . 1.9). , .
1. ProgOl.pas, File | Save
<F2>.
2. Options | Save, . ,
Turbo Pascal , .
3. Turbo Pascal, File | Exit
<Alt+X>.
4. Turbo Pascal . , Options | Save,
. , ProgOl.pas .
Open a File
,
File | Open <F3>.
Open a File (. 1.10).
. 1.10.
Files,
Name. , ,
Open <Enter>. , Turbo Pascal
. "" , .
File, , , Name Open a File.
____
,
,
.
, ,
, , , . .
( ), , .
Writeln, ProgOl .pas (. 1.1).
, , , , .
, ..
Pascal
Pascal.
1. ,
. , ,
.
2. .
3. 127 .
4. , . , NumberOfBooks , numberofbooks.
,
. , NumberOf Books , N.
,
. , -
29
,
.
const :
I =
, , begin.
( 2.1) ProgOl (. 1.1) (. 2.1).
2.1.
program ProgOl;
const
MyName = ' ';
MyBirthDate = '7 1974 '
MyBirthYear = 1974;
begin
Writeln(', !');
Writeln(' ', MyName);
WritelnCH ' , MyBirthDate) ;
end.
, !
7 1974
. 2.1. ProgOl .pas
Pascal , . .
:
True. "".
False. "".
Maxint. integer ( ), 32767.
, . ,
.
, - .
var
30
2. , ,
_ :
, begin
.
ProgOl (. 2.1)
( 2.2).
2.2.
program ProgOl;
const
MyName = ' ';
MyBirthDate = '7 1974 ' ;
MyBirthYear = 1974;
var
CurrentYear, MyAge: integer;
begin
Writeln(', ! ' ) ;
W r i t e l n ( ' ' , MyName);
W r i t e l n ( ' ', MyBirthDate);
CurrentYear := 2003;
MyAge := CurrentYear - MyBirthYear;
Writeln(' ' , MyAge, ' ' ) ;
end.
. :
:=
( =.)
, .
ProgOl (. 2.2) CurrentYear
, integer.
200300, ,
integer, -32768 32767. CurrentYear
' 2 0 0 3 ' , . ,
, , var.
,
. , real ( )
.
( ).
, ,
. .
, ProgOl MyName string MyBirthYear integer, .
31
Pascal .
. :
const : = ;
, ProgOl MyBirthYear :
MyBirthYear: integer = 1974;
. , "+" . . ,
ProgOl (. 2.2).
CurrentYear := 2003;
MyAge := CurrentYear - MyBirthYear;
, .
>;
,
(). . 2.1.
2.1. Pascal
+
*
div
mod
not
and
or
""
""
xor
""
<>
<
>
<=
>=
()
not
and
32
2. , ,
2.1
or
()
shl
shr
, (:=)
, .
.
, .
:
^
not ;
- ( ) ;
in - (^ );
@
( 11).
.
.
. 2.2.
2.2. Pascal
Not
*,
/,
div,
mod,
and,
shl,
+, -, or, xor
=, <>, <, >, <=, >=, in
shr
, (not, and, or xor) () True ("")
False (""). boolean, (=, >, <, >=, <=, )
.
not
.
33
, boolean True,
not A
False ( ).
. 2.3.
2.3. and, or
and
or
False
False
True
True
False
True
False
False
False
True
False
True
True
True
False
True
True
False
False
True
, . 2.3,
.
and ( "") ( True) , True.
or ( "") ( True) ,
True.
( "")
( True) ,
.
. Turbo Pascal
File | New, ,
BoolOp.pas. , 2.3, File | Open (<F3>).
BoolOp.pas 02.
2.3. BoolOp.pas
program BoolOp;
var
, : integer;
begin
Write ( ' : ');
'' "
Readln(A) ;
Write ( ' :' );
Readln () ;
WritelnCA = (', A = , ' ) ' ) ;
Writeln( 'A > ( ' , A > , ') ');
WritelnCA < (', A < , ' ) ' ) ;
Writeln('A >= (' , A >= B, ' ) ' ) ;
WritelnCA <= (' , A <= B, ' ) ' ) ;
Writeln,('A 0 (' , , ) ' ) ;
'
/''
end.
34
2. , ,
, , . ,
, , .
,
<Enter>.
,
Readln, :
Write(' :');
Readln(,);
, ,
<Enter>, .
,
<Alt+F5>. - ,
. , 1, 2,
, . 2.2.
:1
: 2,
= (FALSE)
> (FALSE)
< (TRUE)
>= (FALSE)
<= (TRUE)
(TRUE)
. 2.2. .pas
, .pas , Turbo Pascal " File | New, . , ,
BoolOp2 .pas, , 2.4, File | Open (<F3>).
2.4. 2 . pas
program BoolOp2;
* fl
var
, , : integer;
begin
Writeln(' , , : ' ) ;
Readln(,,);
Write(' - ');
Writeln (( > ) and (A < );
Write(' - ');
Writeln(( = ) or ( = ));
Write(' - ');
Writeln < ) and ( ( > ) or ( = ) ) ) ;
Write(' - ' ) ;
35
2.4
Writeln(not ( ( = ) or (A = ) ) ) ;
end.
102
, 2, 1 3. . 2.3.
, ,
: <>, <> <Enter>.
. 2.3 , <Enter>.
,,:
2
1
3
- TRUE
- FALSE
- FALSE
- TRUE
. 2.3. BoolOp2 .pas
102.
. . , A and or
and, or. A and (
or ) , , and. , , .
. , not ( ( = )
or ( = ) ) =, or,
not.
" ". , ProgOl.pas (. 2.2) MyAge
integer. , . ,
, , . .
.
Pascal .
, . :
;
boolean;
;
;
char;
.
. :
;
;
;
.
;
;
;
, .
Turbo Pascal . , , .
. ,
, .
:
type _ = _;
, 2.
Pascal . 3.1.
3.1. Pascal
byte
0..255
shortint
-128..127
integer
-32768.. 32767
3.1
word
longint
37
0.. 65535
-21 47483648 . .21 47483647
0
1
2
3
4
5
6
7
8
9
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Pascal . , $. . 3.3.
3.3.
1
1
1*16 = 1*1 = 1
10
2F
*1 6 =12*1 6 = 12*1
1
12
16
47
38
3.
3.3
21
2*162 + *161+1*16 =
2*256 + 10*16 + 1*1 =
512 + 160 + 1
673
FFFF
65535
, , . , boolean.
Turbo Pascal File |
New, ,
IntTypes .pas. , 3.1, File | Open (<F3>).
3.1. IntTypes.pas
program IntTypes;
var
NumByte: byte;
NumShort: shortint;
Numlnt: integer;
NumWord: word;
NumLong: longint;
begin
NumLong := 100000;
NumWord := NumLong div 3;
Numlnt :== $FF + 1;
NumShort := NumLong mod 3;
NumByte : = Numlnt;
1
writeln('NumLong = ,NumLong);
writeln('NumWord = 1,NumWord);
writeln('Numlnt = ',Numlnt);
writeln('NumShort = ',NumShort)
writeln('NumByte = ',NumByte);
end.
, <Ctrl+F9>, , <Alt+F5>. , . 3.1.
IntTypes div mod. div . 100000 3
NumWord = 33333. 100000 3
(), mod,
39
NumShort. Numlnt FF . FF
255 (F*16! + F*16 = 15*16 + 15*1 = 240 + 15 = 255). 255 256,
NumByte. NumByte 256,
? , NumByte byte, 255. , . byte ,
. . 3.4.
NumLong = 100000
NumWord = 33333
Numlnt = 256
NumShort = 1
NumByte = 0
. 3.1. IntTypes. pas
3.4.
-
00000000
00000001
1*2
0
1
00000010
1*21 +0*2 = 2 + 0
0000001 1
1*2 + 1*2 = 2 + 1
00000100
11111110
1*27+1*26+1*25+1*24+1*23+1*22+1*2
1
+0*2= 128 + 64 + 32 + 16 + 8 + 4 +
254
11111111
2+0
shortint , ( )
( "", ""). , , shortint 01111111 = 1*26 + 1*25 +
24+1*23+1*22+1*21 + 1*2 =64 + 32 + 16 + 8 + 4 + 2 + 1 = 127.
256 :
100000000 = 1*28.' , byte
256, , , , 0. ,
, ( ), .
40
3.
(<< . " " . 2).
Turbo Pascal File | New, ,
BitOp.pas. , 3.2,
File | Open (<F3>).
3.2. BitOp. pas
program BitOp;
var
A, B: byte;
begin
A := 11;
:= 6;
{00001011}
{00000110}
end.
{11110100 = 244}
{00000010
{00001111
{00001101
{00010110
{00000001
=
=
=
=
=
2}
15}
13}
22}
1}
, , <Ctrl+F9>. , . 3.2.
= 11
= 6
not A = 244
A and = 2
A or = 15
= 13
A shl 1 = 22
shr 2 = 1
. 3.2. BitOp.pas
, ,
.
not . ,
. 00001011 ( 11) 11110100 ( 244).
and , or , . and,
or , . 3.5.
, . 3.5,
.
and, 1 , 1.
41
3.5. and, or
0
0
1
1
0
1
0
1
and
0
0
0
or
0
1
1
1
0
1
1
0
or,
1 ,
1.
,
1 ,
.
shl , shr
, .
BitOp 00001011.
(A shl 1) 00010110 ( 22). ,
00000110.
, ( shr 2)
00000001 ( 1).
Pascal . 3.6.
3.6. Pascal
real
2,9*1(39..1,7*1038
single
double
extended
comp
38
1,5*10^ ..3,4*10
324
308
5*10" ..1,7*
.,i9M Q-4951 ,1|104932
63
63
-2 +1..2 -1
11-12
7-8
15-16
19-20
19-20
real ,
single , double comp ,
extended .
Pascal
, <><>. , 0 . 2 2 2 222-03,
1000 .12 1. 00012+03.
+(), - (), * () / (), .
, , . , .
42
3.
char
ASCII (American Standard Code for Information Interchange
' ).
0 255.
.
ASCII .
char , :
' ' , ' ' ( ), ' ' (), '-'. .
. Turbo Pascal ,
CharType. pas. , 3.3,
File | Open (<F3>).
3.3. CharType. pas
program CharType;
var
Letter: char;
Code: byte;
begin
Write(' :');
Readln(Letter);
Writeln(' ', Letter, ' - ', ord(Letter))
Write(' :');
Readln(Code);
Writeln(' ', Code, ' - ', chr(Code));
Read(Letter);
end.
Read CharType.
Read ,
, - . ,
, Turbo Pascal,
.
CharType ,
Letter. ord . Code, chr.
,
.
'
boolean " ".
: True ("") False (""). boolean
.
43
, .
:
type _ = (!, ..., )
, Digits, :
type Digits = (Zero, One, Two, Three);
Digits:
var CurDigit: Digits;
CurDigit, Digits:
var CurDigit: (Zero, One, Two, Three);
. 0, 1 .. , , Ord
( " "). , Ord (One) 1.
.
, CurDigit Four
integer, :
Four := Ord(One) + Ord(Three);
. ,
Writeln (One < Three); TRUE.
.
, .
:
const
,
Monday = 1; Tuesday = 2; Wednesday = 3; Thursday = 4;
Friday = 5; Saturday = 6; Sunday = 7;
type
ABC = 'A'..'Z';
Digits = 0..9;
WorkDays = Monday..Friday;
Holidays = Saturday..Sunday;
, ,
. , ; , ?
. ,
( , , .).
(Write, Writeln) (Read, Readln) Pascal. . , , , . , .
Read
Readln. . , Read , ,
Readln . Read , , Readln
( <Enter>). .
( ) integer Read:
Read(A);
Read();
,
:
12 100<Enter>
12<Enter>100<Enter>
12<Tab>100<Enter>
, Read <Enter>, ,
.
Read Readln:
Readln(A);
Readln();
45
, ,
<Enter>:
12<Enter>100<Enter>
, Readln ,
.
Read Readln .
:
Read(F, XI, 2,
..., ) ;
F , , XI, 2, . .., , .
10.
:
Read(XI, 2, . . ., ) ;
.
|
XI, 2, . . . , , .
. , XI integer, ,
-.
\
Write Writeln
.
:
| : __
|
, . , :
46
4.
:
Writeln('':6, '':9, '':14);
Writeln('':6, '':9, '':14);
, 6, 9 11 :
, , .
, . . , :
| W r i t e l n ( 5 . 2 : 1 0 , 0.324:11);
:
5.200+00 3.2400-01
5.2 10 : _5.200+00 (
). 0 . 3 2 4 11 : _3.2400-01.
, , :
I :__:__
Writeln
:
| Writeln(5.2:10:4, 0.324:10:4);
:
|
5.2000
0.3240
*
, 10, :
.
Readln Writeln.
Text. Turbo Pascal
47
F: Text;
FirstName, FatherName, LastName: string;
begin
{ }
Write(' :');
Readln(FirstName);
Write(' :');
Readln(FatherName);
Write(' :');
Readln(LastName);
{ }
Assign(F,'MyName.txt') ;
Rewrite(F);
Writeln(F,FirstName);
Writeln(F,FatherName);
Writeln(F,LastName);
Close(F);
{ }
Reset OF);
Readln(F,FirstName);
Readln(F,FatherName);
Readln(F,LastName);
Close(F);
{ )
Writeln(' : ', FirstName);
Writeln(' : ',FatherName);
Writeln(' : ',LastName);
end.
, ,
, .
'
48
4.
-
.
. Pascal :
if case.
/
if
if ( "if "")
:
if _ then _ ;
if _ then _
else _ ;
True, , then, ( "then" "")
, else ( "else" "").
, ,
then else, (";") .
, " ". ( )
. , ,
.
begin end. "", . ,
begin end,
.
then else if
, . case, , . .
if A > then
begin
:= ;
50
5.
:= 100;
end;
:= 200;
:= := 100 , > ,: = ,
:= 100 . begin end,
> := 200.
if else:
if A > then
begin
:= ;
:= 100;
end else
begin
:= ;
:= 200;
end;
:= 200;
> ,
else. , then else ";" .
begin end if,
else. :
| if > then if > then := else A := ;
else if
> . if, if :
if A > then
begin
if > then A := ;
end else A := ;
if
if ,
/ Turbo Pascal
HexToDec.pas. ,
5.1, File | Open
5.1. HexToDec.pas
program HexToDec;
var
Hex: char;
case
51
5.1
begin
Write(' :');
Readln(Hex);
if Hex in t'O'..'9']
then Writeln(Hex,' = ',Hex)
else if Hex,in ['A'..'F']
then Writeln(Hex,' = ', Ord(Hex)-55)
else if Hex in ['a' . . 'f ]
then Writeln(Hex,' = ', Ord(Hex)-87)
else Writelr(' !');
Read(Hex);
end.
HexToDec , . in.
, , , . if , ' 0' . . ' 9'. , , ,
if. if ,
' ' . . ' F ' . , Ord ASCII , 55. ,
10, ' ' ASCII 65. , 55.
, ,
ASCII 87.
, ' 0 ' . . ' 9 ' , ' ' . . ' F ' , ' ' . . ' f , ,
.
Read (Hex) <Enter>.
case
case ,
. case
. , HexToDec ( 5.1) case, Hex . if,
case :
case _ of
!: _;
:
end;
52
5.
case _ of
1: _ ;
: _
else _
end;
else ,
. , else , , end, case.
, , , case-end.
byte,
shortint integer; boolean char.
case,
5.2.
5.2. case
case A of
1: Writeln('A=l');
2, 4: Writeln('A=2 =4');
3, 5.. 10: Writeln('A=4 5 10')
Ord('F'): Writeln('A=70');
end;
case Ch of
'D': Writeln(' D');
'E', 'F': Writeln(' F');
'A'..'C': Writeln('; ');
Chr(71): Writeln(' G');
end;
5.2,
, , , .
case
HexToDec ( 5.1),
if case. Turbo Pascal HexToDec.pas, File | Save As HexToD_2 .pas.
HexToD_2 .pas , 5.3.
5.3. HexToD 2. pas
program HexToD_2;
var
Hex: char;
begin
Write(' :');
Readln(Hex);
case
53
5.3
case Hex of
1
0'..'9': Writeln(Hex,' = ', Hex);
'A'..'F': Writeln(Hex,' = ', ord(Hex)-55);
'a'-.-f1: Writeln(Hex,' = ', ord(Hex)-87) ;
else Writeln(' !1);
end;
Read(Hex);
end.
, , if.
goto
HexToDec, ,
Re ad In.
, ,
goto.
goto , - . , begin label, , (":").
HexToD_2 ( 5.3), , 5.4,
File | Open (<F3>).
.
5.4. HexToD_2. pas
program HexToD_2;
label
Ml;
var
Hex: char;
begin
Ml:
Write(' :');
Readln(Hex);
case Hex of
'0'..'9': Writeln(Hex,' = ',Hex);
'A'..'F': Writeln(Hex,' = ', ord(Hex)-55);
'a'..'f: Writeln(Hex,' = ', ord(Hex)-87);
else begin
Writeln(' !');
goto Ml;
end;
end;
Read(Hex);
end.
Ml . -
54
5.
goto ,
, (
). .
goto , .
, goto.
case
,
. Turbo Pascal , TheDay.pas, , . 5.5, File | Open
5.5. TheDay.pas
program TheDay;
label
Ml;
var
Hour: byte;
begin
Ml:
Write(' 0 24:');
Readln(Hour);
,
if not (Hour in [0..24]) then goto Ml;
case Hour of
22..24, 0..5: Writeln('');
6.. 9: Writeln('');
10.. 13, 15..18: Writeln('');
14: Writeln('');
19..21: Writeln('');
end;
end.
Hour case.
goto. , .
6
- , .
Pascal : for, while repeat. for , , while repeat.
for
for
( ), .
for. , :
for _ := _ to _ do
_ ;
, :
for _ := _ to _ downto
_ ;
,
for , . for. Turbo Pascal
For_l.pas , 6.1, File | Open (<F3>).
"" '
6.1. For_l.pas
program for_l;
var
i, n: integer;
factorial: longint;
begin
Write(' :');
Readln(n);
factorial := 1;
for i := 1 to n do -factorial := factorial
factorial);
Writeln('
n,
end.
1*2*3*...*, n
. for
56
6.
i 1 . ( factorial) i. , 4. (. 6.1).
6.1. 6.1
1
2
3
4
factorial
1
1
2
6
factorial
1*1 = 1
1*2 = 2
2*3 = 6
6*4 = 24
,
downto. Turbo Pascal , For_2.pas ,
6.2, File |
program for_2;
var
: char;
s: string;
begin
for := 'Z' downto 'A' do s := s + c;
writeln(s);
end.
for_2 char,
' Z ' ( 90) ' ' ( 65).
( s string), Z . (. 6.2).
6.2. 6.2
s
s
Z
Y
X
Z
ZY
Z
ZY
ZYX
ZYXWVUTSRQPONMLKJIHGFEDC
ZYXWVUTSRQPONMLKJI HGFEDCB
ZYXWVUTSRQPONMLKJIHGFEDCB
ZYXWVUTSRQPONMLKJIHGFEDCBA
for .
while
57
, .
, .
-.
break (
), - for .
while
while :
while __ do _;
while , True. , ( , while) , False.
while.
Turbo Pascal WhileEx.pas
, 6.3,
File | Open (<F3>).
6.3. WhileEx. pas
program WhileEx;
var
CharCode: integer;
begin
CharCode := 0;
while CharCode <= 255 do
begin
if Chr(CharCode) in ['0'..'9'] then
Writeln('Kofl '", Chr(CharCode), '" - *,.harCode)
Inc(CharCode);
end;
end.
, . while
ASCII ( 0 255).
CharCode integer, .
CharCode 0, , 255, . CharCode <= 255 False.
CharCode Inc. , , , .
( WhileEx),
. , inc(N) N := N + 1, ,
, Inc ( N , 2 ) N := N + 2.
58
6.
Dec , Inc.
""
while repeat "" .
.
1. , ,
, True.
2. .
,
WhileEx Inc (CharCode). CharCode
0, CharCode <= 255
True.
"" , False
. ,
WhileEx CharCode integer byte,
, 255. , True, "".
, while repeat, , .
"",
<Ctrl+C>
<ctrl+Pause (Break) >. ,
Turbo Pascal, .
13.
repeat
repeat :
repeat __ until __;
repeat while .
. ,
, repeat until .
repeat ,
True.
59
.
Turbo Pascal The Day. pas ( File | Open (<F3>)), Ml:
label
Ml;
Ml:
Write(' 0 24:');
Readln(Hour);
if not (Hour in [0..24]) then goto Ml;
repeat:
repeat
Write(' 0 24:');
Readln(Hour);
until Hour in [0..24];
,
Hour , 0 24. ,
goto.
, repeat
begin end .
Pascal: Break Continue. Break
, ,
for, while repeat. Continue .
.
Turbo Pascal , BrConEx.pas,
, 6.4,
File | Open (<F3>).
6.4. BrConEx. pas
program BrConEx;
var
i: integer;
begin
for i := 1 to 20 do
begin
if (i mod 2) = 0 { )
then Continue
else if i > 10 then Break;
Writeln(i);
end;
end.
60
6.
1 10.
1 20 - i.
2 , , , Continue , Writeln (i) . i , 10. i 10, for break,
i Writeln.
, , "".
, . .
,
. , ,
.
Pascal .
, .
Readln, Writeln, Break .
, , . , , ,
. , Chr Ord.
. , , . ,
, . .
. (":"),
(";").
, .
.
.
.
.
, :
| procedure Proc(a, b: integer; : char);
:
Numl := 1;
Num2 := 2;
Ch := ' ' ;
62
7.
. , uses, .
14.
,
Crt,
:
>
program"SomeName;
uses Crt;
.
System , , Turbo Pascal. , uses .
Crt , .
Dos , , MS-DOS.
Graph ,
CGA, EGA, VGA, HERC, IBM 3270, MCGA 6330.
Graphs , ,
.
Overlay ; .
Printer , .
Turbo3 , Turbo Pascal 3.0.
Turbo Vision -
.
.
, DOS 3 4.
63
.
, ,
.
. , .
, begin .
,
uses.
:
procedure _ () ;
const _;
type _;
var _;
____
begin
end;
, , , , , . ,
( ) , , , , .
,
,
"". ,
, , .
,
, .
,
procedure ShowMessage(s: string; len: integer);
begin
Writeln(s:len);
end;
: '
( ShowMessage('Hello!',10);
, :
procedure ShowHello;
begin
Writelnf Hello! ' ) ;
end;
64
7.
, :
[ ShowHello;
, ,
, , Break Continue.
.
Turbo Pascal , ProcEx.pas
, 7.1, File | Open (<F3>).
7.1. ProcEx.pas
program ProcEx;
procedure SortABC(AscOrder: boolean);
var
c: char;
begin
if AscOrder
' A ' to ' Z ' do W r i t e ( c )
then for
' Z 1 downto ' A ' dp W r i t e ( c )
else f o r
WritelnC ' )
end;
begin
SortABC(True);
SortABC(False)
end.
:
procedure _ () : __;
const _;
type _;
var _;
____
begin
end;
65
, ,
.
, . .
' . , ,
.
, . , 5
. Turbo Pascal
, HexToD_3 .pas , 7.2,
File | Open (<F3>).
7.2. HexToD_3. pas/
program HexToD_3;
var
HexNum: string;
i: integer;
DecDig, DecNum: longint;
IsError: boolean;
{
()*(16)}
function HexToDecimal(HexDig: char; pow: byte): longint;
{ }
function Power(Num, Pow: byte): longint;
var
i: integer;
Res: longint;
begin
Res := 1;
for i := 1 to Pow do Res := Res * Num;
Power := Res;
end;
begin
case HexDig of
''.-'': HexToDecimal
'A'..'F': HexToDecimal
1
a'..'f': HexToDecimal
else HexToDecimal := -1;
end;
end;
begin
repeat
Write(' :');
Readln(HexNum);
DecNum := 0;
isError := False; {, }
66
7.
7.2
for i := 1 to Length(HexNum) do (
}
begin
(
}
DecDig:= HexToDecimal(HexNumfi],length(HexNum)-i);
if DecDig >= 0 ( ,}
then inc(DecNum, DecDig) (
, }
else begin
,
( ,}
isError := True; ( ,
}
Writeln(' !');
break; ( for}
end;
end;
until not isError; ( ,
repeat}
Writeln' = ', DecNum);
end.
HexToD_3 ,
, .
HexToDecimal. . , A1FD,
40960 (10*1 3), 1 256 (1*162), F
240 (15*16'), D 13 (13*16). , , , 16, ,
.
, .
HexToDecimal. HexDig char,
pow byte.
16 pow Power,
HexToDecimal. , - Power
HexToDecimal. Power
, Num. Pow.
, HexToDecimal. case,
5. case .
, , -1.
. repeat. ,
isError.
67
for, length.
string .
isError
Fatlse. , isError ,
repeat. HexToDecimal (HexToDecimal = -1),
isError True, for break, repeat .
, HexToDecimal, DecDig,
DecNum.
repeat DecNum
.
:
, ;
, ;
-;
-;
.
.
,
, ,
.
, :
procedure SortABC(AscOrder: boolean);
function HexToDecimal(HexDig: char; pow: byte): longint;
function Power(Num, Pow: byte): longint;
. . ,
AscOrder SortABC True False,
pow HexToDecimal
length(HexNum)-i.
, . ,
,
, - ,
.
\
^
,
, , .
var . , -
68
7.
var, .
,
, (, , ). .
, 7.3. ( VarParam.pas File | Open (<F3>) ).
7.3. VarParam. pas
program VarParam;
var
vMod, vDiv: integer;
function Divide(a,b: integer; var rMod: integer): integer;
begin
rMod := a mod b;
divide :'= a div b;
end;
begin
vDiv := Divide(10, 3, vMod);
Writeln('vDiv=',vDiv);
Writeln('vMod=',vMod) ;
end.
Divide VarParam , rMod . , : rMod.
Divide rMod
vMod. 1 (10 mod 3).
, , . - , . - :
_(_)
, VarParam (.
7.3), rMod :
function Divide(a,b: integer; var rMod):
, rMod
mod b integer:
integer(rMod) := a mod b;
rMod char,
:
69
- -
Pascal .
.
. ,
:
type
Operation = function(,: integer): integer;
, ,
7.4.
7.4.
{$F+}
function Addition(,: integer): integer;
begin
Addition := A + ;
end;
function Subtraction(,: integer): integer;
begin
Subtraction := A - B;
end;
{$F-}
{$F+} () (far) . ,
- -,
{$ F+} .
13.
, :
function SomeOp(A,B: integer; Op: Operation): integer;
begin
SomeOp := Op(A, B);
end;
, . Addition, , Subtraction, .
SomeOp:
W r i t e l n ( 4 0 + 5 ' , SomeOp (10, 5,Addition) ;
W r i t e l n ( ' 1 0 - 5', SomeOp(10,5,Subtraction);
:
70
7.
10 + 5 = 15
10 - 5 = 5
,, ,
, ,
inline interrupt.
" ".
. .
for. .
Turbo Pascal ,
FactorEx.pas , 7.5,
File | Open (<F3>).
7.5. FactorEx.pas
program FactorEx;
var
Num: integer;
function Factorial(N: integer): longint;
begin
if N = 1
then Factorial := 1
else Factorial := N * Factorial(N - 1);
end;
begin
Write(' :');
- Readln(Num);
,
Writeln(' ',Num,' = ', Factorial(Num));
end.
'..
, Num=4.
Factorial 3 (N - 1). , N 1 Factorial (1)
Factorial (2) 1. Factorial (2) 2 ( 2) Factortial ( 3 ) .
, Factorial (3) 3 ( 6) Factorial ( 4 ) . Factorial ( 4 ) , " " , 4
24.
Pascal ,
. : .
71
external
:
[procedure SetMode(Mode: W o r d ) ; external; ($L CURSOR.OBJ}
external .
, , , ( 15).
{$L}
, Pascal. ,
, SetMode,
cursor.obj, .
forward
Pascal
. , ,
, .
forward.
forward,
.
:
I procedure Proc(, : integer); forward;
:
procedure Proc;
begin
end;
, ,
, , Pascal
, ""
.
.
, , " ". , ,
.
. , ,
,
, , .
, .
ISBN 966-7323-22-6
: 216., .
:
170x240
(70x100/16)
Internet
. , , "
" .
, , . 17 .
.. . ,
,
.
- , : " ", " ", ' ", " ", " ", "
" ..
1.
2.
3.
4. -
5.
6.
7.
8.
9.
10.
11.
12.
II
, , : . ,
. ,
. , . , string char.
3, Pascal: , , , , , . , .
:
8 ;
9 ;
10 ;
11 ;
12 .
,
, - . string 4 "
", "".
, .
begin
si := MyS;
s2 : ?= ' ';
s3 := si + ' - ' + s2; {' + '};
, .
( ) .
. :
var
si, s2: string;
len: byte;
sl[l] : = ' A ' ;
s2 := sl[l];
s 2 [ 2 ] :=sl[l];
len := O r d ( s 2 [ 0 ] )
{ si A'}
{ s2 = ''}
{ s2 = ''}
{ len = 2 s2}
75
, , ,
, . :
var
si, s2: string[5];
si := 'ABC'
s2 := si + ' D E F ' ;
{ s2 =
'ABODE'}
() +,
=, , >, <, >=, <=.
. ,
ASCII ( ASCII ). , '' = '' True,
. , '' < ''
False, ( ' ' )
( ' ' ) , ,
' ' ' '.
,
.
.
, , char.
, . . ,
.
(), . , . ,
, .
, , ,
, ..
:
[_] of _;
, ,
10 , :
type
MyArr = array[1..10] of integer;
var
A: MyArr;
var
A: array[1..10] of integer;
,
:
76
8.
[1] := 2;
[ 2 ] := [1] + 3;
[3] := [ 2 ] . , , :
type
ArrA: array[1..10] of integer;
ArrB: array[1..5] of ArrA;
var
B: ArrB;
To :
var
: array[1..5,1..10] of integer;
,
: "
, 5 10 ". :
[1,11 := 3;
[1,2] := [1,1] * 5;
[5,10] :=
:
: array[1..2,1..5,1..10] of integer; {}
D: array[1..2,1..2,1..3,1..4] of char; {}
. , :
|[1,1
[1,2],
... [1, [ 2 , 1 ] ,
[2,2]
... [5,10]
,
, ,
.
{$R+},
.
13.
. .
,
,
.
19.
77
for j := 1 to 5 do
if A r r O f S [ j ] > s then
begin
s := A r r O f S [ j ] ; { "" }
p := j ;
{ }
end;
ArrOfS[p] := ' ' ; { "" }
ArrOfR[i] := s; { ""
}
end;
for i := 1 to 5 do w r i t e l n ( A r r O f R [ i ] ) ;
end.
SortStrs ArrOfS.
, s "" .
ArrOfS . ArrOfS ("" ) , , s, ArrOfR. ,
, "" ,
.
: ,
. Turbo
Pascal Average.pas ,
8.2, File |
Open (<F3>).
8.2. Average .pas
program Average;
var
A: array[1..5,1..5] of integer;
i, j: byte;
78
8.
8.2
sum: longint;
begin
Writeln(' :');
for i := 1 to 5 do
for j := 1 to 5 do Read(A[i,j]);
Writeln(' :');
for i := 1 to 5 do
begin
sum : 0;
for j := 1 to 5 do incfsum, A[i,j]);
Writeln(sum/5:8:2);
end;
end.
Average .
19.
, , , , , , .
,
"", 12.
,
. , ,
, .
Pascal , , [ 1 , 2 , 3 , 4 / 5 ] , [ ' A ' . . ' Z ' ] , [ 0 . . 1 0 , 100..110].
, [ ].
:
set
of _;
:
type
ABC = set of ' A ' . . ' Z ' ;
Digits = set of 0. . 9;
var
Caps: ABC;
Key: Digits;
Odds: set of byte;
Caps , Key
0 9, Odds
byte. 256,
0 255, integer .
,
(=, , >=, <=),
(+), (*), (-), in.
. 9.1.
, char , ,
80
9.
. Turbo Pascal
SetsEx.pas , 8.2,
File | Open (<F3>).
9.1. ,
>=
<
in
. ,
.
. ,
. , >= True
. , <= True
,
.
[1,2,3] + [3,4,5] = [1,2,3,4,5]
, , .
[1 ,2,3]* [3,4,5] = [3]
, , .
[1,2,3] -[3,4,5] = [1,2]
-
. in . , if
if ('(i = 0) or (i = 1) or (i = 2 ) ) and
((j= 3) or (j = 4) or (j = 5 ) ) .then ...
if (i in [0..2]) and (j in [ 3 . . 5 ] ) then ...
9.1. SetsEx.pas
program SetsEx;
var
81
9.1
end.
if C h r ( i )
in Lettersi then W r i t e ( C h r ( i ) ; 2 ) ;
, :
51 = ABABCDEEF
52 = WEAAAFXR
'
,
Lettersl char, . char , , :
| Lettersl := Lettersl + [ s [ i ] ] ;
Letters2.
si s2. Length, ,
, Ord.
for Lettersl Letters2
:
Lettersl = ' ' , ' ' , ' 1 , ' D 1 , ' 1 , ' F 1
Letters2 = ' W , ' 1 , ' ' , ' F 1 , ' X ' , ' R '
, , . ,
.
Lettersl := Lettersl * Letters2;
Lettersl Lettersl Letters2,
, :
Lettersl = ' ' , ' ' , ' F '
_____
,
. , ? . . , , , . ,
?
82
9.
, , .
:
type
_ = record
_: _;
_: _;
end;
, Person, :
type
Person = record
LastName: string[20];
FirstName: string[20];
BirthYear: integer;
'--
end;
Person
:
var
Manl, 2: Person;
-
:
_._
/ 9.2 Manl 2.
9.2.
Manl.LastName := '';
Manl.FirstName := '';
Manl.BirthYear := 1974;
Man2.LastName := Manl.LastName;
Man2.FirstName := '';
Man2.BirthYear := Manl.BirthYear + 27;
, :
var
Family: array[1..3] of Person;
Family[1].FirstName := '';
Family[2].FirstName := ''
Family[3].FirstName := '';
Pascal , :
type
Complex = record
RealPart: real; { }
83
ImagePart: real; { }
end;
with
,
. Pascal with, :
with _ do _;
, Manl 2 ( 9.2)
, 9.3.
9.3. with
with Manl do
begin
LastName := '';
FirstName := '';
BirthYear := 1974;
end;
with Man2 do
begin
LastName := Manl.LastName;
FirstName := '';
BirthYear := Manl.BirthYear + 27;
end;
Pascal ( 9 ),
with :
[ with Reel, Rec2,
,
. ,
, , .
. , case:
type
_ =
record
{ }
{ }
case _: __ of
_1: (: );
_:
end;
(:
);
84
9.
:
type
Car = record
Brand: string[20];
Year; integer;
case Kind: string[8] of
'': (Tonnage: real);
'': (Passengers: byte);
end;
Car . Brand
, Year . Tonnage
() real ,
Kind ' ' . , Passengers ()
byte , Kind
''.
.
,
.
, .
-. .
,
. Turbo Pascal
Audio.pas , 9.4, File | Open (<F3>).
9.4. Audio. pas
program Audio;
type
{ )
Track = record
Name: string[50]; { }
Hours: 0..3;
{}
, Minutes: 0..59;
{}
Seconds: 0..59;
{}
end;
{ }
CD = record
Author: string[20];
{}
Title: string[50];
{}
{}
Year: integer;
{}
Kind: string[10];
case Tracks: byte of { }
1: (Trackl: Track) { ,
}
[2..20]: (ATracks: array[1..20] of Track);
end;
85
9.4
var
: char;
CDData: CD;
i, j : byte;
{ )
procedure DataForTrack(var TrackData: Track);
begin
Write(': ');
Readln(TrackData.Name);
Write(' (): ');
Readln(TrackData.Hours);
Write(' (): ');
Readln(TrackData.Minutes) ;
Write(' (): ');
Readln(TrackData.Seconds) ;
end;
begin
i := 0;
repeat
inc(i);
Writeln(' ',i,'-M :');
\
Write(', : ');
Readln(CDData.Author) ;
Write(': ');
Readln(CDData.Title) ;
Write(': ');
Readl*i(CDData.Year) ;
Write('3KaHp (,,,,,,): ']
Readln(CDData.Kind);
Write(' : ');
Readln(CDData.Tracks);
for j := 1 to CDData.Tracks do
begin
Writeln(' ',j,'- :');
if CDData.Tracks = 1
then DataForTrack(CDData.Trackl)
else DataForTrack(CDData.ATracks[j]);
end;
Write(' (/)? ')
Readln();
until in ['N','n','H',''];
end.
Audio : Track CD. CD
-.
Track CD
. CDData CD.
repeat, ,
<>, <>,
<N> <>.
86
9.
, CDData.Tracks
1, Trackl Track. ,
ATracks Track.
DataForTrack, Track.
, CDData.Trackl,
CDData.ATracks.
10
, . "
" 4, Readln Writeln.
, , , . , ,
. , , , , , .
MS-DOS . , 1 8 ,
. .
, ,
. , Turbo Pascal turbo.exe. turbo
, . : !, @, # , % , , & , ( , ) , ' , ~, -,_.
, , . .
10.1 .
10.1.
ar j
asm
bak
bat
com
dat
doc
exe
gif
hip
ini
pas
pcx
pic
, ar j
()
64
GIF
Pascal
PCX
PIC
88
10.
10.1
,sys
tif
txt
zip
,
TIFF
, pkzip
,
.
, .
, , . , ,
. , , , .
, , . ,
.. , MS-DOS .
.
. ,
turbo.exe : e:\work\books\computer\
tp\bin\turbo. , : .
( : z:).
: b:,
. , , :,
.
Pascal
Pascal :
, .
,
256 ,
,
. .
,
- .
. Pascal, ,
^, .
,
(, F).
Assign, :
89
Pascal,
: Rename Erase. Rename
. : , .
Erase , .
.
- Pascal
lOResult.
integer, . 0.
lOResult ,
-. {$ I}. lOResult , .
13.
, Text:
var
F: Text;
90
10.
,
Chr (13) C h r ( 1 0 ) . Reset
, Rewrite .
: Append. Rewrite , ,
.
Read Readln.
Read , a Readln
. (, ) :
Assign (F, 4.txt');
Reset(F);
Readln(F, s);
Readln(F, i);
Readln(F, r);
Close(F);
Write
Writeln. Writeln , .
( 10.1).
10.1.
var
F:
s:
i:
r:
Text;
string;
integer;
real;
Assign(F, 'l.txt')
Rewrite(F);
Writeln(F, s);
Writeln(F, i);
Writeln(F, r);
Close(F);
Reset , Read
Readln . Pascal , : Eoln,
Eof, SeekEoln SeekEof ( ).
91
Eoln True r
.
Eof True, .
SeekEoln True
.
SeekEof True .
Eof while , Eoln :
while not Eof(F) do readln (F,s);
while not Edln(F) do read(F, c);
,
. Turbo Pascal
FileCopy.pas ,
10.2, File | Open
10.2. FileCopy.pas
program FileCopy;
var
Writeln(' :');
Readln(NameTo);
Assign(FTo, NameTo);
Rewrite(FTo);
while not Eof(FFrom) do
begin
Readln(FFrom,s); { }
Writeln(FTo,s); { }
end;
Close(FTo);
Close(FFrom);
end.
92
10.
while
. ,
FFrom.
-
{$!-}. Reset
- {$!+}.
, lOResult ,
-, isError
True, while .
, isError False
while .
,
FTo, while FFrom FTo ,
FFrom, .. Eof (FFrom) True. Close.
FileCopy
, .
.
coml, com2, , 1, 2
3, .
con . ,
.
Iptl, Ipt2, Ipt3 , 1, 2 3,
.
.
, , con. ,
Iptl ( LPT1).
,
. , .
22.
, , file of _:
type
Rec = record
end;
93
var
Seek(F,
9);
F}
0, , ,
.
FilePos,
File Size. , F :
[ Seek(F, FileSize (F) ) ;
| Seek(F, FileSize (F) - 1 ) ;
Audio, (. 9.4). Turbo Pascal
Audio. pas, File | Save As,
Audioln.pas. ,
10.3. ( Audioln.pas -
File | Open (<F3>) ).
10.3. Audioln.pas
program Audioln;
type
{ }
Track = record
Name: string[50]; { }
Hours: 0. .3;
{}
Minutes: 0!.59;
{}
Seconds: 0..59;
{}
end;
{ }
CD = record
{}
Author: string[20];
{}
Title: string[50];
{}
Year: integer;
{}
Kind.: string[10];
case Tracks: byte of { }
94
10.
10.3
1: (Track!: Track); { ,
}
[2..20]: (ATracks: array[1..20] of Track) j;
end;
var
c: char;
CDData: CD;
i, j: byte; .
FName: string;
F: file of CD;
{ }
procedure DataForTrack(var TrackData: Track);
begin
end;
begin
Writeln(' :');
Readln(FName);
Assign(F, FName);
{$!-}
Reset(F);
{$!+>
if lOResult = 0
then Seek(F, FileSize(F)) { ,}
{ }
else Rewrite(F); { }
i : FileSize(F); { }
repeat
inc(i);
Writeln(' ',i,'- :');
Write(F, CDData); { F)
Write(' (/)? ');
Readln();
until in ['N','','',''];
Close(F);
end.
Audioln -, , , .
F file of CD.
, Seek , . ,
Rewrite.
,
CDData, F
Write. (! Writeln
.) F Close.
95
-. ,
Audio In. /
File | Save As Turbo Pascal Audioln.pas (. 10.3) AudioOut.pas.
, ,
, 10.4. ( AudioOut, pas File | Open (<F3>) ).
10.4. AudioOut .pas
program AudioOut;
type
{ }
Track = record
Name: string[50]; { }
Hours: 0..3;
{}
Minutes: 0..59;
{}
Seconds: 0..59;
{}
end;
{ }
CD = record
Author: string[20];
{}
Title: string[50];
{}
Year: integer;
{}
Kind: string[10];
{}
case Tracks: byte of { }
1: (Trackl: Track); { ,
}
[2..20]: (ATracks: array[1..20] of Track);
end;
var
c: char;
CDData: CD;
i, num: byte;
FName: string;
F: file of CD;
isError: boolean;
{ }
procedure DataForTrack(var TrackData: Track; num: byte);
var
hh, mm, sa: string[2];
Timing: string[8];
begin
with TrackData do
begin
( , )
Str(Hours, hh);
Str (Minutes, mm);
Str(Seconds, ss) ;
{ )
if Hours = 0 then Timing := '' else Timing := hh + ':';
Timing := Timing + mm + '"' + ss + Chr(39) ;
96
10.
10.4
Writeln(num
end;
end;
begin
.
isError := True;
while isError do
begin
WritsIn(' :');
Readln (FNaime) ;
Assign(F> FName);
{$!-}
Reset(F);
{$!+}
isError := (lOResult > 0);
if isError then Writeln(' !');
end;
repeat
Writeln(' ',FileSize(F),' :1);
Seek(F, 0); ( }
for i := 0 to FileSize(F) - 1 do
begin
Read(F, CDData);
Writeln(i + 1, ' - ', CDData.Author, ', "', CDData.Title,'"
( 20 )
if (((i + 1) mod 20) = 0) and
(i < (FileSize(F) - 1))
then begin
\
Writeln(' <Enter>...
Read();
end;
end;
Writeln(' : ');
Readln(num);
, Seek(F, num - 1); ( }
Read(F, CDData);
Writeln('> ', CDData.Author, ', "', CDData.Title,
i n - ', CDData.Year, 'r. (', CDData.Kind, ') <');
{ }
if CDData.Tracks = 1
then DataForTrack(CDData.Trackl, 1)
else for i := 1 to CDData.Tracks do
DataForTrack(CDData.ATracks[i], i);
Write(' (/)? ');
Readln();
1
1
until in ['N ,' ,'',''];
Close(F);
end.
AudioOut . for
20 . 20
97
,
<Enter>.
, . Read - CDData, .
DataForTrack. ,
.
str.
,
,
. , , ,
. , , File:
var
'
F: File;
.
/ ,
:
Rewrite(F, 1);
Reset (F, 10);
128 , Rewrite Reset
,
, 128 .
Pascal, Read Write, BlockRead BlockWrite, . :
BlockRead(var F: file; var Buf; Count: word {; Result: word});
BlockWrite(var F: file; var Buf; Count: word {; Result: word});
Buf , ; Count .
Count * RecSize, RecSize , . Result
.
. Turbo Pascal
FileCopy.pas ( 10.2), CopyFile.pas,
, 10.5,
File | Open (<F3>).
98
10.
11
, .
.
, , . ,
.
, 8x86, 65536
(64 ), .
,
.
,
. , . ,
. ,
| var A: array[l. .300] of byte';
300 , . , .
, .
, . ,
. , -
. , ,
. .
, , ,
.
, , 16 ( word). 65536
(64 ), , 16 ( 0, 16,
32 ..).
. , () :
I * 16 +
100
11.
, , .
" ", .
:
type
pint = integer; { }
pReal = 1;
{ )
var
PI, 2: pint;
: pReal;
A
4: byte; { byte}
, @, "". ,
i, @i "
1" " i":
var
: integer;
i: integer;
begin
i := 2;
P := @i; { ,
2}
end.
'
, "".
, i
:
Writeln(i); { i}
Writeln(PA); { ,
}
.
Pascal , ,
. Nil. Nil
, ,
.
Nil ( ), .
=.
, .
. Turbo Pascal
101
, Pointer I. pas
11.1, File I Open
11.1. Pointerl.pas
program Pointer1;
type
TArr = array[1..5] of integer;
var
PArr: ; { }
Arr: TArr;
i: integer;
begin
PArr := @Arr; {PArr Arr}
for i := 1 to 5 do
begin
Write(1,'- = ');
Readln(PArrA[i]); { , PArr
Arr,
PArrA - Arr}
end;
for i := 1 to 5 do
begin
PArr := @Arr[i];
{PArr i- Arr}
Writeln(PArrA[1]); {PArrA - i- }
end;
end.
Pointerl ,
.
Pascal ,
. pointer.
,
.
pointer . " ",
. Nil, pointer
.
.
" " 7.
. -, ,
, .
102
11.
,
, ,
.
Turbo Pascal ,
Links .pas 11.2,
File | Open (<F3>).
11.2. Links .pas
program Links;
type
Link = Person/Person = record
ID: integer;
{}
Lastname: string[20]; {}
FirstName: string[20]; {}
NextRec: Link;
{ }
end;
var
i, , j: integer;
Last, First, Curr: Link; {Last -
First -
Curr - }
procedure ShowList;
begin
Writeln(' :');
Curr := First; { }
while Curr <> Last do { ,
}
begin
Writeln(.ID:3,' - ',CurrA.LastName,' ',.FirstName);
Curr := CurrA.NextRec; { }
end;
end;
begin
Write(' : ');
Readln(c);
Last.:= New(Link); ( Person}
First := Last;
{ }
for i := 1 to do
begin
Writeln(' ',i,':');
LastA.ID := i;
Write(': ');
Readln(LastA.LastName);
Write(': ');
Readln(LastA.FirstName);
A
Last .NextRec := New(Link); {
}
Last := LastA.NextRec;
{ }
end;
Sho'wList; { }
Write(' : ');
103
11.1
readln(j);,
Curr := First; { }
{ }
for i := 1 to j - 2 do Curr := Curr".NextRec;
if j = 1
Links
Person. , Link,
Person.
,
.
Person NextRec Link,
.
-: First , Last , Curr
.
, New Person. New , , .
,
Last
New(Link);
,
Link ( Person), - Last. Last
, - First.
for ,
NextRec
.
ShowList. , while , First,
, Last.
104
11.
,
. , , First
. ,
Next Re Nil, Last
. , , NextRec ,
.
Dispose, , , First (
).
, ,
.
12
, , (). "", .
, , . , , .
, .
, . . , : ,
, .. ,
. , : , , ..
, .
, ,
.
. "" .
, ,
: , , ..
, : .
, . , , . , , , ,
.
,
-.
. , . , , , -.
Pascal Object:
type
_ = Object
1: ;
106
12.
_: _;
_1;
eo_N;
end;
.
, . ,
, ,
:
type
TCar = Object
Weight: real;
{ }
Color: string[20];
{}
MotorV: byte;
{ ..}
procedure Start;
{ }
procedure Stop; { }
end;
, TCar
Pascal (, , ).
TCar:
var
MyCar: TCar;
, :
MyCar.Weight := 2.5;
MyCar.Color := '';
MyCar.Start;
:
type
= ;
var
MyCar: PCar;
New:
MyCar := N e w ( P e a r ) ;
MyCar .Weight := 1;
MyCar .Start;
107
,
"" . , . :
_ = Object (_)
, TSedan, :
type
TSedan = Object(TCar)
Doors: byte;
end;
TSedan,
:
var
MySedan: TSedan;
MySedan.Color := '';
MySedan.Start ;
.
. . ,
procedure TypeInfo(T: TCar);
, TSedan.
procedure TypeInfo(T: TSedan);
TSedan ,
. , , Pascal .
f
, ,
. , . , , , . , , ,
, .
, Filling,
. ,
. , ,
. , Filling . , 12.1.
108
12.
12.1.
type
TCar = Object
TankV: byte; { )
Fuel: byte;
{ }
function Filling(Volume: byte): byte;
end;
{ Filling)
function TCar.Filling(Volume: byte): byte;
begin
if Volume > TankV then Volume := TankV;
Fuel := Volume;
Filling := TankV - Fuel;
end;
var
MyCar: TCar;
{ Filling )
MyCar.TankV := 100;
Writeln(MyCar.Filling(60)); { 40}
, Filling
TCar (
TCar.TankV, TankV, TCar.Fuel, Fuel).
, TankV Fuel ,
Filling, TCar.
, "" . ,
, . , TCar
TSedan (. 12.1) - IsFuel, , 12.2.
12.2.
type
TCar = Object
function isFuel: boolean;
end;
TSedan = Object(TCar)
function IsFuel: integer;
end;
11.2
function TSedan.IsFuel:
begin
IsFuel := Fuel/-
109
integer;
end;
, , ,
True. , TSedan, . , IsFuel
:
var
MyCar: TSedan;
Writeln('B ',MyCar.IsFuel,' ');
if TCar(MyCar).IsFuel"
then Writeln(' ')
else Writeln(' ');
,
IsFuel, .
. , , TSedan (. 12.2)
Filling, , 12.3.
12.3.
function TSedan.Filling(Volume, Limit: b y t e ) : byte;
begin
if Fuel > Limit then
begin
Writeln(' ');
Filling := TankV - Fuel;
end else TCar.Filling(Volume) ;
end;
Limit , . , Filling
"" .
, , . , , , "" . ,
( )
, , . , ,
. , ,
.
virtual:
110
12.
, ,
, ,
.
, , .
, ,
. .
,
.
, .
procedure constructor.
,
. , . , , , , .
, (. 12.2) , 12.4.
12.4.
type
= Object
constructor I n i t ( t v , f : b y t e ) ;
end;
constructor T C a r . I n i t ( t v , f : byte);
begin
TankV := tv;
Fuel := f;
end;
, . ,
. :
var
111
Your Car:
YourCar.Init(80, 80);
,
. ,
.
, .
TSedan.IsFuel TSedan.Fuel. .
.
, . Pascal . , .
, public . ,
, private
, :
type
= Object
Fieldl: integer;
procedure Prod;
private
Fields: string;
procedure Proc2;
public
Field3: real;
procedure Procl;
end;
{ }
{ }
{ }
{ }
{ }
{ }
,
. New:
var
:
New(TCar);
New , , ,
.
,
, :
112
12.
.Color := ''
PA.Init(100,100);
Pascal
New , :
[ New(P, Init(100,100)
, , New New, . , New, , :
type
= ;
var
: ;
:= New(Pear);
,
Dispose:
Dispose(P);
, . Dispose .
Pascal , , procedure Destructor. ,
. .
type
TCar = Object
destructor Done;
end;
, , . , . ,
,
.
,
I Dispose (, Done) ;
^
.
, ,
, destructor.
, (, TSedan)
"" , .
113
, , .
. ( 2, 16, 8). . ,
, ,
. ,
.
.
,
DecTo. DecTo
DecToBin (, ), DecToHex (
) DecToOct ( ),
, . Trans ,
DecTo.
Turbo Pascal ,
TransTo.pas 12.5, File | Open (<F3>).
12.5. TransTo. pas
program TransTo;
uses Crt;
type
PDecTo = ADecTo;
DecTo = Object
constructor Init(s: string);
function Trans(Num: word): string; virtual;
private
Symbols: string;
Base: byte;
end;
PDecToBin = "DecToBin;
DecToBin = Object(DecTo)
constructor Ihit;
end;
114
12.
12.5
PDecToHex = ADecToHex;
DecToHex = Object (,DecTo)
constructor Init;
end;
PDecToOct = ADecToOct;
DecToOct = Object(DecTo)
constructor Init;
end;
constructor DecTo.Init(s: string);
begin
Symbols := s;
Base := Length(s);
end;
constructor DecToBin.Init;
begin
inherited Init('01');
end;
constructor DecToHex.Init;
begin
inherited Init('0123456789ABCDEF1);
end;
constructor DecToOpt.Init;
begin
inherited Init ('01234567');
end;
function DecTo.Trans(Num: word): string;
var
i: integer;
s: string;
begin
11.
S .
~
'
,
while Num >= Base do
begin
s := copy(Symbols,(Num mod Base)+!,!) + s;
Num := Num div Base;
end;
Trans := copy(Symbols,Num+1,1) + s;
end;
var ,
P: PDecTo;
DecN: word;
begin
ClrScr;
Write(' : ' ) ;
Readln(DecN);
P := New(PDecToBin,Init);
Writeln(' ',
DecN, ' = ', .Trans(DecN));
115
12.5
Dispose();
:= New(PDecToHex,init);
Writeln('B
DecN, ' = ', .Trans(DecN));
Dispose(P);
P := New(PDecToOct,Init);
Writeln('B ',
DecN, ' = ', .Trans(DecN));
Dispose(P);
end.
DecTo.Trans. Init
,
.
Symbols , DecTo, (
Symbols) Base.
, DecTo,
, New.
, , ,
DecTo, New, .
, . ""
*
*^*
11
WWWiDtASOFt,
JUNIOR.COM,UA
.JUNIOR,CQMH
Ill
, . , . 13, 14 .
,
Crt. tpu Graph.tpu.
15.
16 , , 17
.
Turbo Vision,
- .
13
Turbo Pascal
1. , Compile | Compile <Alt+F9>. ,
Run | Run <Ctrl+F9>
.
, Turbo Pascal , .
, Compile | Information ,
,
. Compile
, .
, Turbo Pascal,
MS-DOS. Turbo Pascal.
, (, 7
{$F} {$L}).
, . , , , $.
.
-. "+" "", (, {+} {$F-}).
-. .
.
.
-
- . ,
.
.
{$}
. {$+}. . {$+} , -
119
{$}
. {$-}.
. {$+} , . ,
, ,
and or ( ).
{$-}, ,
.
{$D}
. {$0+}. . .
. {$D-},
Turbo
Pascal . .tpu, . .
{$}
. {$+}.
,
80x87. {$N} ( ).
{$F}
. {$F-}. . , {$F+}, (far). , .
{$1}
. {$!+}. -.
{$!+}, - , . {$!-}, lOResult.
{$L}
. {$L+}. .
,
. {$L+}
, -
120
13.
Turbo Pascal . ,
..
{$N}
. {$N-}. . - {$N-},
.
{$N+} 80x87.
: Single, Double, Extended .
{$N+, $E+}, 80x87. , , 80x87 .
{$N+, $E-}, ,
80x87.
{$}
. {$0-}. .
, .
.
. ,
.
{$+}, .
{$}
. {$-}. - string.
{$+}, - string .
,
,
.
{$0}
. {$Q-}. . {$Q+},
. {$Q+}
,
.
121
{$R}
. {$R-}. .
{$R+},
, .
{$8}
. {$3+}. . ,
.
" , ".
{$3+},
.
, , . {$3-},
.
{$}
. {$-}. , @.
{$-}, @ . @ {$+}, , , .
{$V}
. {$V+}. , -. {$V+}, . {$V-},
,
.
{$}
. {$+}. Turbo Pascal.
{$+}, .
, . {$+}
, System. /
{$+} PChar.
{$}
. {$Y+}. .
122
13.
. {$Y+}
, . .
. {$Y+} ,
{$D+} {$L+}.
-
Compiler Options (. 13.1), Options | Compiler.
. 13.1.
;
.
:
."
'
lags allowed
[3 86 Instructions
Syntax options
[X J
Sxjl|?-
Numeric processing
[ 1 887/80287
[XI nulation
Cortditio al defines
I
. 13.1. Compiler Options
13.1. Compiler Options
Compiler
Compiler
Options
Options
Word Align Data
Overlays allowed
{$}
{$0}
Complete boolean eval
Open parameters
{$}
{$P}
Overflow checking
Debug information
{$0}
{$Q}
Force far calls
Range checking
{$F}
{$R}
Emulation
Stack checking
{$}
{?S}
286 instructions
Typed @ operator
{$G}
{$T}
I/O checking
Strict var-strings
{$V}
{$1}
Local symbols
Extended syntax
{$L}
{$X}
8087/80287
{$N}
-
- .
-, .
, . .
123
{$}
. .
, . (),
. .
MOVEABLE.
.
FIXED.
.
PRELOAD. .
DEMANDLOAD. .
PERMANENT. .
DISCRDABLE. , , .
{$} :
| {$ MOVEABLE DEMANDLOAD DISCARDABLE)
{$D}
.
. . :
[ ($D My program}
{$!}
.
. .pas. :
| {$! InFilel.pas}
,
Turbo Pascal , , Include Directories Directories (. . 1.4).
, program
unit. (, ),
, {$ I}.
{$!_}
. , external, , .
. ob j. :
| procedure SetMode(Mode: W o r d ) ; external; {$L CURSOR.OBJ}
,
Turbo Pascal , , Object Directories Directories (. . 1.4).
124
13.
{$}
. , " ( ., .ovr). :
[ ($0 Unitl.pas Unit2.pas}
\
uses.
, .ovr, - {$0+}.
, . if.
{$DEFINE}. . , .
{$IFDEF}. , .
{$IFNDEF}. , .
{$ELSE}. , else if-else.
{$ENDIF}. ,
.
{$UNDEF}. .
. Turbo Pascal , MultiLan.pas
13.1, ,
File | Open (<F3>).
13.1. Multilan.pas
program MultiLan;
begin
{$DEFINE R};
{$IFDEF R}
Writeln(' ');
{$ELSE}
{$IFDEF U}
Writeln(' ! ');
{$ELSE}
Writeln('The English is selected');
{$ENDIF}
{$ENDIF}
end.
.
" ". ,
{$DEFINE} , R.
MS-DOS
125
{$DEFINE 0} . , . {$DEFINE} , .
MS-DOS
,
Turbo Pascal, MS-DOS. - tpc. exe, ,
Turbo Pascal turbo. exe. Turbo Pascal ,
tpc. exe. MS-DOS tpc. Turbo
Pascal (. 13.2).
:M_BOOKS48387\TP7.8SBIN>tpc.exe
Turbo Pascal Version 7.8 Copyright (c) 1983,92 Borland International
Syntax: TPC [options] filename [options]
-B = Build all units
-L = Link buffer on disk
-D<syms> = Define conditionals
-M = Make m o d i f i e d units
-E<path> = EXE/TPU directories
-0<path> = Object directories
-F<seg>:<ofs> = Find error
-Q = Quiet compile
-GD = Detailed map f i l e
-T<path> = TPL/CFG directory
-GP = Hap f i l e uith publics
-U<path> = Unit directories
-GS = Map f i l e uith segments
-V = Debug information in EXE
-Kpath> = Include directories
-$<dir> = Compiler directive
Compiler suitches: -$<letter><state>
(defaults are shown belou)
A+ Uord alignment
1+ I/O error checking
R- Range checking
B Full boolean eual
L+ Local debug symbols S+ Stack checking
D+ Debug information
N- 88x87 instructions
T- Typed pointers
E+ 88x87 emulation
0- Overlays alloued
V+ Strict uar-strings
F- Force FAR calls
P- Open string params
X+ Extended syntax
G- 88286 instructions
Q- O v e r f l o w checking
Memory sizes'. -$M<stack>,<heapmin>, <heapmax> (default: 16384,8,655368)
E:41_BOOKS\83874TP7.8IM>
ILeft
ZRight 3Uieu.. 4 E d i t . . SComp
6DeComp 7Find
~-
. , , E^XpOl.pas,
. . : \books.
MS-DOS:
tpc e:\p01.pas -Ee:\books -$B+
.__
'
- ,
$ .
tpc. exe . 13.2.
126
13.
13.2. tpc.
-D
. !
. ,
MultiLan ( 13.1)
{$ DEFINE}, MS-DOS:
| tpc MultiLan. pas -DR
-
-I
-
-
-V
_
. ,
. . tpu
, { $ I }
.
- . :
-$+ -$-
Turbo Pascal
,
Turbo Pascal, {$D+} {$L+}.
, ,
.
.
, Options | Debugger,
(.
13.3) Integrated
()
.
. 13.3. Debugger
, Run, . 13.3.
13.3.
Run
<Ctrl+F9>
( ),
Turbo Pascal
13.3
Step over
<F8>
Trace into
<F7>
Go to cursor
<F4>
127
, .
, .
<Ctrl+F9>,
, <F8> <F7>, .
.
1. Debug | Add breakpoint
Add Breakpoint (. 13.4).
2. Toggle
breakpoint.
3. <Ctrl+F8>.
ass count
lie
?
\UORK\BOOKS \COMPU ERST PSflPPS
ine number
128
13.
Condition
, TransTo, (. 12.5).
TransTo .pas Turbo Pascal.
70 ( : = New (PDecToBin, Init) ;).
Debug | Add breakpoint.
Add breakpoint,
Condition DecN,> 9 (. 13.5).
,
, DecN
.
onditxon
DecN > 9
ass count
COMPlJTER\TP\flPPSMRflNSTO.PftS
ine number
. 13.5.
TransTo DecN 10. , ,
DecN , .
TransTo , DecN 9. ,
(. 13.6).
. 13.6. ,
- .
<F8>, . <Ctrl+F2>, . <Ctrl+F9>.
,
Colors,
Options | Environment | Colors.
Turbo Pascal
129
,
Pascal Breakpoints (.
Debug | Breakpoints.
<Ctrl+F8>.
Turbo
13.7), -
. 13.7. Breakpoints
( Edit),
( Delete), ( View),
( Clear all).
Edit Breakpoint
(. 13.8).
ondition
DecN > 9
ass count
<OMPUTER\TPSflPPS\TKflNSTO.PflS
ine number
;
"
;_:_
Pass count
Pass count WhileEx, 6 (. 6.3).
WhileEx.pas Turbo Pascal.
130
13.
Writeln
, Debug | Add breakpoint.
Pass count Add breakpoint 2. ,
Writeln.
. . - .
<Alt+F5>, . , Writeln , .
,
<Ctrl+F9>.
, Writeln. , WhileEx .
Turbo Pascal :
Breakpoints ( ), . . 13.7; Call Stack ( ); Register
( ); Watches (); Output ( ).
Debug. ( Breakpoints) . 13.4.
13.4. Turbo Pascal
Call stack
.
. ,
Call stack :
SortABC(False)
,
SortABC,
Register
. 15,
Watches
. -
Watches Turbo
Pascal, - <Ctrl+F7>, Add Watch .
Add Watch,
.
Add Watch
,
Turbo Pascal
131
13.4
Output
, Turbo Pascal
,
Turbo Pascal.
.
Evaluate and Modify.
Debug | Evaluiate/mouify, <Ctrl+F4>
.
Evaluate and Modify Evaluate,
Result , Expression. , Expression,
New value Modify.
14
.
,
64 . , .
64 . 7
,
uses. , , .
, , , .
, Pascal,
, program unit. ,
,
. ,
Graph * , . ,
, ,
.
.pas, .tpu. , program, , unit.
- ,
, uses, :
program Progl;
uses Unit!; {
,
Unitl.pas,
Unit I. tpu}
unit Unitl;
uses Unit2; { Unitl Unit2}
uses , . tpu ,
133
:
unit Unitl; { }
interface
{ }
implementation
{ )
begin
{ }
end.
, interface, , .
, , , . ,
,
.
, implementation, , .
, . , ()
, .
, implementation
begin end ,
, .
, uses. , begin
.
. Turbo Pascal , Unitl .pas
14.1, File | Open (<F3>).
14.1. Dnitl.pas
unit Unitl;
interface
function Sum(a,b: integer): longint;
implementation
function Sum(a,b: integer): longint;
begin
Sum := a + b;
end;
134
14.
Unitl Sum,
.
implementation. Avg,
. ,
begin , .
Turbo Pascal ,
Unitl.
Units .pas 14.2,
File | Open (<F3>).
14.2. Units .pas
program Units; *"
uses Unitl;
var
x, y: integer;
begin
x := 10;
:= 5;
Writelnfx + = ', Sum(x,y));
end.
uses Unitl, Sum, . , , . Units :
Writelnf'x + = ', Sum(x,y));
Writeln(' + =
end.
.
Avg(x,y));
.
"Unknown identifier" (" ") Avg. , Unitl
, , .
Unitl Avg, .
Unit2.pas 14.3, File | Open (<F3>).
14,3. Unit2. pas
unit Unit2;
interface
uses Unitl;
function Sum3(a,b,c: integer): longint;
implementation
function Sum3(a,b,c: integer): longint;
begin
Sum3 := Sum(Sum(a,b),c);
end;
end.
135
, . Sum, Unitl.
, Sum,
Unitl uses ( ).
(. 14.2) :
program Units;
uses Unitl, Unit2;
WritelnCx + + = ', Sum3(x,y,y)) ;
end.
, , (Units.pas)
Unit2, .
, Unitl
Sum3, Unit2. , , Unitl uses. ,
:
unit Unitl;
interface
uses Unit2;
TO
"Circular unit reference (Unitl)" (" "). ,
(
), Pascal .
Unitl Unit2 , :
unit Unitl;
interface
function Sum(a,b: integer): longint;
function Avg(a,b: integer): real;
implementation
uses Unit2;
, Unitl
Sum3, Unit2, ,
14.4.
14.4.
,
unit Unitl;
interface
function Sum(a,b: integer): longint;
function Avg(a,b: integer): real;
function Avg3(a,b,c: integer): real;
136 14.
14.4
implementation
uses Unit2;
function Avg3(a,b,c; integer): real;
begin
Avg3 := Sum3(a,b,c)/3;
end;
Units:
program 'Units;
Writeln(' + + = ', Avg3(,,));
end;
,
. ,
, .
Turbo Pascal ,
IsFile.pas 14.5,
File | Open (<F3>).
14.5. IsFile.pas
unit IsFile;
interface
function FileExists(FName
implementation
function FileExists(FName
string): boolean;
string): boolean;
var
F: Text;
isError: boolean;
begin
As s ign(F,Fname);
{$!-}
Reset(F);
{$!+>
.
FileExists, uses IsFile.
Compile | Compile, a
Compile | Destination. Compile , : Make, Build, Primary File Clear
primary file, Information,
137
15
Pascal : .
, , . . , . "".
, ().
, ,
.. , , . ;
.
, ,
Crt. ,
,
uses.
Crt AssignCrt. Assign,
, , . ,
. Turbo Pascal , FToScr.pas 15.1,
File | Open (<F3>).
15.1. FToScr. pas
program FToScr;
uses Crt, IsFile;
var
FDisk, FScr:. Text;
s,FName: string;
begin
ClrScr; { }
repeat
Write (' : ')/'
139
15.1
Readln(FName);
until FileExists(FName); { FileExists
IsFile}
Assign(FDisk,FName);
Reset(FDisk);
AssignCrt(FScr); { }
Rewrite(FScr);
while not EOF(FDisk) do
begin
Readln(FDisk,s) ;
Writeln(FScr,s);
end;
Close(FScr);
Close(FDisk);
end.
: Crt IsFile. IsFile
FileExists, . ClrScr, Crt.
( ). , ,
while ,
.
. 15.1.
Crt
TextMode, 4,
. , 80x25
TextMode(C080);
TextMode(3);
, Crt LastMode, .
/
15.1.
Crt
BW40
040
BW80
080
40x25, -
40x25,
80x25, -
80x25,
16
16
16
16
140
15.
15.1
Crt
Mono
256
Font8x8
80x25, -
43 50 EGA/VGA
3
16
,
, .
$ , $800.
.
( ASCII), . . 15.2.
15.2.
0
1
2
3
4
5
6
7
, (
3), 16 (24) .
( 4 6), 8 (23)
. ,
.
Crt . . 15.3.
15.3. Crt
( )
Black
Blue
Green
Cyan
Red
Magenta
Brown
LightGray
DarkGray
0 (0000)
1 (0001)
2(0010)
3(0011)
4(0100)
5(0101)
6(0110)
7(0111)
8 (1000)
-
-
15.3
( )
LightBlue
9(1001)
LightGreen
10(1010)
LightCyan
11 (1011)
LightRed
12(1100)
LightMagenta'
13(1101)
Yellow
14(1110)
White
15(1111)
141
-
-
-
-
-
Blink ,
128 (10000000).
TextColor, TextBackGround. , . :
TextColor(White); { }
TextBackGround(Blue); { }
Blink. ,
TextColor (White+Blink). White+Blink
00001111 + 1000000 = 10001111. , , .
Crt TextAttr.
TextColor TextBackGround. , , :
TextAttr := $9F; {10011111}
TextAttr := White + Blink + (Blue shl 4);
. ,
White + Blink 10001111. Blue
0001. , ,
4 .
Blue shl 4 00010000 (. 15.1).
10001111 + 00010000 =
10011111 ( 9F).
00001111 White
10000000 Blink
00000001 Blue
[0000
10001111White+Blink
00010000 Blue shl 4
10001111White+Blink
100111119F
. 15.1.
,
ASCII .
Turbo Pascal ,
ClrChars.pas 15.2,
File | Open (<F3>).
142
15.
c, StartAttr: byte;
begin
ClrScr;
StartAttr := TextAttr;
( )
for := 33 to 255 do
begin
if (c mod 16) = 0 then WritelnC');
TextAttr := c;
Write(Chr(c));
end;
TextAttr := StartAttr; { }
end.
ClrChars . 15.2.
Crt
: LowVideo, NormVideo
HighVideo. LowVideo ,
. NormVideo
.
HighVideo . ,
LowVideo,
NormVideo
HighVideo .
feeGeTf 9 = Q - -
. 15.2.
ClrChars
Crt ,
.
Window . Windows
: XI, Y1 , 2, 2
. :
Windowfl,1,80,25); { }
Windowd, 1, 8, 25) ; { }
, . ,
, .
Window Crt word WindMin WindMax. WindMin , WindMax
. X ,
Y . Lo Hi:
143
X := Lo(WindMin);
Y := Hi(WindMin);
, WindMin WindMax 1, 0.
,
Crt, " ". Turbo Pascal , Gatherer.pas ,
15.3, File | Open (<F3>).
15.3. Gatherer .pas
program Gatherer;
uses Crt;
var
CurX, CurY, CInLine, StartAttr, i,j: byte;
Total,Gathered: integer;
'AField: array[1..22,1..80] of char;
PressedKey: char;
procedure ShowCount; {
}
begin
Window(1,1,80,3);
TextColor(Yellow);
GotoXY(40,l);
Write(' : ',Gathered,' ',Total);
end;
^
procedure DrawPos; { }
var
CurChar: Char;
begin
{ }
Window(l,3,80,25);
TextBackGround(Black);
TextColor(LightRed);
GotoXY(CurX,CurY);
Write ('0' )';
if AField[CurY,CurX] = '*' then {
""...}
begin
Inc(Gathered); { 1}
AField[CurY,CurX] := ' '; { ""
}
end;
ShowCount; { ""}
end;
{ }
procedure DrawStatus(FColor, BColor: byte; Si string);
begin
Window(1,25,80, 25);
144
15.
15.3
TextBackGround (BColor ) ;
TextColor (FColor) ;
ClrScr;
GotoXY(l,25) ;
Write (s) ;
end;
begin
ClrScr;
StartAttr := TextAttr; { }
( }
Window (1,1, 80, 3) ;
TextBackGround (Black) ; { }
{ }
TextColor (White) ;
ClrScr; { }
Write ( ' " " ' ) ;
ShowCount; { }
GotoXY(l,2) ;
for i := 1 to 80 do Write ('-') ;
{ }
Window (1,3, 80, 25) ;
TextBackGround (Black) ;
TextColor (LightGreen) ;
ClrScr; { }
GotoXY(l,l) ;
Randomize; { }
{ "")
for i := 3 to 24 do
begin
InsLine; { }
CInLine := Random(9) + 1; { ""
- 0 10}
CurX := 1;
CurY := 1;
for j : = 1 to CInLine do { ""}
begin
CurX := CurX + Random(8) + 1;
if CurX > 80 then CurX := 79; { }
GotoXY(CurX,l) ;
Write ('*');
AField[25-i,CurX] := '*'; { "" }
{ "" }
while (CurX mod 8) > 0 do Inc(CurX);
end;
Inc (Total, CInLine) ; { ""}
end;
{ }
DrawStatus (Blue, LightGray,
' - Esc.' +
' - . ' ) ;
{ }
GotoXY(l,l) ;
CurX := 1;
145
15.3
CurY := 1;
repeat
DrawPos; { }
PressedKey := ReadKey; { }
Window(1,3,80,25);
if Ord(PressedKey) then break
{ Esc, }
else
begin
{ }
GotoXY(CurX,CurY);
TextBackGround(Black);
Write(' ');
{ }
case Ord(PressedKey) of
72: if CurY > 1 then Dec(CurY); { }
75: if CurX > 1 then Dec(CurX); { }
77: if CurX < 80 then Inc(CurX); { }
80: if CurY < 22 then Inc(CurY); { }
end;
end;
until Gathered = Total;
DrawStatus(White+Blink,Red,' !');
ReadKey;
TextAttr := StartAttr; { }
Window(l,l,80,25);
ClrScr;
end.
Gatherer . 15.3.
" "
: 13 89_
*
*
4t
- Esc. - .
. 15.3. " "
, .
. CurX CurY X
146
15.
147
X . -,
"" "" .
( ) DrawStatus.
: , ,
.
.
(1,1). repeat
DrawPos " ". . , , ,
. " ", CurX ""
( , " " -
). "" AField.,
"*" ( ""), , ^
( - , "*").
DrawPos ShowCount.
"" ,
.
ReadKey, Crt.
Char, . PressedKey, if
. <Esc> ( 27),
break repeat, .
- , "" , , , , CurX CurY.
CurX CurY . " " , ..
<Esc>, , "" .
" !",
.
, Crt, .
Graph. ,
. ,
(),
.
, , -
148
15.
.
Graph ,
. Turbo Pascal
BGI .bgi. ,
, Pascal
, .
( ), ,
. .
,
. ,
.
, . , , , . , " "
. , , .
. 15.4.
15.4.
ATT . BGI
AT&T 6300
ATT400CO
320x200
320x200
3
3
3
2
2
3
3
3
3
2
3
3
3
3
2
2
16
16
16
4
ATT400C1
ATT400C2
ATT400MED
ATT400HI
CGA.BGI
IBM CGA
IBM MCGA
CGACO
640x400
320x200
CGAC1
320x200
CGAC2
320x200
CGAC3
320x200
CGAHI
640x200
MCGACO
320x200
MCGAC1
320x200
320x200
MCGAC2
EGAVGA.BGI
IBM EGA
320x200
640x200
MCGAC3
MCGAMED
320x200
MCGAHi
EGALO
640x480
EGAHI
EGA64LO
EGA64HI
EGAMONOHI
640x350
640x200
640x200
640x200
640x350
720x348
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
2
1
1
: 64/ 1
256
2
149
15.4
EGAVGA.BGI
IBM VGA
VGALO
VGAMED
VGAHI
Hercules
IBM 8514
HERCMONOHI
IBM8514.BGI
PC3270.BGI
IBM 3270 PC
PC3270HI
HERC.BGI
IBM8514LO
640x200
640x350
640x480
720x348
640x480
1024x768
720x350
16
16
16
2
1
256
256
Graph
InitGraph, : , .bgi. ,
, . 15.5.
15.5. ,
CurrentDriver
Detect
-128
0
1
CGA
I
MCGA
I
-'
MCGA
EGA
2
3
EGA64
EGAMONO
IBM8514
5
6
HercMono
ATT400 ()
CGACO
CGAC1
CGAC2
CGAC3
CGAHI
MCGACO
MCGAC1
MCGAC2
MCGAC3
MCGAMED
MCGAHI
EGALO
EGAHI
EGA64LO
EGA64HI
EGAMONOHI
IBM8514LO
IBM8514HI
HERCMONOHI
400
4001
4002 -.
0
1
2
3
4
0
1
2
3
4
5
0
1
0
1
0
0
1
0
0
1
2
150
15.
15.5
400 ()
VGA
3270
10
ATT400MED
ATT400HI
VGALO
VGAMED
VGAHI
PC3270HI
4
5
0
1
2
0
, 16- VGAHI
640x480 InitGraph:'
InitGraph(VGA, VGAHI, M:\tp\bin\bgi');
InitGraphQ, 2, ' d : \ t p \ b i n \ b g i ' ) ;
(' '),
.
Detect (0)
.
, .
Turbo Pascal ,
Graph_01.pas 15.4, File | Open (<F3>).
15.4. Graph_01 .pas
program Graph_01;
uses Graph, Crt;
{
var
DriverVar, ModeVar, ErrorCode: integer;
DriverName, ModeName: string;
begin
DriverVar := Detect;
{ )
InitGraph(DriverVar,ModeVar,'\tp\bgi 1 );
{ }
ErrorCode := GraphResult;
if ErrorCode <> grOK then
begin
Writeln(' ' +
': ', ErrorCode);
Writeln(GraphErrorMsg(ErrorCode)) ;
Halt(l); { }
end;
DriverName := GetDriverName; { )
ModeName := GetModeName(ModeVar); { )
RestoreCRTMode; ( }
Writeln(' ;');
Writeln(' ', DriverName,
1
( ' , DriverVar, ' ) ' ) ;
Writeln(' ', ModeName, ' , ModeVar, ' ) ' ) ;
ReadKey; { }
SetGraphMode(ModeVar); { }
OutTextXY(10,10,' ');
151
15.4
OutTextXY(10,30, ' ' + DriverName);
OutTextXY(10,50,' ' + MpdeName);
ReadKey;
CloseGraph; { } *
end.
, , \tp\bgi.
, .
, uses
Graph Crt. Crt
ReadKey, - .
GraphResult, 0, , 14 .1, . Graph (. 15.6).
15.6.
grOK
0
grNoInitGraph
-1
grNotDetected
-2
grFileNotFound
-3
grlnvalidDriver
-4
grNoLoadMem
-5
grNoScanMem
-6
grNoFloodMem
-7
grFontNot Found
-8
grNoFontMem
-9
grlnvalidMode
-10
grError
-11
grIOerror
-12
-
grlnvalidFont
-13
gr Inva 1 idFontNum -14
GraphErrorMsg,
Halt. ,
Graph: Get DriverName GetModeName. , . , ,
Writeln, OutTextXY.
152
15.
RestoreCRTMode.
. SetGraphMode,
, ,
. , Write In ReadKey.
OutTextXY,
Graph.
X Y ( ),
.
CloseGraph.
,
. , . .
, .
SetViewPort.
, , 100x100 ,
:
| SetViewPort(,,100,100,True);
SetViewPort , . True,
. GetViewSettings, -
ViewPortType, :
type
ViewPortType = record
xl, yl, x2, y2: integer;
Clip: boolean;
end;
ClearDevice, .
ClearViewPort.
, , , , . ' SetActivePage, SetVisualPage.
,
. ,
. CGA
(. . 15.3).
EGA/VGA , CGA, .
, 64 (26) 16 (24).
153
. 15.7 16
EGA/VGA, .
15.7. 16 EGA/VGA
( )
EGABlack
0 (000000)
EGABlue
1 (000001)
EGAGreen
2(000010)
EGACyan
3(000011)
EGARed
4(C00100)
EGAMagenta
5(000101)
EGABrown
6(000110)
^EGALightGray
-
7(000111)
EGADarkGray
56(111000)
-
EGALightBlue
-
57(111001)
EGALightGreen
-
58(111010)
EGALightCyan
-
59(111011)
EGALightRed
-
60(111100)
EGALightMagenta
-
61 (111101.)
EGAYellow
62(111110)
EGAWhite
63(111111)
,
, SetColor.
SetBkColor.
,
,
.
EGA/VGA ( 16 EGA, EGA64 VGA)
SetPalette SetAllPalette. SetPalette . ,
, :
SetPalette(0,EGAWhite);
SetPalette(63,EGABlack) ;
SetAllPalette
. , ,
PaletteType:
type
PaletteType = record
Size: byte;
Colors: array[0..MaxColors] of shortint;
end;
Size , Colors . , , .
154
15.
Turbo Pascal ,
Graph_03.pas ,
15.6, File | Open (<F3>).
15.6. Graph_03.pas
program Graph_03;
uses Graph, Crt;
var
i, j, DriverVar, ModeVar, ErrorCode: integer;
PressedKey: Char;
{ }
procedure ShowPolygon;
var
PolyPoints: arra'y[l. .10] of PointType;
i: byte;
begin
{ }
PolyPoints[1].X := 300;
PolyPoints[1].Y := 50;
PolyPoints[10].X := 300; { }
PolyPoints[10].Y := 50; { }
for i := 2 to 5 do begin
PolyPoints[i] .X := PolyPoints[i-1] X + Random(50);
PolyPoints[i].Y := PolyPoints[i-1].Y + Random(SO);
end;
for i := 6 to 9 do begin,
PolyPoints[i].X := PolyPoints[i-1].X - Random(50);
PolyPoints[i]
Random(50);
end;
DrawPoly(10,PolyPoints); { }
ReadKey;
FillPoly(7,PolyPoints); {
7 }
end;
begin
DriverVar := EGA; { 16- EGA}
ModeVar := EGAHI; { 640x350}
InitGraph(DriverVar,ModeVar,'\tp\bgi');
ErrorCode := GraphResult;
if ErrorCode <> grOK then
begin
Writeln(GraphErrorMsg(ErrorCode)) ;
Halt(l);
end;
Randomize; { }
{ }
OutTextXY(10,10,' ');
for i := 0 to 15 do PutPixel(i*10+10, 30, i);
ReadKey;
ClearDevice; { }
{ }
1
OutTextXY(10,10,' );
^ }
SetViewPort(10,30,GetMaxX-10,GetMaxY-10,True);
155
156
15.
15.6
for i := 0 to 15 do
begin
SetColor(i); { }
for j := 0 to 4 do
begin
SetLineStyle(j,0,1); { )
Line(Random(GetMaxX div 2),Random(GetmaxY div 2),
Random(GetMaxX),Random(GetMaxY));
end;
end;
ReadKey;
ClearDevice;
GraphDefaults; { }
OutTextXY(10,10,' ');
OutTextXY(10,30,' ');
MoveTo(10,50); { }
SetColor(White);
SetLineStyle(SolidLn, 0, 3) ;
{ ,
}
repeat
PressedKey := Rea'dKey;
{ ,
10 }
case Ord(PressedKey) of
72: LineTo(GetX, GetY - 10); { }
75: LineTo(GetX - 10, GetY); { }
77: LineTo(GetX +,10, GetY); { }
80: LineTo(GetX, GetY + 10); { }
end;
until not (Ord(PressedKey) in [0,72,75,77,80]);
t,
ClearDevice;
{ )
OutTextXY(10,10,' ');
SetLineStyle(SolidLn,0,1);
OutTextXY(10,60,'');
Arc(50,80,0,100,50);
OutTextXY(150,60,'');
SetFillStyle(HatchFill,Green); { }
Bar(200,40,220,80);
OutTextXY(270,60,' ');
SetFillStyle(SolidFill,Red);
Bar3D(410,40,430,80,2,TopOn);
OutTextXY(10,100,'');
Circle(50,150,50);
OutTextXY(150,100,'');
Ellipse(200,150,0,360,20,40);
OutTextXY(270,100,' ');
SetFillStyle(XHatchFill,Blue);
FillEllipse(340,150,20,40);
OutTextXY(450,100,'');
157
15.6
Rectangle(470,110,530,160);
OutTextXY(10,210,'');
SetFillStyle(SolidFill,Yellow);
PieSlice(50,260,30,100,50);
OutTextXY(150,210,' ');
Sector(200,270,0,120,20,50);
ReadKey;
SetFillStyle(SolidFill,LightGray) ;
FloodFill(50,150,White); { }
Delay(2000);
{ 2 }
FloodFill(200,150,White); { }
Delay(2000);
FloodFill(500,150,White); { }
ReadKey;
ClearDevice;
OutTextXY(10,10,' ') ;
ShowPolygon;
ReadKey;
ClearDevice;
{ )
OutTextXY(10,10,' ');
SetTextStyle(TriplexFont,VertDir, 1) ;
OutTextXY(10,50,' 1');
SetTextStyle(TriplexFont,HorizDir,3);
OutTextXY(10,30,' 1);
OutTextXY(200,100,' ');
Rectangle(190, 90, 200 + TextWidth(' '),
110 + TextHeight(' '));
SetTextStyle(DefaultFont,HorizDir,3);
{ }
SetTextJustify(CenterText,CenterText);
OutTextXY(200, 200, 'A');
SetTextJustify(CenterText,TopText);
OutTextXY(230, 200, 'A');
SetTextJustify(CenterText,BottomText);
OutTextXY(260, 200, 'A');
SetTextJustify(CenterText,CenterText);
OutTextXY(400, 200, 'B');
SetTextJustify(LeftText,CenterText);
OutTextXY(400, 230, 'B');
SetTextJustify(RightText,CenterText);
OutTextXY(400, 260, 'B');
ReadKey;
CloseGraph;'
end.
Graph_03.pas .
15.4 . 15.5.
, Graph_03 ,
ReadKey. ClearDevice . ,
158
15.
, , .
. 15.5.
Graph 03.pas
. 15.5.
Graph_03. pas
GetMaxX GetMaxY .
GraphDefaults ,
,
SetViewPort.
LineTo Line , ,
, .
159
FloodFill , ,
, ,
. ,
, .
ShowPolygon PointType, (X Y) Integer.
, . , 10 , 10
PointType.
FillPoly .
, ,
, .
SetTextStyle .
DefaultFont', ,
. ,
TriplexFont, Trip.chr.
InstallUserFont. , :
var
Fnt: integer;
...
Fnt := InstallUserFont('MyFont.chr');
SetTextStyle(Fnt, HorizDir, 1);
. 15.4, . , EGAHI 2 . , ,
.
, .
: SetActivePage
SetVisualPage. SetActivePage ,
, .
() , SetVisualPage. , .
Turbo Pascal ,
Graph_04 .pas 15.7,
File | Open (<F3>).
15.7. Graph_04 .pas
program Graph_04;
uses Graph, Crt;
var
CurX, CurY, DriverVar, ModeVar, ErrorCode: integer;
160
15.
15.7
PressedKey: Char;
procedure DrawCircle(X, Y, Color: integer);
begin
SetColor(Color);
SetFillStyle(SolidFill,Color);
FillEllipse(X, Y, 150, 110);
end;
begin
DriverVar := EGA;
ModeVar := EGAHI;
InitGraph(DriverVar,ModeVar,'\tp\bgi');
ErrorCode := GraphResult;
if ErrorCode <> grOK then .
begin
Writeln(GraphErrorMsg(ErrorCode)) ;
Halt(1);
end;
ClearDevice;
CurX := 200;
CurY := 200;
repeat
DrawCircle(CurX, CurY, Red); { }
PressedKey := ReadKey;
DrawCircle(CurX,CurY,GetBkColor); { }
case Ord(PressedKey) of
72: Dec(CurY,10); { }
75: Dec(CurX,10); { }
77: Inc(CurX,10); { }
80: Inc(CurY,10); { }
end;
until not (Ord(PressedKey) in [0,72,75,77,80]);
CloseGraph;
end.
Graph_04 . ,
.
, 15.8.
15.8. Graph_04 .pas
program Graph_04;
uses Graph, Crt;
var
CurPage: byte;
procedure DrawCircle(X, Y, Color: integer);
begin
if Color = GetBkColor
15.7
then FillEllipse(X, Y, 160, 120)
else FillEllipse(X, Y, 150, 110);
end;
begin
161
CurX := 200;
CurY := 200;
CurPage := 0;
SetActivePage(0) ;
repeat
DrawCircle(CurX, CurY, Red); { }
SetVisualPage(CurPage);
PressedKey :=.ReadKey;
CurPage := 1 - CurPage; ( )
SetActivePage(CurPage);
DrawCircle(CurX,CurY,GetBkColor); { }
until not (Ord(PressedKey) in [0,72,75,77,80]);
CloseGraph;
end.
Graph_04 , . ,
, " " .
, DrawCircle, ,
, , 10 .
16
. , , , . Turbo Pascal, , ,
Pascal, 8086 80286. .
.
Pascal .
asm.
assembler.
{$1} ,
external.
asm
asm :
asm
__
_
end;
, ' ";". ,
Pascal.
. :
1
:
,
\
*""
-
- :
[: __ _
.
Pascal,
Label, , "@", Label .
asm
163
,
. Turbo Pascal : LOCK, REP, REPE, REPZ, REPNE, REPNZ,
SEGCS,SEGDS,SEGES,SEGSS.
.
,
8x86 .
. ,
.
, . 16.1.
16.1.
16-
16-
16-
8087
, , , DX
AL, BL, CL, DL
, , , DH
SP, , SI, DI
CS, DS, SS, ES
ST
, Pascal,
, . 16.2.
16.2. ,
BYTE
WORD
DWORD
QWORD
TBYTE
NEAR
1
2
4
8
10
(
, ). :
procedure MyProc;
far;
asm
PUSH CS
' CALL NEAR PTR MyProc;
end;
FAR
, . 16.3.
164
16.
16.3. ,
&
, "&",
,
.
:
&
, ,
[...]
HIGH
. : HIGH
LOW
. : LOW
, , .
: DS : ,
OFFSET
( ) .
: OFFSET
"~
SEG
( ) .
: SEG
TYPE
.
: TYPE
PTR
, , ,
.
: 1/ PTR 2
+, -, *,
/, MOD
SHL,
SHR
NOT, AND, 0
R, XOR
asm
asm, , . Turbo Pascal ,
AsmEx_l .pas 16.1,
File | Open (<F3>).
16.1. AsmEx l.pas
program AsmEx_l;
uses Crt;
var
s: string;
Len: integer;
begin
ClrScr;
Write(' : ');
Readln(s);
Len := Length(s);
asm
assembler
165
16.1
LEA BX,s+l
{ }
MOV CX,Len
{ )
01: MOV ,[]
{ }
CMP ,97
{ ''}
JB @e
{ < '', }
CMP ,127
{ ''}
,
JA @2
{ >= '', - @2}
S0B ,32
{ - 32}
{
JMP @m
}
{ ''}
@2: CMP ,160
{ < '', }
JB @e
{ ''}
CMP , 223
{ >= '', - @3}
JA @3
{ '' '' - 32}
SUB ,32
{
JMP @m
}
{ '' '' - 80}
@3: SOB AH,80
{ }
@m: MOV [BX],AH
{ }
@e: INC BX
{ }
LOOP @1
end;
Writeln(s);
end.
assembler
assembler ,
. ,
. Turbo Pascal ,
AsmEx_2 .pas 16.2,
File | Open (<F3>).
16.2. AsmEx_2. pas
program AsmEx_2;
uses Crt;
var
n: integer;
function Mul2(ri: integer): integer; assembler;
asm
MOV AX,n
SHL AX,1
end;
function Div2(n: integer): integer; "assembler;
asm
MOV AX,n
SHR AX,1
end;
166
16.
16.2
begin
ClrScr;
Write(' : ');
Readln(n);
Writeln(n, ' * 2 = ', Mul2(n));
Writeln(n, ' / 2 = ', Div2(n)) ;
end.
, assembler, .
, Char Boolean
AL ( 1- ), ( 2 ) DX, ( 4- ).
real DX, BX, .
Single, Double, Extended Comp
ST.
DX, .
{$!_}
13, {$L} Pascal ,
. obj.
Pascal external. ,
12 Div2, AsmEx_2 (. 16.2),
(,^ Ops2.obj),
AsmEx_2 , 16.3.
16.3. AsmEx_2 .pas
program AsmEx_2;
uses Crt;
var
n: integer;
{$L Ops2.obj}
function Mul2(n: integer): integer; external;
function Div2(n: integer): integer; external;
begin
ClrScr;
Write(' : ') ;
Readln(n);
Writeln(n, ' * 2 = ', Mul2(n));
Writeln(n, ' / 2 = ', Div2(n));
end.
17
(, ,
, ..) ,
.
(),
.
- BIOS (Basic Input/Output
System), ROM
(Read Only Memory), MSDOS.
. . . 17.1.
17.1.
00
01
02
03
04
05
06
07
08
09
BIOS
BIOS
BIOS
BIOS
BIOS
BIOS
BIOS
BIOS
BIOS
BIOS
BIOS
OF
BIOS
BIOS
BIOS
BIOS
BIOS
10
11
12
13
BIOS
BIOS
BIOS
BIOS
OD
AT .
COM2 COM4
1 COM3
LPT2
LPT1 ,
( )
-
168
17.
17.1
14
15
BIOS
BIOS
16
17
BIOS
BIOS
BIOS
-
AT
BASIC,
,
MS-DOS
,
,
<Ctrl+Break>
,
,18
1C
1D
1
1F
BIOS
BIOS
BIOS
BIOS
BIOS
BIOS
BIOS
20
21
22
MS-DOS
MS-DOS
MS-DOS
23
MS-DOS
24
MS-DOS
25
26
MS-DOS
MS-DOS
MS-DOS
19
1
1
27
, - , .
.
.
Pascal
, Pascal,
.
1. Registers, , Intr,
. Registers, Intr Dos.
2. . INT.
Pascal
169
$05, . Turbo Pascal ,
IntOS.pas 17.1,
File | Open (<F3>).
17.1. IntOS.pas
program IntOS;
uses Crt, Dos;
var
Regs: Registers;
begin
Writeln(' Intr...');
Intr($05,Regs);
Writeln(' ');
ReadKey;
1
Writeln(' INT... );
asm
INT 05H
end;
end.
17.1, Intr, Dos, :
Registers. Dos :
type
Registers = record
case Integer of
0: (AX, BX, CX, Dk, BP, SI, DI, DS, ES, Flags: Word);
1: JAL, AH, DL, DH, CL, CH, DL, DH: Byte);
end;
$05 -
, IntOS Regs .
, . ,
$17 . , . ,
0, $17 ,
DX ( 0). AL. . Turbo Pascal , Intl7 .pas
17.2,
File | Open (<F3>).
17.2. Intl7.pas
program Intl7;
uses Crt, Dos;
var
Regs: Registers;
170 17.
17.2
s: string;
i : byte ;
begin
ClrScr;
Wr.iteln ( '
Readln(s) ;
for i : = 1 to Length (s)
begin
Regs. AH := $00;
Regs.AL := Ord(s[i]);
Regs.DX := $00;
Intr ($17, Regs) ;
" ' -\
'
" . . '
');
do
{AH }
{AL - }
{DX - }
{ }
end;
end.
Intl7 , ( ). (, $17) , . , $17,
, : ( = )
( = 2).
.
BIOS
BIOS $00 $1F.
, , , , . BIOS. .
$10 .
$10 $06.
, ( )
AL. AL 0, . ( 15)
, CL X Y ,
DL DH X Y
( 0).
$10 $02. ( 0) , DL DH.
Turbo Pascal ,
IntlO_l.pas 17.3, . File | Open (<F3>).
BIOS
171
$ 10 $09 $. $09 $
, .
AL,
, ( $09) BL, .
$13. AL
: 0 -
172
17.
; 1 ; 2 , , ; 3 , , . , , ,
DX .
'
begin
ClrScr;
{ }
> for i := 49 to 57 do
begin
SetCursor(0,i-49) ;
:= i - 48; { }
:: i - 42; { }
asm
MOV AH,09H { }
MOV AL,i
{ }
MOV ,
{ }
MOV BL,a
MOV CX,c
INT 10H
end;
end;
{ }
s := ' $13';
for i := 0 to 24 do
begin
BIOS
173
17.4
:= i+l;
asm
MOV
MOV
MOV
MOV
LEA
MOV
MOV
MOV
INT
{ }
{ }
{ }
{ }
,13
AL,1
BH,0
BL,7
BP,[s+1]
CX,c
DL,10
DH,i
10H
{ s}
{ }
{ X}
{ Y}
end;
end;
end.
22
4444
5S555
666666
7777777
88888888
999999999
-:
$
1
13_
. 17.1. Intl0_2
$10.
$01 . 0 13 EGA 0 7 .
$03 .
DH, DL.
174
17.
$08 .
AL, .
BIOS
175
17.5
MOV AH,01H
MOV ,
{ }
{ -
}
{ }
MOV CL,07
INT 10H
{ }
MOV ,
MOV ,00
INT 10H
MOV x,DL
MOV ,DH
end;
{
}
TextAttr := a;
SetCursor(20,0);
Writeln(' : =',:2,'/=',:2);
SetCursor(,); { }
PressedKey := ReadKey; { }
{ }
case PressedKey of
#72: if y>0 then Dec(y); { )
#75: if x>0 then Dec(x); { }
#77: if x<14 then Inc(x) { }
#80: if y<7 then Inc(y); { }
end;
until PressedKey = #27;
end.
. 17.2.
SetCursor,
17.3. IntlO_3
,
$10, Crt System.
mi-; 11
: =13/=
''
-I4-1 44 --44
555 55..55
. 17.2. Intl0_3
,
IntlO_3 15
. repeat .
1. ,
, .
176
17.
2. $08 $10 (
) ( ).
3. ,
48 ( "").
4. $01 $10 . ( )
( CL). $07.
$00, ,
$07. , "" , "7" , .
5. $01 $10
( ).
6. TextAtrr
, . . Writeln . ,
.
7. , ,
.
8. <Esc>.
$10: $00 ( ) $
.
, .
$00, AL. ,
16- 80x25 AL=$03, a
16- 320x200 AL=$OD.
$, AL, , DX.
, . Turbo Pascal , IntlO_4.pas 17.6,
File | Open (<F3>).
BIOS
177
17.6
MOV ,00
{ }
MOV ,00
{ )
MOV DX,00
{ }
@1: MOV AH,OCH { }
MOV AL,BL
{ }
INT 10H
INC CX
CMP CX,320
JNE 01
MOV CX,00
INC BL
INC DX
CMP DX,200
JNE @1
end;
{ }
{ 320?}
{ , }
{ , }
( }
{ }
{ 200?}
{ , )
ReadKey;
asm
{ }
MOV ,00
MOV A1,03
{ }
INT 10H
end;
end.
. 17.3.
. 17.3. Intl0_4
BIOS.
$10 ( $OF) .
178
17.
$11 .
$12 .
$13 ( $08)
. Turbo Pascal ,
Int_Qry .pas 17.7,
File | Open (<F3>).
17.7. Int_Qry.pas
program Int_Qry;
uses Crt;
var
rAL,rAH,rBH,rDL: byte;
rAX,rCX: word;
begin
ClrScr;
{ }
asm
MOV AH,OFH
INT 10H
MOV rAL,AL
MOV rAH,AH
MOV rBH,BH
end;
Writeln(' :');
case rAL of
0: Writeln(' (40x25) 16 ');
1: Writeln (.' (40x25) 16 ');
2: WritelnC' (80x25) 16 ');
3: Writeln(' (80x25) 16 ');
4: Writeln(' (320x200) 4 ');
5: Writeln(' (320x200) 4 ');
6: Writeln(' (640x200) 2 ');
7: Writeln(' (80x25) 3 ');
$OD: Writeln(' (320x200) 16 ');
$: Writeln(' (640x200) 16 ');
$OF: Writeln(' (640x350) 3 ');
$10: Writeln(' (640x350) 16 ');
$11: Writeln(' (640x480) 2 ');
$12: Writeln(' (640x480) 16 ' )-;
$13: Writeln(' (640x480) 256 ');
end;
Writeln(' - ',,' ');
Writeln(' - ',);
ReadKey;
{ }
asm
MOV ,11
INT 11H
MOV rAX,AX
end;
BIOS
179
17.7
Writeln(' ' ) ;
Writeln(' :');
if rAX and $01 = 0 then { 1- = 0}
Writeln(' ');
if rAX and $02 = 2 { 2- = 1}
then Writeln(' ')
else Writeln(' ');
Write(' : ' ) ;
case rAX and $OC shr 2 of { 3 4 }
1: Writeln('16');
2: Writeln('32K');
3: Writeln('64 ');
else Writeln('He ');
end;
Write(' : ');
case rAX and $30 shr 4 of { 5 6 )
1: Writeln(' 40x25');
2: Writeln(' 80x25');
3: Writeln('- 80x25');
else
end;
Writeln(' : ',(rAX and $CO) shr 6 + 1); {7,8}
if rAX and $1000 shr 12 = 1 then { 13- )
Writeln(' ');
Writeln(' : ',rAX shr 14); {15,16}
ReadKey;
\ (
{ }
asm
INT 12H
MOV rAX, AX
end;
WritelnC ') ;
Writeln(' : ',,'');
ReadKey;
{ }
asm
MOV ',08
MOV DL,80H { }
INT 13H
MOV ,
MOV rDL,DL
end;
Writeln('');
Writeln(' :');
Writeln(': ',rCX and $3F); { 6 }
Writeln(': ',rCX shr 6); { 10 }
Writeln(' : ',rDL);
ReadKey;
end.
180 17.
MS-DOS
, MS-DOS, BIOS,
, BIOS-. MS-DOS
$20 $62, 8 .
$20 MS-DOS.
$21 MS-DOS. MS-DOS
, , .
$22 .
$23 ,
<Ctrl+Break>.
$24 , .
$ 2 5 .
$2 6 .
$27 , . , .com.
$21, , , . $21 (,
) .
MS-DOS .
$02 $21,
$09 $40 . , , IntlO_2 ( 17.4) $21. Turbo Pascal IntlO_2 .pas,
Int21_l.pas. , 17.8, File | Open (<F3>).
17.8. Int21 I. pas
program Int21_l;
uses Crt;
var
i: byte;
c: integer;
s: string;
procedure SetCursor(x,: byte); assembler;
asm
MOV ,02
MOV BH,
MOV DL,x
MOV DH,y
MS-DOS
181
17.8
INT
end;
begin
ClrScr;
{ }
for i := 49 to 57 do
begin
SetCursor(0,i-49);
for := 1 to i - 48 do
asm
MOV AH,02H { )
MOV DL,i
( }
INT 21
end;
end;
{ }
for i := 0 to 24 do
begin
s := ' $40';
SetCursor(30,i);
:= i+1;
asm
MOV AH,4
{ )
MOV BX,01H
{ )
LEA DX,[s-] { s}
MOV CX,c
{ )
INT 21H
end;
end;
{ }
SetCursor(0,10) ;
s := ' 09$';
asm
MOV AH,09H
{ )
LEA DX, [s+1] { s)
INT 21H
end;
end.
$40 . 01 ( ), 04 . ,
$40 , .
, $09
, "$".
$21.
$01 .
182
17.
$06 ( ),
( ).
$07
<Ctrl+Break>.
$08
<Ctrl+Break>.
$ .
. Turbo Pascal , Int21_2.pas
17.9,
File | Open (<F3>).
17.9. Int21 2 .pas
program Int21_2;
uses Crt;
type
Buffer = Record
MaxLen: byte;
ActLen: byte;
Chars: array[1..254] of char;
end;
var s: string;
i: integer;
: char;
Buf: Buffer;
procedure EnterString(fNura: byte);
begin
s: = " ;
Writeln(' : ');
for i := 1 to 255 do
begin
asm
MOV AH,fNum { }
INT 21H
MOV c,AL
. end;
if c=#13 then break; { Enter}
s := s + ;
end;
Writeln(' "',s,'"');
,
end;
begin
ClrScr;
EnterString($01); { }
EnterString($07); { }
{ }
Write(' : ');'
Readln(Buf.MaxLen);
Inc(Buf.MaxLen); { }
Writeln(' Enter: ');
MS-DOS
183
17.9
asm
MOV AH,OAH
LEA DX,Buf { )
INT 21H
end;
Write(' : ');
for i:= 1 to Buf.ActLen do Writa(Buf.Chars[i]);
ReadKey;
end.
EnterString,
$21. , B u f f e r ,
DX . : ,
.
, ( 13), , . ActLen.
$21.
$05 ,
DL. $40 . . Turbo Pascal ,
Int21_3.pas 17.10,
File | Open (<F3>).
17.10. Int21_3 .pas
program Int21_3;'
uses Crt;
var
s: string;
i: integer;
: char;
begin
ClrScr;
Write(' : ') ;
Readln(s);
{ )
for i := 1 to Length(s) do
begin
:= s[i];
asm
MOV
MOV
INT
MOV
INT
AH,05
DL,c
21H
DL,OAH
21H
{ )
184
17.
17.10
end;
end;
{ }
i := Length(s) ;
asm
MOV AH,40H
MOV BX,04H ( )
MOV CX,i
{ }
LEA DX, s
{ }
INT 21H
end;
end.
( 10 $), Int21_3, ,
. , , ( 13 $00).
$21
$2 $2. ,
, . Turbo Pascal ,
Int21_4.pas 17.11,
File | Open (<F3>).
MS-DOS
17.11
{ }
function PadL(num,len: byte): string;
var
s:string[2];
i: integer;
begin
Str(num,s); { }
if Length(s) < len { }
then PadL := '0' + s else PadL := s;
end;
begin
ClrScr;
while not KeyPressed do
begin
{ }
asm
MOV AH,2AH
INT 21H
MOV CurDate.Year,CX
MOV CurDate.Month,DH
MOV CurDate.Day,DL
end;
if (CurDate.Year <> PriorDate.Year) or
(CurDate.Month <> PriorDate.Month) or
(CurDate.Day <> PriorDate.Day)
then begin
PriorDate.Year := CurDate.Year;
PriorDate.Month := CurDate.Month;
PriorDate.Day := CurDate.Day;
SetCursor(0,0);
Write(PadL(CurDate.Day,2), '.',
PadL(CurDate.Month,2), '.',
CurDate.Year);
end;
{ }
asm
MOV AH,2CH
INT 21H
MOV CurTime.Hour,CH
MOV CurTime.Minute, CL
MOV CurTime.Second, DH
end;
if (CurTime.Hour <> PriorTime.Hour) or
(CurTime.Minute <> PriorTime.Minute) or
(CurTime.Second <> PriorTime.Second)
then begin
PriorTime.Hour := CurTime.Hour;
PriorTime.Minute := CurTime.Minute;
PriorTime.Second := CurTime.Second;
SetCursor(72,0);
Write(PadL(CurTime.Hour,2), ':',
185
186 , 17.
17.10
PadL(CurTime.Minute, 2) ,
PadL(CurTime.Second,2)) ;
end;
end;
end.
18
Turbo Vision
Turbo Vision - , , .
,
, , Turbo Vision.
, Turbo Vision ( "",
- ). , Turbo Vision, ( ), .
, . ,
, . , "",
"".
Turbo Vision ,
:
;
;
;
;
;
, , ;
.
Turbo Vision -
. , Turbo Vision.
- 12.
,
Turbo Vision
Turbo Vision -. ,
,
TApplication. Turbo Vision
, , TApplication .
188
18.1. TV l.pas
program tv_l;
uses App;
type
TMyApp = Object(TApplication)
end;
var
MyApp: TMyApp;
begin
MyApp.Init;
MyApp.Run;
MyApp.Done;
end.
tv_l .
. 18.1. , , ; , , .
... -
ftIt
, Turbo Vision
189
,
Turbo Vision, , , TApplication Init, Run Done.
TApplication. Init
:
TApplication.InitDesktop ;
TApplication. InitMenuBar ;
TApplication. InitStatusLine .
(
), Init.
.
InitStatusLine
StatusLine. ,
. , , InitStatusLine , .
Turbo Vision ,
TRect. TRect : . , .
,
.
GetExtent, - TRect, ( TRect Objects). ,
InitStatusLine
GetExtent ,
TRect. tv_l (. 18.1), 18.2.
18.2. Tv_l. pas
program tv_l;
uses App, Objects;
type
TMyApp = Object(TApplication)
procedure InitStatusLine; virtual; { }
end;
procedure TMyApp.InitStatusLine; ( }
var R: TRect;
begin
,
GetExtent(R);
{ }
R.A.Y := R.B.Y - 1; {
}
end;
190
18.2
var
: ;
begin
.Init;
.Run ;
.Done;
end.
tv_l ,
- , <Alt+x> (. 18.2).
. 18.2.
, InitStatusLine
.
,
. ,
, ,
. , .
, .
NewStatusDef ( Menus).
tv_l , ,
.
InitStatusLine (. 18.2) , 18.3.
New statusLine, Init.
, R, Trect.
*
, Turbo Vision
191
, NewStatusDef,
( 0 SFFFF) , StdStatusKeys. tv_l , NewStatusDef "" nil.
- , nil
NewStatusDef.
18.3.
procedure TMyApp.InitStatusLine;
var R: TRect;
begin
GetExtent(R);
R . A . Y := R . B . Y - 1;
New(StatusLine,
Init (R, { , R }
NewStatusDef (0, $FFFF, (
O..FFFF)
StdStatusKeys (nil), (
)
n i l ) ) ) ; ( )
end;
tv_l . ,
: <Alt+x> , <F10> , <Ctrl+F5> . tv_l
. StdStatusKey NewStatusKey,
StdStatusKey, .
InitStatusLine (. 18.3) ,
18.4.
18.4.
program tv_l;
uses ..., Drivers, Views;
procedure' TMyApp.InitStatusLine;
var R: TRect;
begin
New(StatusLine,
-Init (R, NewStatusDef (0, $FFFF,
t NewStatusKey('~~', kbF3, cmOpen,
NewStatusKey('~Alt+F3~3aKpbiTb', kbAltFS, cmClose,
NewStatusKey (' ~Alt+X~Bbixofl' , kbAltX, cmQuit,
StdStatusKeys (nil) ))))',
nil)));
end;
192
NewStatusKey . : , ; ; .
, ("~"), .
, ,
. .
<Alt> <Ctrl>. , .
, Drivers, kb.
Turbo Vision ,
Views, cm. .
.
tv_l , <F3> ( ""), <Alt+F3> ( ""). , , (<Alt+X>).
tv_l , , <Alt+F3> . , ( cmClose) Turbo Vision (. 18.3).
. 18.3. tv_l
*
'
./
, InitStatusLine , initMenuBar
MenuBar. -
, Turbo Vision
193
InitMenuBar. , , . , . , .
tv_l (. ) InitMenuBar ( 18.5).
18.5. InitMenuBar
program tv_l;
uses App, Objects, Menus, Drivers, Views;
type
TMyApp = Object(TApplication)
procedure InitStatusLine; virtual;
procedure InitMenuBar; virtual;
end;
procedure TMyApp.InitMenuBar;
var R: TRect;
begin
GetExtent(R);
R.B.Y := R.A.Y + 1;
MenuBar :=
New(PMenuBar,
Init(R, NewMenu( ( }
NewSubMenu('', hcNoContext, NewMenu( ( )
( }
Newltem('', 'F3', kbF3, cmCpen, hcNoContext,
Newltem('', 'Alt-F3', kbAltFS, cmClose,
hcNoContext,
NewLine( ( }
NewItem('Bbi~x~ofl', 'Alt-X 1 , khAltX, cmQuit, hcNoContext,
nil)))))),
nil))));
end;
NewMenu, NewSubMenu,
Newltem. NewMenu
NewSubMenu , , NewMenu.
Newltem , , , ,
.
NewLine. tv_l , ,
cmOpen, cmClose cmQuit (. 18.4).
, , : , -
194
.
, . , , , " " .
. 18.4.
TEvent , . Turbo Vision
, ,
- TEvent. ,
, , , . , .
Word What,
, , . evCommandj
. ,
Command, ,
, .
, Alt+FS (
<Alt+F3>), ,
What evCommand, Command cmClose. . cmClose, Close.
. , ,
, .
,
.
TApplication.HandleEvent, -
, Turbo Vision
195
inherited HandleEvent(Event);
end;
{ }
196
ClearEvent. , Event
. , HandleEvent .
I
: ,
.. Turbo Vision StdDlg.
tv_l ,
TFileDialog. tv_l. pas ,
18.7.
18.7.
program tv_l;
uses ..., StdDlg,Editors;
type
TMyApp = Object(TApplication)
procedure InitStatusLine; virtual;
procedure InitMenuBar; virtual;
procedure HandleEvent(var Event: TEvent); virtual;
procedure FileOpen;
end;
MyApp: TMyApp;
procedure TMyApp.HandleEvent(var Event: TEvent);
begin
if Event.What = evCommand then { )
case Event.Command of
cmOpen: FileOpen;
end;
inherited HandleEvent(Event); { }
end;
function OpenEditor(FileName: FNameStr;
Visible: Boolean): PEditWindow;
var
P: PWindow;
R: TRect;
begin
DeskTop- 4 .GetExtent(R) ;
, Turbo Vision
197
18.7
' : ' , fdOpenButton, 100)), @FileName) <> cmCancel then
OpenEditor(FileName, True);
end;
198
, . tv_l Init,
18.9, .
18.9. Init
program tv_l;
uses ..., Memory;
var
MyApp: TMyApp;
ClipWindow: PEditWindow;
constructor TMyApp.Init;
begin
MaxHeapSize = 8192;
inherited Init;
EditorDialog := StdEditorDialog;
ClipWindow := OpenEditor('', False)
if ClipWindow <> nil then
begin
Clipboard := ClipWindow*.Editor;
4
Clipboard' .CanUndo := False;
end;
end;
MaxHeapSize, Memory, . 16- ,
,
.
MaxHeapSize 8192 128 .
ClipWindow , . OpenEditor
, ClipWindow. , , , MaxHeapSize (
Clipboard). .
tv_l - (. 18.6 . 18.7).
cmClose HandleEvent.
Turbo Vision
Turbo Vision
,
. Turbo Vision TObject. . ( ), Init, Done Free, .
Turbo Vision
199
. 18.6.
E:\HOKKNBOOKS4COMPUIEBMP\flPPSMU_l.PftS =
roefraro tv_l!
.ses ftpp. Objects, Menus, Drivers, Uieus, MsgBox, StdDlg,
Editors, Memory;
type
IMyfipp = Object<Tflpplication>
procedure InitStatusLine; virtual; { >
procedure InitllenuBar; virtual;
procedure HandleEvent<var Event: T E u e n O ; virtual;
procedure FileOpen;
constructor Init;
end;
1 var
Myftpp: TMyflpp;
ClipWindou: PEditHindou;
1:1
_.
;,:
fllt*F33aKpHTb
TCollection , , , :
""
TSortedCollection
200
18.1
""
TCollection ()
TSortedCollection, TStringCollection TResourceCollection.
, TCollection ,
TResourceFile
, . ,
TResourseFile.Put,
, .
TResourseFile.Get.
, , TResourseFile
( TResourseCollection)
TStream
, - . , GetPos, GetSize,
Read, Seek, Truncate Write
TSortedCollection
TDosStream
TEmsStream
TMemoryStream
TSrtingList
, . , ,
() 0 65535.
, , , . ,
, ""
TStrListMaker
TStringList,
'
Tvalidator
.
TView
, , , TView
TbackGround, Tcluster,
Teditor, Tframe,
Tgroup, Thistory,
T.inputLine,
Tlistviewer,
TmenuView, ScrollBar,
TstatioText,
TstatusLine,
Turbo Vision
201
""
TBackGround
,
.
TCluster
,
"" .
TEditor
,
64 Turbo Vision.
, ,
, /, , .
TFrame
.
,
TGroup
.
, TView,
TGroup (
)?
(
)
TInputLine
.
,
THi story
,
TListViewer
,
TCheckBoxes
TMultiCheckBoxes
TRadioButtons
TFileEditor
TMemo
'
TScroller
TWindow
THistoryViewer
TListBox
TMenuView
TMenuBar
TMenuBox
202
18.2
""
TScrollBar
TStaticText
TLabel
:
,
.
TParamText
TstatusLine
";:-
j :
""
Tscroller
TDeskTop
TProgram
, . ,
TWindow
,
TFrame, TScroller
TScrollBar
TDialog
TEditWindow
THistoryWindow
""
Tdesktop
,
TBackground, . TDeskTop ,
( )
( )
TProgram
Turbo Vision
. 18.5 .
- .
TApplication
Turbo Vision
203
18.5.
Dialogs
Editors
Menus
Objects
Menus
StdDlg
Validate
Views
TApplication
TBackGround
TCheckBoxes
TCluster
THistory
THistory Viewer
TInputLine
TLabel
TFileEditor
TEditor
TMenuBar
TMenuBox
TMenuPopup
TBv.f Stream
TCollection
TDosStream
TEmsStream
TMemoryStream
TObject
TRes our ceCol lection
TMenuBar
TMenuBox
TMenuPopup
TChDirDialog
TDialog
TLookupValidator
TPXPictureValidator
TRangeValidator
TFrame
TGroup
TListViewer
TDeskTop
TProgram
TListBox
TMultiCheckBoxes
TRadioButtons
TScrollbar
TStaticText
TParamTest
TEditWindow
TMemo
TMenuView
TStatusLine
TResourceFile
TSortedCol lection
TStrCollection
TStream
TStringCollection
TStringList
,
TStrListMaker
TMenuView
TStatusLine
TFileDialog
TSortedListBox
TStringLookupValidator
dator
TVali-
TS-croller
TView
TWindow
Turbo Vision .
-i
""
S
S
S
S ,
*''
i'* ?'
(. I
wfY '
16.1
* -1
""
^i_
** '|1-:
.. -
. ;
>% (
' 1 Ht.TEH'trfi ^ ( II
*net ' t
!
**
1>
{ *><*> ] K$*t! !}>-' tU!V5 1 .* )
II
ftB1
. ': .
^ iflg,
2. 1'
384
?3
: ;
v - -
3. toHHjp 2003
^UQ}^Uli^fi^iJ1iaKU!ilSJQfl
g^-jiJL ?0ltJ Ci'jJife. Mflftisfi ^
4. 2003 ^
;..%;
{^11^"^'--..^.
:^4 e^eol
3&
61 75 .---.--"" T--J.J-T-.-.-.-.-
4 00
*"^
^
^*
": |
2201
'
|
:<u4
I'&SGj
1040 +fr55j
<,
"!
^O^Crb
'
IV
.
19 , .
20 ,
.
Pascal Turbo Vision.
19
, , ,
, (
). .
< , , . 8.
. ,
: , "", .
, ( ) ( ) , . , ,
(,
..). N-1 , N
,
, , N-1 .
.
Turbo Pascal , Sort_l .pas , 19.1,
File | Open (<F3>).
var
A: array[1..20] of byte;
i,j,buf: byte;
{ }
procedure ShowArray;
begin
for i := 1 to 20 do Write(A[i]:4);
end;
207
19.1
{ . ByAsc = True, - .
ByAsc = False, - . }
procedure SortAr ray (ByAsc: boolean);
begin
for i
1 to 19 do
for j := i+1 to 20 do
if (ByAsc and (A[i] > A[j])) or
(not ByAsc and (A[i] < A [ j ] ) )
then begin
bu.f := A [ i ] ;
A[j]
end;
buf;
end;
begin
ClrScr;
{ }
Randomize;
for i := 1 to 20 do A[i] := Random (2 55 );
Writeln ( ' : ' ) ;
ShowArray;
SortAr ray (True) ; { }
Writeln ( ' :');
ShowArray;
SortArray (False) ; { }
Writeln ( ' :');
ShowArray;
ReadKey;
end.
_
,
, ^ . 19.1.
""
"" . , ( )
( )
, .
,
. "" Sort_l (. 19.1). Sort_l.pas
Sort_2.pas SortArray,
19.2 ,
File | Open (<F3>).
19.2. Sort 2 .pas
program Sort_2;
{ . ByAsc = True, - .
ByAsc = False, - .}
procedure SortArray(ByAsc: boolean);
208
19.
19.2
begin
for i := 1 to 19 do
for j := 1 to 20-i do
if
A[j+l]
buf ;
end;
end;
87
218
218
-i1
1
87
218
87
218
20
87
218
20
87
218
20
87
218
87
218
20
11
11
87
218
20
218
1111
20
218
42
20
11
200
1 = 1; j = 3
: :;,-
200
42
1 = 1; j = 5
200
11
11
42
i = 2; j = 3
_JL
11
200
42
200
42
i = 2; j = 6
200
i = 3; j = 4
200
11
11
11
i = 3; j = 5
11
42
200
42
1 = 3; J = 6
200
42
1 = 3; j = 9
i = 4; j = 5
1 = 4; j = 6
1 = 4; j = 9
1 = 5; j = 6
i = 5; j = 9
1 = 6; 1 = 7
1 = 6; j = 9
1 = 6; j = 10
i = 7; J = 9
i = 7; j = 10
i = 8; j = 9
i = 8; j = 10
1 = 9; j = 10
1 200 42
87
1 : 42 200
87
1 11 200 42 87
1 3 200 42 87
1 3 42; 200 87
1 _3_ Jl: 200 87
1 _ 3 11 87 200
1 3 11 .42. 200
1 3 11 20 200
1 3 11 20 87
1 3 11 20 ,42
1 3 11 20 42
1 3
20
42
"
1 3
20
42
i = 2j j = 5
_?.
"
-
218
218
1
~~
20
218
10
20
!
1
20
218
,1
20
20
20
20 |
20
:...
218
42
20
218
87
20
218
87
42
218
200
42
218
200
87
200
218
87
87
218
200
87
200
218 |
. 19.1.
209
,
, ''" . 19.2.
1
'.
'
11
i=1; j = 2
i=1; j = 3
1=1; j = 4
200
11
11
i
_
42
_1
3 : 1 200
42
4 2 ' 200
0 '
87 I 218 '
10
20
]
20 |
218
218
20 !
1218
87
20 i
200
42
200 : j
87
218
20 :
42
87
200
218
20 i
1 42
42
87
200
87
200
87
200
87
200
11
11
: f
1=1; j = 9
11
i = 2; j = 1
i = 2; j = 3
[. ;
i = 2; j = 4
11
:11 | 42
i = 2; j = 7
11
i = 2; j = 8
11
i = 3; j = 2
i = 3; j = 3
i = 3; J = 6
0
0
'
42
1
1
42
42
42
-[Tii.; 1 42
1 V:i1... 42
11 t; 42
4
87
87-
20
J 218 i
20 j 218 \
- -)
i
200
20
218 \
200 i 218
87
20
20
87
42
20
87
42
20
42
'
11 I
i = 4; j = 6
11
11
" i
11 | 20
; 218
200 218 I
I
I
!
200 218 |
i = 4; ] = 5
&
i
20
20
i = 4; j = 2
~~!
,::,2 218
200 | 218 i
0:
1
1
i = 4; j = 1
' '
218; 20
87
' "
200
. .-
i
i
20
! 1
11
i 1
1
1
! 11
L"j
i = 3; j = 7
i = 6; j = 3
1=1; J = 6
i = 5; j = 4
42
j.
11
11 ! 3
1 = 1; j = 5
i='l; j = 8
87 i 200 218 j
fi
\200 ! 218
20 I 87
[
" s
20
20
200 ! 218
.j
j
200 j 218 !
"
87
200 I 218
42 I
87
200 , 218
42
87
200 j
218
. 19.2. ""
:
. ,
.
, .
Sort_2.pas (. ) Sort_3.pas
SortArray, 19.3 - i|t
, -3%
File | Open (<F3>).
*&
210
19.
i = 3; j = 1
i = 4; j = 3
i = 5; j = 1
i = 6; \ = 2
0
0
0
i = 10; j = 6
200 I
i
11 I
3
200^
42
0
42
" ' '
1 j 87
10
218
20 ,
218
87
87
I
I
!J ! 42 >ouj 1 I 87
..~*j.
-_
L
: 1
3 J 1 1 I 42
87
1^
:
' | ....7>t -..-.rH- ..~~*_ 200^
1
3
11 ! 42 J 87
200^.
'M
L.
&l -
1 1
4_ ?>
11 ' 20 ;
4
fe
20
)
87^
42
218
218
218
218
i
L
j
20 |
20 i
- i
20 i
20
'.
200^ 218^; 20
__:8I>
200.
.c j
21
^J
. 1 9.3.
,
. , ,
, ( )
, ,
. , .
. ,
.
211
begin
SortArray (True, 1,20) ;
{ }
SortArray.
212 19.
,
.
. ,
. , . ,
. , .
Turbo Pascal (, 19.4),
BSearch.pas , 19.5 , File |
Open (<F3>).
19.5. BSearch.pas
program BSearch;
uses Crt;
var
A: a r r a y [ 1 . . 2 0 ] of byte;
i , j , b u f , n : byte;
Found: boolean;
begin
{ , }
Write(' : ');
Readln(n);
buf := 0;
i := 1;
{ )
j := 20;
{ )
Found := False;
repeat
buf := (i + J) div 2; ( )
if A[buf] = n then
{ )
begin
Found := True; { )
break;
{ )
end;
{ , )
if A[buf] < n then j := buf - 1;
{ , )
if A[buf] > n then i := buf + 1;
until i > j ;
if Found
1
then Writeln(' ',buf,'-My )
else Writeln(' ');
ReadKey;
end.
213
,
. , , .
Turbo Pascal ,
Matrix_l.pas , 19.6, , File | Open (<F3>).
19.6. Matrix_l .pas
program Matrix_l;
uses Crt;
var
A: array [1..5,1..5] of real;
i,j: byte;
sum: real;
( }
procedure ShowArray;
begin
for i := 1 to 5 do
begin
for j := 1 to 5 do Write(A[i,j]:6:1); '
WritelnC ' ) ;
end;
end;
begin
ClrScr;
{ )
Randomize;
for i := 1 to 5 do
for j := 1 to 5 do A[i,j] := Random(255);
Writeln(' :') ;
ShowArray;
{ )
for i := 1 to 5 do
begin
sum := 0; { )
for j := 1 to 5 do sum := sum + A[i,j];
A[i,i] := sum/5;
end;
Writeln(' :');
ShowArray;
ReadKey;
end.
Matrix_l . 19.4.
, , ,
. Turbo
Pascal , Matrix_2 .pas -
214
19.
- '
"
.4, [ 5 i 1JJ3 | 4
, 0
2 j 9 7
1 I
raiTratti-'
i 0 3, ^ 9 i 7 | 1
I 3 | 7 I,1!;! 5 ; 0
6 j 4_; 9 j*,j i
0 i 5 I 6 : 5I 5
. 19.4. Matrix_1
19.7. Matrix_2 r pas
program Matrix_2;
uses Crt;
var
A: array [1..5,1..5] of byte;
B: array[1..10] of byte; { }
i, j: byte;
( }
procedure ShowArray;
begin
for i := 1 to 5 do
begin
for j := 1 to 5 do Write(A[i,j]:4);
WritelnC ' ) ;
end;
end;
{ . ByAsc = True, - .
ByAsc = False, - .}
procedure SortArray(ByAsc: boolean);
var
buf: byte;
begin
for i := 1 to 9 do
for j := i+1 to 10 do
if (ByAsc and (B[i] > B[j])) or
(not ByAsc and (B[4J < B[j]))
then begin
buf := B[i];
B[j]
end; /
buf;
end;
{ .
FromAtoB = True,
FromAtoB = False, }
procedure CopyArrays (Lefthalf , FromAtoB: boolean);
var
iBegin, iEnd, jBegin, jEnd, c: byte;
19.7
begin
{
}
if LeftHalf then
begin
{ }
iBegin := 2; iEnd := 5;
jBegin := 1; jEnd := 1;
end else
begin
{ }
iBegin := 1; iEnd := 4;
jBegin := 2; jEnd := 5;
end;
{ }
:= 1; { }
for i := iBegin to iEnd do
begin
for j := jBegin to jEnd do
begin
if FromAtoB"
then B[c] := A[i,j]
else Afi,j] := B[c];
Inc(c) ;
end;
if LeftHalf
then Inc(jEnd) else Inc(jBegin);
end;
end;
{ LeftHalf = True,
, - )
procedure SortHalf(LeftHalf: boolean);
begin
CopyArrays(LeftHalf,True); { }
SortArray(LeftHalf);
{ }
{ }
CopyArrays(LeftHalf,False);
end;
begin
ClrScr;
{ }
Randomize;
for i := 1 to 5 do
for j := 1 to 5 do A[i,j] := Random(255);
Writeln(' :');
ShowArray;
SortHalf(True) ; { }
SortHalf(False); { }
Writeln(' :');
ShowArray;
ReadKey;
end.
215
216
19.
Matrix_2 . 19.5.
9 1
^0
3 7 8 5
6 4 9 2
5 6
3-1
5 9
. 19.5. Matrix_2
. Turbo
Pascal , Matrix_3.pas - ijg,^
, 19.8, 1
File | Open (<F3>).
F~**i
19.8. Matrix_3 .pas
program Matrix_3;
uses Crt;
var
A: array [1..5,1..5] of byte;
i,j: byte;
( }
procedure ShowArray;
begin
for i := 1 to 5 do
begin
for j := 1 to 5 do Write(A[i,j]:4);
WritelnC ' ) ;
end;
end; ,
procedure TranspArray;
var
jEnd,buf: byte;
begin
jEnd := 1;
for i := 2 to 5 do
begin
for j := 1 to jEnd do
begin
buf := A [ i , j ] ;
A [ i , j] : = ' A [ j , i ] ;
A [ j , i ] := b u f ;
end;
Inc(jEnd) ;
end;
end;
217
19.8
begin
ClrScr;
{ }
Randomize;
for i := 1 to 5 do
for j := 1 to 5 do A[i,j] := Random(255);
Writeln(' :');
ShowArray;
TranspArray; { }
Writeln(' :');
ShowArray;
ReadKey;
end.
Matrix_3 . 19.6.
[ : 8[5] 7 1|3}4
8 [J 0 I 3
i 0 ! 2 ! 9 7 | 1
5(2
! ! 7 ! 5 I -o
1
9. - 8
,
; - 4 - -4
: 6
ii 0
!
1--
I-- - --
-+ +--
5 j 6 i 5 ! 9
L_ L__
'
9 6
i-
iLJL
4j- 1 0
Ji,A
. 19.6. Matrix_3
20
, . Pascal
Crt: Sound, NoSound Delay. Sound , , , Word. NoSound. Delay Sound
NoSound . ,
Delay (1000) .
, ,
$33.
. . 17.
, , .
. 20.1.
20.1.
()
- (#)
Pe(D)
- (D#)
()
()
- (F#)
(G)
- (G#)
()
- (#)
()
131
139
147
156
165
175
186
196
208
220
234
247
262
278
294
312
330
349
371
392
416
440
467
494
523
555
587
623
659
699
742
785
832
880
934
988
1047
1111
1174
1246
1318
1396
1482
1568
1664
1760
1868
1975
, . 20.2.
Turbo Pascal ,
Piano.pas , 20.1,
File | Open (<F3>).
219
20.2.
<-
->
<t>
( )
( )
""
"-"
""
"-"
""
""
"-"
""
"-"
""
"-"
""
<i>
<>
<>
<f>
<a>
<v>
<>
<>
<>
<>
<>
<>
<>
<j>
<0>
<>
<>
<k>
<>
<,>
<>
<1>
<>
<.>
<
20.1. Piano.pas
program Piano;
uses Graph, Crt;
var
DriverVar, ModeVar, ErrorCode,
MouseX, MouseY, CurNote, CurDelay: integer;
PressedKey: Char;
CurDiez: boolean;
Notes: string;
( note - ,
. diez = True, - .
IsPoint = True, ,
IsPoint = True, }
procedure DrawPosition(note: char; diez,IsPoint: boolean);
var
x: integer; ( }
begin
if diez ( () }
then begin
SetColor(DarkGray); ( - -}
( X
Notes. 50 - }
:= 170 + (pos(note,Notes) - 1)*50;
if IsPoint
then SetFillStyle (SolidFill, Red)
220
20.
20.1
else SetFillStyle(SolidFill,DarkGray);
FillEllipse(x,125,5,5); ( }
end else begin { }
SetColor(White); { - }
:= 145 + (pos(note,Notes) - 1>*50;
if isPoint
then SetFillStyle(SolidFill,Red)
else SetFillStyle(SolidFill,White);
FillEllipse(x,190,5,5);
end;
end;
{ }
procedure DrawKey(note: char; diez: boolean);
var
x: integer; { X }
begin
if diez { () }
then begin
x := 155 + (pos(note,Notes) - 1)*50;
SetFillStyle(SolidFill,DarkGray);
Bar(x,50,x+30,135); { }
end else begin { }
x := 120 + (pos(note,Notes) - 1)*50;
SetFillStyle(SolidFill,White); { }
SetColor(DarkGray); { }
Rectangle(x, 50, x+50, 200);
FloodFill(x+1,51,DarkGray);
end;
end;
{ }
procedure PlayNote(note: char; diez: boolean)
begin
case note of
if diez then Sound(555). else Sound(523);
{}'
if diez then Sound(623) else Sound(587);
{Pe}'D
{}
Sound(659);
if diez then Sound(742) else Sound(699);
{}
{}
if diez then Sound(832) else Sound(785);
if diez then Sound(934) else Sound(880);
{}
Sound(988);
{}
.
\
end;
Delay(CurDelay*1000); {
CurDelay=l -
CurDelay=2 -
CurDelay=4 - }
NoSound; { }
end;
{ }
procedure DrawDelay;
begin {
- }
20.1
SetFillStyle(SolidFill, LightGray) ;
Bar (200,210,500,350) ;
{ }
SetFillStyle(SolidFill,DarkGray);
SetColor(DarkGray);
case CurDelay of
1: begin ( - }
FillEllipse(300,300,30,15);
Line(330,300,330,220);
end;
2: begin ( - }
Ellipse(300,300,0,360,30,15);
Line(330,300,330,220);
end;
4: Ellipse(300,300,0,360,30,15); { }
end;
end;
begin
Notes := 'CDEFGAH'; { }
CurDelay := 1; { - }
{ )
DriverVar := EGA;
ModeVar := EGAHI;
InitGraph(DriverVar,ModeVar,'\tp\tp\bgi');
{ }
ErrorCode := GraphResult;
if ErrorCode <> grOK then
begin
Writeln(GraphErrorMsg(ErrorCode));
Halt (1);
end;
SetBkColor(LightGray); { - -}
ClearDevice; { - }
{ }
DrawKey('',False)
{ }
DrawKey('D',False)
{ }
DrawKey('E', False)
{ }
DrawKey('F',False)
{ }
DrawKey(,'G1,False)
{ }
DrawKey('A1,False)
{ }
DrawKey ('H' , False)'
{ -}
DrawKey('',True)
{ -}
DrawKey('D',True)
{ -}
DrawKey('F' , True)
{ -}
DrawKey('G',True)
{ -}
DrawKey('A',True)
1; { }
CurNote
CurDiez
False; { }
DrawPosition(Notes[CurNote],CurDiez,True); { }
DrawDelay; { }
{ }
repeat
221
222
20.
20.1
{ , PressedKey #0}
if PressedKey #0 then PlayNote(Notes[CurNote],CurDiez);
PressedKey := ReadKey; { }
DrawPosition(Notes[CurNote],CurDiez,False); {
}
case PressedKey of
{ , , , ,
}
#72: CurDiez := (CurNote in [1,2,4,5,6]);
{ - ,
}
#75: if not ((CurNote = 1) and not CurDiez)
then if CurDiez then CurDiez := False
else Dec(CurNote);
{ , - ""}
#77: if CurNote < 7
then begin
Inc(CurNote); { }
{ , }
if CurDiez then CurDiez := False;
end;
{ , - ,
}
#80: if not ((CurNote = 1) and not CurDiez)
then if not CurDiez then
begin
CurDiez := (CurNote in [2,3,5,6,7]);
Dec(CurNote);
end;
{ }
'','','1,'': begin
CurNote := 1;
CurDiez := False;
end;
'F1, 'f, 'A', 'a' : begin
CurNote := 1;
CurDiez := True;
end;
'V,'v','M1,'M': begin
CurNote := 2;
CurDiez := False;
end;
'G','g','','n1: begin
CurNote := 2;
CurDiez := True;
end;
'','','','': begin
CurNote := 3;
CurDiez := False;
end;
'N','n','T','T': begin
CurNote := 4;
223
20.1
CurDiez := False;
end;
J','j','','': begin
CurNote := 4;
CurDiez := True;
end;
'M','m','','': begin
CurNote := 5;
CurDiez := Falge;
end;
'K','k','', '': begin
CurNote := 5;
CurDiez := True;
end;
'<',',','','6': begin
CurNote := 6;
CurDiez := False;
end;
L','!','','': begin
CurNote := 6;
CurDiez ,:= True;
end;
'>','.','','': begin
CurNote := 7;
CurDiez := False;
end;
{ "+"}
'+','=': if CurDelay < 4 then
begin
( }
Inc(CurDelay,CurDelay);
DrawDelay; { )
end;
{ "-"}
'-','_': if CurDelay > 1 then
begin
Dec(CurDelay,CurDelay div 2);
DrawDelay;
end;
end;
{ . }
DrawPosition(Notes[CurNote],CurDiez,True);
until PressedKey = #27; { -. Esc}
CloseGraph; { }
end.
1
. 20.1.
, , .
224
20.
"" - .
. 20.1. Piano
$33.
$01 .
$03 .
$04 .
$07 .
$08 .
,
.
,
, . , .
Turbo Pascal ,
FreePen.pas ,
20.2, File | Open
20.2. FreePen.pas
program FreePen;
uses Graph, Crt;
var
DriverVar, ModeVar, ErrorCode: integer;
ButtonPressed,MouseX,MouseY,PrevX,PrevY: word;
i,CurColor: byte;
225
20.2
{ }
procedure DrawMarker;
begin
\
SetColor(15 - CurColor); ( , }
OutTextXY(26+CurColor*39, 10,'X'); { "X"}
end;
begin
{ )
DriverVar := EGA;
ModeVar := EGAHI;
InitGraph(DriverVar,ModeVar,'\tp\tp\bgi');
ErrorCode := GraphResult;
if ErrorCode <> grOK then
begin
Writeln(GraphErrorMsg(ErrorCode));
Halt (1);
end;
{ }
SetColor(White);
{ }
for i := 0 to 15 do
begin
SetFillstyle(SolidFill,i); { }
Rectangle(10+i*39, 5, 10+(i+l)*39, 20); { }
FloodFill(ll+i*39, 6, White);
end;
CurColor := White; { )
DrawMarker; { }
asm
MOV AX,01 { )
INT* 33H
MOV AX,07 {
}
MOV CX,01 { XI )
MOV DX,640 { 2 )
INT 33H
MOV ,08 (
}
MOV CX,01 { Y1 }
MOV DX,350 { Y2 }..
INT 33H
MOV ,04 { }
MOV ,320 { X}
MOV DX,175 { Y}
INT 33H
end;
{, - )
while not KeyPressed do
begin
asm
MOV A X , 0 3 { }
INT 33H
226
20.
20.2
MOV ButtonPressed,BX { - }
MOV MouseX,CX
{ - X }
MOV MouseY,DX
{ DX - Y }
end;
if ButtonPressed = 0 { }
then PrevX := 0 ( }
else { - )
if MouseY <= 20 then { }
begin
case ButtonPressed of
1: begin { }
{ :}
{ }
SetFillStyle(SolidFill,CurColor);
Bar(22+CurColor*39,6,
33+CurColor*39,19);
{ }
CurColor := (MouseX-10) div 39;
{ )
DrawMarker;
end;
2: begin { }
{ }
SetFillStyle(SolidFill,(MouseX-10) div 39);
Bar (0,21,640,350); { }
end;
end;
end
else begin {
}
SetColor(CurColor); {
}
if PrevX > 0 then begin { }
{ -
}
if MouseX > PrevX
then MouseX := PrevX+1
else MouseX := PrevX-1;
if MouseY > PrevY
then MouseY := PrevY+1
else MouseY := PrevY-1;
{
}
Line(PrevX,PrevY,MouseX, MouseY);
end;
{ }
PrevX := MouseX;
PrevY := MouseY;
end;
end;
CloseGraph; { }
end.
""
227
. 20.2.
. 20.2. FreePen
""
"". , "", "" , .
"" ( ). "" "", , "" - "".
"" "". "" .
, $09 $33. ES
( Seg), DX
Cursor ( Ofs),
.
.
Turbo Pascal ,
Hunter. pas ,
20.3, File | Open
20.3. Hunter . pas
program Hunter;
uses Graph, .Crt;
const Cursor:array [1..32] of word=
228
20.
20.3
($FFFF,$FFFF,$FFFF,$FFFF,$FFFF, $FFFF, $FFFF, $FFFF/
$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF, $FFFF, $FFFF,
$0000., $OFFO,$OFFO, $OFFO, $OFFO, $OFFO, $OFFO, $FFFF,
$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF);
var
Shots, i, d, DriverVar, ModeVar, ErrorCode: integer;
cSeg,cOffs,PressedButton,MouseX,CurX,CufY: word;
Aims,sRating: string;
Rating :v real;
{ Color)
procedure DrawBall(Color: Word);
begin
SetFillStyle(SolidFill,Color);
SetColor(Color);
FillEllipse(CurX,CurY,7,5);
end;
begin
{ }
DriverVar := EGA;
ModeVar := EGAHI;
InitGraph(DriverVar,ModeVar,'\tp\tp\bgi');
ErrorCode := GraphResult;
if ErrorCode <> grOK then
begin
Writeln(GraphErrorMsg(ErrorCodeJ );
Halt(l) ;
end;
cSeg := Seg(Cursor);
{ Cursor}
cOffs := Ofs(Cursor); { Cursor}
asm
MOV AX,01 { }
INT
MOV AX,09 { }
MOV BX,7 { X }
MOV ,0 { Y }
MOV ES,cSeg { }
MOV DX,cOffs { }
INT
MOV ,07 {
}
MOV ,01 { XI }
MOV DX,620 { 2 }
INT
MOV ,08 {
}
MOV ,300 { }
MOV DX,300 { Yl = Y2 = 300}
INT
MOV AX,04 { }'
MOV ,320 { X}
""
229
20.3
MOV DX,300 { Y}
INT
end;
Randomize;
{ )
CurY := 0;
{ Y }
CurX :=,700 { X ( )}
Aims := ''; {, }
Shots := 0; ( }
{ ,
- }
while not KeyPressed do
begin
asm
MOV AX,03 { )
INT
MOV PressedButton,BX { }
MOV MouseX,CX { X }
end;
DrawBall(Black); { }
if CurX > 640 then { }
begin
CurX := 0; { }
CurY := 5 + Random(200); { }
end;
Inc(CurX); { X }
DrawBall(Yellow); ( }
Delay(300); { ,
. , }
if PressedButton = 1 then { }
begin
{ ""}
Inc(Shots);
{ }
Sound(1900);
{ ""}
{
, }
SetColor(Red);
Line(MouseX,l,MouseX,300);
Delay(100); { ""
, }
{ " " }
SetColor(Black);
Line(MouseX,1,MouseX,300);
NoSound; { ""}
,
{ ""
, 5 / ...}
if abs(MouseX-CurX) = 5 then
begin
{~" "}
DrawBall(Red); ( }
{ ' "}
-for i := 200 to 800 do
begin
if (i-mod 20) = 0 then Sound(i);
Delay(20);
230
20.
20.3
end;
DrawBall(Black); { , )
{ " " }
for i := 1000 downto 200 do
begin
{ }
if (i mod 10) = 0 then Sound(i);
{ "
" - , }
SetColor(Red);
d := i div 100;
Line(CurX,CurY,CurX-d,CurY-d);
Line(CurX,CurY,CurX,CurY-d);
Line(CurX,CurY,CurX+d,CurY-d);
Line(CurX,CurY,CurX+d,CurY);
Line(CurX,CurY,CurX+d,CurY+d);
Line(CurX,CurY,CurX,CurY+d);
i
Line(CurX,CurY,CurX-d,CurY+d);
Line(CurX,CurY,CurX-d, CurY);
Delay(30);
{ "" }
SetColor(Black);
SetFillStyle(SolidFill,Black);
Bar(CurX-d,CurY-d,CurX+d,CurY+d);
end;
Aims := Aims + '*'; { ""
""}
Rating := Length(Aims)/Shots*100; {}
Str(Rating:6:2,sRating); { ' }
{ , ,
""}
SetColor(Black);
SetFillStyle(SolidFill,Black) ;
Bar(570,330,640,350);
{ }
SetColor(White);
OutTextXY(5,330,Aims);
OutTextXY(570,330, sRating) ;
NoSound; ( '}
CurX := 700; { } ,
end;
end;
end;
{ }
SetColor(Red);
SetFillStyle(SolidFill,Black);
Bar(5,330,565,350);
OutTextXY(5,330,' ! ');
ReadKey; { ReadKey , }
ReadKey; { ,
repeat KeyPressed}
CloseGraph;
end.
""
231
. 20.3.
3.75
. 20.3. Hunter
21
__^_
.
, . , , ,
(, Microsoft Excel). , ,
, . (, dBase)
, (, Paradox) .
, ,
. ,
, Turbo Vision TCollection -.
,
9 Audio, - . ,
.
, .
,
. , , Audio ,
-.
, , .
, - , . ,
, -.
, . -
_ ,
233
, , .
AudioDB, -. . cdd. . cdd ,
( . trd). . cdd
. trd.
_
,
. , , . AudioDB ,
,
.
. cdd ,
. trd .
. , , , , .
,
.
<>, <Insert>, <Delete>. <t> <4>. ,
- , Crt TextColor TextBackGround.
Turbo Pascal ,
AudioDB. pas ,
21.1, File | Open
21.1. AudioDB . pas
program AudioDB;
uses Crt;
type
{ }
Track = record
DiscNum: word;
{ }
TrackNum: word;
{ )
Name: string[40]; { }
Hours: 0..3; / " {}
Minutes: 0..59;
{}
Seconds: 0..59;
{}
end;
{ }'
CD = record
234
21.
21.1
DiscNum: word;
Author: string[20],
Title: string[40];
Year: integer;
Kind: string[10]
end;
{ }
()
()
()
()
var
: char;
DBName,DBDir: string;
FileCDs: File of CD;
FileTracks: File of Track;
CDRec: CD;
TrackRec: Track;
i,j,CurY: byte;
CurRec,CurTrack,TopCDRec,TopTrack: Word;
PressedKey: char;
InCDArea:
boolean;
{ ' "-"}
procedure DrawLine;
begin
for i := 1 to 79 do Write('-');
Writeln( " ) ;
end;
(
"/")
procedure ShowPosition;
begin
CurY := WhereY; ( )
GotoXY(1,1);
( )
Write (' ':10); ( )
( )
GotoXY(1,1);
Write(CurRec,'/',FileSize(FileCDs));
GotoXY(1,CurY); ( )
end;
(
-)
procedure CDDataLine;
begin
Read(FileCDs,CDRec);
Writeln(CDRec.Author:20,'I',CDRec.Title:40, ' | ',
CDRec.Year:4,'
iCDRec.Kind);
end;
(
)
procedure TrackDataLine;
begin
Writeln(TrackRec.TrackNum,'. ',
, .
TrackRec.Name,' (',
TrackRec.Hours,'',
,
21.1
TrackRec.Minutes, '',
TrackRec.Seconds,'',')')
end;
{ .trd,
. Creating = True,
, - }
procedure OpenTrackFile(Creating: boolean);
var
NumStr: string[8];
begin
if FileSize(FileCDs) > 0 then { }
begin
{ }
{ ,
}
Seek(FileCDs,CurRec-1);
Read(FileCDs,CDRec); { }
{ }
Str(CDRec.DiscNum,NumStr);
{'
FileTracks "NumStr".trd DBDir}
Assign(FileTracks,DBDir+'\'+NumStr+'.trd');
if Creating then
begin
Rewrite(FileTracks);
Close(FileTracks);
end else Reset(FileTracks);
end;
end;
{,
}
procedure ShowTracksCount;
begin
GotoXY(69,21);
Write(': ',FileSize(FileTracks));
end;
{
}
procedure ShowTracks;
begin
CurY := WhereY;
{ ,
, (7 )}
GotoXY(l,14);
for i := 1 to 7 do WritelnC ':79);
if FileSize(FileCDs)> 0 then { }
begin
{ }
{ .trd,
}
OpenTrackFile(False);
ShowTracksCount; { }
235
236
21.
21.1
i := 1;
{ }
GotdXY(l,14);
while not Eof (FileTracks) do
begin
Read(FileTracks,TrackRec);
TrackDataLine;
inc(i) ;
if i = 8 then break; { 7 }
end;
Close(FileTracks);
end;
GotoXY(l,CurY);
CurTrack := 1; { - }
end;
( ..cdd.
}
function InsertCD: word;
var
CurCDRec: CD;
InsertPos: word; { }
begin
InsertPos := 0;
{ }
if FileSize(FileCDs) = 0 { .cdd }
then CDRec.DiscNum := 1
else
begin { .cdd )
{ }
Seek(FileCDs,FileSize(FileCDs)-I);
Read(FileCDs,CurCDRec);
{ 1 }
CDRec.DiscNum := CurCDRec.DiscNum + 1;
{ }
Seek(FileCDs,0);
while not Eof(FileCDs) do { }
begin
Read(FileCDs,CurCDRec);
{ ""+""
, }
if (CurCDRec.Author + CurCDRec.Title) >
(CDRec.Author + CDRec.Title)
then Break; { ,
}
Inc(InsertPos);
end;
{ )
if InsertPos < FileSize(FileCDs) then
begin
Seek(FileCDs,FileSize(FileCDs)); {}
Write(FileCDs,CDRec);
{ }
237
21.1
{ }
for i := (FileSize(FileCDs)-l)
downto InsertPos + 1 do
begin
("" }
' ' Seek(FileCDs,i-l) ;
Read(FileCDs,CurCDRec) ;
Write(FileCDs,CurCDRec) ;
end;
end;
end;
{ }
Seek(FileCDs,InsertPos);
Write(FileCDs,CDRec);
InsertCD := FilePos(FileCDs);
end;
{ .trd)
procedure InsertTrack;
var
CurTrackRec: Track;
InsertPos: word; { }
begin
OpenTrackFile(False); { .trd}
InsertPos := 0;
if FileSize(FileTracks) > 0 then { .trd }
begin
{ )
Seek(FileTracks,0);
while not Eof(FileTracks) do
begin
Read(FileTracks,CurTrackRec);
{
)
}
if CurTrackRec.TrackNum >
TrackRec.TrackNum then Break; { }
Inc(InsertPos); { }
end;
{ }
Seek(FileTracks,FileSize(FileTracks));
{ }
Write(FileTracks,TrackRec);
{ .trd }
for i := (FileSize(FileTracks)-1) downto InsertPos + 1 do
begin
Seek(FileTracks,i-1);
{ }
Read(FileTracks,CurTrackRec) ;
Write(FileTracks,CurTrackRec);
end;
{ }
Seek(FileTracks,InsertPos);
end;
238
21.
21.1
Write (FileTracks,TrackRec); { }
ShowTracksCount;
{ }
Close(FileTracks);
{ .trd}
end;
{ }
procedure DelCD;
var
CurCDRec: CD;
CurPos: word;
begin
CurPos := CurRec; { }
while CurPos < FileSize(FileCDs) do { .cdd}
begin
{ , }
Seek(FileCDs,CurPos);'
Read(FileCDs,CurCDRec);
Seek(FileCDs,CurPos-1);
Write ^FileCDs,CurCDRec);
Inc(CurPos);
end;
{ }
Seek(FileCDs,FileSize(FileCDs)-1);
Truncate(FileCDs);
end;
{ }
procedure DelTrack;
var
CurTrackRec: Track;
CurPos: word;
begin
OpenTrackFile(False); { .trd}
{ , ' }
CurPos := CurTrack;
while CurPos < FileSize(FileTracks) do
begin
{ }
Seek(FileTracks,CurPos);
Read(FileTracks,CurTrackRec);
Seek(FileTracks,CurPos-1);
Write(FileTracks,CurTrackRec);
Inc(CurPos);
end;
{ }
Seek(FileTracks,FileSize(FileTracks)-1);
Truncate(FileTracks);
ShowTracksCount; { }
end;
{ }
begin
(, ""}
,
21.1
while <> '0' do begin
ClrScr; { }
repeat { )
Writeln(' :');
Writeln('0 - ');
Writeln('l - '1;
Writeln('2 - ');
Readln(c);
until in [' 0'. . ' 2'];
if <> '0' then
begin
Write(' : ');
Readln(DBName);
{
, }
if pos('.cdd1,DBName) = 0 then
DBName := DBName + '.cdd';
Assign(FileCDs,DBName);
{ }
DBDir := " ;
for i := Length(DBName) downto 1 do
if DBName[i] = 'V then
{ }
begin
{ ""}
DBDir := copy(DBName,1,i);
Break;
end;
{ }
DBDir := DBDir + copy(DBName,Length(DBDir)+1,
pos('.',DBName)-Length(DBDir))
if = '
!
' then
begin { )
Rewrite(FileCDs);
Writeln(' ',DBName,'.cdd ...');
MkDir(DBDir); { }
Writeln(' ',DBDir,' ...');
end;
{ )
Reset(FileCDs);
Writeln(' ',DBName,'.cdd ...');
ClrScr;
GotoXY(l,24);
{ }
DrawLine;
Write('Esc - , Insert - ',
'Delete - , Tab - ');
GotoXY(l,l);
{ }
Writeln('
|
|',
1
!
' |
');
DrawLine;
{ 7 )
239
240
21.
21.1
Seek(FileCDs,0) ;
for i := 1 to 7 do
if Eof(FileCDs) then
begin
for j := i to 7 do
WritelnC ':20,'I',' ':40,'|',' ':4,'|',' ');
brea,k;
end else CDDataLine;
DrawLine;
CurRec := 1; { }
TopCDRec := 1; ( )
( }
Writeln(' :');
WritelnC ':20,',' ':40,'|',' ':4,',' ');
DrawLine;
ShowTracks; ( }
( }
GotoXY(l,21);
DrawLine;
Writeln(' :');
WritelnC ':3,'.',' ':40,' ( )');
GotoXY(l,3);
TopTrack := 1; ( }
InCDArea := True; { - }
repeat { ,
Esc}
( .cdd }
Seek(FileCDs,CurRec-l);
ShowPosition; ( }
PressedKey := ReadKey; ( }
case PressedKey of
#09: begin {}
{
}
InCDArea := not InCDArea;
{ ,
)
if InCDArea
then GotoXY(l,3 + CurRec - TopCDRec)
else GotoXY(l,14);
end;
#72: begin ( }
if InCDArea then ( }
if CurRec > 1 then ( }
begin
Dec(CurRec); ( )
Seek(.FileCDs,CurRec-l) ;
if WhereY > 3 { }
then GotoXY(l,WhereY-l)
else ( }
begin
{ }
GotoXY(l,9);
241
21.1
DelLine;
{
)
GotoXY(l,3);
InsLine;
{ }
CDDataLine;
{ ,
}
Dec(TopCDRec);
{ }
GotoXYd, WhereY-l) ;
end;
( }
ShowTracks;
end;
( }
if not InCDArea then
if CurTrack > 1 then
begin
Dec (CurTrack);
if WhereY > 14 { }
then GotoXYd, Where Y-l)
else { )
begin
GotoXYd, 20) ;
DelLine;
GotoXYd, 14) ;
InsLine;
OpenTrackFile(False) ;
Seek"(FileTracks,CurTrack-l) ;
Read(FileTracks,TrackRec);
Close(FileTracks);
TrackDataLine;
Dec(TopTrack);
GotoXYd,WhereY-1) ;
end;
end;
end;
180: begin { )
if InCDArea then
if CurRec < FileSize(FileCDs) then
begin
,
Inc(CurRec);
Seek(FileCDs,CurRec-1);
{ , ...}
if WhereY < 9 then
{ }
GotoXY(1,WhereY+l)
else
begin
{
, }
242
21.
21.1
GotoXY(l,3) ;
DelLine;
{
}
GotoXY(1,9);
InsLine;
{ }
CDDataLine;
{
, }
Inc(TopCDRec);
{ }
GotoXY(1,Whe reY-1);
end;
ShowTraCks; { }
end;
if not InCDArea then { }
begin
OpenTrackFile(False);
if CurTrack < FileSize(FileTracks) then
begin
Inc(CurTrack);
if WhereY < 20 then
GotoXY(1,WhereY+l)
else
begin
GotoXY(1,14);
DelLine;
GotoXY(l,20);
InsLine;
Seek(FileTracks,CurTrack-1);
Read(FileTracks,TrackRec);
TrackDataLine;
Inc(TopTrack) ;
GotoXY(1,WhereY-1);
end;
end;
Close(FileTracks);
end;
end;
#82: if InCDArea then { }
begin
{ )
CurY := WhereY;
GotoXY(1,12); { 12- }
Readln(CDRec.Author);
GotoXY(22,12);
Readln(CDRec.Title);
GotoXY(63,12);
Readln(CDRec.Year);
GotoXY(68,12);
Readln(CDRec.Kind);
{ .cdd}
,
21.1
CurRec := InsertCD;
{ }
OpenTrackFile(True);
GotoXY(1,12);
WritelnC ':20,',' ':40,'.,' ':4,',' ':);
{
^ }
if CurRec in [TopCDRec..TopCDRec+6] then
begin
{ }
GotoXYU, 9) ;
DelLine;
GotoXYU, 3+CurRec-TopCDRec) ;
InsLine;
Seek(FileCDs,CurRec-l) ;
CDDataLine;
GotoXY(l,WhereY-l);
end else begin
{ ,
}
GptoXY(l,CurY) ;
CurRec := TopCDRec + CurY - 3;
end;
ShowTracks;
end else
begin
{ }
CurY := WhereY;
{ )
TrackRec.DiscNum := CDRec.DiscNum;
{ 23- }
GotoXYU, 23) ;
Readln(TrackRec.TrackNum) ;
GotoXY(5,23);
Readln(TrackRec.Name);
GotoXY(47,23);
Readln(TrackRec.Hours);
GotoXY(50,23);
Readln(TrackRec.Minutes);
GotoXY(53,23);
Readln(TrackRec.Seconds);
{ .trd}
InsertTrack;
{ )
GotoXY(1,23);
WritelnC ':3,'.',? <:40,' ( )');
{
)
if TrackRec.TrackNum in [TopTrack..TopTrack+6]
then, begin
{ )
GotoXY(1,20);
DelLine;
243
244
) 21.
21.1
GotoXYd, 14+TrackRec.TrackNum-TopTrack) ;
InsLine;
TrackDataLine ;
GotoX Y(l, Where Y-l);
CurTrack := TrackRec.TrackNum;
end else GotoXYd, CurY) ;
end;
#83: { }
if InCDArea then { }
begin
CurY := WhereY;
DelCD; { }
DelLine; { }
{
}
GotoXYd, 9) ;
InsLine;
{ . cdd 7
} '
if (FileSize (FileCDs) < 7) or
(CurRec > FileSize (FileCDs) )
then begin
{
"" }
WritelnC ' :20, ' | ', ' ' :40, ' ,
{
,
}
if CurRec > FileSize (FileCDs)
then CurRec := FileSize (FileCDs) ;
end else
begin
Seek (FileCDs, CurRec-1) ;
CDDataLine;
end;
{
}
if (3 + CurRec - TopCDRec) < .CurY
then Dec (CurY); { }
GotoXYd, CurY) ;
ShowTracks;
end else { }
begin
CurY := WhereY;
DelTrack;
GotoXYd, CurY) ;
DelLine;
GotoXYd, 20) ;
InsLine;
if (FileSize (FileTracks) < 7) or
(CurTrack > FileSize (FileTracks) )
then begin
Turbo Vision
245
21.1
WritelnC ':-79);
if CurTrack > FileSize(FileTracks)
then CurTrack := FileSize(FileTracks)
end else
begin
Seek(FileTracks,CurTrack-1) ;
Read (FileTracks, TrackRec)' ;
TrackDataLine;
end;
Close(FileTracks};
if (14 + CurTrack - TopTrack) < CurY
then Dec(CurY);
GotoXY(l,CurY);
end;
end;
until PressedKey = #27; { Esc}
Close(FileCDs); { .cdd)
end;
' end;
end.
. 21.1.
DC Talk!
DC Talk!
Ron Kennoley!
! !
1
:
1. It's killing roe <22>
2. Dive <4!2>
3. consume me <054>
( :
-: 3
>
. 21.1. AudioDB
Turbo Vision
- Turbo Vision.
, TCollection.
TCollection .
TPhone, Name
246
21.
Turbo Vision
21.2
constructor Init (AName: NameStr; ANumber: NumberStr);
constructor Load (var S: TStream) ;
procedure Store (var S: TStream);
end;
{ TPhoneListBox.
- Turbo Vision TListBox,
Ge,tText,
TPhone}
A
, PPhoneListBox = TPhoneListBox;
TPhoneListBox = object(TListBox)
function GetText (Item: Integer; MaxLen: Integer): String;
virtual;
end;
{ TPhoneColl.
- Turbo Vision TCollection,
Jhow, ,
,
)
PPhoneColl = 11;
TPhoneColl = object(TCollection)
function Show: Word;
end;
i
{ TViewDialog.
- Turbo Vision TDialog.^
,
TPhone,
.
PhoneColl - TPhoneColl.
L - ,
TPhone}
PViewDialog = ATViewDialog;
TViewDialog = object (TDialog)
PhoneColl: PPhoneColl;
L: PPhoneListBox;
constructor Init (APhoneColl: PPhoneColl);
procedure HandleEvent (var Event: TEvent); virtual;
end,(
{ RegisterPhone.
.
}
rocedure RegisterPhone;
L
implementation
{ TPhone}
{ Init - TPhone.
AName *- , ANumber - )
constructor TPhone.Init (AName: NameStr; ANumber: NumberStr);
247
248
21.
21.2
begin
TObject.Init; { }
{ TPhone}
Name := AName;
Number := ANumber;
end;
{ Load - TPhone
. ( Turbo Vision TSrteam) }
constructor TPhone.Load (var S: TStream);
begin
S.Read(Name, SizeOf(NameStr));
{ )
S.Read(Number, SizeOf(NumberStr)); { }
end;
{ Store - TPhone
( Turbo Vision TSream)}
procedure TPhone.Store (var S: TStream);
')
begin
S.Write(Name, SizeOf(NameStr));
{ }
S.Write(Number, SizeOf(NumberStr)); { }
end;
{ TPhoneListBox}
{ GetText ,
, TPhone.
Item - .
MaxLen }
function TPhoneListBox.GetText (Item: Integer; MaxLen: Integer):
String;
var
S: String; { }
begin
= '
'
'
{Lis^.At(Item) - Item.
PPhone(List* >At(Item)) -
PPhone,
TPhone.Name TPhone.Number}
{ S, ,
Name, ,
Length(Name)}
Move (PPhone (List".At (Item) ) ^NameEl] , S[l],
Length(PPhone(ListA.At(Item))A.Name));
{ S, 42- ,
Number, ,
Length(Number)}
Turbo Vision
249
21.2
{ TPhoneColl.Show ExecView
Turbo Vision TViewDialog, ,
}
function TPhoneColl.Show: Word;
begin
Show := DeskTopA.ExecView(New(PViewDialog,Init(@Self)));
end;
>
{ ModifyRecord ,
TPhone.
, , ,
ExecView.
"", TPhone )
function ModifyRecord (Phone: PPhone; Title: TTitleStr): Word;
var
R: TRect;
{ }
D: PDialog; { }
N,P: PInputLine; {
}
Result: Word;
{ }
begin
R.Assign(27,11,73,21); { }
{ ,
R}
D := New(PDialog, Init(R, Title + ' '));
R.Assign(2,2,44,3); { }
{ , R}
N := New(PInputLine, Init(R,40));
{ TPhone.Name}
NA.SetData(PhoneA.Name);
DA.Insert(N); { }
R.Assign(2,1,44,2); { ""}
{ - "")
DA.Insert(New(PLabel, Init(R,'',)));
R.Assign(2,5,16,6); { }
{ , R}
:= New(PInputLine, Init(R,12));
{ Phone.Number}
PA.SetData(PhoneA.Number);
DA.Insert (); { }
R.Assign(2,4,44,5) ; { ""}
{ - ""}
D A . Insert(New(PLabel, Init(R,'',N)));
R.Assign(5,7,15,9); { "OK")
{ - "".
bfDefault ,
, <Enter>)
DA.Insert(New(PButton, Init(R,'OK',cmOK,bfDefault)));
R.Assign (20,7,30,9); { ""}
A
D .Insert(New(PButton, Init(R,'',cmCancel,bfNormal)));
DA.SelectNext(False); { ""}
250
21.
21.2
{ }
Result := DeskTop* .ExecView (D) ;
if Result cmCancel then { "OK")
begin
W.GetData (PhoneA.Name) ;
{
TPhone.Name)
.GetData(.Number); {
Phone.Number)
end;
Dispose(D,Done); { }
ModifyRecord := Result;
end;
{ TViewDialog}
{ TViewDialog.Init -
}
constructor TViewDialog.Init(APhoneColl: PPhoneColl);
var
R: TRect; { }
SB: PScrollBar; { " "}
begin
R.Assign(10,5,70,16); { }
{
, R}
TDialog.Init(R, ' ');
PhoneColl := APhoneColl; { }
R.Assign(57, 2, 58,7); { }
SB := New(PScrollBar, Init(R)); { }
Insert(SB); { }
R.Assign(2,2,57,7); { )
{ - TPhoneListBox )
L := New(PPhoneListBox, Init(R,1,SB));
.NewList(PhoneColl); { }
Insert(L); { }
R.Assign(2,1,57,2); { }
{ }
Insert(New(PStaticText, Init(R,
'
')));
R.Assign(l,8,13,10); { ""}
{ ""}
Insert(New(PButton, Init(R,'',cmAdd,bfNormal)));
R.Assign(13, 8,25,10); { ""}
{ ""}
Insert(New(PButton, Init(R,'',cmEdit,bfNormal)));
R.Assign(25,8,36,10); { ""}
{ ""}
Insert(New(PButton, Init(R,'',cmRemove,bfNormal)));
R.Assign(36,8,49,10); { ""}
{ ""}
Insert(New(PButton, Init(R,'',cmOK,bfDefault)));
R.Assign(49,8,59,10); { ""}
{ ""}
Turbo Vision
251
21.2
Insert(New(PButton, Init(R,'',cmCancel,bfNormal)));
SelectNext(False); { "")
end;
{ TViewDialog.HandleEvent cmAdd, cmEdit
cmRemove, TViewDialog. ,
,
cmEdit cmRemove,
TPhoneColl }
procedure TViewDialog.HandleEvent (var Event: TEvent);
var
P: PPhone;
begin
TDialog.HandleEvent(Event); { }
if Event.What = evConvmand then { - }
begin
case Event.Command of
cmAdd: begin { ""}
{ TPhone
}
:= New (PPhone, Init ('.',"));
{ " "
"" ""}
if ModifyRecord(P,'.') cmCancel then
{ "",
- TPhone,
Name Number}
PhoneCollA.Insert(P)
else Dispose(P,Done); { "",
TPhone}
end;
cmEdit: { ""}
{ " "
.
"" "",
TPhone, .
- LA.Focused.
, - PhoneCollx.At(.Focused)}
ModifyRecord(PPhone(PhoneColl*.At(.Focused)), '');
cmRemove: { "")
{ PhoneColl
, .Focused}
PhoneColl*.AtDelete(LA.Focused);
end;
{
}
. SetRange (. List74. Count) ;
A
L .DrawView; { )
end;
if 111.Count >= 1 {
PhoneColl >= 1}
then EnableCommands([cmRemove,cmEdit]) {
"" "" }
252
21.
21.2
else DisableCommands([cmRemove,cmEdit]); ( ""
"" }
end;
(, }
const
srPhone
= 10001; ( )
srPhoneColl = 10002; ( }
RPhone: TStreamRec =? (
ObjType: srPhone; ( }
VMTLink: Ofs(TypeOf(TPhone)A); (
TPhone}
Load: OTPhone.Load; (
TPhone}
Store: @TPhone.Store ( -
TPhone}
RPhoneColl: TStreamRec = (
ObjType: srPhoneColl;
( )
VMTLink: Ofs(TypeOf(TPhoneColl)); (
TPhoneColl}
Load: @TPhoneColl.Load; (
TPhoneColl}
Store: @TPhoneColl.Store (
TPhoneColl}
( ,
}
procedure RegisterPhone;
begin
RegisterType(RPhone);
( TPhone}
RegisterType(RPhoneColl); ( TPhoneColl}
end;
end.
Turbo Vision
253
21.3
cmNew
cmOpen
= 101;
= 102;
{ ""}
{ ""}
{ TPhoneApp - TApplication.
PhoneList TPhoneColl -
( PhoneLst).
CurrentFile
(.phn)}
type
A
PPhoneApp = TPhoneApp;
TPhoneApp = object (TApplication)
PhoneList: PPhoneColl;
{ }
CurrentFile: PathStr;
{ }
constructor Init;
{}
procedure NewPhoneList; { }
procedure OpenPhoneList; { }
procedure SavePhoneList; {" .phn}
procedure HandleEvent (var Event: TEvent); virtual;
procedure InitMenuBar; virtual;
procedure InitStatusLine; virtual;
end;
{ FileExists True, ,
, . ,
False}
function FileExists(FileName: PathStr): Boolean;
var
F: File;
begin
Assign(F,FileName);
{$!-}
Reset(F);
{$!+}
if lOResult <> 0 then FileExists := False
else begin
FileExists := True;
Close(F);
end;
end;
{ TPhoneApp}
( Init - }
constructor TPhoneApp.Init;
begin
TApplication.Init; { }
{ , .
,
-
-.
RegisterType . ,
RegisterDialogs ,
Dialogs, TDialog, TInputLfne, TButton, TCluster, TRadioButtons,
TCheckBoxes, TListBox, TStaticText, TParamText, TLabel THistory}
254
21.
21.3
RegisterOb j ects ; { ,
{ ,
RegisterViews ;
RegisterMenus;
{ ,
RegisterDialogs ; { ,
RegisterApp;
{ ,
RegisterPhone;
{ , -
CurrentFile := ' ' ; {
end;
Objects)
Views}
Menus }
Dialogs}
App}
PhoneLst}
.phn)
Turbo Vision
255
21.3
PhoneList := PPhoneColl(S.Get);
S.Done; { S}
{
( PhoneLst).
"", }
if PhoneLisf.Show <> cmCancel then SavePhoneList;
end
else begin { }
{
( MsgBox)
"Error" "")
MessageBox(' ' + CurrentFile + ' .',
nil,mfError + mfOkButton);
CurrentFile := '';
end;
end;
Dispose (D,Done); { }
end;
{ SavePhoneList -
TPhoneColl ( ). CurrentFile
, SavePhoneList
, PhoneList
, CurrentFile}
procedure TPhoneApp.SavePhoneList;
var
D: PFileDialog; {
}
S: TBufStream; { TBufStream
}
begin
if CurrentFile = '' then { }
begin
{ )
D := New(PFileDialog,
Init('*.PHN',' ',
'',fdOKButton + fdHelpButton,100));
{ ""}
if Desktop'4.ExecView(D) <> cmCancel then
{, ,
CurrentFile}
D .GetFileName(CurrentFile);
Dispose(D,Done); { }
end;
if FileExists(CurrentFile)
then { )
{
CurrentFile. 512 }
S.Init(CurrentFile,stOpenWrite,512)
else
{ CurrentFile
. 512 )
S.Init(CurrentFile,stCreate,512);
256
21.
21.3
S.Put(PhoneList); {
, CurrentFile)
S.Done; { 3}
Dispose(PhoneList,Done); { }
end;
'
{ )
procedure TPhoneApp.HandleEvent (var Event: TEvent);
begin
TApplication.HandleEvent (Event) ; { }
if Event.What = evCommand then
{ - }
begin
,
case Event.Command of
cmNew: NewPhoneList;
{ ""}
cmOpen: OpenPhoneList; { ""}
else Exit; { - }
end;
ClearEvent(Event); { }
end;
end;
{ }
procedure TPhoneApp.InitMenuBar;
var
R: TRect;
begin
GetExtent(R);
R.B.Y := R.A.Y + 1;
MenuBar := New(PMenuBar, Init(R,NewMenu(
NewSubMenu ('',hcNoContext,NewMenu(
Newltem ('','F3',kbF3,cmNew,hcNoContext,
Newltem ('','F5',kbF5,cmOpen,hcNoContext,
NewLine (Newltem('','Alt-X',kbAltX,cmQuit,
hcNoContext,nil))))),nil))));
end;
{ }
procedure TPhoneApp.InitStatusLine;
var
R: TRect;
begin
GetExtent (R);
R.A.Y := R.B.Y - 1;
StatusLine := New (PStatusLine,Init (R,
NewStatusDef (0,$FFFF,
NewStatusKey ('~F3~ ',kbF3,cmNew,
NewStatusKey ('~F5~ ',kbF5,cmOpen,
NewStatusKey ('~Alt-X~ ',kbAltX,cmQuit,
NewStatusKey ('',kbFlO,cmMenu,nil)))),nil)));
end;
var
PhoneApp: PhoneApp;
Turbo Vision
257
21.3
begin
PhoneApp.Init;
PhoneApp.Run;
PhoneApp.Done;
end.
( }
{ }
{ }
, PhoneLst Turbo
Pascal Turbo Vision.
Turbo Pascal .
PhoneLst, Phone.pas
. ,
. 21.2.
F3
. 21.2. Phone
'
.
, . 21.3.
. (. 21.4).
. , . 21.5.
. 2.15 . , , (. . 2.14)
258
21.
. , .
. 21.3.
. 21.4.
. . (. 21.6).
. 21.5.
. 21.6.
Turbo Vision
259
.phn,
, .
Phone | ( <F5>)
. phn.
Turbo Pascal
Turbo Pascal .
, .
, .
( setup.exe install, ) ,
, ,
. , . Turbo Pascal
, . ,
(, Turbo Vision Windows).
. . , ,
Turbo Pascal.
.
Turbo Pascal
turbo.exe ( ) turbo, tpl (
Turbo Pascal). , , . turbo.
tpc.exe. System, Crt, Printer Dos
Turbo.tpl, .tpu
. ,
.
Turbo Pascal, : , PChar, Turbo Vision
. , .
261
graph. tpu
( ) .bgi. .bgi,
(,
egavga.bgi EGA VGA). ,
- , . ch ( .bgi \TP\BGI).
.tpu , turbo.exe,
Options | Directories (. . 1.4) Turbo Pascal. .
. tph. -.
Help | Files Turbo Pascal.
turbo. tph , ,
turbo. .
, I II , , ,
, :
, Dialogs, Drivers, Editors, Memory, Menus, MsgBox, Objects,
StdDlg, Views Tv_l ( 18) Phone ( 22).
Graph.
15, : Graph_01, Graph_02, Graph_03, Graph_04.
20, : FreePen, Hunter, Piano.
, : FuncAbs, FuncAtan, FuncCos, FuncExp,
FuncGBkC, FuncGDrN, FuncGetC, FuncGetX, FuncGetY, FuncGGrM,
FuncGMdN, FuncGMxC, FuncGMxM, FuncGMxX, FuncGMxY, FuncGPix,
FuncGPSz, FuncG.rEM, FuncGrRs, FuncImgS, FuncInUF, FuncLn, FuncSin,
FuncTxtH, FuncTxtW, ProcArc, ProcBar, , ProcClsG, ProcClVP.,
ProcCrcl, ProcDetG, ProcDPol, ProcElps, Pro^FEll, ProcFFil, ProcFPol, ProcGDef, FuncGImg, ProcGtAC, ProcGtAR, ProcGtDP, ProcGtFP,
ProcGtFS, ProcGtLS, ProcGtMr, ProcGtPa, ProcGtVS, ProcIniG, ProcLine, ProcLnRl, ProcLnTo, ProcMvRl, ProcMvTo, ProcOTXY, ProcOutT,
262
. Turbo Pascal
Turbo Pascal
Turbo
Pascal,
.
. , <Alt>, , . ,
- , <Alt>,
, .
Open. . .
Save
Save as. . .
Save all
F3
FZ
Change dir. . .
Print
Printer setup.
DOS shell
Exit
Alt +X
. .1. File
Undo
Redo
filt+BkSp
Cut
Shift Del
Copg
Ctrl* Ins
Paste Shift+Ins
Clear
Ctrl+Del
Show clipboard
. .2. Edit
Find...
Replace. . .
Search again
Go to line number. . .
Show last compiler error
Find error
Find procedure. . .
. .. Search
New
Open
<F3>
Save
<F2>
Save as
Save all
Change dir
. , Turbo Pascal
Print
.
Printer setup
DOS shell
MS-DOS.
Turbo Pascal MS-DOS exit
Exit
<Alt+X>
Turbo Pascal
264
. Turbo Pascal
Undo
<Alt+Bksp>
,
Redo
,
Undo
Cut
<Shift+Del>
.
Copy
<Ctrl+
Insert>
Paste
<Shift+
Insert>
Clear
Show clipboard
<Ctrl+Del>
.. Search (. .)
Find
<Ctrl+Q+F>
,
Replace
<Ctrl+Q+A>
,
,
Search again
<Ctrl+L>
Find Replace
Go to
line number
Show last
compiler error
Find error
<Alt+F8>
.
""
Find procedure
Run
Ctrl+F9
Step over
F8
Trace into
F7
Go to cursor
F4
Program reset Ctrl+FZ
Parameters. . .
. .4. Run
Compile
Hake
Build
Hlt+F9
F9
Destination Memory
Primary file. . .
Clear primary file
Information. . .
. .5. Compile
Breakpoints
Call stack
Register
Match
Output
User screen
Ctrl+F3
Hlt+F5
Run
265
Run
<Ctrl+F9>
Step over
<F8>
Trace into
<F7>
Go to cursor
<F4>
Program reset
<Ctrl+F2>
Parameters
,
.:--.
MS-DOS
.5. Compile (. .5)
Compile
<Alt+F9>
Make
<F9>
Build
Destination
( )
Primary file
Clear
primary file
Information
Messages
Go to next
Hlt+F8
Go to previous fllt*F7
Shift+FZ
Grep
Turbo Assembler Shift+F3
Turbo Debugger Shift+F4
Turbo Profiler Shift*F5
. .7. Tools
Compiler. . .
Henorg sizes. . .
Linker...
Debugger. . .
Directories.
Tools. . .
Environment
Open. . .
Save TURBO. TP
Save as. . .
. .8. Options
Tile
Cascade
Close all
Refresh display
Size/Howe Ctrl+F5
Zoom
F5
Next
F6
Previous Shift+F6
Close
Hlt+F3
List...
flit +B
. .9. Window
(. . 13.4)
Breakpoints
Call stack
<Ctrl+F3>
266
. Turbo Pascal
.6
Register
Watch
Output
User screen
<Alt+F5>
Evaluate/modify
Add watch
<Ctrl+F4>
Add breakpoint
<Ctrl+F8>
<Ctrl+F7>
,
Turbo Pascal
Watch
Messages
,
DOS (
GREP). <SpaceBar> ()
Go to next
<Alt+F8>
Go to previous
<Alt+F7>
Grep
<Shift+F2>
, ,
Turbo Pascal
'
, ,
Turbo Pascal
,
Compiler
Memory sizes
Linker
.- .
Debugger
Directories
(. 13.1)
.
.
(-)
.
(Memory), ,
(. . 1.4)
Options
.8
Tools
Environment
Open
-
Save
Save as
267
,
, Tools
Turbo
Pascal: , , , ,
(. . 1.5)
,
Turbo Pascal,
Options | Save
Turbo Pascal .
. tp
.
Tile
,
Cascade
Close all
Refresh display
,
Size/Move
<Ctrl+F5>
Zoom
<F5>
Next
<F6>
Previous
<Shift+F6>
Close
<Alt+F3>
List
<Alt+0>
<Alt+N>
(N)
.10. Help (. .10)
Contents
Index
<Shift+Fl>
Topic search
. -
<Ctrl+Fl>
t Pascal,
268
. Turbo Pascal
.10
Previous topic
<Alt+Fl>
Using help
Files
Compiler
directives
Reserved words
Standard units
Turbo Pascal
Language
Error messages
About
,
Turbo Pascal
Turbo
Pascal
Contents
Index
Shift+Fl
Topic search
Ctrl+Fl
Previous topic
fllt+Fl
Using help
Files..
Compiler directives
Procedures and functions
Reserved words
Standard units
Turbo Pascal Language
Error messages
Hbout...
. .10. Help
,
ReadKey. , ASCII (. ). : #0 , . . . .1.
.1.
16
17
18
19
20
21
22
23
24
25
30
31
32
33
34
35
36
37
38
39
44
45
46
47
48
49
<Alt+Q>
<Alt+W>
<Alt+E>
<Alt+R>
<Alt+T>
<Alt+Y>
<Alt+U>
<Alt+I>
<Alt+0>
<Alt+P>
<Alt+A>
<Alt+S>
<Alt+D>
<Alt+F>
<Alt+G>
<Alt+H>
<Alt+I>
<Alt+J>
<Alt+K>
<Alt+L>
<Alt+Z>
<Alt+X>
<Alt+C>
<Alt+V>
<Alt+B>
<Alt+N>
50
59
60
61
62
63
64
65
66
67
68
71
72
73
75
77
79
80
81
82
83
84
85
86
87
88
<Alt+M>
<F1>
<F2>
<F3>
<F4>
<F5>
<F6>
<F7>
<F8>
<F9>
<F10>
<Home>
<t>
<PageUp>
->
<-
<End>
<4->
<PageDown>
<Insert>
<Delete>
<Shift+Fl>
<Shift+F2>
<Shift+F3>
<Shift+F4>
<Shift+F5>
270
.1
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<Shift+F6>
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<Cltr+<->
106
107
108
109
110
111
112
113
114
<Shift+F7>
<Shift+F8>
<Shift+F9>
<Shift+F10>
<Ctrl+Fl>
<Ctrl+F2>
<Ctrl+F3>
<Ctrl+F4>
<Ctrl+F5>
<Ctrl+F6>
<Ctrl+F7>
<Ctrl+F8>
<Ctrl+F9>
<Ctrl+F10>
<Alt+Fl>
<Alt+F2>
<Alt+F3>
<Alt+F4>
<Alt+F5>
<Alt+F6>
<Alt+F7>
<Alt+F8>
<Alt+F9>
<Alt+F10>
<Ctrl+PrtScr>
<Ctrl+->
<Ctrl+End> '
<Ctrl+PageUp>
<Ctrl+Home>
<Alt+l>
<Alt+2>
<Alt+3>
<Alt+4>
<Alt+5>
<Alt+6>
<Alt+7>
<Alt+8>
<Alt+9>
<Alt+0>
<ftlt4 >
<Alt+=>
<Ctrl+PageDown>
<F11>
<F12>
<Shift+Fli>
<Shift+Fl2>
<Ctrl+Fll>
<Ctrl+F12>
<Alt+Fll>
<Alt+F12>
, , -
. . .2.
.2.
16-
10-
<Escape>
01
<!>, <1>
02
<@>, <2>
03
<#>, <>
04
<$>, <4>
<%>, <5>
05
<)>,
06
< >,
16-
07
08
09
10-
10
<0>
11
<->
12
271
.2
<+>, <=>
<BackSpace>
<Tab>
<Q>
<W>
<>
<R>
<>
<Y>
<U>
<I>
<o>
<p>
<{>, <[>
<}>, <]>
<Enter>
<Ctrl>
<A>
<S>
<D>
-<F>
<G>
<H>
<J>
<K>
<L>
<:>, <;>
<">, <>
<~>, < - >
<Shif t> ()
<|>, <\>
<z>
<x>
<c>
<v>
<B>
<N>
16- 10-
OD
13
OF
10
11
12
13 .
14
15
16
17
18
19
1
1
1C
1D
IE
1F
20
21
22
23
24
25
26
27
28
29
2
2
2
2D
2
2F
30
31
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<>
>, <,>
<, <.>
<?>,, </>
<Shift> ()
<PrintScreen>
<Alt>
<Space>
<Caps Lock>
<F1>
<F2>
<F3>
<F4>
<F5>
<F6>
<F7>
<F8>
<F9>
<F10>
<Num Lock>
<Scroll Lock>
<Home>
<t>
<PageUp>
< >
->
<5>
<-
<+>
<End>
<-l>>
<PageUp>
<Insert>
<Delete>
<F11>
<F12>
816- 10-
32
50
33
34
35
36
37
38
39
3D
3F
40
41
42
43
44
45
46
47
48
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
49
4
4
73
74
75
4
4D
4
4F
50
76
77
78
79
80
51
52
53
D9
DA
81
82
83
217
218
BIOS MS-DOS
BIOS MS-DOS, Turbo Pascal. , , (
, , ),
.
BIOS
$05
: .
: .
$09
<PrintScreen>. , .
$10
, .
. .
$00
= 0
AL (. .1).
: .
. .
.1. , $00 $10
AL
0
1
2
3
4
40x25
40x25
80x25
80x25
320x200
8x8, 8x14
8x8, 8x14
8x8, 8x14
8x8, 8x14
8x8
16/8
16
16/8
16
4
'\
CGA, EGA
CGA, EGA
CGA, EGA
CGA, EGA
CGA, EGA
$10 -
273
.2
AL
320x200
640x200
80x25
320x200
640x200
640x350
640x350
640x480
640x480
640x480
8x8
4*
8x8
2
3
16
4 16
CGA, EGA
CGA, EGA
MDA, EGA
EGA, VGA
EGA, VGA
EGA, VGA
EGA, VGA
2
16
VGA
VGA
256
VGA
6
7
$00
$
$OF
$10
$11
$12
$13
9x14
8x8
8x8
8x14
8x14
8x16
8x16
8x16
16
3
* .
i
'
$01
= 1
.
CL .
: .
} '
0 (
) $1F ( ). = $20, .
0 $ 1F.
( ),
" :
VGA (25 ) 16
;
EGA (25 ) 14 ;
CGA (25 );
EGA (43 );
VGA (50 ) 8 .
$02
= 2
( 0).
DH ( 0).
DL ( 0).
: .
$03
= 3
( 0).
274
BIOS
.
CL .
DH ( 0).
DL ( 0).
$05
= 5
AL ( 0).
: .
CGA, EGA VGA 8 , MDA .
$06
$07
= 6 (7)
AL .
.
( 15)
.
, CL .
DH, DL .
: .
$08
= 8
( 0).
AL ASCII ( ASCII . ).
( 15).
$09
= 9
AL ASCII (>> ASCII . ). , 127, , $1F.
( 0).
BL ;
(<< 15).
$10 -
275
( 1).
: .
.
$
= $
AL ASCII ( ASCII . ). , 127, , $1F.
( 0).
( 1).
: .
$
= $
BL 0 $OF (
) $10 $1F ( ).
0 ( green/red/brown) 1 ( cyan/magenta/white).
: .
$
= $
AL ( 15). $80
XOR .
( 0).
( 1).
DX ( 1).
: .
$00
= $OD
( 0).
( 1).
DX ( 1).
: AL ( 15).
$
= $
AL ASCII ( ASCII . ).
BL (4< 15).
: AL ( 15).
276
BIOS
, AL,
.
, .
$OF
: = $OF.
AL (. . .1).
.
( 0).
$11 (EGA/VGA)
15 , AL.
$00 ,
= $11
AL = 0
.
BL ( EGA 0 3, VGA 0 7).
.
DX ASCII , ES:BP
( ASCII . ).
ES:BP , .
: .
$01 8x14
$02 8x8
= $11
1 = 1 (2)
BL ( EGA 0 3, VGA 0 7).
: .
$03
= $11
1 = 3
BL ( EGA 0 3, VGA 0 7).
: .
$04
8x16 (VGA)
= $11
AL = 4
BL ( 0 7).
: .
$10 -
277
$10
,
= $11
AL = $10
.
BL ( EGA 0 3, VGA 0 7).
.
DX ASCII , ES:BP
( ASCII . ).
ES:BP , .
: .
$11
8x14
$12
8x8
= $11
AL = $11 ($12)
BL ( EGA 0 3, VGA 0 7).
: .
~*
$14
8x16 (VGA)
= $11
AL = $14
BL ( 0 7).
' \
: .
$20 $1F
= $11
AL = $20
ES:BP , ,
8x8 ASCII, 127.
: .
'
$21 ,
,
= $11
AL = $21
BL :
0 ( DL);
1 14 ;
2 25 ;
3 43 .
, .
278
BIOS
DL ( ) BL = 0.
ES:BP , ,
.
/
' . . " .
: .
$22
8x14
$23
8x8
$24
8x16
= $11
AL = $22 ($23, $24)
BL :
0 ( DL);
1 14 ;
2 25 ;
3 43 .
DL ( ) BL = 0.
: .
$30
= $11
AL = $30
:
0 $1F;
1 $43;
2 8x14;
3 8x8;
4 8x8 ( );
5 8x14;
6 8x16 ( VGA);
7 8x16 ( VGA).
( , 1 ).
DL .
ES:BP .
$12 EGA/VGA
EGA VGA,
CGA MDA. , BL. .
$10 EGA
= $12
BL=$10
$10 -
279
BIOS (0 ; 1 ).
BL (0 64 ; 1 128 ; 2 192 ; 3
256 ). BL > 3, BIOS CGA MDA.
( RCA).
CL .
$30
= $12
AL :
0 200 (EGA/VGA);
1 350 (EGA/VGA);
2 400 ( VGA).
BL=$30
VGA,
$12.
$36 /
= $12
AL : 0 ; 1 .
BL = $36
AL , $12.
,
. .
$13 (AT/EGA/VGA)
.
$00
$01
= $13
AL = (1)
( 0).
BL ( 15).
.
DH, DL .
ES:BP , .
: .
$02
280
BIOS
$03
= $13
AL - 2 (3)
( 0).
.
DH, DL .
ES:BP , .
: .
. , .
, "!". . (, s) , :
| s := ' ' + # 7 + ' ' + # 7 + ' ' + 7 + ' ' + 7 + ' ' + # 7 + ' ' + # 7 + ' 1 ' + # 1 5 ;
| LEA , S+1
s .
. ( $07), "!"
( $OF = 15).
$11
: .
.
, . .2.
.2. $11
0
1
2,3
4,5
1
6,7
8
"1",
",
, :
0116 ; 10 32 ; 1 1 64
:
00 ; 01 40x25; 10
80x25; 11 - 80x25
: 00 1 ; 01 2; 10 3; 11 4
"1",
$12 -
281
.2
9-11
12
13
14,15
RS-232:
000 0;0011;... 100 4;... 111 7
", .
"1",
, , : 00 0; 01 1 ; 1 0 2; 1 1 3
$12
: .
: .
$13 /
, . .
$00
: = 0.
: BIOS.
. , . /,
. . . .4.
.. /,
$00
$01
,
64
(CRC)
$01
$02
$03
$04
$06
$08
$09
$
$10
$20
$40
$80
282
BIOS
.4. /,
$00
$01
$02
$03
$04
$05
$06
$07
$08
,
/
(DMA- direct
memory access),
(DMA-)
/ 64
CRC,
,
$09
$
$
$00
$
$OF
$10
$11
$20
$40
$80
$
$
$
$
$FF
$13 /
283
, () .
$01
= 1
DL $00 $03 ; $80 $81
.
: BIOS (. . . . .4).
$02
= 2
AL .
(), 0.
CL , 1.
DL : 03 ; $80 $81 .
DH .
ES:BX .
CF , BIOS (. . .
. .4). = 0, , ES:BX,
.
, 8- ,
6 ( CL) 10 ( +
CL). , 1024, 64.
$03
= 3
AL .
(), 0.
CL , 1.
DL : 0-3 ; $80 $81 .
DH .
ES:BX .
CF , BIOS (. . .
. .4).
$04
= 4
AL .
(), 0.
284
BIOS
CL , 1.
DL : 03 ; $80 $81 .
DH .
CF , BIOS (. . .
. .4).
'.
$05
= 5
AL .
() 10 ( .
$02).
DL : 03 ; $80 $81 .
DH .
ES:BX , .
CF , BIOS (. . .
. .4).
ES:BX. . PC 4 (. .5).
.5. PC
0
1
( 0)
( 0)
( 1 )
:
0 128 ; 1 125 ; 2 512 ; 3 1 024
2
3
: $00 ; $80
( 0)
XT ,
ES:BX, AL,
1 16.
$08
= 8
DL : 0-3 ; $80 $81 .
$13 - /
285
CF , BIOS (. . .
. .4).
( 6
CL, + CL).
DL .
DH .
ES:DI .
16- ,
. .7.
.7. PC
0
2
2
1
2
3
5
2
()
1
7
1
8
:
0-2 ;
6 ;
7
1
9
1
10
1
11
4
12
$
= $
AL ( 1).
(), 0.
CL , 1.
DL : $80 $81 .
DH .
ES:BX .
CF , BIOS (. . .
. .4). = 0, , ES:BX,
.
$02 ,
,
.
. $00 $13.
286
BIOS
$
= $
AL ( 1).
(), 0.
CL , 1.
DL : $80 $81 .
DH .
ES:BX .
CF , BIOS (. . .
. .4).
$03 ,
, (
); ES:BX.
$
= $
,
() 10 ( .
$02 $13).
DL : $80 $81 .
DH .
CF , BIOS (. . .,
. .4).
$OD
AH = $OD
DL : $80 $81 .
CF , BIOS (. . .
. .4).
$10
= $10
DL : $80 $81 .
CF , BIOS (. . .
. .4).
$11
= $11
DL : $80 $81 .
$13 /
287
CF , BIOS (. . .
. .4).
$14
: = $14
CF , BIOS (. . .
. .4).
\
N '
$15
= $15
DL : 0 3 ; $80 $81 .
CF , BIOS (. . .
. .4). CF , : 0 ; 1 (
); 2 (
); 3 .
$16
= $16
DL 0 3.
CF , BIOS (. . .
. .4). CF , : 0 ; 1 ; 2 ; $80
.
$17
= $17
AL :
1 360 360 ;
2 , 360 1.2 ;
3 1.2 1.2 ;
4 720 720 .
DL 0 3.
CF , BIOS (. . .
. .4).
, 1.44
2.88 . $18 ( ).
288
BIOS
$18
= $18
.
CL .
DL 0 3.
CF , BIOS (. . .
. .4).
$14 /
,
RS-232. .
$00
= 0
AL .
DX - ( 0 3).
.
AL .
AL . . . 8.
.8. -
0,1
2
3,4
5-7
: 10 7 ; 11
: 0 1,1 2
: 00,10 ; 01 ; 11
: 000 110; 001 150; 010 300; 011 600; 100
1200; 101 2400; 1 10 4800; 1 1 1 9600
BIOS , 9600 /
, AL . . .9 . 10.
.9.
0
1
2
3
4
5
6
( 7
)
$16 -
289
. 10.
0
1
2
3
4
5
6
7
$01
V
AH = 1
AL .
DX - ( 0 3).
(. . .9). "",
,
.
$02
= 2
DX - ( 0 3).
.
. ,
I
. 0, , (.
. .9).
AL .
$03
= 3
DX - ( 0 3).
(. . .9).
AL (. . . 10).
/
$16
>
, . .
$00
: = 0
(. ).
290
BIOS
AL ASCII (. ) (.
).
$01
: = I
ZF "",
.
(. ), ZF = 0.
AL ASCII (. ) (. ), ZF = 0.
,
.
$02
: = 2
AL (. . 11).
.11.
", <Shift> -
"1", <Shit> -
",
<Ctrl+Shift>
"1",
<Alt+Shift>
1
2
3
4
<Scroll Lock>
<Num Lock>
<Caps Lock>
<Insert>
$03
,
= 3
AL = 5
(0 250 ; 1 500 ; 2 750 ; 3 1 ).
BL (0 30 ; 1 26,7
; 2 24 ; $1F 2 ).
: .
$17 -
291
$05
= 5
, (. ).
CL ASCII (. ) (. ).
AL 0 ; 1
.
$17
( ).
$00
= 0
AL ASCII (. ).
(. . 12).
.12.
0
3
4
5
6
7
"1", ,
"1", ,
/
"1", ,
", ,
', ,
'1", ,
$01
= 1
DX - (0 - LPT1; 1 - LPT2; 2 - LPT3).
(. . .12).
$02
= 1
DX - (0 - LPT1; 1 - LPT2; 2 - LPT3).
(. . .12).
292
MS-DOS
$1
$1 . , , BIOS , "". ,
18 , 1092 , 65543 , 1573040 .
. , - . , .
$00
: =
AL 0, 24 .
, DX ( , DX ).
$01
= 1
, DX .
CF 0, ; 1
.
MS-DOS
$21 MS-DOS
$00
= 0
CS (PSP Program Segment Prefix)
.
: .
""
PSP.
$01
: = 1
AL ASCII (. ) , (). (.
) .
$21 - MS-DOS
293
$02
= 2
DL
_ ASCII (. ).
: .
$03
(1 AUX)
: = 3
AL ASCII (. ).
$04
(1 AUX)
= 4
DL ASCII (. ).
: .
$05 ( LPT1)
= 5
DL ASCII (. ).
: .
'
$06 /
= 6
DL 0 SOFE ASCII (. ) ,
(); SOFF .
( DL = SOFF).
ZF 0, .
AL ASCII (. ) , ZF = 0.
$07
<Ctrl+Break>
: = 7
AL ASCII , (.
).
$08
<Ctrl+Break>
: = 8
AL ASCII , (.
).
294
MS-DOS
$09
= 9
DS:DX , "$".
: .
$
= $
DS:DX , .
(#13).
.
DS:DX , , (#13).
. , 254 .
$
' : = $
AL $OFF, ; 0,
.
$
= $
AL - $21, ($01, $06, $07, $08 $).
: .
$OD
: = $OD
: .
,
.
,
$
= $
DL , (0 ; 1 ..).
: AL .
$21 - MS-DOS
295
, , ( $24).
$OF FCB
FCB File Control Block ( ).
, 37 , , .
FCB . . 13.
.13. FCB
1'
12 ($)
14 ($)
16 ($10)
20 ($14)
2
2
4
2
22 ($16)
32 ($20)
33 ($21)
8
1
4
.
:
0 ; 1 ; 2 ..
: 0 ; 1 ..
,
,
/ : 0-4 ;
5-8 ; 9-15 ,
1980
( 0 127)
( )
= $OF
DS:DX FCB.
AL 0, ( FCB ); SOFF
.
, FCB, , FCB.
FCB 0, 128.
$10 FCB
= $10
DS:DX FCB.
AL 0, ; $OFF .
296
MS-DOS
$11 FCB
= $11
DS:DX FCB ( "?").
AL 0, ; $OFF .
$12 FCB
= $12
- DS:DX FCB ( "?").
AL 0, ; $OFF .
$13 FCB
= $13
DS:DX FCB ( "?").
AL 0, ; $OFF
, , .
$14 FCB
= $14
DS:DX FCB.
AL 0, ; 1,
; 2, FCB
(DTA Data Transfer Array) ( ); 3, ( ).
, FCB,
,
DTA. .
$15 FCB
= $15
DS:DX FCB.
AL 0, ; 1, ; 2, FCB
(DTA) ( ).
$21 - MS-DOS
297
, FCB,
,
DTA. .
$16 FCB
. - , *N
= $16
DS:DX FCB.
AL 0, ( FCB ); $OFF .
$17 FCB
= $17
DS:DX FCB, .
AL 0, ; $OFF (
, ..).
FCB, $11 (18- ).
$19 ,
MS-DOS
: = $19
AL , MS-DOS (0 - , 1 ..).
FCB, $11 (18- ).
$1 (DTA)
= $1
DS:DX (DTA),
,
$11, $12, $4 $4F.
: .
$1
: = $1
DS:BX (FAT File Allocation Table).
'
DX .
AL .
.
298
MS-DOS
DX * AL * .
$1
= $1
DL (0 ; 1 , ..).
DS:BX (FAT).
DX .
AL .
.
$1F
: = $1F
AL 0, , $OFF.
DS:BX .
. . 14.
.14.
1
0
: 0 ; 1 ..
1
1
2
2
1
(
4
)
1
"-" (,
5
2, )
2
FAT
6
1
8
FAT
9
2
,
11 ($)
2
( )
13 ($00)
2
(
)
15($OF)
1
, FAT
16 ($10)
2
18 ($12)
4
1
22 ($16)
. :
$FO 3,5" (1 ,44 ), 2 , 1 8 ;
3,5" (2,88 ), 2 , 36 ;
$F8 ;
$F9 3,5" (720 ); 2 , 9 ;
$FB 3,5" (640 ); 2 ; 8
$21 - MS-DOS
299
.14
23 ($17)
24 ($18)
28 ($1 )
30($1)
4
2
2
$00 ,
.
$FF
$21 FCB
= $21
DS:DX FCB.
AL 0, ( DTA ); 1, ; 2, FCB (DTA)
( ); 3,
(
).
, FCB, , FCB.
$22 FCB
= $22
DS:DX FCB.
AL 0, ; 1, ; 2, FCB (DTA) ( ).
, FCB, , FCB.
$23 FCB
= $23
DS:DX FCB.
AL 0, ; $OFF .
FCB
, . FCB.
$24 FCB
= $24
300
MS-DOS
DS:DX FCB.
: .
FCB , .
$27
= $27
.
DS:DX FCB.
AL 0, ( DTA ); 1, ; 2,
(DTA) FCB,
, ( ); 3, ( ).
.
, FCB,
, , FCB.
$28
= $28
.
DS:DX FCB.
AL 0, ; 1, ; 2, (DTA) FCB, ,
( ).
, FCB,
, , FCB.
$29
FCB
= $29
AL , . . , "1":
0 ; 1
, FCB; 2 , FCB; 3 ,
FCB.
DS:SI .
ES:DI , FCB..
$21 - MS-DOS
301
AL 0, FCB ; 1,
FCB ; $OFF , , .
DS:DI , .
ES:DI FCB.
, .
: "DrFileName.ext".
$2
: = $2
AL (0 , 1 ..).
- ( 1980 2099).
DH .
DL .
- '
$2
= $2
- ( 1980 2099).
DH .
DL .
AL 0, ; SOFF.
$2
: = $2
( 0 23).
CL ( 0 59).
DH ( 0 59).
DL ( 0 99).
$2D
= $2D
( 0 23).
CL ( 0 59).
DH ( 0 59).
DL ( 0 99).
AL 0, ; SOFF.
$2 /
: = $2
: .
,/
302
MS-DOS
, MS-DOS CRC (44 .
, $00 $13). , .
$2F DTA
: = $2F
: ES:BX DTA.
$30 MS-DOS
: = $30
AL .
.
$31 ,
= $31
AL , $4F.
DX , ( 16 ).
\
: .
$32
= $32
DL (0 ; 1 ; 2 ..).
AL 0, DL ; $OFF.
DS:BX (. . . 14).
$36
= $36
DL (0 ; 1 ; 2 ..).
, DL
, $FFFF.
.
( 512).
DX .
, ,
* * , * * DX.
$21 - MS-DOS
303
$39
= $39
DS:DX , #0.
: , CF "1".
$
= $
DS:DX , #0.
: , CF "1".
$ MS-DOS
= $
DS:DX . , #0.
: , CF "1".
= $
DS:DX , #0.
. "1"
: 0 ; 1 ; 2 ; 3 ; 4 ; 5. .
, CF "1", .
16- , /,
.
$3D
= $30
AL (0 ; 1 ; 2 /).
DS:DX , #0.
, CF "1", .
$
= $
.
: , CF "1".
304
MS-DOS
$3F
AH = $3F
.
.
DS:DX .
, CF "1", .
/ . '\
$40
.
= $40
.
(0 , ).
DS:DX , .
.
, CF "1", .
$41
= $41
DS:DX , #0,
.
: , CF "1".
$42
= $42
AL : 0 CX:DX; 1
CX:DX; 2
CX:DX.
.
CX.-DX (*65536 + DX).
, CF "1".
DX^X .
$43
: , .
$00
= $43
$21 - MS-DOS
305
AL = 0
DS:DX , #0,
.
, CF "1".
( ).
, $ $21.
$01
= $43
AL = 1
, ( , $ $21).
DS:DX , #0,
.
: , CF "1".
$47 ,
= $47
DL (0 ; 1 , ..).
DS:SI (64 ).
: , CF "1".
$4 /
, AL.
$00
= $4
AL-0
DS:DX , #0,
.
ES:BX , .
. . 15.
.15. ,
'
0
2
,
4
2
(PSP) $0080
FCB, 4
6
$005 (
)
FCB, 4
10($)
$006 ( )
: , CF "1".
306
MS-DOS
$01
= $4
AL- 1
DS:DX , #0,
.
ES:BX , .
. . 16.
.16. ,
0
2
2
4
10 ($)
14 ($)
18 ($12)
4
4
.
,
(PSP) $0080
FCB, $005 ( )
FCB, $006 ( )
,
,
, CF "1".
ES:BX , .
i
$05
= $4
AL-5
DS:DX ,
MS-DOS. .
. 17.
.17. ,
MS-DOS
0
2
2
0 ; 1
2
4
, #0,
2
6
(PSP)
2
8
32-
12($)
2
32- ,
: .
$21 - MS-DOS
307
$4
= $4
AL .
: .
$4D
: = $4D
AL .
:
0 ;
1 <Ctrl+Break>;
2 ;
3 $31 $21.
$4
'
= $4
, (<
, $ $21).
DS:DX , #0, ( ).
: , CF "1".
, DTA : 021 ; 22 ; 22, 23 / ; 24,25 / ; 2629 ; 30-42
.
$4F
= $4F
DS:DX , $4.
: , CF "1".
, DTA (. , $4).
$54
: = $54
AL CRC (< .
, $00 $13): 0 ; 1 " .
308
MS-DOS
$56 /
= $56
DS:DX , ' #0,
1.
ES:DI , #0, .
: , CF "1".
$57
/
: , .
$00
= $57
AL = 0
( . ,
$ $21).
, CF "1".
( 0-4 , 2
; 510 ; 1115 ).
DX ( 04 ; 5-8 ; 9-15
, 1980 ).
$01
= $57
AL= 1
.
( 0-4 ; 510
; 1115 ).
DX ( 04 ; 58 ; 915
, 1980 ).
: , CF "1".
$62
: = $62
(PSP Program Segment Prefix) .
$33
,
AL. .
$00
: AL = $00
$33 -
309
$0000 ; SFFFF .
.
$01
: AL = $01
: .
$02
: AL = $02
I
: .
i
$03
: AL = $03
. 0 "1"
; 1 "1" ; 2
"1" .
.
DX ,
$04
AL=$04
.
DX .
: .
$05
AL=$05
(0 ; 1 ; 2 ).
. 0 "1"
; 1 "1" ; 2
"1" .
.
.
DX
.
$06
AL = $06
(0 ; 1 ; 2 ).
310
MS-DOS
. 0 "1"
; 1 "1" ;
2 "1" .
.
, .
DX ,
.
$07
AL = $07
( ).
DX ( ).
: .
$08
AL = $08
( ).
DX ( ).
: .
$09
AL = $09
""
.
""
.
ES:DX 64 ,
.
: .
$10
,
: AL = $10
( ).
DX .
- "", 1/200
.
$33 -
311
$
AL = $
, : 0 ;
1 ; 2 ; 3
; 4 ; 5 ; 6
. ,
$007F.
ES:DX .
: .
$OF
AL = $OF
, "" 8
(1 = 1/200 ).
DX , "" 8
(1 = 1/200 ).
: .
$1F
: AL = $1F
: $00IF ; SFFFF
.
$20
: AL = $20
: .
.
$21
: AL = $21
: $0021 ; $FFFF
.
.
$24
: AL = $24
.
BL .
: 1 ; 2
; 3 ; 4 PS/2; 5 HP.
CL .
8x86
, ,
.
ASCII-
AL ( ADD) ASCII. () AL 9
AF 1, : 1 , 6 AL AF CF,
1. AL,
0.
:
AAD ASCII-
ASCII-
AL. AL
10, , AL.
:
AAS ASCII-
ASCII- AL.
() 9 CF 1, AAS 6 AL 1 AF CF 1.
() AL ( 0).
: AAS
-
ADC
. CF 1,
ADC 1 .
ADD -
313
ADC 1 . 2
1, ADD.
: ADC /, //
ADD
,
,
.
: ADC /, //
AND ""
( "")
. , ,
. . AND . 1, , .
: ADC /, //
CALL
( near) ( far) . RETN , NEAR RETF FAR.
NEAR CALL
SP 2 ( IP),
IP . RETN .
FAR CALL
, SP, CS, CS , , IP, IP
.
: CALL /
CBW
AL .
CBW (7) AL .
: CBW
CLC CF
(CF=0). , ,
ADC .
: CLC
CLD DF
(DF=0).
, CMPS MOVS, .
314
. 8x86
: CLD
CMC CF
CF, CF
.
: CMC
.
, ,
. AF, CF, OF, PF, SF ZF.
: .
, ; .
: /, //
CMPS (CMPSB/CMPSW/CMPSD) -
( // )
. CMPSB
, CMPSW , CMPSD
( 80386 ). DS:SI, ES:DI.
REPn, . REPNE
, REPE .
, .
DF 0, ,
SI DI : 1 , 2
4 . DF 1,
, SI DI
, .
: [REPn] CMPS/CMPSB/CMPSW
CWD
DX:AX, (15 ) DX. 32- .
: CWD
DEC
1 , . INC.
: DEC /
DIV-
315
DIV
. () , ,
.
\
8- , 8- , DIV BH.
AL, .
16- DX:AX, a
16- , DIV CX.
, DX.
32-
EDX-.EAX, 32- , DIV . , EDX.
: D1V /
ESC
.
8087 80287. ESC
.
: ESC , /'
HLT
, . HLT CS:IP
. CS
IP . IRET CS IP , HLT. , , STI
IF 1.
: HLT
ID1V ()
()
() . ()
.
8- , 8- , DIV BH.
AL, .
16- DX:AX, a
16- , DIV CX.
, DX.
32- EDX:EAX,
32- , DIV .
,
: IDIV /
316
. 8x86
IMUL ()
() . () .
8- AL, , IMUL BL.
.
16- , , IMUL BX.
DX:AX.
32- EDX:EAX, , ,
DIV . EDX:EAX.
: IMUL /
80286 ( ) ( 1), ( 2).
, . ,
IMUL BX, 16.
:
( 2 ),
( 3), , 1. , IMUL BX, CX, 50.
: IMUL ,
IMUL , /,
80386 ( )
( 1), ( 2). , IMUL EBX, EDX.
: IMUL , /
IN
AL, ( ) , .
, DX.
256, DX. , 80186, 80286
80386 INS (Input String ).
: IN AL/AX/EAX, /DX
INC
1 , INC CX.
: INC /
.
INT
256 .
: INC
INTO 317
INTO
( OF
1) IRET 04H. ( ) .
: INTO
IRET
FAR ( ): IP,
SP 2, CS, IP
2 .
: IRET
J-
()
, CS:IP. , , .
CS:IP , IP J-,
. , , , ,
, J-.
: J-
.'
JAE/JNB/JNC
" "/" "/
. ,
CF=0 ( ).
JB/JNAE/JC
""/" "/
. ,
CF=1 ( ).
JE/JZ "/""
. JZ , . , ZF=1.
318
. 8x86
JNO ,
, .
, OF=0 ( ).
JNP/JPO , /
, .
, , 1, . , PF=0 ( ).
JNS ,
, .
, SF=0.
JO
, .
, OF=1 ().
JP/JPE , /
.
, , 1,
. , PF=1 ( ).
JCXZ - =0
319
JS
, .
, SF=1.
JCXZ =0
, .
JCXZ LOOP.
: JCXZ
JMP
.
IP, ,
, CS ( . "J- ").
: JMP
LAHF
. - '
8080. LAHF (8 ) : SZ*A*P*C, "*" .
: LAHF
LDS
. LDS
( ) ( 2),
( ) ( ),
( 1) DS .
: LDS ,
, DS, DI: LDS DI, .
1
LEA
()
( 1) () ( 2).
: LEA ,
LES
.
. LDS.
320
. 8x86
LOCK
. LOCK
,
. ,
, .
: LOCK
LCDS (LODSB/LODSW/LODSD) -
( // )
AL . , LODS ,
REP. DS:SI ( LODSB),
( LODSW), ( LODSD 80386
), AL, , .
DF=0, 1 ( ), 2 ( ) 4 (
) SI. DF=1, SI, , DF=0.
: LODS
LODS :
LODSB/LODSW/LODSD
LOOP
.
. LOOP , .
, ,
( IP );
LOOP (
).
: LOOP
LOOPE/LOOPZ -
, ""/""
,
ZF . LOOPE/LOOPZ
LOOP, , , ZF=0.
: LOOPE/LOOPZ
V
LOOPNE/LOOPNZ -
, " "/" "
,
ZF . LOOPNE/LOOPNZ
LOOP , , ZF=1.
MOV
321
: LOOPNE/LOOPNZ
MOV
, . 1. 1, 2
4 , ( ) . MOV (
MOVS).
: MOV /, //
MOVS (MOVSB/MOVSW/MOVSD) -
( // )
. MOVSB
, MOVSW , MOVSD
. DS:SI
( 2), ES:DI
( 1).
DF=0, SI DI : 1 , 2 , 4 .
DF=1, SI DI , , DF=0.
MOVS(B/W/D) REP,
.
=0, .
: [REP] MOVS/MOVSB/MOVSW/MOVSD
MUL
.
() , .
8- AL, , MUL CL.
.
16- , , MUL BX.
DX:AX.
32- ,
, MUL ECX. EAX:EDX.
: MUL /
NEG
,
, , 0 1. ,
.
: NEG /
322
. 8x86
NOP
. NOP XCHG ,,
.
: NOP
NOT ""
. ,
.
: NOT /
OR ""
( "") . , , .
,
, .
: OR /, //
OUT ,
AL,
.
, DX. 256,
DX. , 80186, 80286 80386 OUTS (Output String ).
: OUT /DX, AL/AX/EAX
POP
, , : , , . SP
( ) . POP ( ) SP 2 (4 ).
: POP /
POPA/POPAD
80286 ( ) ,
DI, SI, BP, SP, BX, DX, , SP 16, . PUSHA.
80386 (( ) POPAD, EDI, ESI, EBP, ESP, EBX,
POPF/POPFD
323
EDX, ,
ESP 32, .
PUSHAD.
: POPA/POPAD
POPF/POPFD
( ) . SP ( ) . POPF ( 80286 ) ( POPFD 80386 ) SP 2 (4 ).
PUSHF/PUSHFD , POPF/POPFD .
: POPF/POPFD
PUSH
( )
. SP " ( ) . PUSH SP 2
ESP 4 ( ) ( )
.' PUSH
, , ( ) 80286 .
: POP //
PUSHA/PUSHAD -
80286 ( ) PUSHA, , , DX, BX, SP, BP V SI, DI
SP 16. .
80386 ( ) PUSHAD, EDI, ESI, EBP, ESP, EBX,
EDX, ,
ESP 32.
PUSHAD.
: PUSHA/PUSHAD
PUSHF/PUSHFD
. SP (PUSHF)
(PUSHFD 80386 ) .
PUSHF SP 2, PUSHFD 4. .
: PUSHF/PUSHFD
324
. 8x86
/
RCL/RCR
/
() , ( 80386 ) CF. 80286 ( ) 1, ; ,
, CL, ( ). 80386 ( )
31 .
RCL, CF, CF
( ) ; .
RCR CF () ,
CF; .
: RCL/RCR /, CL/
REP/REPE/REPZ/REPNE/REPNZ
. CMPS, MOVS, SCAS, STOS, ZF.
.
1 . REP , .
REPE REPZ (: ) ,
ZF 1 ( ) .
REPNE REPNZ (: ) ,
ZF 0 ( ) .
: REP/REPE/REPZ/REPNE/REPNZ
RET/RETF/RETN
, CALL. NEAR, RETN, , FAR RETF.
NEAR RET
IP SP 2.
FAR RET IP CS
SP 4.
, , (,
RET 4) SP.
: RET/RETF/RETN [ ]
ROL/ROR /
() ,
( 80386 )
.
>
SAHF -
325
80286 ( )
1, ; , ,
CL, ( ).
80386 ( )
31 .
, ROL,
0 ( ) ,
. ROR 0
() , .
: ROL/ROR /, CL/
SAHF
8080
8 .
: SZ*A*P*C,
"*" .
SAL/SAR /
,
( 80386 ) .
80286 ( )
1, ; , ,
CL, ( ). 80386 ( )
31 .
SAL . SAR , :
, , (0 1). , ,
.
: SAL/SAR /, CL/
SBB ()
. CF=1,
SBB 1 1. SBB 2 1, SUB.
: SBB /, //
SCAS (SCASB/SCASW/SCASD) -
(, )
, , ES:DI. SCASB ,
AL. SCASW , . SCASD
326
. 8x86
, ( 80386 ).
DF=0,
DI 1 . DF=1,
DI 1 .
REPE REPNE.
,
. REPE/REPNE
1. , =0.
DI SI , /
. , REPE , ,
REPNE.
: [REPn] SCASB/SCASW/SCASD
SHL/SHR /
SHL SHR
.
SHL SAL (<< .
SAL/SAR).
SHR SAR, , , ,
( 1), .
: SHL/SHR /, CL/
STC CF
CF 1.
: STC
STD DF
DF 1. , ,
MOVS CMPS, .
STOS STOSB/STOSW/STOSD
//
, ( 80386 )
. STOSB AL, STOSW , STOSD . ES:DI ,
// . DF=0,
( ) DI
1. DF=1, (
) DI 1.
REP
// , , .
REP 1. ,
=0.
: [REP] STOSB/STOSW/STOSD
SUB -
327
SUB
, ,
; , .
: SUB /, //
TEST
,
" . ,
. . TEST AND,
"", : ZF (ZF=0), 1,
ZF (ZF=1).
: TEST /, //
WAIT
,
.
. ,
, , TEST.
: WAIT
XCHG
, , XCHG
, BL, , , XCHG CX, word.
: XCHG /, /
XLAT
, ,
ASCII- EBCDIC-.
32- . AL , XLAT. AL ,
AL.
: XLAT [AL]
XOR ""
"" . , ,
. XOR . , XOR 1 , , 1 .
: XOR /, //
ASCII
.1. () ASCII
$00
$01
$02
$03
$04
$05
$06
$07
$08
$09
10
11
12
13
$
$00
14
15
$OF
16
$10
17,
$11
18
19
$12
20
$14
21
$15
22
$16
$17
*
*
23
24
$13
$18
25
$19
26
27
$1
9
f
28
29
$1
$10
30
$1
31
$1F
$1
1
2
3
4
<Escape>
fe
4
I
i;
i
'
->
<L
-
.2. ASCII
32
33
34
35
36
37
38
39
40
$20
$21
$22
$23
$24
$25
$26
$27
$28
!
"
&
1
41
42
43
44
45
46
47
48
49
$29
$2
$2
$2
$20
$2
$2F
$30
$31
)
*
+
,
/
$32
50
51
$33
$34
52
53
$35
54
$36
$37
55
56
$38
57 *' $39
$
58
2
3
4
5
6
7
8
9
59
60
61
62
63
64
65
66
67
$
$
$30
$
$3F
$40
$41
$42
$43
;
<
9
>
ASCII
329
.2
68
$44
107
$6B
69
$45
108
$6
70
$46
109
$60
71
$47
110
$6
72
$48
111
$6F
73
74
$49
$4
m
n
112
113
$70
$71
75
$4
114
$72
76
77
$4
$40
115
116
$73
$74
78
$4
117
$75
79
$4F
118
$76
80
$50
119
81
Q
R
120
82
$51
$52
83
$53
84
$54
85
$55
86
$56
87
$57
88
146
$92
185
$9
147
186
148
$93
$94
187
149
$95
150
151
$96
$97
152
$98
153
154
$99
$9
155
$9
u
V
156
157
$9
$90
$77
158
$9
$78
159
$9F
121
$79
160
122
$7
161
$1
123
$7
162
$2
124
$7
163
125
$70
164
$4
126
$7
165
$5
$58
127
$7F
89
$59
128
$80
166
167
$6
$7
90
$5
129
$81
168
$8
91
$5
130
$82
169
$9
92
$5
$83
170
93
$50
131
132
$84
171
94
$5
133
$85
95
$5F
134
$86
188
189
190
$
$
JI
191
$BF
192
193
194
$1
$2
195
196
$
$4
197
$5
198
$6
199
$7
200
$8
J.
201
$9
202
JL
203
204
205
$
$
206
JL
1
207
$CF
208
$00
JL
209
$01
210
$02
172
211
$03
1L
173
212
$04
1=
||=
135
$87
174
213
$05
136
$88
$AF
214
$06
137
$07
99
138
176
177
215
$89
$8
$63
216
100
$64
139
$8
175
$62
$08
$09
101
$65
$8
$66
140
102
141
$80
103
104
$67
142
$8
$69
h
i
143
144
$8F
105
106
$6
145
$91
96
$60
97
$61
98
$68
$90
178
$1
$2
179
180
$4
181
182
$5
183
$6
$7
184
$8
1
1
-
j
1
217
218
219
220
221
$00
222
$
$DF
223
1
1
330
. ASCII
.2
224
225
$1
$2
240
$FO
248
$F8
249
$F9
250
$FA
251
$FB
252
$FC
$FD
$8
$9
241
$F1
234
242
$F2
243
244
$F3
$F4
245
$F5
246
247
$F6
$F7
235
228
$
$4
229
$5
236
237
230
$6
238
231
$7
239
$EF
232
233
226
227
$ED
253
254
255
$FE
$FF
,
System, Crt, Dos, Graph Strings.
uses.
System, .
System
, , , ,
. CoordSys. pas .1.
, , , . , , . Turbo Pascal
File | Open (<F3>).
.1. CoordSys.pas
Unit CoordSys;
interface
uses Graph;
const
ZeroX = 320; { )
ZeroY = 175; { Y }
' procedure DrawCoordSys;
implementation
procedure DrawCoordSys;
DriverVar, ModeVar, ErrorCode: integer;
begin
{ }
DriverVar := EGA;
ModeVar := EGAHI;
InitGraph(DriverVar,ModeVar,'\tp\bgi') ;
ErrorCode := GraphResult;
{ }
if ErrorCode <> grOK then
332
. , : System
.1
begin
Writeln(GraphErrorMsg(ErrorCode)) ;
Halt(l);
end;
ClearDevice; { }
SetColor(White); { }
Line(ZeroX,10,ZeroX,340); { Y}
Line(10,ZeroY,630,ZeroY); { }
end;
end.
DrawCoordSys
uses CoordSys, CoordSys. tpu Unit directories
Directories (. . 1.4).
Abs
.
: Abs (X)
X .
: .
= ||
.2, . .1.
ArcTan
333
.2
end;
ReadKey; { - )
CloseGraph; { }
end.
.
: ( X )
X .
: Real.
= () ., . .2.
.. FuncATan.pas
program FuncATan;
uses Crt, Graph, CoordSys;
const
UnitX = 3; { X)
UnitY = 10; { Y}
var
: integer;
: real;
begin
DrawCoordSys; { CoordSys ( .1)}
SetColor(Yellow); { }
for := -150 to 150 do
begin
:= ArcTan();
LineTo(ZeroX+x*UnitX, ZeroY-round(y*UnitY));
end;
ReadKey; { - }
CloseGraph; { }
end.
. .1.
|| FuncAbs
. .2. =
() FuncATan
334
. , : System
UnitX UnitY
X Y. ,
ZeroY, . , Y , .
Cos
( ).
: Cos (X)
X .
: Real.
= Cos(x)
.4, . ..
.4. FuncCos. pas
program FuncCos;
uses Crt, Graph, CoordSys;
const
UnitX = 12; { X}
UnitY = 8 ; { Y}
var
: integer;
: real;
begin
DrawCoordSys; { CoordSys ( .1)}
SetColor(Yellow); { )
for := -150 to 150 do
begin
:= Cos(x);
LineTo(ZeroX+x*UnitX, ZeroY-round(y*UnitY));
end;
ReadKey; { - )
CloseGraph; { )
end.
().
: (X)
X .
: Real.
= .,
. .4.
.5. FuncExp.pas
program FuncExp;
uses Crt, Graph, CoordSys;
const
UnitX = 40; { X)
Frac
335
.5
UnitY = 10; { Y )
var
, : real;
begin
DrawCoordSys; ( CoordSys ( .1)}
SetColor(Yellow); { )
:= -20;
while x <= 5 do
begin
:= Exp(x);
LineTo(ZeroX+x*UnitX, ZeroY-round(y*UnitY));
x := x + 0.1;
end;
ReadKey; { - }
CloseGraph; { }
end.
. .. =
Cos(x) FuncCos
. .4. =
FuncExp
Frac
.
: F r a c ( X )
X .
: Real.
Frac .6.
.6. FuncFrac. pas
program FuncFrac;
uses Crt;
var
x , f P a r t : real;
s: string;
p: byte;
{ }
function Power(Mum, Pow: b y t e ) : longint;
var
i: integer;
Res: longint;
336
. , : System
.6
begin
Res := 1;
for i := 1 to Pow do Res := Res
Power := Res;
end;
Num;
begin
ClrScr; ( }
Write(' :');
Readln(x) ;
fPart := Frac(x); ( }
Str(fPart:10:8,s); ( }
Delete(s,I,2);
( }
(
, }
:= Length(s);
while s[p] = '0' do ( - 0}
begin
Dec(p); ( }
if = 0 then Break; {}
end;
if = 0 ( }
then Writeln(round(x-fPart))
else begin
Val(copy(s, l,p) , i, ) ; (
}
Writeln(round(x-fPart), ' ', i, '/', Power(10,));
end;
ReadKey; ( - }
end.
. ,
.
10 .
Int
.
: I n t ( X )
X .
: Real.
Int .7.
.7. Funclnt. pas
program Funclnt;
uses Crt;
var
x: real;
begin
ClrScr; ( }
Write(' :');
Pi
337
.7
Readln(x);
GotoXY(Round(Int(x)),3); { 3- ,
)
Write(Chr(Round(Int(x))+32)); { ,
ASCII }
ReadKey; { - }
end.
Pi
(3.1415926535897932385).
: Pi
: Real.
, , .8.
.8. FuncPi.pas
program FuncPi;
uses Crt;
var
r: word;
begin
ClrScr; { }
Write(' : ');
Readln(r);
,
Writeln(' = ', Pi*Sqr(r):5:2);
ReadKey; { - }
end.
Sin
( ).
: Sin(X)
X .
: Real.
= Sin(x) .9, . .5.
. .5. =
Sin(x) FuncSin
.9. FuncSin.pas
program FuncSin;
uses Crt, Graph, CoordSys;
const
UnitX = 12; { X}
UnitY = 8; { Y}
var
338
. , : System
.9
: integer;
: real;
begin
DrawCoordSys; { CoordSys ( .1)}
SetColor(Yellow); { }
for x := -150 to 150 do
begin
: = Sin(x);
LineTo(ZeroX+x*UnitX, ZeroY-round(y*UnitY));
end;
ReadKey; { - }
CloseGraph; { }
end.
Sqr
, .
: Sqr ( X )
X .
: .
, , . 10.
.10. FuncSqr.pas
program FuncSqr;
uses Crt;
var
a: word;
begin
ClrScr; { }
Write(' : ');
Readln(a);
Writeln(' = ', Sqr());
ReadKey; { - }
end.
Sqrt
.
: S q r t ( X )
X .
: Real.
, , . 11.
, 2 = 2 + 2 ,
= Va* + *, , b .
Break
339
.11. FuncSqrt.pas
program FuncSqrt;
uses Crt;
var
a,b: word;
begin
ClrScr; { }
Write(' 1- , : ');
Readln(a);
Write(' 2- , );: ');
Readln(b);
Writeln(' , = ', Sqrt(Sqr(a)+Sqr(b)):10:2);
ReadKey; { - }
end.
Break
.
: Break
Break . 12.
.12. ProcBrk.pas
program ProcBrk;
uses Crt;
var
i: integer;
begin
ClrScr; { }
{ 1 4}
for i := 1 to 10 do
if i = 5 then Break else Writeln(i);
{ 5 7}
i := 5; { }
while i <= 10 do
begin
Writeln(i);
Inc(i); { 1}
if i = 8 then Break;
end;
repeat { 8 10}
Writeln(i);
Inc(i);
if i = 11 then Break;
until i = 20;
v
ReadKey; { - }
end.
340
. , : System
Continue
.
: Continue
Continue . 13.
.13. ProcCntn.pas
program ProcCntn;
uses Crt;
'/
var
i: integer;
begin
ClrScr; { }
{ 1 20}
for i := 1 to 20 do
if (i mod 2) = .0 then Continue else Writeln(i);
ReadKey; { - }
end.
Exit
.
,
. ,
.
: Exit
Exit . 14.
.14. ProcExit.pas
program ProcExit;
uses Crt; -\
var
i: integer;
c: char;
procedure TwentyStars;
{ 20 '*' }
begin
for i := 1 to 20 do
if i = 20 then Exit else Write('*');
end;
begin
ClrScr; { }
repeat
TwentyStars;
Writeln;
Write(' ' 20 ?');
Write(' ... : ');
{,
<Enter>}
Readln(c);
Halt
341
.14
if not ( in ['Y1,'','','']) then Exit;
until False;
end.
Halt
DOS.
: Halt (ExitCode)
ExitCode Word .
Halt . 15.
.15. ProcHalt.pas
program ProcHalt;
uses Crt;
procedure PressEsc;
begin
repeat
WritelnCflflfl Esc');
if ReadKey = #27 then Halt;
until False;
end;
begin
ClrScr; { }
PressEsc;
end.
RunError
.
: RunError (ErrorCode)
ErrorCode Byte
( 3).
RunError . 16.
. 16. ProcRnEr.pas
program ProcRnEr;
uses Crt;
var
'--,
a, b: integer;
begin
ClrScr; ( }
repeat
Write(' : ');
Readln(a);
Write(' b: ');
Readln(b);
if b = 0
then RunError(200) ( }
342
. , : System
.18
else begin
Writeln('a/b
^1('
if ReadKey =
end;
ReadKey; (
until False;
end.
Eof
True, .
: Eof (F)
- F . , Input.
: Boolean.
, ,
. 17, . .6.
.17. FuncEof .pas
program FuncEof;
uses Crt;
var
F: Text;
s: string;
begin
ClrScr; { }
Write(' : ');
Readln(s);
Assign(F,s); { }
Reset(F);
{ }
while not Eof(F) do
begin
Readln(F,s); { }
Writeln(s); { }
end;
Close(F); { )
Write(' ... ' ) ;
ReadKey;
end.
Eoln
Eoln
True
.
: E o l n ( F )
F . ,
Input.
Boolean.
343
: tSavrtoexec.bat
SET COMSPEC=C:SUIMDOUSSCOMAND.COM
SET uindir=C:\UINDOUS
SET uinbootdir=CAUINDOUS
SET PATH=C:SUINDOUS;CAUINDOUSSCOMMAND
SET PROMPT=$p$g
SET TEMP=C:SUINDOUSSTEMP
SET TMP=C:SUINDOUSSTEMP
SET BLASTER=A220 15 Dl P338
.. .
. .6.
autoexec.bat
FuncEof
, ,
. 18.
.18. FuncEoln.pas
program FuncEoln;
uses Crt;
var
F: Text;
*
s: string;
c: char;
begin
ClrScr; { )
Writeln(' : ');
Readln(s) ;
Assign(F,s); { }
Reset(F);
{ }
while not Eoln(F) do
begin
Read(F,); { }
Write(); { }
end;
Close(F); { }
ReadKey; { - }
end.
FilePos
.
: FilePos (F)
- F ,
.
: Longint.
, , . 19.
344
. , : System
.19. FuncFPos.pas
program FuncFPos;
uses Crt;
var
F : file of Byte;
s: string;
begin
ClrScr; { }
Write(' : ' ) ;
Readln(s);
Assign(F,s); ( }
Reset(F); { }
Seek(F, FileSize(F)); { }
WriteLn(' : ', FilePos(F), ' ');
Close(F); { }
ReadKey; { - }
end.
FileSize
.
: FileSize ( F )
- F ,
.
: Longint.
, , .20.
.20. FuncFSz . pas
program FuncFSz;
uses Crt;
var
'
F : file of Byte;
s: string;
begin
ClrScr; { }
Write(' : ');
Readln(s);
Assign(F,s); { }
Reset(F); { }
WriteLn (' : ', FileSize(F), ');'
Close(F); { }
ReadKey; { - }
end.
lOResult
/. {$!-}.
: lOResult(F)
- F ,
.
SeekEof
345
: Integer.
, ,
.21.
.21. FuncIORs. pas
program FuncIORs;
uses Crt;
var
s: string;
function FileExists (FName: string)': boolean;
var
F: file;
isError: boolean;
begin
Assign(F,Fname); { )
{$!-}
Reset(F); { }
{$!+}
isError := lOResult > 0;
if isError
then Writeln(' !')
else Close(F); { }
FileExists := not isError;
end;
1
,
begin
ClrScr; { )
Write(' : ');
Readln(s);
if FileExists(s) then
Writeln(' ');
ReadKey; { - }
end.
SeekEof
, .
: SeekEof ( F )
- F Text.
: Boolean.
SeekEof .22.
.22. FuncSEof .pas
program FuncSEof;
uses Crt;
var
F: Text;
i: Integer;
begin
ClrScr; { }
346 . , : System
.22
Assign(F,'test.txt1); { }
Rewrite(F); { }
{ , Assign.
, , txt-
, -
ProcApnd.pas turbo.exe,
Turbo Pascal}
{ 8 }
Writeln(F, 4 2 3 4 ');
Writeln (,F, ' 5 6 7 8 ' ) ;
Reset(F); { }
{ . SeekEoln True,
uj^p;SeekEof True,
( ) }
while not SeekEof(F) do
begin
if SeekEoln(F) then Readln; { }
Read(F,i); { }
Writeln(i); {
}
end;
ReadKey; { - )
Close(F); { }
end.
SeekEoln
, .
: SeekEoln ( F )
- F Text.
: Boolean.
SeekEoln .22 (< .
).
V
'
Append
.
^
: Append (F)
- F Text.
Append .23.
.23. ProcApnd.pas
program ProcApnd;
uses Crt;
var
F: Text;
s: string;
begin
Assign
347
.23
{ )
ClrScr;
Assign(F, 'test.txt'); { }
Rewrite(F) ,;
{ }
Writeln(F, ' '); {
}
Close(F) ;
{ }
{ }
Append(F);
Writeln(F; ' ');
Close(F);
Reset(F);
( }
WriteIn(' test.txt:');
while not Eof(F) do
begin
Readln(F,s); ( }
Writeln(s); {
}
end;
Write(' .. . ') ;
ReadKey; { - }
end.
Assign
.
348
. .
. , : System
.24
Rewrite(F3);
{ }
Close(F1);
Close(F2);
Close(F3);
end.
BlockRead
.
: .BlockRead (F, Buf, Count, Result)
- F .
- Buf , .
Count Word,
.
- Result Word,
.
BlockRead .25.
i
.25. ProcBlRd.pas
program ProcBIRd;
var
F: Text;
FFrom, FTo: File;
c: char;
begin
{ -)
Assign(F,'testl.txt'); { }
Rewrite(F); { }
WriteIn(F,'-'); {
}
Close(F); { }
{ }
Assign(FFrom,'testl.txt');
Assign(FTo,'test2.txt1);
Reset(FFrom,1); { }
Rewrite(FTo,1);
while not Eof(FFrom) do
begin
BlockRead(FFrom, c, 1); { )
BlockWrite(FTo, c, 1); { }
end;
( )
Close(FTo);
Close(FFrom);
end.
BlockWrite
349
BlockWrite
.
: BlockWrite(F, Buf, Count, Result)
- F . .
- Buf ,
.
Count Word,
.
- Result Word,
.
BlockWrite .26.
.26. ProcBlWr.pas
program ProcBlWr;
var
F: File;
: char;
i: byte;
begin
{ -}
Assign(F,'testl.dat'); { }
Rewrite(F,1); { 1 }
{ 0 255}
for i := 0 to 255 do
begin
:= Chr(i); { i }
BlockWrite(F,,1); { }
end;
Close(F); { )
end.
Close
.
: Close ( F )
- F .
Close .27.
.27. ProcClos.pas
program ProcClos;
var
Fl: Text;
F2: File of Integer;
F3: File;
begin
{ )
Assign(Fl, 'testl.txt');
Assign(F2, 'test2.int');
Assign(F3, 'test3.dat');
350
. , : System
.27
{ }
Rewrite(F1);
Rewrite(F2);
Rewrite(F3);
{ )
Close(Fl);
Close(F2);
Close(F3);
end.
Flush
, .
: Flush ( F )
- F Text.
Flush .28.
.28. ProcFlsh.pas
program ProcFlsh;
uses Crt;
var
F: Text;
i: word;
begin
ClrScr;
{ }
Assign(F; 'test.txt'); { }
Rewrite(F);
{ }
i := 0; { }
Writeln;
Writeln(' ...');
while not KeyPressed do
begin
{
GotoXY(1,1) ;
(1/1) - }
Write(i);
{ }
Writeln(F,i); { }
inc(i);
{ 1}
end;
Flush(F);
{ -
Writeln }
end.
ProcFlsh Flush, , Writeln, .
Read
.
.
Readln
351
Readln
, .
,
352
. , : System
.
Readln(F,cl); { 1- 1- )
Readln(F,c2); { 1- 2- )
Close(F);
{ )
Writeln(cl);
{ )
Writeln(c2);
ReadKey; { - )
end.
'
Reset
.
Assign.
: Reset (F, RecSize)
- F .
RecSize , , RecSize = 128 .
Reset
.31.
.31. ProcRset.pas
program ProcRset;
uses
Crt;
var
F: File;
: char;
s: string;
begin
ClrScr;
{ )
Write(' : ');
Readln(s);
Assign(F,s); { )
Reset(F,1); { 1 )
while not Eof(F) do
begin
BlockRead(F, c, 1); { )
Write (); { )
end;
Close(F);
{ )
ReadKey;
{ - )
end.
Rewrite
.
: Rewrite(F, RecSize)
- F .
RecSize , , RecSize = 128 .
Rewrite .32.
Seek
353
.32. ProcRwrt.pas
program ProcRwrt;
var
Fl: Text;
F2: File of Word;
F3: File;
i: word;
begin
( }
Assign(Fl, 'testl.txt');
Assign(F2, 'test2.int1);
Assign(F3, 'test3.dat');
Rewrite(Fl); { )
WritelnfFl,''); { ' }
Rewrite(F2);
i := 1; ^
Write(F2,i);
Rewrite(F3,2) ; { 2 }
for i := 1 to 10 do BlockWrite(F3,i,1);
{ }
Close (FibClose (F2) ;
Close(F3);
end.
Seek
.
: Seek(F, N)
- F , Text.
N Longlnt, , ( 0).
Seek ..
.. ProcSeek.pas
program ProcSeek;
uses Crt;
var
F: File of Byte;
s: string;
c: byte;
354
. , : System
.
Assign(F, s); { }
Reset(F); ( }
WriteIn(' : ');
ShowChar(0);
Writeln(' : ');
ShowChar(FileSize(F) div2);
Writeln(' : ');
ShowChar(FileSize(F)-1);
Close(F); { }
ReadKey; { - }
end.
SetTextBuf
/.
Write
355
- F , Text.
Truncate .35.
.35. ProcTrun.pas
program ProcTrun;
uses Crt;
var
F: File of word;
i: word;
begin
ClrScr; { }
Assign(F,'test.dat'); { }
Rewrite(F); { }
{ 1 10}
for i := 1 to 10 do Write(F,i);
Seek(F,5); { }
Truncate(F); { }
Reset(F); { }
{ }
while not Eof(F) do
begin
Read(F,i); { }
Writeln(i); { }
end;
Close(F); { }
ReadKey; { - }
end.
Write
.
.
356
. , : System
.36
Rewrite(F2);
i := 1000;
{ }
Write(Fl,i);
Write(F2,i,i+l);
{ }
Close(Fl);
Close(F2);
end.
Writeln
, .
: Write (F, VI, V2, . . . )
- F Text.
VI, V2 .. , .
Writeln .37.
.37. ProcWrtl. pas
program ProcWrtl;
var
F: Text;
i: word;
begin
Assign(F,'test.txt'); { }
Rewrite(F); { }
for i := 1 to 100 do Writeln(F,i,i+l); { }
Close (F);.
{ }
end.
ChDir
.
: ChDir (S)
s String, , .
ChDir .38.
.38. ProcCDir.pas
program ProcCDir;
uses Crt;
var
s: string;
Erase
357
.38
procedure ShowCurDir;
begin
G e t D i r ( 0 , s ) ; { )
Writeln(' : ', s) ;
end;
begin
ClrScr;
{ }
ShowCurDir;
Write(' , : ' )
Readln(s);
Choir(s); { }
ShowCurDir;
ReadKey; { - }
end.
Erase
.
: Erase (F)
F . Erase , F, .
Erase .39.
.39. ProcEras.pas
program ProcEras;
var
F: File;
begin
{ }
Assign(F,'test.dat');
Rewrite(F); { }
Close(F);
{ }
Erase(F);
{ }
end.
GetDir
.
: GetDir (D, S)
D Byte, ; ,
: 0 , 1 , 2 , 3 ..
- S String,
GetDir .40.
.40. ProcGDir.pas
program ProcGDir;
uses Crt;
var
s: string;
358
. , : System
.40
procedure ShowCurDir;
begin
GetDir(0,s); { }
Writeln(' : ' , s) ;
end;
begin
ClrScr;
{ )
ShowCurDir;
Write(' , : ' ) ;
Readln(s) ;
ChDir(s); { )
ShowCurDir;
ReadKey; { - )
end.
MkDir
.
: MkDir (S)
S String, .
MkDir .41.
.41. ProcMDir.pas
program ProcMDir;
uses Crt;
yar
s: string;
begin
ClrScr;
{ )
GetDir(0,s); { )
Writeln(' : ', s);
Write(' , : ');
Readln(s);
MkDir(s);
{ )
end.
Rename
.
: Rename (F, NewName)
:
F .
NewName String PChar,
.
Rename , F, NewName.
Rename .42.
.42. ProcRenm.pas
program ProcRenm;
uses Crt;
RmDir
359
.42
var
F: Text;
s: string;
begin
ClrScr;
{ )
Assign(F, 'test.dat');
Rewrite(F);
{ }
Writeln(F,1); { )
Write(' test.dat: ');
Readln(s);
Rename(F,s); ( )
Writeln(F,2); { }
Close(F);
{ }
end.
RmDir
.
' '
: RmD i ( S )
S String,
.
RmDir .43.
.43. ProcRDir. pas
program ProcRDir;
uses Crt;
var '
s: string;
begin
ClrScr;
{
Write('
Readln(s);
MkDir(s); {
RmDir(s); {
end.
}
: ');
}
}
"
Addr
, .
: Address ( X )
X , .
: X.
Addr .44.
.44. FuncAddr.pas
program FuncAddr;
uses Crt;
360
. , : System
.44
var
i: integer;
: Integer;
begin
ClrScr;
i := 1;
:= Addr(i);
._ + -^.
Writeln(i);
ReadKey;
end.
{ }
{ i}
{ i:=i+l}
{/ 2}
{ - }
Assigned
, nil.
: As s igned {)
-
.
: Boolean.
Assigned .45.
.45. FuncAsnd.pas
program FuncAsnd;
uses Crt;
var
i: Integer;
P: Integer;
procedure IsAssigned;
begin
if Assigned(P)
then Writeln(' 1)
else Writelnf' ');
end;
begin
ClrScr;
{ )
IsAssigned;
P := Addr(i); { i}
IsAssigned;
ReadKey;
{ - }
end.
CSeg
CS.
: CSeg
: Word.
CSeg .46.
DSeg
.46. FuncCSeg.pas
program FuncCSeg;
uses Crt;
i
{ }
procedure WriteHexWord(W : Word);
const
HexChars: array [0..15] of Char = '0123456789ABCDEF';
begin
Write(HexChars[Hi(W) shr 4],
{4- )
HexChars[Hi(W) and $F] , {3- )
HexChars[Lo(W) shr 4],
{2- )
HexChars[Lo(W) and $F]); {1- )
end;
.
begin
ClrScr; { }
Write(' : $');
WriteHexWord(CSeg);
ReadKey; { - }
end.
DSeg
DS.
\
: DSeg
: Word.
DSeg .47.
.47. FuncDSeg.pas
program FuncDSeg;
uses Crt;
{ }
procedure WriteHexWord(W : Word);
const
HexChars: array [0..15] of Char = '0123456789ABCDEF';
,begin
Write(HexChars[Hi(W) shr 4],
{4- }
HexChars[Hi(W) and $F], {3- }
HexChars[Lo(W) shr 4],
{2- }
HexChars[Lo(W) and $F]); {1- }
end;
begin
ClrScr;
{ }
Write(' : $');
WriteHexWord(DSeg);
ReadKey; { - }
end.
Hi
.
: Hi <)
361
362
. , : System
: Byte.
X Integer Word.
Hi
.48.
.48. FuncHi. pas
program FuncHi;
uses Crt;
var
i: Word;
( }
function DecToHex(n: Word): string;
const
HexChars: array [0..15] of Char = '0123456789ABCDEF';
begin
DecToHex := HexChars[Hi(n) shr 4] +
HexChars[Hi(n) and $F] +
HexChars[Lo(n) shr 4] +
HexChars[Lo(n) and $F];
end;
begin
ClrScr; { )
Write(' : ');
Readln(i);
Writeln(i,' = $',DecToHex(i));
ReadKey; ( - }
end.
Lo
.
: Lo ( X )
: Byte.
X Integer Word.
t
Lo
.49.
.49. FuncLo. pas
program FuncLo;
uses Crt;
var
i: Word;
( )
function DecToHex (n: Word): string/const
HexChars: array [0..15] of Char = '0123456789ABCDEF'
begin
DecToHex := HexChars[Hi(n) shr 4] +
HexChars[Hi(n) and $F] +
HexChars[Lo(n) shr 4] +
MaxAvail
363
.49
end;
begin
ClrScr; ( }
Write(' : ' ) ;
Readln(i);
Writeln(i,' = $',DecToHex(i));
ReadKey; { - }
end.
MaxAvail
.
, , . , ,
. Pascal .
, , , , , . ,
,
.
: MaxAvail
: Longint.
MaxAvail .50.
.50. FuncMaxA.pas
program FuncMaxA;
uses Crt;
type
MyRec = record
Num: Longint;
Name: array[1..3] of string/end;
begin
ClrScr;
{ }
Writelnf' : ',
MaxAvail, ' ');
if MaxAvail < SizeOF(MyRec)
then Write(' ')
else Write(' ');
Writeln(' MyRec');
ReadKey; { - }
end.
364
. , : System
MemAvail
.
. .
i
(
: MemAvail
: Longint.
MemAvail .51.
.51. FuncMemA.pas
program FuncMemA;
uses Crt;
,
begin
ClrScr; ( }
Writeln('B ', MemAvail, ' ');
ReadKey; { - }
end.
Ofs
.
: Ofs (X)
X .
: Word.
Ofs .52.
.52. FuncOf s .pas
program FuncOfs;
uses Crt;
var
i: Integer;
{ }
procedure WriteHexWord(W : Word);
const
HexChars: array [0..15] of Char = '0123456789ABCDEF';
begin
Write(HexChars[Hi(W) shr 4],
{4- }
HexChars[Hi(W) and $F], {3- }
HexChars[Lo(W) shr 4],
{2- }
HexChars[Lo(W) and $F]); {1- }
end;
begin
ClrScr; { }
Write(' i - $');
WriteHexWord(Ofs(i));
Write (' $');
WriteHexWord(Seg(i));
ReadKey; { - }
end.
Ptr
365
Ptr
, , .
: Ptr (Seg, Of s)
Seg Word, .
Of s Word, .
: .
Ptr .53.
.53. FuncPtr. pas
program FuncPtr;
uses Crt;
var
P: AByte;
Mode: string;
begin
ClrScr; { }
P := Ptr($40, $49);
case of
0: Mode := '- 40x25';
1: Mode := ' 40x25';
2: Mode := '- 80x25';
3: Mode := ' 80x25';
end;
WriteLn(' - ', Mode);
ReadKey; { - }
end.
Seg
.
: Seg ( X )
X .
: Word.
Seg .52 (<< . ,
Of s).
SizeOf
, .
: SizeOf ( X )
X .
: Integer.
SizeOf .54.
.54. FuncSzOf .pas
program FuncSzOf;
uses Crt;
type
MyRec = record
366
. , : System
.54
Fl: integer;
F2: string;
end;
var
: char;
i: integer;
r: real;
s: string;
Rec: MyRec;
begin
ClrScr; { }
Writeln(' ', SizeOf(c),' ');
Writeln(' i ', SizeOf(i),' ');
Writeln(' ', SizeOf(),' ');
Writelnf' s ', SizeOf(s),' 1);
WriteIn(' Rec ', SizeOf(Rec),' '!
ReadKey; { - }
end.
SPtr
SP.
: SPtr
: Word.
SPtr .55.
.55. FuncSPtr.pas
program FuncSPtr;
uses Crt;
var
i: Integer;
{ }
procedure WriteHexWord-(W : Word) ;
const
HexChars: array [0..15] of Char = '0123456789ABCDEF';
begin
Write(HexChars[Hi(W) shr 4],
{4- }
HexChars[Hi(W) and $F], {3- }
HexChars[Lo(W) shr 4],
{2- }
HexChars[Lo(W) and $F]); {1- }
end;
begin
ClrScr;
{ }
Write(' : $');
WriteHexWord(SPtr);
ReadKey; { - }
end.
SSeg
SSeg
SS.
: SSeg
: Word.
SSeg .56.
.56. FuncSSeg. pas
program FuncSSeg;
uses Crt;
var
i: Integer;
{ }
procedure WriteHexWord(W : Word);
const
HexChars: array [0..15] of Char = '0123456789ABCDEF';
begin
Write(HexChars[Hi(W) shr 4],
{4- }
HexChars[Hi(W) and $F], {3- }
HexChars[Lo(W) shr 4],
{2- )
HexChars[Lo(W) and $F]); {1- }
end;
begin
ClrScr;
{ }
Write(' $ ' ) ;
WriteHexWord(SSeg);
ReadKey; { - }
end.
Swap
.
: Swap(X)
X Integer Word.
: .
Swap . 57.
.57. FuncSwap. pas
program FuncSwap;
uses Crt;
var
i: word;
{ }
function DecToHex(n: Word): string;
const
HexChars: array [0..15] of Char = '0123456789ABCDEF';
begin
DecToHex := HexChars[Hi(n) shr 4] +
HexChars[Hi(n) and $F] +
HexChars[Lo(n) shr 4] +
367
368
. , : System
'
.57
HexChars[Lo(n) and $F];
end;
begin
ClrScr; { }
Write(' : ') ;
Readln(i);
Writeln(' Swap i = $ ', DecToHex (i) ) ;
Writeln(' Swap i = $',DecToHex(Swap(i)));
ReadKey; { - }
end.
Dispose
.
: Dispose(P, Destructor)
- .
Destructor .
Dispose .58.
.58. ProcDisp.pas
program ProcDisp;
uses Crt;
var
P: integer;
begin
ClrScr; { }
New(P); { }
:= 100;
Writeln();
Dispose(P); { )
ReadKey; { - }
end.
FillChar
.
: FillChar(X, Count, Value)
- X , .
Count Word, .
Value Byte Char.
FillChar .59.
.59. ProqFChr.pas
program ProcFChr;
uses Crt;
var
FreeMem
\
369
.59
s: string;
i: integer;
begin
ClrScr; { }
for i := 10 downto 1 do
begin
( i }
FillChar(s, i+1, Chr(i+64));
s[0] := Chr(i); { }
Writeln(s);
end;
ReadKey; { - }
end.
FreeMem
, .
: FreeMem(P, Size)
- .
Size Word, .
FreeMem .60.
.60. ProcFMem.pas
program ProcFMem;
uses Crt;
type
MyRec =- record
Num: Longint;
Name: array[1..3] of string;
end;
var
P: '"MyRec;
begin
ClrScr; { }
GetMem(P, SizeOf(MyRec)); { }
with do
begin
Num := 1;
. Name[l] := '';
Name[2] := '';
Name[3] := '';
Writeln(Num, ' - ',Name[l],' ',Name[2],' ' ,Name,[3] ) ;
end;
FreeMem(P, SizeOf(MyRec)j; ( )
ReadKey; ( - }
end.
GetMem
-. -
370
. , : System
, .
* . MaxAvail.
: GetMem(P, Size)
- .
Size Word, .
GetMem .61.
.61. ProcGMem.pas
program ProcGMem;
uses Crt;
var
P: AInteger;
begin
ClrScr; { )
if MaxAvail >= SizeOf(Integer) then {
}
begin
GetMem(P, SizeOf(Integer)); ( )
:= 1;
Writeln(PA);
FreeMem(P, SizeOf(Integer)); { )
end;
ReadKey; { - )
end.
New
: N e w ( P , Constructor)
- .
Conctructor .
New .62.
.62. ProcNew.pas
program ProcNew;
uses Crt;
type
PObj = j;
MyObj = Object
constructor Init(n: integer);
procedure ShowX;
private
X: integer;
end;
constructor MyObj.Init(n: integer);
begin
Mark
371
.60
X := ;
end;
procedure MyObj.ShowX;
begin
Writeln(X);
end;
var
P: PObj;
begin
ClrScr; { }
New(P, Init(lO)); { }
.ShowX;
Dispose(P); { }
ReadKey; { - }
end.
Mark
.
. MaxAvail.
: Mark ()
- .
Mark .63.
.63. ProcMark.pas
program ProcMark;
var
P : Pointer;
PI, P2, P3 : -^Integer;
begin
New(PI); { Integer}
Mark(P); { }
New(P2); { Integer}
New(P3);
Release(P); {, 2 ,
'1 }
end.
Move
.
: Move(Source, Dest, Count)
- Source .
- De.st .
/
Count Word,
.
Move .64.
372
. , : System
Release
.
. MaxAvail.
: Release (P)
- .
Release .63 (< . , Mark).
Odd
True, .
: Odd(X)
X Longint.
: Boolean.
Odd .65.
.65. FuncOdd. pas
program FuncOdd;
uses Crt;
var
i: Word;
begin
ClrScr; { }
for i := 1 to 5 do
begin
Write(i,' - ');
Pred
373
.65
if Odd(i)
then W r i t e l n ( ' ' )
else W r i t e l n ( ' ' ) ;
end;
ReadKey; { - }
end.
Pred
, .
: P r e d ( X )
X .
: .
Pred .66.
.66. FuncPred.pas
program FuricPred;
uses Crt;
var
i: Word;
: char;
begin
ClrScr; { }
Write(' : ');
Readln(i);
Writeln(' ',i,' - ',Pred(i>);
Write(' : ');
Readln(c);
Writeln(' ',c,' - ',Pred(c)>;
ReadKey; { - }
end.
Succ
, .
: Succ ( X )
X .
: .
Succ .67.
.67. FuncSucc.pas
program FuncSucc;
uses Crt;
var
i: Word;
c: char;
begin
374
. , : System
.67
ClrScr;
{ }
W r i t e ( ' : ' ) ;
Readln(i);
Writeln(' ' , i , ' ' , S u c c ( i ) > ;
Write(' : ' ) ;
Readln(c);
Writeln(' ' , , ' ',Succ());
ReadKey; { - }
end.
UpCase
.
: UpCase (Ch)
Ch Char.
: Char.
UpCase .68.
.68. FuncUpCs .pas
program FuncUpCs;
uses Crt;
var
i: Byte;
s: string;
begin
ClrScr; { }
Writeln(' :');
Readln(s) ;
for i := 1 to Length(s) do s[i] := UpCase(s[i]);
Writeln(' :');
Writeln(s);
ReadKey; { - }
end.
Dec
.
: Dec ( X , N)
- X PChar,
.
N Longint, ,
X ( N = 1).
Dec .69.
.69. ProcDec.pas
program ProcDec;
uses Crt;
var
Inc
375
.69
i: Byte;
begin
ClrScr; { }
i := 10;
{ 10 1}
while i > 0 do
begin
Writeln(i);
Dec(i);
end;
ReadKey; { - )
end.
Inc
.
: Inc (X, N)
- X PChar,
.
N Longlnt, ,
X ( N = 1).
Inc .70.
.70. Proclnc. pas
program Proclnc;
uses Crt;
var
i: Byte;
begin
ClrScr; { ) ,
i := 0;
{ 0 9}
while i < 10 do
begin
/
Writeln(i);
Inc(i);
end;
,
ReadKey; { - )
end.
Concat
.
: Concat (SI, S2, . . . )
SI, S2 .. String.
376
. , : System
: string.
Concat .71.
.71. FuncConc.pas
program FuncConc;
uses Crt;
var
A: array[1..3] of string;
i: byte;
begin
ClrScr; { }
for i := 1 to 3 do
begin
Write(i,'-e : ');
Readln(A[i]);
end;
Write(' : ');
Write(Concat(A[l],' ' ,A[2] , ' ',A[3]));
ReadKey; { - }
end.
.
; (S, Index, Count)
S String.
Index . Integer, S.
Count Integer, .
: String.
.72.
.72. FuncCopy.pas
program FuncCopy;
uses Crt;
var
A: array[1..3] of string;
i: byte;
s: string;
begin
ClrScr; { }
Write(' : ');
Readln(s);
for i := 1 to 2 do
begin
A[i] := copy(s,l,pos(' ',s)-D;
Delete(s,l,pos (' ',s)); { i-e }
end;
A[3] := s; { }
for i := 1 to 3 do
Writeln(i,'-e : ',A[i]);
Length
.72
ReadKey; ( - }
end.
Length
.
: Length (S)
S String.
: Integer.
Length .73.
.73. FuncLeng. pas
program FuncLeng;
uses Crt;
var
s: string;
begin
ClrScr; { )
Write(' : ');
Readln(s);
Write(' ', Length(s),' .');
ReadKey; { - }
end.
.
: Pos (Substr, S)
Substr String.
S , , string.
: Byte.
.74.
.74. FuncPos .pas
program FuncPos;
uses Crt;
var
s: string;
CurChar: Char;
c: Word;
begin
ClrScr; { } -'
Write(' : ');
Readln(s);
while Length(s) > 0 do
begin
CurChar := s[l]; { }
:= 0;
while (pos(CurChar,s) > 0) do { }
377
378
. , : System
.74
begin
{ )
Inc (); { }
Delete(s,pos(CurChar,s),1); { }
end;
ReadKey; { - }
end.
Delete
.
: Delete(S, Index, Count)
- S String.
Index Integer, .
Count Integer,
.
Delete .75.
.75. ProcDele.pas
program ProcDele;
uses Crt;
var
s: string;
begin
ClrScr;
{ )
Write(' : ');
Readln(s);
while (pos(' ',s) > 0) do { }
Delete(s,pos (' ',s),l>; { }
Write(' : ');
Write(s);
ReadKey; { - }
end.
Insert
.
: Insert(Source, S, Index)
Source String. ,
- S String, .
Index Integer, .
Insert .76.
Chr
.76. Proclnse.pas
program Proclnse;
uses Crt;
var
s: string;
Source: string;
Index: Integer;
begin
ClrScr;
{ }
Writeln(' :');
Readln(s);
Writeln(' :'};
Readln(Source);
Writeln(' :');
Readln(Index);
Insert(Source,s,Index);
Writeln(' :');
Writeln (s);
/
ReadKey; { - }
end.
Chr
ASCII.
: Chr ( X )
X Byte.
: Char.
Chr .77.
.77. FuncChr .pas
program FuncChr;
uses Crt;
var
i: byte;
begin
ClrScr; { }
{ 48 57}
for i := 48 to 57 do
Writeln("",Chr(i),'" - ';i);
ReadKey; { - }
end.
Ord
.
: Ord (X)
X .
379
380
. , : System
: Longint.
Ord .78.
.78. FuncOrd.pas
program FuncOrd;
uses Crt;
var
c: Char;
begin
ClrScr; { }
for := '0' to '9' do { 0 9}
Writeln("",c, '" - ',0rd(c));
ReadKey; { - ;}
end.
Round
.
: Round ( X )
X Real.
: Longint.
Round .79.
.79. FuncRoun.pas
program FuncRoun;
uses Crt;
var
r: Real;
begin
ClrScr; { }
Write(' : ');
Readln(r);
Writeln (r:10:3,', = ',Round(r));
ReadKey; { - }
end.
Trunc
.
: Trunc ( X )
X Real.
: Longint.
Trunc .80.
.80. FuncTrun. pas
program FuncTrun;
uses Crt;
var
r: Real;
begin
ClrScr; { }
Write(' : ');
Str
381
.80
Readln(r);
Writeln(r:10:3,', = ',Trunc(r)>; .
ReadKey; { - }
end.
Str
.
: Str ( X : W i d t h : Decimals, S)
X .
Width Decimals
(
).
- S String, .
Str .81.
.81. ProcStr .pas
program ProcStr;
uses Crt;
var
r: Real;
. :
i: Integer;
s: string;
begin
ClrScr; { }
Write(' : ');
Readln(r) ;
Str(r:10:3,s); { }
Writeln('Ero : ',s);
Write(' : ');
Readln(i);
Str(i,s); { }
Writelnf'Ero : ',s);
ReadKey; { - )
end.
Val
.
: Val (S, V, Code)
S , , .
- V .
- Code Integer,
, , , .
Val .82.
382
. , : System
High
.
: H i g h ( X )
X .
: .
High .83.
.83. FuncHigh. pas
program FuncHigh;
uses Crt;
begin
ClrScr; { )
Write(' Integer = ');
Writeln(High(Integer));
Write(' Char = #');
Writeln(Ord(High(Char)));
ReadKey; { - )
end.
Low
.
: Low(X)
X .
: .
Low .84.
ParamCount
383
.84. FuncLow.pas
program FuncLow;
uses Crt;
begin
ClrScr; { )
Write(' Integer = ');
Writeln(Low(Integer));
Write(' Char = #');
Writeln(Ord(Low(Char)));
ReadKey; { - }
end.
ParamCount
.
,
.
tpc.exe, ,
.
. tpc.exe "
DOS" 13.
: ParamCount
: Word. ( ),
0.
ParamCount .85.
.85. FuncParC. pas
program FuncParC;
uses Crt;
begin
ClrScr; { }
if ParamCount = 0
then Writeln(' ')
else Writeln(' - ', ParamCount);
ReadKey; { - }
end.
'
ParamStr
.
: ParamStr (Index)
Index . Index = 0 .
: String.
ParamStr .86. , , .
384
. , : System
.
.86. FuncParS. pas
program FuncParS;
uses Crt;
var
: Word;
begin
ClrScr;
{ }
Writeln(' :');
{ }
for i := 0 to ParamCount do
Write(ParamStr(i),' ' ) ;
ReadKey; { - }
",
end.
Random
.
,
Randomize.
: Random (Range)
Range Word. ,
0 () Range. ,
() 1.
: Longint Real.
Random .87.
.87. FuncRndm.pas
program FuncRndm;
uses Crt;
begin
ClrScr; { }
Randomize; { }
Write(' 0 100: ');
Writeln(Random(100):8) ;
Write(' 0 1: ');
Writeln(Random:10:3);
ReadKey; { - }
end.
Exclude
.
: Exclude (S, I)
- S .
I , S.
Include
385
Exclude .
.88. ProcExcl. pas
program ProcExcl;
uses Crt;
var
S: set of Byte;
i: Byte;
procedure ShowSet;
{ ,
0 255}
begin
for i := 0 to 255 do
if i in S then Write(i,1 ');
Writeln;
end;
begin
ClrScr;
{ }
S := [1,2,4,5,200,201,255]; { }
Writeln(' :');
ShowSet;
for i := 1 to 255 do
if (i in S) and ((i mod 2) = 0) {
2,}
then Exclude(S,i);
{ }
Writeln(' :');
ShowSet;
ReadKey; { - }
end.
Include
.
: Inc lude (S, I)
- S .
I , S.
Include .89.
.89. Proclncl. pas
program Proclncl;
uses Crt;
var
S1,S2: set of Byte;
i: Byte;
procedure ShowSet;
{ ,
0 255}
begin
for i := 0 to 255 do
if i in SI then Write(i,' ');
386
. , : Crt
.89
Writeln;
end;
begin
ClrScr;
{ }
{ )
51 := [1,5,201,255];
52 := [ 2 , 4 , 2 0 0 ] ;
Writeln(' :');
ShowSet;
for i := 1 to 255 do
{ S2
1 255, si)
if i in S2 then Include(SI,i);
Writeln(' :');
ShowSet;
ReadKey; { - )
end.
Randomize
.
: Randomize
Randomize .87 ( .
, Random).
Crt
KeyPressed
True, - .
: KeyPressed
: Boolean.
KeyPressed .90.
.90. FuncKPrs. pas
program FuncKPrs;
{ )
uses Crt;
var
: byte;
begin
ClrScr; { )
:= 1; { )
while not KeyPressed do { )
begin
Randomize
.90
GotoXY(l,l); { (1,1)}
{ }
case of
1: Write('I');
2 Write('/');
3 Write('-');
4 Write('\');
end
Delay (2000)'; { 2 }
Inc(c); { 1}
if > 4 then := 1; {, ,}
{ 4}
end;
end.
,
ReadKey
.
: ReadKey
: Char.
ReadKey .91.
.91. FuncRKey.pas
program FuncRKey;
uses Crt;
begin
ClrScr; { }
Writeln(' - ');
Writeln(' - ',Ord(ReadKey));
ReadKey; { - }
end.
WhereX
X .
: WhereX
: Integer.
WhereX .92.
.92. FuncWhrX.pas
program FuncWhrX;
uses Crt;
var
x: Integer;
begin
ClrScr; { }
Write(' X
x := WhereX;
Writeln(x);
= ');
387
388
. , : Crt
.92
GotoXY(x,l);
{ ,
}
ReadKey; { - }
end.
WhereY
Y .
: WhereY
: Integer.
WhereY .93.
.93. FuncWhrY.pas
program FuncWhrY;
uses Crt;
begin
ClrScr; { }
Write(' Y = ', WhereY);
ReadKey; { - }
end.
AssignCrt
CRT. ,
AssignCrt,
. , ,
, Assign. ,
Write Writeln , .
: AssignCrt ( F )
- F Text.
AssignCrt .94.
.94. ProcACRT.pas
program ProcACRT;
uses Crt;
var
F: Text;
begin
ClrScr;
{ }
Assign(F,' test.txt'); { }
AssignCrt(F);
Rewrite(F); { }
{ }
Write(F, ' AssignCrt');
Randomize
389
.94
Close(F); ( )
ReadKey; { - }
end.
ClrEol
( ) ,
.
: ClrEol
ClrEol .95.
.95. ProcCEol.pas
program ProcCEol;
uses Crt;
var
i,j: integer;
begin
ClrScr; { )
{ : 5 75 )
for i := 1 to 5 do
begin
for j := 1 to 75 do Write(i);
Writeln;
end;
Writeln(' .. . ') ;
ReadKey;
{ ClrEol}
forti := 1 to 5 do
begin
GotoXY(i+l,i);
ClrEol;
end;,
ReadKey; { - )
end.
ClrScr
.
: ClrScr
ClrScr .96.
.96. ProcCScr.pas
program ProcCScr;
uses Crt;
var
c: char;
begin
ClrScr;
{ }
Randomize; { )
390
. , : Crt
.96
repeat
:= #0;
Delay
.
: Delay (MS)
MS Word, ,
.
Delay .97.
.97. ProcDely.pas
program ProcDely;
uses Crt;
var
DelayTime: Word;
c: Char;
begin
ClrScr; { }
Writeln(' - "+", - "-", - Esc');
DelayTime := 4000; { - 4 .)
repeat
:= #0;
while not KeyPressed do { }
begin
Writer*');
Delay(DelayTime); {}
end;
:= ReadKey; {, }
{ )
case of
'+','=': if DelayTime > 2000 then Dec(DelayTime,1000); {}
'-','_': Inc(DelayTime, 1000); {}
end;
until = #27; { , Esc}
end.
Randomize
391
DelLine
, .
: DelLine
DelLine .98.
.98. ProcDelL.pas
program ProcDel'L;
{ <Del>}
uses Crt;
var
i,j: integer;
begin
ClrScr; { }
{ }
for i := 1 to 25 do Writeln (' "Turbo Pascal 7.0 .
.. . "1" );
GotoXY(1,1);
repeat
case ReadKey of
#27: Break; { - Esc}
#72: if WhereY > 1 then GotoXY(WhereX,WhereY-l); { }
#80: if WhereY < 25 then GotoXY(WhereX,WheieY+1); { }
#83: DelLine; { Delete)
end;
until False;
end.
GotoXY
.
: GotoXY (X, Y)
X Y Integer,
.
GotoXY .99.
.99. ProcGoXY.pas
program ProcGoXY;
uses Crt;
begin
ClrScr; { }
' - Esc');
Writeln (' - .
repeat
case ReadKey of
#27: Break; { - Esc}
#72: if WhereY > 1 then GotoXY(WhereX,WhereY-1) { }
#75: if WhereX > 1 then GotoXY(WhereX-1,WhereY) { }
#77: if WhereX < 80 then GotoXY(WhereX+1,WhereY) { }
#80: if WhereY < 25 then GotoXY(WhereX,WhereY+1) ; { }
end;
until False;
end.
\
392
. , : Crt
HighVideo
.
: HighVideo
HighVideo . 100.
. 100. ProcHVid.pas
program ProcHVid;
uses Crt;
begin
ClrScr; { )
HighVideo;
Writeln ( ' ');
NormVideo;
Writeln ( ' ' ) ;
ReadKey; { - )
end.
InsLine
.
: InsLine
InsLine . 101.
.101. ProcInsL.pas
program ProcInsL;
{ <Insert>)
uses Crt;
var
i,j: integer;
begin
ClrScr; { )
{ )
for i := 1 to 25 do Writeln (' "Turbo Pascal 7. .
.. . ""');
GotoXY(l,l);
repeat
case ReadKey of
#27: Break; { - Esc)
#72: if WhereY > 1 then GotoXY(WhereX,WhereY-1); { )
#80: if WhereY < 25 then GotoXY(WhereX,WhereY+1) { )
#82: InsLine; { Insert)
end;
until False;
end.
LowVideo
i
.
: LowVideo
LowVideo . 102.
Randomize
. 102. ProcLVid.pas
program ProcLVid;
uses Crt;
begin
ClrScr; { }
i
LowVideo;
Writeln(' ');
NormVideo;
Writeln(' ');
ReadKey; { - }
end.
NormVideo
.
: NormVideo
NormVideo . 103.
. 103. ProcNVid.pas
program ProcNVid;
uses Crt;
begin
ClrScr; { }
LowVideo;
Writeln(' ');
HighVideo;
Writeln(' ');
NormVideo;
Writeln(' ');
ReadKey; { - }
end.
NoSound
.
: NoSound
NoSound . 104.
.104. ProcNSnd.pas
program ProcNSnd;
uses Crt;
begin
ClrScr;
{ }
Sound(lOOO); { 1000 }
Writeln(' , ');
ReadKey;
NoSound;
Writeln(' ');
ReadKey; { - }
end.
393
394
. , : Crt
Sound
.
: Sound (Hz)
Hz Word, .
Sound . 105.
.105. ProcSoun.pas
program ProcSoun;
uses Crt;
var
i: Word;
begin
{ }
ClrScr;
i := 1000;
Write(' ...');
while i <= 5000 do
begin
Sound(i);
{ i }
Delay(SOOO); { 5 }
Inc(i,100); { 100 }
if KeyPressed then break;
end;
NoSound;
{ },
end.
TextBackGround
.
: TextBackGround (Color)
Color Byte,
. Crt (. .1).
.1. Crt ,
0
1
2
3
(Black)
(Blue)
(Green)
(Cyan)
8
9
10
11
4
5
(Red)
(Magenta)
12
13
6
7
(Brown)
-
(LightGray)
14
15
- (DarkGray)
- (LightBlue)
- (LightGreen)
-
(LightCyan)
- (LightRed)
-
(LightMagenta)
(Ye How)
(White)
TextBackGround . 106.
Randomize
395
. 106. ProcTBgr.pas
program ProcTBgr;
uses Crt;
var
i: Byte;
(
begin
ClrScr; /{ }
for i := 0 to 15 do
begin
TextBackGround(i) ;
Writeln (' "Turbo Pascal 7.0 .
.. . ""');
end;
ReadKey; { - }
end.
TextColor
.
: TextColor (Color)
Color Byte, .
Crt (. . .1).
TextColor . 107.
.107. ProcTClr.pas
program ProcTClr;
uses Crt;
var
i: Byte;
begin
ClrScr; { }
for i := 0 to 15 do
begin
TextColor(i);
Writeln (' "Turbo Pascal 7. .
.. . ""');
end;
ReadKey; { - }
end.
TextMode
.
: TextMode (Mode)
Mode Integer, . Crt
(. .2).
TextMode . 108.
396
. , : Crt
.2.
0
- 40x25 (BW40)
1
40x25(0040)
2
- 80x25 (BW80)
Crt
3
80x25(0080)
7
80x25 (Mono)
43/50
256
EGA/VGA (Font8x8)
Window
. . .
: Window (XI, Y1, 2, Y 2 )
XI, 1, 2, Y2 Byte, .
Window . 109.
. 109. ProcWind.pas
program ProcWind;
uses Crt;
procedure ShowWindow(xl,yl,x2,y2,Color: Byte);
begin
Window(xl,1,x2,y2); { }
Randomize
397
. 109
TextBackGround(Color); { }
TextColor(White); ( - }
ClrScr; { }
GotoXY(l,l); { }
Writeln(Color); { }
end;
begin
ShowWindowd, 1,40,12,Blue) ;
ShowWindow(41,1,80,12,Green) ;
ShowWindowd, 13, 40, 24, Cyan) ;
ShowWindow(41,13,80,24,Red) ;
ReadKey; { - }
end.
ProcWind . .7.
. .7.
Dos
DiskFree
.
: DiskFree (Drive)
Drive Byte, : 0 ;
1 ; 2 ; 3 ..
: Longlnt.
DiskFree .110.
.110. FuncDFre.pas
program FuncDFre;
uses Crt, Dos;
var
398
. , : Dos
.110
Drive: Char;
FreeSpace: Longlnt;
begin
ClrScr; { }
Write(' : ');
Readln(Drive);
Drive := UpCase(Drive); { }
FreeSpace := DiskFree(Ord(Drive)-64);
Write(' ',Drive,' ');
Write(FreeSpace div 1024,' ');
Writeln(FreeSpace mod 1024,' ');
ReadKey; { - }
end.
DiskSize
.
: DiskSize (Drive)
Drive Byte, : 0 ;
1 ; 2 ; 3 ..
: Longlnt.
DiskSize .1.
.111. FuncDSiz.pas
program FuncDSiz;
, '
uses Crt, Dos;
var
Drive: Char;
Size: Longlnt;
begin
ClrScr; { }
Write(' : ');
ReadlnfDrive);
Drive := UpCase(Drive); { }
Size := DiskSize(Ord(Drive)-64) ;
Write(' ',Drive,' ');
Write(Size div 1024,' ');
Writeln(Size mod 1024,' ');
ReadKey; { - }
end.
DosExitCode
.
: DosExitCode
: Word. ; : 0 ; 1
<Ctrl+C>; 2 ; 3 Keep.
DosExitCode .112.
Randomize
399
.112. FuncDsEC.pas
program FuncDsEC;
uses Crt,Dos;
var
ProgramName, CmdLine: String;
.,begin
ClrScr; { )
Write(' : ');
Readln(ProgramName);
Write(' ', PrograraName, ': ');
Readln(CmdLine);
Writeln(' ...');
SwapVectors; { }
Exec(ProgramName, CmdLine); { }
SwapVectors; { }
WriteLn('... Exec');
if DosError <> 0 { DOS)
then Writeln(' DOS #', DosError)
else Writeln(' . = ', DosExitCode);
ReadKey; {^ - )
end.
DosVersion
DOS.
: DosVersion
: Word. ,
.
DosVersion .113.
.113. FuncDosV.pas
program FuncDosV;
uses Crt,Dos;
var
Ver: Word;
begin
ClrScr;
{ }
Ver := DosVersion;
WriteLn(' DOS: ',Lo(Ver),'.',Hi(Ver));
ReadKey; { - )
end.
EnvCount
DOS.
: EnvCount
: Integer.
(enviroment) ,
, .
400
. , : Dos
MS-DOS : . =, . MS-DOS ( ). MS-DOS .
, ,
.. ,
. ,
COMSPEC ':\' , MS-DOS COMMAND.COM. ,
PATH, , , , , .
MS-DOS SET
=.
AUTOEXEC.BAT (. . .6) CONFIG.SYS. ,
SET =: \; : \DOS; : \NC,
AUTOEXEC.BAT, , , ,
.
EnvCount . 114.
.114. FuncEnvC.pas
program FuncEnvC;
uses Crt,Dos;
begin
ClrScr; { )
WriteLn(' ',EnvCount,' DOS');
ReadKey; { - }
end.
EnvStr
DOS.
. .
: EnvStr (Index)
Index Integer, DOS.
: String.
EnvStr . 115.
.115. FuncEnvS. pas
program FuncEnvS;
uses Crt,Dos;
var
i: integer;
begin
ClrScr; { )
Randomize
401
.115
WriteLn(' DOS: ') ;
for i := 1 to EnvCount do Writeln(EnvStr(i));
ReadKey; { - }
end.
FExpand
( ).
'.
: FExpand (Path)
Path PathStr ( ,
Dos), .
: PathStr.
FExpand . 116.
.116. FuncFExp.pas
program FuncFExp;
uses Crt,Dos;
begin
ClrScr; { )
Writeln(' FuncFExp.exe:');
Writeln(FExpand('FuncFExp.exe') ) ;
ReadKey; { - )
end.
FSearch
.
: FSearch(Path, DirList)
Path PathStr ( ,
Dos), .
DirList String,
, .
: PathStr.
FSearch . 117.
.117. FuncFSrc.pas
program FuncFSrc;
uses Crt,Dos;
var
s: PathStr;
nf: String;
begin
ClrScr;
{ )
Writeln(' ,')
Writeln(' PATH')
Write(' : ')}
Readln(nf);
s := FSearch(nf, GetEnv('PATH')); { )
402
. , : Dos
.117
,
if s = "
then Writeln(nf,' !')
else Writeln(' ', FExpand(s));
ReadKey; { - }
end.
. DOS EnvCount.
GetEnv
DOS.
: GetEnv (EnVar)
EnVar String, DOS.
: string.
GetEnv . 118.
;.118. FuncGEnv.pas
program FuncGEnv;
uses Crt,Dos;
var
Name: string;
begin
ClrScr; { )
Write(' DOS: ');
Readln(Name);
Writeln (' ',Name,':');
Writeln(GetEnv(Name));
ReadKey; { - }
end.
Exec
. DosError.
: Exec (Path, CmdLine)
Path CmdLine String, .
Exec
( . , DosExitCode).
.2
FindFirst
.
: FindFirst(Path, Attr, F)
Path String, ,
* ?.
Randomize
403
Attr Word, .
Dos ( ): 1 Readonly ( ); 2
Hidden (); 4 System (); 8 VolumelD ( ); 16 Directory (); 32 Archive (); 63 AnyFile (
).
- F Dos
SearchRec.
:
type
SearchRec = Record
Fill: array[1..21] of Byte; {He }
Attr: Byte;
{ )
Time: Longlnt;
{ )
Size: Longlnt;
{ )
Name: String[12]; ()
end;
, Time, UnpackTime.
FindFirst . 119.
.119. ProcFlst.pas
program ProcFlst;
uses Crt, Dos;
var
F: SearchRec;
s:, string;
begin
ClrScr; { )
Write(' : ');
Readln(s);
FindFirst(s,AnyFile,F);
Writeln(' ',s);
Writeln(': F,F.Name);
Writeln(': ',F.Size,' ');
WriteIn(': ',F.Attr);
ReadKey; { - )
end.
FindNext
, FindFirs't. ,
, ,
FindNext Dos DosError. ,
18.
: FindNext (F)
- F Dos
SearchRec.
:
404
. , : Dos
type
SearchRec = Record
Fill: array[1..21] of Byte; {He }
{ }
Attr: Byte;
{ }
Time: Longlnt;
Size: Longlnt;
{ }
Name: String[12]; {}
end;
, Time, UnpackTime.
FindNext . 120.
.120. ProcFNxt .pas
program ProcFNxt;
uses Crt, Dos;
var
F: SearchRec;
s: string;
begin
ClrScr; { }
Write(' : ') ;
Readln(s);
FindFirst(s,AnyFile,F);
Writeln(' ',s,' :');
while DosError = 0 do
begin
Writeln(F.Name);
PindNext(F);
end;
ReadKey; { - }
end.
FSplit
.
: FSplit(Path, Dir, Name, Ext)
Path Dos PathStr, .
- Dir Dos
DirStr, .
- Name Dos
NameStr, ( ).
- Ext Dos
ExtStr, .
FSplit . 121.
.121. ProcFSpl.pas
program ProcFSpl;
uses Crt, Dos;
var
Path: PathStr;
Randomize
405
.121
Dir: DirStr;
,,
Name: NameStr;
Ext: ExtStr;
begin
ClrScr; { }
Writeln(' :');
Readln(Path);
FSplit(Path, Oir, Name, Ext);
Writeln(': ',Dir);
Writeln(': ',Narae);
Writeln(': ',Ext);
ReadKey; { - }
end.
GetCBreak
DOS
<Ctrl+Break>.
: GetCBreak (Break)
- Break Boolean.
GetCBreak False, DOS
<Ctrl+Break> / ; True, .
GetCBreak . 122.
.122. ProcGCBr.pas
program ProcGCBr;
uses Crt, Dos;
const
OffOn: array [Boolean] of String[4] = ('','');
var
Cb: Boolean;
begin
ClrScr; { )
GetCBreak(Cb);
Writeln(' <Ctrl+Break>: ', OffOnfCb]);
Cb := Not(Cb);
Writeln(' : ', OffOn[Cb]);
SetCBreak(Cb);
GetCBreak(Cb);
Writeln(' <Ctrl+Break>: ', OffOn[Cb]);
ReadKey; { - }
end.
GetDate
, .
: GetDate(Year, Month, Day, DayOfWeek)
4015
. , : Dos
GetFAttr
.
: GetFAttr (F, Attr)
- F .
- Attr Word, . Attr Dos: I Readonly ( ), 2 Hidden (), 4 System (), 8
VolumelD ( ), 16 Directory (), 32 Archive (), 63 AnyFile ( ).
Ge t FAt t . 124.
.124. ProcGFAt.pas
program ProcGFAt;
uses Crt, Dos;
var
F: File;
Attr: Word;
s: string;
begin
ClrScr; { }
Write(' : ');
Readln(s);
Randomize
407
.124
Assign(F, s); { }
GetFAttr(F, Attr);
{ , Dos}
if (Attr and Readonly) <> 0 then Writeln(' ');
if (Attr and Hidden) <> 0 then Writeln('');
if (Attr and SysFile) <> 0 then Writeln('');
if (Attr and VolumelD) <> 0 then Writeln('ID ');
if (Attr and Directory) <> 0 then Writeln(' ');
if (Attr and Archive) <> 0 then Writeln(' ()
ReadKey; { - }
end.
GetFTime
.
: Ge t FT ime (F, ime)
- F .
- Time Longint,
F.
Time UnpackTime.
GetFTime . 125.
.125. ProcGFTm.pas
program ProcGFTm;
uses Crt, Dos;
var
s: string;
F: File;
Time: Longint;
DT: DateTime; { DateTime Dos}
begin
ClrScr; { )
Write(' : ');
Readln(s);
Assign(F, s); { }
GetFTime(F,Time); { )
{ DateTime}
UnpackTime(Time, DT) ;
Writeln(' ',s, ' ');
Write (DT. Day, ' . ', DT. Month,'' . ',DT.Year) ;
Writeln(' ',DT.Hour,':',DT.Min,':',DT.Sec);
ReadKey; { - }
end.
DateTime, Dos, :
type
DateTime = Record
Year, Month, Day: Word;
Hour, Min, Sec: Word;
end;
408
. , : Dos
__
GetlntVec
, ,
: GetlntVec(IntNo, Vector)
IntNo Byte, .
- Vector.
GetlntVec . 126.
.126. ProcGlVc.pas
program ProcGIVc;
uses Crt, Dos;
var
IntlCSave: Pointer;
procedure TimerHandler; interrupt;
begin { - }
end;
begin
ClrScr; ( }
{ $1 - ( )}
( IntlCSave}
GetlntVec($1C, IntlCSave);
( }
SetIntVec($lC, @TimerHandler);
WriteLn(' ...');
repeat
until KeyPressed; ( }
( }
SetIntVec($lC, IntlCSave);
end.
$1 TimerHandler.
interrupt. GetlntVec
IntlCSave, SetlnVec ,
, , .
GetTime
, .
: GetTime(Hour, Minute, Second, SeclOO)
- Hour, Minute, Second, SeclOO -
Word, , , .
GetTime . 127.
.127. ProcGtTm.pas
program ProcGtTm;
uses Crt, Dos;
Randomize
409
.127
,
var
H1,H2,M1,M2,S1,S2,S100: Word;
begin
ClrScr; { }
Writeln(' ...');
ReadKey;
GetTime(Hl,Ml,Sl,S100);
Writeln(' ...');
ReadKey;
GetTime(H2,M2,S2,S100) ;
Writeln(' ');
Write(' : ',
2-1,' , ', 2-1,' , ', S2-S1, ' ');
ReadKey; { - }
end.
GetVerify
DOS.
: GetVerify (Verify)
- Verify Boolean. Verify
False, .
GetVerify . 128.
.128. ProcGVrf .pas
program ProcGVrf;
uses Crt, Dos;
var
IsVerify: Boolean;
begin
ClrScr;
{ }
GetVerify(IsVerify);
Write(' ' ) ;
if not IsVerify then W r i t e ( ' ' ) ;
Writeln('');
ReadKey; { - }
end.
Intr
.
: Intr (IntNo, Regs)
IntNo Byte, .
- Regs Registers.
Intr . 129.
.129. Proclntr.pas
program Proclntr;
uses Crt, Dos;
410
. , : Dos
.129
var
Year, Month, Day: String;
Regs : Registers;
begin
( }
ClrScr;
{ }
Regs.AH:=$2A;
Intr($21, Regs); { 21)
with Regs do
{ }
begin
Str.(CX, Year) ; { - }
Str(DH, Month); {DH - }
Str(DL, Day);
{DL - }
end;
Writen(': ',Day,'.',Month,'.',Year);
ReadKey; { - }
end.
Keep
.
: Keep (ExitCode)
ExitCode Word, .
Keep . 130.
.130. ProcKeep.pas
program ProcKeep;
{$ $800, 0, 0 }
{ 2, }
Randomize
411
.130
GetlntVec($9, SKbdlntVec); {9 - }
( KeyClick}
SetIntVec($9, Addr(KeyClick));
( )
-^
Keep();
end.
.
MsDos
DOS ( $21).
: MsDos (Regs)
- Regs Registers, .
MsDos . 131.
.131. ProcMsDs.pas
program ProcMsDs;
uses Crt, Dos;
var
Year, Month, Day
i Regs : Registers
begin
ClrScr;
Regs.AH:=$2A;
MsDos (Regs) ;
with Regs do
begin
Str(CX Year);
Str(DH Month)
Str(DL Day) ;
String;
( )
( )
( 21)
( )
( - )
(DH - )
(DL - )
end;
. . 129.
PackTime
DateTime Longint.
: PackTime fDT, Time)
- DT DateTime.
- Time Longint,
.
PackTime . 132.
'
412
. , : Dos
.132. ProcPkTm.pas
program ProcpkTm;
uses Crt, Dos;
var
nf: string;
DT: DateTime;
Time: Longlnt;
F: File;
Y,Mo,D,DW,H,Mi,S,S100: Word;
begin
ClrScr; { }
Write(' : ');
Readln(nf);
Assign(F, nf); { }
{ )
GetDate(Y,Mo,D,DW);
GetTime(H,Mi,S,S100) ;
with DT do
begin
Year := Y;
Month := Mo;
Day := D;
Hour := H;
Min := Mi;
Sec := S;
end;
PackTime(DT,Time)
, { }
Reset(F);
{ F}
SetFTime(F,Time); { F}
Close(F);
{ F}
end.
ProcPkTm , ,
PAS, .
SetCBreak
<Ctrl+Break>.
DOS
: SetCBreak (Break)
Break Boolean.
True, <Ctrl+Break>
.
/ .
SetCBreak . 133.
.133. ProcSCBr .pas
program ProcSCBr;
uses Crt, Dos;
const
Randomize
413
.133
OffOn: array [Boolean] of String[4] = ('','');
var
Cb: Boolean;
begin
ClrScr; { }
GetCBreak(Cb);
WritelnC <Ctrl+Break>: ', OffOn[Cb]);
Cb := Not(Cb);
Writeln(' : ', OffOn[Cb]);
SetCBreak(Cb);
GetCBreak(Cb);
Writeln(; <Ctrl+Break>: ', OffOnfCb]);
ReadKey; ( - }
end.
Set Date
.
: SetDate(Year, Month, Day)
Year, Month Day Word, ,
.
SetDate . 134.
.134. ProcSDat.pas
program ProcSDat;
uses Crt, Dos;
var
Y,M,D: Word;
begin
ClrScr;
( }
Write(' : ');
Readln(Y);
Write(' : ');
Readln(M);
Write(' : ');
Readln(D);
SetDate(Y,M,D); ( }
end.
SetFAttr
.
: SetFAttr (F, A t t r )
- F .
Attr Word, .
Attr Dos: 1 Readonly ( ), 2
Hidden (), 4 System (), 8 VolumelD ( ), 16 Directory (), 32 Archive (), 63 AnyFile (
).
SetFAttr .135.
414
. , : Dos
SetFTime
.
*.
SetlntVec
.
: SetlntVec(IntNo, Vector)
IntNo Byte, .
Vector ().
SetlntVec .126 (
. , GetlntVec).
SetTime
.
: SetTime(Hour, Minute, Second, SeclOO)
Hour, Minute, Second SeclOO Word, , , .
SetTime .136.
Randomize
415
.136. ProcStTm.pas
program ProcStTm;
uses Crt, Dos;
var
H,M,S: Word;
begin
ClrScr; { }
Write(' : ');
Readln(H);
Write(' : ') ;
Readln(ty);
Write(' : ') ;
Readln(S);
SetTime(H,M,S,0) ; { }
end.
SetVerify
DOS .
: SetVerify ( V e r i f y )
V e r i f y Boolean,
: True .
SetVerify .137.
.137. ProcSVrf .pas
program ProcSVrf;
uses Crt, Dos;
const
OffOn: array [Boolean] of string[4] = ('', '');
var
v: Boolean;
begin
ClrScr; { }
GetVerify(V);
WriteLn(' : ', OffOn[V]);
V := not V ;
SwapVectors
SavelntXX, System,
.
: SwapVectprs
SwapVectors . 112 (<
. , DosExitCode).
416
. , : Graph
UnpackTime
Longlnt DateTime.
: UnpackTime (Time, DT)
Time Lungint, .
- DT DateTime,
.
UnpackTime . 125 (
. , GetFTime).
Graph
, , .
,
IniGraph.pas, .138.
.138. IniGraph.pas
unit IniGraph;
interface
uses Graph;
procedure Graphlnit;
implementation
procedure Graphlnit;
var
DriverVar, ModeVar, ErrorCode: integer;
begin
DriverVar := EGA;
ModeVar := EGAHI;
InitGraph(DriverVar,ModeVar, '\tp\bgi');
ErrorCode := GraphResult;
if ErrorCode <> grOK then
begin,
Writeln(GraphErrorMsg(ErrorCode));
Halt(l) ;
end;
end;
end.
Randomize
GetBkColor
0 15.
: GetBkColor
: Word.
GetBkColor .139.
.139. FuncGBkC.pas
program FuncGBkC;
uses Crt, Graph, IniGraph;
const
Colors: array[0..15] of String =
('','','','','',
'1,'','-','-',
1
-','-','-',
'-','-','','');
begin
Graphlnit; { IniGraph ( .138)}
Randomize; { }
{ }
SetBkColor(Random(16));
{ }
SetColor(15-GetBkColor);
{ }
OutText(' - ' + Colors[GetBkColor]);
ReadKey; { - }
CloseGraph; { }
end.
GetColor
0 15.
: GetColor
: Word.
GetBkColor . 140.
.140. FuncGetC.pas
program FuncGetC;
uses Crt, Graph, IniGraph;
const
Colors: array[0..15] of String =
('','','','','',
'','','-','-'
1
-','-','-',
'-','-','','')
begin
Graphlnit; { IniGraph ( .138)}
Randomize; { }
417
418
. , : Graph
.140
{ )
SetColor(Random(16));
{ }
SetBkColor(15-GetColor);
{ }
OutText(' - ' + Colors[GetColor]);
ReadKey; { - }
CloseGraph; { }
end.
GetDriverName
.
: GetDriverName
: String.
GetDriverName . 141.
.141. FuncGDrN.pas
program FuncGDrN;
uses Crt, Graph, IniGraph;
begin
Graphlnit; { IniGraph ( .138)}
OutText(GetDriverName); { }
ReadKey; { - }
CloseGraph; { }
end.
GetGraphMode
.
: GetGraphMode
: Integer.
GetGraphMode . 142.
.142. FuncGGrM.pas
program FuncGGrM;
uses Crt, Graph, IniGraph;
var
OldGrMode: Integer;
begin
Graphlnit; { IniGraph ( .138)}
OutText(' EGAHI');
ReadKey; { - }
OldGrMode := GetGraphMode;
SetGraphMode(0);
OutText(' EGALO');
ReadKey;
SetGraphMode(OldGrMode) ;
1
OutText(' EGAHI );
Randomize
419
.142
ReadKey;
CloseGraph; ( -}
end.
GetMaxColor
,
SetColor.
: GetMaxColor
.
: Word.
GetMaxColor . 143.
.143. FuncGMxC.pas
program FuncGMxC;
uses Crt, Graph, IniGraph;
(
const
Colors: array[0..15] of String =
('','','','','',
'','','-','-',
'-','-','-',
'-','-','','');
begin
Graphlnit; { IniGraph ( .138)}
OutText(' - '+Colors[GetMaxColor]);
ReadKey; { - }
CloseGraph; { }
end.
GetMaxMode
.
: GetMaxMode
: Integer.
GetMaxMode . 144.
.144. FuncGMxM.pas
program FuncGMxM;
uses Crt, Graph, IniGraph;
var
S: string;
begin
Graphlnit; { IniGraph ( .138)}
Str (GetMaxMode, s) ;
OutText(' - *+s);
ReadKey; { - }
CloseGraph; { }
end.
420
, , : Graph
GetMaxX
.
: GetMaxX
: Integer.
GetMaxX . 145.
.145. FuncGMxX.pas
program FuncGMxX;
uses Crt, Graph, IniGraph;
var
S: string;
begin
Graphlnit; { IniGraph ( .138)}
Str(GetMaxX,s);
OutText(' - '+s);
ReadKey; { - }
CloseGraph; { }
end.
GetMaxY
.
: GetMaxY
: Integer.
GetMaxY . 146.
.146. FuncGMxY.pas
program FuncGMxY;
uses Crt, Graph, IniGraph;
var
S: string;
begin
Graphlnit; { IniGraph ( .138)}
Str(GetMaxY,s);
OutText(' - '+s);
ReadKey; { - }
CloseGraph; { }
end.
GetModeName
.
: GetModeName (ModeNumber)
ModeNumber Integer, .
: String.
GetModeName . 147.
"
Randomize
421
.147. FuncGMdN.pas
program FuncGMdN;
uses Crt, Graph, IniGraph;
var
i: integer;
S: string;
begin
Graphlnit; { IniGraph ( .138)}
for i := 0 to GetMaxMode do
begin
Str(i,s);
MoveTo(l,i*20);
OutText(' '+s+' - '+GetModeName(i));
end;
ReadKey; {' - }
CloseGraph; ( )
end.
GetPaletteSize
.
: GetPaletteSize
: Integer.
GetPaletteSize . 148.
. 148. FuncGPSz .pas
program FuncGPSz;
uses Crt, Graph, IniGraph;
var
i: integer;
S: string;
begin
Graphlnit; { IniGraph ( .138)}
for i := 1 to GetPaletteSize do
begin
SetColor (i);
MoveTo(l,i*10);
LineTo(100,i*10);
end;
ReadKey; { - }
CloseGraph; { }
end.
GetPixel
.
: GetPixel (X, Y)
: Word.
GetPixel .149.
422
. , : Graph
.149. FuncGPix.pas
program FuncGPix;
uses Crt, Graph, IniGraph;
const
Colors: array[0..15] of String =
( ' ' , ' ' , ' ' , ' ' , ' ' ,
'' , '' , '-' , '-' ,
'-' , '-' , '-' ,
'-' , '-' , '' , '' ) ;
procedure DetectColor (Color : Byte);
begin
ClearDevice;
SetFillStyle (SolidFill, Color) ;
_ ,,
FillEllipse(100,50,30,23) ;
OutText (Colors [GetPixel (100 , 50) ] ) ;
ReadKey; { - }
end;
begin
Graphlnit; { IniGraph ( . 138)}
DetectColor (Blue) ;
DetectColor (Red) ;
CloseGraph; { }
end.
GetX
X .
: GetX
: Integer.
GetX . 150.
.150. FuncGetX.pas
program FuncGetX;
uses Crt, Graph, IniGraph;
var
i: integer;
S: string;
begin
Graphlnit;
{ IniGraph ( .138)}
for i := 1 to 5 do
begin
Str(GetX,S);
{ X S}
OutText(S+1 '); { X}
)
ReadKey;
{ - }
end;
CloseGraph;
end.
{ }
Randomize
423
GetY
Y .
: GetY
: Integer.
GetY . 1.51.
.151. FuncGetY.pas
program FuncGetY;
uses Crt, Graph, IniGraph;
var
i: integer;
S: string;
begin
Graphlnit;
{ IniGraph ( . 138)}
for i := 1 to 5 do
begin
MoveTo(1,i*10); {
(l,i*10)J
Str(GetY,S);
{ Y S}
OutText(S+' '); { Y}
}
{ - }
ReadKey;
end;
{ }
CloseGraph;
end.
GraphErrorMsg
.
: GraphErrorMsg.
: string.
GraphErrorMsg .152.
.152. FuncGrEM.pas
program FuncGrEM;
uses Crt, Graph;
var
DriverVar, ModeVar, ErrorCode: integer;
begin
DriverVar := EGA;
ModeVar := EGAHI;
InitGraph(DriverVar,ModeVar,'\tp\bgi'); {
}
ErrorCode := GraphResult; {
}
if ErrorCode <> grOK then
begin
Writeln(GraphErrorMsg(ErrorCode));
fjalt(l); { }
end else OutText(' ');
424
. , : Graph
.152
ReadKey; , { - }
CloseGraph; { }
end.
_
_
bgi InitGraph .
. " " .
GraphResult
.
: GraphResult
: Integer.
GraphResult .152 (^
. ).
ImageSize
, .
: ImageSize (XI, Y 1 , X 2 , Y 2 )
XI, Yl, X2, Y2 Integer,
.
: Word.
>
ImageSize .153.
.153. FundmgS.pas
program FuncImgS;
uses Crt, Graph, IniGraph;
var
P: Pointer;
Size: Word;
begin
Graphlnit; { IniGraph ( . 138)}
{ }
SetFillStyle(XHatchFill, Cyan);
Bar (0, 0, GetMaxX, GetMaxY) ;
{ }
Size := ImageSize (10,20,30, 40) ;
GetMem(P, Size);
{ }
{ }
A
GetImage(10,20,30,40,P ) ; {
}
ReadKey; { - }
Clear Device; { }
{ }
Putlmage (100, 100, PA,NormalPut) ; ,
ReadKey;
Randomize
425
.153
CloseGraph; { }
end.
FuncImgS . .8.
InstallUserFont
, BGI (Borland Graphical Interface).
: InstallUserFont(FontFileName)
426
. , : Graph
InstalluserFont . 154.
.154. FunclnUF.pas
program FuncInUF;
uses Crt, Graph, IniGraph;
var
UserFont: Integer;
begin
UserFont := InstalluserFont('user.chr');
if GraphResult <> grOk then
begin
Writeln ( DefaultFont)');
Writeln(' ...');
ReadKey;
end;
Graphlnit; { IniGraph ( .138)}
SetTextStyle(UserFont, HorizDir, 2); { }
OutText(' "Turbo Pascal 7. ".
... ""');
ReadKey; { - }
CloseGraph; { }
end.
TextHeight
.
: TextHeight (TextString)
TextString String.
: Word.
TextHeight . 155.
.155. FuncTxtH. pas
program FuncTxtH;
uses Crt, Graph, IniGraph;
const
S = '';
var
Y, Size: Integer;
begin
Graphlnit; { IniGraph ( .138)}
Y := 0;
for Size := 1 to 5 do {, }
begin
{ , }
SetTextStyle(DefaultFont, HorizDir, Size);
{ (0,Y)}
OutTextXY(0, Y, S) ;
{ Y
}
Inc(Y, TextHeight(S));
end;
ReadKey; { - }
Arc
427
.155
CloseGraph; { }
end.
FuncTxtH . .9.
TextWidth
.
: TextWidth (TextString)
TextString String.
: Word.
TextWidth .156.
.156. FuncTxtW.pas
program FuncTxtW;
uses Crt, Graph, IniGraph;
const
S = '';
var
Row, Size: Integer;
begin
Graphlnit; { IniGraph ( .138)}
Row:=0;
Size:=l;
while TextWidth(S) < GetMaxX do { }
begin
{ }
{ (0,Row)}
OutTextXY(0, Row, S);
{ Y ( Row)
' }
Inc(Row, TextHeightCM' ) ) ;
Inc(Size); { 1}
{ , }
SetTextStyle(DefaultFont, HorizDir, Size);
end;
ReadKey; { - }
- CloseGraph; ( }
end.
FuncTxtW . . 10.
Arc
.
...-.,'".'"
428
. , : Graph
181.....
. .9.
. .10.
FuncTxtW
,ProcArc . .11.
. .11'. ()
.
: (XI, Yl, 2 , Y 2 )
XI, Yl, X2 Y2 Integer,
(XI, Y1) (2, Y2) .
. 158.
429
.158. ProcBar.pas
program ProcBar;
uses Crt, Graph, IniGraph;
var
i: byte;
begin
Graphlnit; { IniGraph ( .138)}
for i := 0 to 15 do
begin
{ :
- I.
. }
SetFillStyle (SolidFill, i) ; { 0 15 . .1}
(, i*(GetMaxY div 16), GetMaxX, (i+1)*(GetMaxY div 16));
end;
ReadKey; { - }
CloseGraph; { }
end.
ProcBar . . 12.
. .1 2.
.
: 3D (XI, Y l , 2, Y 2 , Depth, Top)
XI, Yl, X2 Y2 Integer,
(XI, Y1) (2, Y2) .
Depth Word, .
Boolean, ,
.
. 159.
430
. , : Graph
.159. .pas
program ;
uses Crt, Graph, IniGraph;
var
i: byte;
begin
Graphlnit; { IniGraph ( .138)}
for i := 0 to 15 do
begin
{ :
I.
. }
SetFillStyle(SolidFill,i) ; { 0 15 . .1}
BarSD(i*(GetMaxX div 16), 10, i*(GetMaxX div 16)+20, 200, 5, True);
end;
ReadKey; { - }
CloseGraph; { }
end.
. . . 13.
. .13.
Circle
.
: C i r c l e ( X , Y, Radius)
X Y Integer,
.
Radius Word, .
circle . 160.
.160. ProcCrcl.pas
program ProcCrcl;
uses Crt, Graph, IniGraph;
var
i: byte;
begin
Graphlnit; { IniGraph ( . 138)}
Randomize; { )
for i := 1 to 10 do
begin
DrawPoly
431
.160
{ }
SetColor(l+Random(15));
( 10 )
Circle(Random(GetMaxX),Random(GetMaxY),Random(100));
end;
ReadKey; ( - }
CloseGraph; ( }
end.
ProcCrcl . . 14.
. .14.
DrawPoly
.
: DrawPoly(NumPoints, PolyPoints)
NumPoints Word, , PolyPoints. X Y.
- PolyPoint PointType, :
type
PointType = Record
X, Y: Integer;
end;
DrawPoly . 161.
.161. ProcDPol.pas
program ProcDPol;
uses Crt, Graph, IniGraph;
var
i: byte;
432
. , : Graptr
.161
Poly: array[1..5] of PointType;
begin
Graphlnit; { IniGraph ( .138))
Randomize; { }
{ }
for i := 1 to 5 do
begin
Polyti].X := Random(GetMaxX);
Poly[i].Y := Random(GetMaxY);
end;
DrawPoly(5, Poly);
ReadKey; { - }
CloseGraph; { }
end.
. . 15.
ProcDPol
Ellipse
.
:
,
Ellipse(X, Y, StAngle, EndAngle,
XRadius, YRadius)
X Y
Integer,
..15.
FillEllipse
433
ProcElps . . 16.
. .16.
FillEllipse
.
: FillEllipse(X, Y, XRadius, Y R a d i u s )
X Y Integer,
.
XRadius YRadius Word,
X Y.
FillEllipse .163.
.163. ProcFEll .pas
program ProcFEll;
uses Crt, Graph, IniGraph;
var
i: integer;
begin
Graphlnit; { IniGraph ( .138)}
for i : = 0 to 15 do
begin
{ :
I.
. }
SetFillStyle (SolidFill, i) ; { 0 15 . .1}
FillEllipse (IMGetMaxX div 16)+20,100,20,40);
end;
!
ReadKey; { - }
CloseGraph; { }
end.
ProcFEll .. .17.
434
. , : Graph
. .17.
FHIPoly
.
.
_,
: FillPoly(NumPoints, PolyPoints)
NumPoints Word, , PolyPoints. X Y.
- PolyPoint PointType, :
type
PointType = Record
X, Y: Integer;
end;
FillPoly . 164.
.164. ProcFPol. pas
program ProcFPol;
uses Crt, Graph, IniGraph;
var
i: byte;
Poly: array[1..5] of PointType;
begin
Graphlnit; ( IniGraph ( .138)}
Randomize; { }
{ }
for := 1 to 5 do
begin
Poly[i].X := Random(GetMaxX);
Poly[i].Y := Random(GetMaxY);
end;
SetFillStyle(SolidFill,Green); {
: .
,
( 0 5 )}
FillPoly(Random(6), Poly);
ReadKey; { - }
CloseGraph; { }
end.
ProcFPol . . 18.
FloodFill
.
:
FloodFillPoly(X, Y, Border)
Getlmage
435
X Y
Integer, .
Border
Word, ,
.
FloodFill . 165.
. .18.
.165. ProcFFil.pas
program ProcFFil;
uses Crt, Graph, IniGraph;
var
i: integer;
begin
Graphlnit; { IniGraph ( .138)}
SetColor(Red); { }
Circle(100,100,50); { }
SetColor(Yellow); { }
Circle(100,100,80); { }
{ :
}
SetFillStyle(SolidFill,Green) ;
ReadKey; { - }.
FloodFill(100,100,Red); { }
ReadKey;
FloodFill(100,100,Yellow); { }
ReadKey;
CloseGraph; { }
end.
ProcFFil . . 19.
""--
'-~^
. .19. (1) (2 3)
Getlmage
.
: Getlmage(XI, Yl, X2, Y2, BitMap)
XI, Yl, X2 Y2 Integer,
.
- BitMap - .
Get Image, . 153 (<< .
, ImageSize).
436
. , : Graph
Line
.
: Line (XI, Y l , 2, Y 2 )
XI, Yl, X2 Y2 Integer,
.
Line . 166.
.166. ProcLine.pas
program ProcLine;
uses Crt, Graph, IniGraph;
var
i: integer;
begin
Graphlnit; { IniGraph ( .138)}
Randomize; { }
for i := 1 to 20 do
begin
{ }
SetColor(l+Random(15)) ;
{ 20 }
Line(Random(GetMaxX),Random(GetmaxY),
Random(GetMaxX),Random(GetmaxY));
end;
ReadKey;
CloseGraph; { }
end.
ProcLine . .20.
. .20.
LineRel
, .
: LineRel (DX, D Y )
LineTo
437
DX DY Integer, .
LineRel . 167.
.167. ProcLnRl.pas
program ProcLnRl;
uses Crt, Graph, IniGraph;
var
c: char;
begin
Graphlnit; { IniGraph ( .138)}
while True do
begin
{ - }
:= ReadKey;
case of
#27: Break; { Esc}
#72: LineRel(0,-10); { }
#75: LineRel(-10,0); { }
#77: LineRel(10,0); { }
#80: LineRel(0,10); { }
end;
end;
CloseGraph; { }
end.
ProcLnRl . .21.
. .21. , ProcLnRl
LineTo
.
: LineTo (X, Y)
X Y Integer,
.
LineTo . 168.
.168. ProcLnTo.pas
program ProcLnTo;
uses Crt, Graph, IniGraph;
var
: char;
438
. , : Graph
.168
NextX, NextY: Integer;
begin
Graphlnit; { IniGraph ( .138)}
NextX := 0;
NextY := 0;
while True do
begin
{ - }
:= ReadKey;
case of
#27: Break; { no Esc}
#72: Dec(NextY,10); { :
Y ( NextY) 10}
#75: Dec(NextX,10) ; { }
#77: Inc(NextX,10); { :
X ( NextX) 10}
#80: Inc(NextY,10); { }
end;
LineTo(NextX,NextY);
end;
CloseGraph; { }
end.
ProcLnTo . .21. ProcLnRl (
. 167).
MoveRel
.
: MoveRel (DX, DY)
DX DY Integer, .
MoveRel . 169.
.169. ProcMvRl. pas
program ProcMvRl;
uses Crt, Graph, IniGraph;
var
c: char;
^
begin
Graphlnit; { IniGraph ( .138)}
while True do
begin
{ - }
:= ReadKey;
case of
,
#27: Break; { Esc)
#72: begin { }
MoveRel(0,-5);
LineRel(0,-10);
end;
MoveTo
439
.169
#75: begin { }
MoveRel(-5,0) ;
LineRel(-10,0);
end;
#77: begin { )
MoveRel(5,0);
LineRel(10,0);
end;
#80: begin { }
MoveRel(0,5);
LineRel(0,10);
end;
end;
end;
CloseGraph; { }
end.
ProcLnTo . .22.
ProcLnRl ( . 167 . . 21).
MoveTo
.
: MoveTo (X, Y)
X Y Integer,
.
MoveTo . 170.
.170. ProcMvTo.pas
program ProcMvTo;
uses Crt, Graph, IniGraph;
var
i: integer;
begin
Graphlnit; { IniGraph ( .138)}
for i := 1 to 15 do { 15 }
begin
SetColor(i); { }
(44 . 0 15 . .1}
MoveTo(10,i*10); { }
LineRel(100,0); ( }
end;
ReadKey; { - }
CloseGraph; { }
end.
ProcMvTo . .23.
OutText
.
: OutText (TextString)
TextString String.
440
. , : Graph
_i ti.r_ii_._|i_.r~ji ._
i_l i
_ I p I p I I I | I
ii ii .|
|-fj
i .i
i|
. .22.
ProcLnTo
. .23. ""
OutText .171.
X
.171. ProcOutT.pas
program ProcOutT;
uses Crt, Graph, IniGraph;
var
: char;
begin
Graphlnit; { IniGraph ( .138)}
while True do
begin
{ - }
:= ReadKey;
if = #27 then Break { Esc}
else begin
OutText(); { )
{ }
if GetX > GetMaxX then
MoveTo(0,GetY+15); { }
end;
end;
CloseGraph; { }
end.
OutTextXY
.
: OutTextXY(X, Y, TextString)
X Y Integer,
.
TextString String.
OutTextXY . 172.
.172. ProcOTXY. pas
program ProcOTXY;
uses Crt, Graph, IniGraph;
var
c: char;
begin
PieSlice
441
.171
Graphlnit; { IniGraph ( .138)}
while True do
begin
{ - )
:= ReadKey;
if = #27 then Break { Esc}
else begin
OutTextXY(GetX,GetY,); ( }
MoveRel(10,0); { }
{ }
if GetX > GetMaxX then
MoveTo(0,GetY+15); { }
end;
end;
CloseGraph; { }
end.
PieSlice
.
: PieSlice(X, Y, StAngle, EndAngle, Radius)
X Y Integer,
.
StAngle EndAngle Word, .
Radius Word, , .
PieSlice . 173.
.173. ProcPieS.pas
program ProcPieS;
uses Crt, Graph, IniGraph;
begin
Graphlnit; { IniGraph ( .138)}
SetFillStyle(SolidFill,Blue); {
: }
PieSlice(100,100,0,90,50); { }
PieSlice(250,100,0,180,50); { }
PieSlice(400,100,0,360,50); { }
ReadKey; { - }
CloseGraph; { }
end.
ProcPieS . .24.
. .24.
442
. , : Graph
Putlmage
.
: Putlmage (X, Y, BitMap, BitBIt)
X Y Integer, , .
BitMap ,
.
BitBIt Word, .
BitBIt
Graph: 0 (NormalPut) ; 1 (XORPut) XOR; 2 (ORPut)
OR; 3 (ANDPut) AND; 4 (NOT Put)
NOT.
Putlmage . 174.
.174. ProcPImg. pas
program ProcPImg;
uses Crt, Graph, IniGraph;
var
P: Pointer;
Size: Word;
begin
Graphlnit; { IniGraph ( .138)}
{ }
SetFillStyle(XHatchFill, Cyan); {
: }
(, , GetMaxX, GetMaxY); {
}
{ }
Size := ImageSize (10,20,30,40);
GetMem(P, Size);
{ }
{ }
Getlmage(10,20,30,40,);
ReadKey; { - }
{ }
SetFillStyle(SolidFill, Yellow); {
: }
(, , GetMaxX, GetMaxY);
{ }
Putlmage(100,100,,NormalPut);
Putlmage(150,100,,XORPut);
Putlmage(200,100,,ORPut);
Putlmage(250,100,PA,ANDPut);
A
Putlmage(300,100,P ,NOTPut);
ReadKey;
CloseGraph; { }
end.
. MaxAvail.
ProcPImg . .25.
PutPixel
443
x,y: Word;
begin
Graphlnit; { IniGraph ( .138)}
Randomize; { )
for := 1 to GetMaxX do
for :=*= 1 to GetMaxY do
PutPixel(,,Random(16)) ;
ReadKey; { - )
CloseGraph; { )
end.
ProcPPxl . .26.
. .26.
444
. , : Graph
Rectangle
.
: Rectangle (XI, Y l , X 2 , Y 2 )
XI, Yl, X2 Y2 Integer,
(XI, Y1) (2, Y2) .
Rectangle . 176.
.176. ProcRect.pas
program ProcRect;
uses Crt, Graph, IniGraph;
var
i: Byte;
begin
Graphlnit; { IniGraph ( .138)}
Randomize; { )
for i := 1 to 10 do { 10 }
begin
SetColor(l+Random(15)); { }
(44 . 0 15 . .1)
Rectangle(Random(GetMaxX),Random(GetMaxY),
Random(GetMaxX),Random(GetMaxY))
;
end;
ReadKey; { - }
CloseGraph; ( }
end.
ProcRect . .27.
. .27.
Sector
.
: Sector(X, Y, StAngle, End&ngle, XRadius, YRadius)
X Y Integer,
.
ClearViewPort
445
. .28.
ClearViewPort
.
: ClearViewPort
ClearViewPort .178.
.178. ProcClVP, pas
program ProcClVP;
uses Crt, Graph, IniGraph;
begin
Graphlnit; { IniGraph ( .138)}
{ }
Rectangle(19,19,GetMaxX-19,GetMaXY-19);
{ }
SetViewPort(20,20,GetMaxX-20,GetMaxY-20,True);
' OutTextXY(0, 0, ' , ');
ReadKey;
ClearViewPort;
ReadKey; ( - }
446
. , : Graph
.178
CloseGraph; ( }
end.
CloseGraph
.
: CloseGraph
CloseGraph .179.
.179. ProcClsG.pas
program ProcClsG;
uses Crt, Graph, IniGraph;
begin
Writeln ( ' ');
ReadKey;
Graphlnit; { IniGraph ( . 138)}
OutTextXY(0, 0, ' ');
ReadKey;
CloseGraph; { }
Writeln ( ' ');
ReadKey; { - }
end.
DetectGraph
,
.
: DetectGraph (GraphDriver, GraphMode)
DetectGraph . 180.
.1 80. ProcDetG.pas
program ProcDetG;
uses Crt, Graph;
var
DriverVar, ModeVar: integer;
begin
DetectGraph(DriverVar,Mode Var);
InitGraph(DriverVar,ModeVar,'\tp\bgi');
OutTextXYd, 1,' - ' + GetDriverName) ;
OutTextXY(1,10,' - ' + GetModeName(ModeVar));
ReadKey; { - }
CloseGraph; { }
end.
bgi initGraph .
. " " .
GetArcCoords
447
GetArcCoords
Arc.
: GetArcCoords (ArcCoords)
- ArcCoords ArcCoordsType,
Graph :
type
ArcCoordsType = Record
X, Y: Integer;
XStart, YStart: Integer;
XEnd, YEnd: Inte^fe::;
end;
: X Y ;
XStart YStart ;
XEnd YEnd ^ .
GetArcCoords . 181.
.181. ProcGtAC.pas
program ProcGtAC;
uses Crt, Graph, IniGraph;
var
ArcCoords: ArcCoordsType;
begin
Graphlnit; { IniGraph ( .138)}
Arc(100,100,0,270,75); ( }
GetArcCoords(ArcCoords) ;
with ArcCoords do
Line(XStart,YStart,XEnd,YEnd).; ( }
ReadKey; { - }
CloseGraph; { )
end.
ProcGtAC . .29.
GetAspectRatio
,
( ).
: GetAspectRatio(XAsp, YAsp)
- XAsp YAsp Word,
XAsp/YAsp.
tio .182.
GetAspectRa-
.182. ProcGtAR.pas
program ProcGtAR;
uses Crt, Graph, IniGraph;
. .29.
GetArcCoords
448
. , : Graph
.182
var
GetDefaultPalette
, .
: GetDefaultPalette(Palette)
- Palette PaletteType, Graph :
const
MaxColors = 15;
type
PaletteType = Record
Size: Byte;
Colors: array[0..MaxColors] of Shortlnt;
end;
: Size ;'
Colors .
GetDefaultPalette
.183.
.183. ProcGtDP.pas
program ProcGtDP;
uses Crt, Graph, IniGraph;
var
i: integer;
MyPal, OldPal: PaletteType;
begin
Graphlnit; { IniGraph ( .138)}
GetDefaultPalette(OldPal); { }
MyPal:=OldPal;
{ }
{ }
for i := 0 to MyPal.Size - 1 do
begin
SetColor(i); { }
(H . 0 15 . .1}
OutTextXY(10, i*10, ' ');
end;
repeat
{ }
GetFillPattern
449
.183
with MyPal do
{ }
Colors[Random(Size)] := Random(Size+l);
SetAllPalette(MyPal); { }
until KeyPressed; { }
SetAllPalette(OldPal); { }
ReadKey; { - }
CloseGraph; { }
end.
GetFillPattern
.
: GetFillPattern(FillPattern)
- FillPattern FillPatternType, . Graph :
type
'FillPatternType = array[1..8] of Byte;
GetFillPattern
. 184.
.184. ProcGtFP.pas
program ProcGtFP;
uses Crt, Graph,- IniGraph;
const
GraySO: FillPatternType = ($AA, $55, $AA, $55, $AA, $55, $AA, $55);
var
OldPattern: FillPatternType;
begin
Graphlnit; { IniGraph ( .138)}
GetFillPattern(OldPattern);
{ }
SetFillPattern(GraySO, White); {
: (50%)}
(,,100,100); { }
ReadKey; { - }
{ )
SetFillPattern(OldPattern, White);
{ ( , $FF)}
Bar (, 0,100,100). ;
ReadKey;
CloseGraph; { }
end.
GetFHISettings
.
: GetFillSettings 1 (Fillln'fo)
- F i l l l n f o FillSettingsType, Graph :
450
. , : Graph
type
FillSettingsType = Record
Pattern: Word;
Color: Word/end;
: Pattern ;
Color .
GetFillSettings
. 185.
.185. ProcGtFS .pas
program ProcGtFS;
uses Crt, Graph, IniGraph;
var
Filllnfo: FillSettingsType;
begin
Graphlnit; { IniGraph ( .138)}
GetFillSettings(Filllnfo); { )
(,,100,100); { }
SetFillStyle(XHatchFill, GetMaxColor); {
:
)}
(100,0,200,100);
with Filllnfo do SetFillStyle(Pattern, Color);
{ }
Bar(200,0,300,100);
ReadKey; { - }
CloseGraph; { }
end.
ProcGtFS . ..
. .. (1) (3),
(2)
GetLineSettings
, .
: GetLineSettings (Linelnfo)
- Linelnfo LineSettingsType, Graph :
type
LineSettingsType
Record
GetModeRange
451
LineStyle: Word;
Pattern: Word;
Thickness: Word;
end;
: LineStyle ;
Pattern , LineStyle
UserBitLn (4);
Thickness .
GetLineSettings
. 186.
.
.
.
.186. ProcGtLS. pas
program ProcGtLS;
uses Crt, Graph, IniGraph;
var
OldStyle: LineSettingsType;
begin
Graphlnit; { IniGraph ( .138)}
Line(0,0,300,0); { }
GetLineSettings(OldStyle) ;
SetLineStyle(DottedLn, 0, ThickWidth); {
: }
Line(0,10,300,10);
{ }
with OldStyle do
SetLineStyle(LineStyle,Pattern,Thickness) ;
Line(0,20,300,20);
ReadKey; { - )
CloseGraph; { }
.
end.
"
ProcGtLS . .31.
452
. , : Graph
GetModeRange . 187.
.187. ProcGtMR.pas
program ProcGtMR;
uses Crt, Graph, IniGraph;
var
Lowest, Highest: Integer;
S: string;
begin
Graphlnit; { IniGraph ( .138)}
GetModeRange(CurrentDriver, Lowest, Highest);
Str(Lowest,S); ( Lowest
s}
OutTextXY(l,1,' = ' + S) ;
Str(Highest,S);
OutTextXY(1,10,' = ' + S) ;
ReadKey; { - }
CloseGraph; { }
end.
GetPalette
.
: GetPalette (Palette)
- Palette PaletteType, Graph ;
const
MaxColors = 15;
type
PaletteType = Record
Size: Byte;
Colors: array[0..MaxColors] of Shortlnt;
end;
: Size ;
Colors .
GetPalette .188.
.188. ProcGtPa.pas
program ProcGtPa;
uses Crt, Graph, IniGraph;
var
Color: Word;
Palette: PaletteType;
begin
Graphlnit; { IniGraph ( . 1 3 8 ) }
GetPalette(Palette); { }
if Palette.Size <> 1 then
{ }
for Color := 0 to Pred(Palette.Size) do
begin { }
GetViewSettings
453
.188
SetColor (Color); { (44 .
0 15 . . 1 ) }
Line(0, Color*5, 300, Color*5); { }
end
else L i n e ( 0 , 0 , 3 0 0 , 0 ) ;
ReadKey; { - }
CloseGraph; { }
end.
ProcGtPa . .32.
. .32.
1
GetViewSettings
.
: GetViewSettings(ViewPort)
- ViewPort ViewPortType,
Graph :
type
ViewPortType = Record
XI, Yl: Integer;
X2, Y2: Integer;
Clip: Boolean;
end;
XI, Yl, X2, Y2 .
Clip , , ( True), ( False).
GetViewSettings .189.
.189. ProcGtVS .pas
program ProcGtVS;
uses Crt, Graph, IniGraph;
var
ViewPort: ViewPortType;
begin
Graphlnit; { IniGraph ( .138)}
GetViewSettings(ViewPort);
.with ViewPort do
begin
Rectangle(, , 2-1, Y2-Y1);
If Clip
then OutText(' ')
454
. , : Graph
.189
else OutText(' ');
end;
ReadKey; { - }
CloseGraph; ( }
end.
GraphDefaults
(0,0) .
:
GraphDefaults.
GraphDefaults . 190.
.190. ProcGDef .pas
program ProcGDef;
uses Crt, Graph, IniGraph;
var
Viewport: ViewPortType;
begin
Graphlnit; { IniGraph ( .138)}
SetColor(l); { (44 .
0 15 . .1)}
OutText(' ');
ReadKey; { - }
ClearViewPort; { }
GraphDefaults; { }
(
OutText(' ');
ReadKey;,
CloseGraph; { }
end. /
InitGraph
.
: InitGraph(GraphDriver, GraphMode, PathToDriver)
- GraphDriver GraphMode Integer, .
PathToDriver String, , (*.bgi).
, *.bgi .
InitGraph , , : CoordSys,
.1; IniGraph, . 138.
RestoreCRTMode
.
: RestoreCRTMode
SetActivePage
.191.
RestoreCRTMode
pecfae
455
.191. ProcRCRM.pas
program ProcRCRM;
uses Crt, Graph, IniGraph;
begin
Graphlnit; { IniGraph ( .138)}
OutText(' ');
ReadKey; { - }
RestoreCrtMode; { }
WriteLn(' ');
ReadKey;
SetGraphMode(GetGraphMode); { }
OutText(' ');
ReadKey;
CloseGraph; { }
end.
SetActivePage
.
: SetActivePage (Page)
Page Word, , ( 0).
SetActivePage . 192.
.192. ProcStAP.pas
program ProcStAP;
uses Crt, Graph, IniGraph;
begin
Graphlnit; { IniGraph ( .138)}
SetVisualPage(O); { - 1- }
SetActivePage(1); { - 2- }
{ }
Rectangle(10, 20, 30, 40);
SetVisualPage(1); { - 2- }
ReadKey; { - }
CloseGraph; { }
end.
SetAIIPalette
.
: SetAIIPalette (Palette)
Palette PaletteType,
Graph :
const
MaxColors = 15;
type
PaletteType = Record
Size: Byte;
456
. , : Graph
SetAspectRatio
. 194.
.194. ProcStAR.pas
program ProcStAR;
uses Crt, Graph, IniGraph;
var
XAsp, YAsp: Word;
S: String;
begin
Graphlnit; ( IniGraph ( .138)}
SetBkColor
457
.194
GetAspectRatio(XAsp, YAsp); {
}
if XAsp = YAsp then YAsp := 5*XAsp;
\
{ }
while Xasp < Yasp do {
}
begin
ClearDevice; { }
Str(XAsp,S); { XAsp
s}
OutTextXYfl,I,'XAsp = ' + S) ; {
}
Str(YAsp,S);
OutTextXY(l,15,'YAsp = ' + S);
{ }
SetAspectRatio(XAsp, YAsp);
{ ,
while }
Circle (GetMax}( div 2, GetMaxY div 2, 50);
Inc(XAsp, 100); { 100}
if ReadKey = #27 then Break; { - Esc}
end;
CloseGraph; { }
end.
SetBkColor
, .
: SetBkColor (ColorNum)
ColorNum Word, .
SetBkColor .195.
.15. ProcStBC.pas
program ProcStBC;
uses Crt, Graph, IniGraph;
var
i: Integer;
S: String;
begin
Graphlnit; { IniGraph ('.138)}
for i := 1 to 15 do
begin
SetBkColor(i); { ( 15 ) }
( }
if i=15 then SetColor(l) else SetColor (15-i); {4* .
0 15 . .1}
Str(i,S);
{ s}
ClearDevice; { }
OutText(S); { }
if ReadKey = #27 then Bi^ak; { Esc}
e
n
d
;
g
$
-
458
. , : Graph
. 195
CloseGraph; { }
end.
'
SetColor
.
: SetColor(ColorNum)
ColorNum Word, .
Crt,
. . 1 (<< . , TextBackGround).
SetColor , , . 170 ( . , MoveTo).
SetFHIPattern
.
: SetFillPatter(Pattern, Color)
Color Word, .
Crt,
. .1 ( .. , TextBackGround).
SetFillPattern ,
, .185 (44 . , GetFillSettings).
SetFillStyle
.
: SetFillStyle(Pattern, Color)
Pattern Word, . :
0 (EmptyFill) ;
1 (SolidFill) ;
2 (LineFill) ;
3 (LtSlashFill) "///";
4 (SlashFill) "///";
5 (BkSlashFill) "\\\";
6 (LtBkSlashFill) "\\\";
7 (HatchFill) ;
8 (XHatchFill) ;
9 (InterleaveFill) ;
SetGraphBufSize
459
10 (WideDotFill) ;
11 (CloseDotFill) ;
12 (UserFill) , .
Color Word, .
Crt,
. .1 ( . , TextBackGround).
SetFillstyle .196.
.196. ProcStFS. pas
program ProcStFS;
uses Crt, Graph, IniGraph;
var
i: byte;
'
begin
Graphlnit; { IniGraph ( .138)}
Randomize; { }
for i := 1 to 15 do
begin
SetFillstyle(Random(13),i); {
}
(0, (i-D* (GetMaxY div 15), GetMaxX, i* (GetMaxY div 15));
end;
ReadKey; { '- }
CloseGraph; { }
end.
ProcStFS . ..
. .. ,
SetGraphBufSize
,
.
460
. , : Graph
: SetGraphBufSize (BufSize)
BufSize Word, .
SetBufSize . 197.
'.197. ProcStGS.pas
program ProcStGS;
uses Crt, Graph, IniGraph;
var
I, R: Integer;
BigPoly: array [0..1256] of PointType;
begin
Randomize; { }
{ 8, }
SetGraphBufSize(8*1024); { 1256- }
Graphlnit; { IniGraph ( .138)}
R := GetMaxY div 2;
{
1256- R}
for I := 0 to 1256 do
with BigPoly[I] do
begin
X := GetMaxX div 2 + Round(R * Sin(1/200));
Y :=^ GetMaxY div 2 + Round(R * Cos (1/200));
end;
{ }
SetFillStyle(HatchFill,Yellow) ; {
: }
FillPoly(SizeOf(BigPoly) div SizeOf(PointType), BigPoly);
ReadKey; { - }
CloseGraph; { }
end.
ProcStGS . .34.
SetGraphMode
.
: SetGraphMode (Mode)
Mode Integer,
.
.198. ProcStGM.pas
program FuncStGM;
uses Crt, Graph-, IniGraph;
var
OldGrMode: Integer;
begin
Graphlnit; { IniGraph ( .138)}
OutText(' EGAHI');
ReadKey; { - }
{ }
OldGrMode := GetGraphMode;
SetGraphMode(0);
SetLineStyle
461
.198
OutText(' EGALO');
ReadKey;
SetGraphMode (OldGrMode) ;
OutText(' EGAHI');
ReadKey;
CloseGraph; { }
end.
SetGraphMode .198.
. .34. 1256-
SetLineStyle
'^
.
: SetLineStyle(LineStyle, Pattern, Thickness)
LineStyle Word, .
, Graph:
0 (SolidLn) ;
1 (DottedLn) ;
2 (CenterLn) - ;
3 (DashedLn) ;
4 (UserBitLn) , .
Pattern Word, 16-
, LineStyle
UserBitLn.
Thickness Word,
. 1 (NormWidth), , 3 (ThickWidth), .
SetLineStyle . 199.
462
. , : Graph
.199. ProcStLS.pas
program ProcStLS;
uses Crt, Graph, IniGraph;
var
i: Integer;
begin
Graphlnit; { IniGraph ( .138)}
Randomize; { }
for i := 1 to 20 do { 20 }
begin
{ }
SetLineStyle(Random(4),0,NormWidth);
{ , 44 . }
SetColor(Random(16));
{ 0 15 . .1}
Line (Random(GetMaxX) , Random(GetfMaxY) ,
Random(GetMaxX),Random(GetMaxY)); { }
end;
ReadKey; { - }
CloseGraph; { }
end.
ProcStLS . .35.
SetPalette
.
: SetPalette(ColorNum, Color)
ColorNum Word, , .
Color Shortlnt, . Crt, . . 1 ( . , TextBackGround).
. .35. 20
SetRGBPalette
463
SetPalette .200.
.200. ProcSetP.pas
program ProcSetP;
uses Crt, Graph, IniGraph;
var
i: integer;
begin
Graphlnit; ( IniGraph ( . 138)}
for i := 0 to 15 do ( 15 }
begin
( : }
SetFillStyle (SolidFill, i) ; ( i. H .
0 15 . .1.)
Bar3D(i*20+10, I, (i+l)*20, 200, 3, True); ( }
end;
, .
ReadKey; ( - }
( }
for i := 1 to 14 do SetPalette(i,15-i);
ReadKey;
CloseGraph; ( }
end.
ProcSetP . ..
II 11
. .36. (1)
,
'(2)
,
SetRGBPalette
VGA IBM8514.
:
SetRGBPalette(ColorNum, RedValue, GreenValue, BlueValue)
ColorNum Integer,
, ( VGA 0 15; IBM8514
255).
RedValue, GreenValue BlueValue Integer (
63), , .
SetRGBPalette .201.
464
. , : Graph
.201. ProcSRGB.pas
program ProcSRGB;
uses Crt, Graph, IniGraph;
var
x,y: integer;
begin
Graphlnit; ( IniGraph ( .138)}
Randomize; { }
{ }
for := 1 to GetMaxX do
for := 1 to GetMaxY do
PutPixel(x,y,Random(16));
ReadKey; { - }
repeat { }
SetRGBPalette(Random(16), Random(64),Random(64),Random(64));
until KeyPressed; { }
CloseGraph; { }
end.
ProcSRGB - .
.26 ( . , PutPixel), ( repeat. . .until) , .
SetTextJustify
.
: SetTextJustify(Horiz, V e r t )
Horiz Vert Word,
.
Horiz :
0 (Lef tText) ;
1 (CenterText) ;
2 (RightText) .
Vert :
0 (BottomText) ;
1 (CenterText) ;
2 (TopText) .
.202.
.202. ProcStTJ.pas
program ProcStTJ;
uses Crt, Graph, IniGraph;
var
i,j: byte;
a: array[1..3,1..3] of string;
begin
a[1,1]:='LeftSBottom';
a[1,2]:='Left&Center';
a[l,3]:='Left&Top';
SetTextJustify
SetTextStyle
465
.202
='Center&Bottom';
[2,2] ='CenterSCenter';
[2,3] ='Center&Top';
='Right&Bottom' ;
[ 3 , 2 ] ='Rlght&Center';
[3,3] ='Right&Top';
Graphlnit; { IniGraph ( .138)}
for i:= 0 to 2 do
for j := 0 to 2 do
begin
SetTextJustify(i,j);
OutTextXY((j+1)*120,(i+1)*20,a[i+l,j+1]);
end;
ReadKey; { - }
CloseGraph; { }
end.
ProcStTJ . .37.
LeftSBotton
CenterSBotton
RightSBotton
Left&Center
Cen t er&Cen t e r
R igh t*Center
Left&Top
CenterSTop
Right&Top
. .37.
&
SetTextStyle
, .
: SetTextStyle(Font, Direction, CharSize)
Font Word, (). : 0 (DefaultFont)
8x8; 1 (TriplexFont), 2 (SmallFont), 3 (SansSerifFont), 4 (GothicFont) .
Direction Word, .
:
0 (HorizDir) ;
1 (VertDir) .
CharCase Word, .
SetTextStyle .203.
.203. ProcStTS .pas
program ProcStTS;
uses Crt, Graph, IniGraph;
var
i,h,j: byte;
begin
Graphlnit; { IniGraph ( .138)}
466
. , : Graph
.203
for j:=0 to 1 do { }
begin
for i:= 0 to 4 do '{ ()}
for h := 1 to 3 do { }
begin
SetTextStyle(i,j,h);
{ }
OutTextXY(i*(140-j*100)+1,(h-j)*(20+50*j )+j ,'Junior');
end;
ReadKey; { - }
end;
CloseGraph; { }
end. "
Junior
StnttOT
3fumnr
Junior
Junior
Junior
Jun 1 0 rjunior
Junior
Junior
Simmr
. .38.
. 39,
, SetTextStyle 0 (DefaultFont),
,
1 (VertDir) .
'
SetUserCharSize
.
:
SetUserCharSize(MultX, DivX, MultY, DivY)
MultX, DivX, Mul.tY DivY Word,
(MultX/DivX)
(MultY/DivY) .
Size . 204.
SetUserChar-
. .39.
.204. ProcSUCS.pas
program ProcSUCS;
uses Crt, Graph, IniGraph;
begin
Graphlnit; { IniGraph ( .138)}
{ , }
SetTextStyle(TriplexFont, HorizDir, 4);
OutTextXYfl,1,'Junior'); { }
SetViewPort
467
.204
SetUserCharSize(1,2,1,1);
OutTextXY(130,1,'Junior'); { }
SetUserCharSize(2,1,1,1);
OutTextXY(200,1,'Junior'); { }
ReadKey; { - }
CloseGraph; { }
end.
^
ProcSUCS . .40.
Junior Junior
. .40.
SetViewPort
.
: SetViewPort (XI, Y l , X 2 , Y 2 , Clip)
XI, Yl, X2 Y2 Integer,
(XI, Y1) (2, Y2) .
Clip Boolean, ,
, ( True), (
False).
SetViewPort .205.
.205. ProcStVP . pas
program ProcStVP;
uses Crt, Graph, IniGraph;
const
VPWidth = 400; { )
VPHeight = 150; { )
var
i: byte;
procedure DrawLines(Clip: Boolean);
begin
ClearDevice; { }
{ }
SetViewPort(100,100,100+VFWidth,100+VPHeight,Clip);
{ }
Rectangle(0,0,VPWidth,VPHeight);
for i := 1 to 20 do
Line(Random(GetMaxX),Random(GetMaxY),
Random(GetMaxX),Random(GetMaxY));
ReadKey; { - }
end;
begin
Graphlnit; { IniGraph ( .138)}
Randomize; { }
DrawLines(True); { }
468
. , : Graph
.203
DrawLines(False); { }
CloseGraph;
( }
end.
ProcStVP . .41.
SetVisualPage
.
: SetVisualPage(Page)
Page Word, , ( 0).
SetVisualPage .192
( . , SetActivePage).
2
. .41. , (1),
(2)
SetVisualPage
469
Strings
Turbo Pascal
PChar , #0.
StrCat
.
: StrCat(Dest, Source)
Dest PChar, , PChar, Source. Dest
, Source.
: PChar.
~
'
'
StrCat .206.
.206. FuncSCat.pas
program FuncSCat;
uses Crt, Strings;
const
Header: PChar = ' "Turbo Pascal 7. "';
Author: PChar = ' .. ';
Publisher: PChar = ' ""';
var
S: array [0..75] of Char;
begin
ClrScr; { }
StrCopy(S,Header);
( Header S}
StrCat(S,'. ');
( S }
StrCat(S,Author);
( S Author}
StrCat(S,'. ');
( S }
StrCat(S,Publisher); ( S Publisher}
WriteLn(S);
ReadKey; ( - )
end.
StrComp
.
: StrComp(Strl, Str2)
Strl Str2 PChar.
: Integer.
0, Strl < Str2.
0, Strl = Str2.
0, Strl > Str2.
StrComp .207.
470
. , ; Strings
.207. FuncSCmp.pas
program FuncSCmp;
uses Crt, Strings;
var
c: integer;
Result: PChar;
S1,S2: array [0..79] of Char;
begin
ClrScr; { }
Write(' : ');
Readln(Sl);
Write(' : ');
Readln(S2);
:= StrComp(Sl,S2);
if < 0 then Result := ' , ' else
if > 0 then Result := ' , ' else
Result := ' ';
Writeln(SI,Result,S2);
ReadKey; { - }
end.
StrCopy
.
: StrCopy(Dest, Source)
Dest PChar, .
Source PChar, .
Dest ,
Source.
: PChar.
StrCopy .206 (<< .
, StrCat).
StrECopy
.
: StrECopy(Dest, Source)
Dest PChar, .
Source PChar, .
Dest ,
Source.
: PChar.
StrECopy .208.
.208. FuncSECp.pas
program FuncSECp;
uses Crt, Strings;
Const
Header: PChar =
"Turbo Pascal 7. " ' ;
SetVisualPage
.208
Author: PChar = ' .. ';
Publisher: PChar = ' ""';
var
S: array [0..75] of Char;
begin
ClrScr; { }
StrECopy(StrECopy(StrECopy(StrECopy(StrECopy(S,Header),
'. '),Author),'. ')publisher);
Writeln(S);
ReadKey; { - }
end.
StrEnd
# 0.
: StrEnd (Str)
Str PChar.
: PChar.
StrEnd .209.
.209. FuncSEnd. pas
program FuncSEnd;
uses Crt, Strings;
var
S: array [0..79] of Char;
begin
ClrScr; { }
Write(' : ');
Readln(S);
Write (' = ', StrEnd(S) - S, '' ');
ReadKey; { - }
end.
StrlComp
.
: StrlComp(Strl, Str2)
Strl Str2 PChar.
: Integer.
0, Strl < Str2.
0, Strl = Str2.
0, Strl > Str2.
StrlComp .210.
.210. FuncSICm.pas
program FuncSICm;
uses Crt, Strings;
var
>
471
472
. , : Strings
.210
S1,S2: array [0..79] of Char;
begin
ClrScr; { }
Write(' : ');
Readln(Sl);
StrCopy(S2,S1); ( SI 32}
StrUpper(S2); ( S2 }
if StrIComp(Sl,S2) = 0
then Writeln(Sl,' = ',S2)
else Writeln(Sl,' <> ',S2);
ReadKey; ( - }
end.
StrLCat
.
: StrLCat(Dest, Source)
Dest PChar, , PChar, Source. Dest
, Source.
: PChar.
'
StrLCat .211.
.211. FuncSLCt .pas
program FuncSLCt;
uses Crt, Strings;
var
S: array [0..70] of Char;
begin
ClrScr; ( }
StrLCopy(S, ' "Turbo Pascal 7.0 "', SizeOf(S) - 1);
StrLCat(S, '. ', SizeOf(S) - 1);
StrLCat(S, ' . . ', SizeOf(S) - 1);
StrLCat(S, '. ', SizeOf(S) - 1);
StrLCat(S, ' "1", SizeOf(S) - 1);
WriteLn(S);
ReadKey; ( - }
end.
FuncSLCt :
" "Turbo Pascal 7.0 ". . . . "".
- , s 70 , 75 .
StrLComp
.
: StrLComp(Strl, Str2, MaxLen)
Strl Str2 PChar.
SetVisualPage
473
MaxLen Word, ,
.
: Integer.
0, Strl < Str2.
0, Strl = Str2.
0, Strl > Str2.
StrLComp .212.
.212. FuncSLCrn.pas
program FuncSLCm;
uses Crt, Strings;
var
Result: PChar;
S1,S2: array [0..79] of Char;
begin
ClrScr; { }
Write(' : ');
Readln(Sl);
Write(' : ');
Readln(S2);
if StrLComp(SI,S2,5) = 0 then Result:=''
else Resuit:='';
WriteIn(' ', Result, '.');
ReadKey; { - )
end.
StrLCopy
.
: StrLCopy(Dest, Source, MaxLen)
Dest PChar, .
Source PChar, .
Dest ,
Source.
MaxLen Word,
.
: PChar.
StrLCopy .213.
.213. FuncSLCp.pas
program FuncSLCp;
uses Crt, Strings;
var
474
. , : Strings
StrLen
.
: StrLen (Str)
Str PChar.
: Word.
StrLen .214.
.214. FuncSLen. pas
program FuncSLen;
uses Crt, Strings;
var
S: array [0..79] of Char;
begin
ClrScr; { )
Write(' : ');
Readln(S);
Writeln(' - ',StrLen(S) ,' ');
ReadKey; { - }
end.
StrLIComp
.
: StrLIComp(Strl, Str2, MaxLen)
Strl Str2 PChar.
MaxLen Word, ,
.
: Integer.
0, Strl < Str2.
0, Strl = Str2.
0, Strl > Str2.
StrLIComp .215.
.215. FuncSLIC. pas
program FuncSLIC;
uses Crt, Strings;
var
Result: PChar;
S1,S2: array [0..79] of Char;
begin
ClrScr; { }
Write(' : ');
Readln(Sl);
Write(' : ');
Readln(S2);
StrUpper (32); { S2 }
if StrLIComp(SI,S2,5) = 0 then Resuit:=''
else Result:='';
Writeln(' ', Result, '.');
SetVisualPage
475
.215
ReadKey; { - }
end.
StrLower
.
: StrLower (Str)
Str PChar.
: PChar.
StrLower .216.
.216. FuncSLow.pas
program FuncSLow;
uses Crt, Strings;
var
StrMove
.
: StrMove(Dest, Source, Count)
Dest PChar, .
Source PChar, .
Count Word,
.
: PChar.
StrMove .217.
.217. FuncSMov.pas
program FuncSMov;
uses Crt, Strings;
var
476
. , : Strings
StrNew
.
. MaxAvail.
: StrNew(Str)
Str PChar.
: PChar.
StrNew .218.
.218. FuncSNew.pas
program FuncSNew;
uses Crt, Strings;
var
P: PChar;
S: array [0..79] of Char;
begin
ClrScr;
( }
Write(' : ');
Readln(S);
P := StrNew(S);
Writeln(P);
StrDispose(P); ( , }
ReadKey; { - }
end.
StrPas
PChar string.
: StrPas (Str)
Str PChar.
: String.
StrPas .219.
.219. FuncSPas.pas
program FuncSPas;
uses Crt, Strings;
var
SetVisualPage
477
StrPCopy
String PChar.
: StrPCopy (Dest, Source)
Dest PChar, .
Source String, .
: PChar.
StrPCopy .220.
.220. FuncSPCp.pas
program FuncSPCp;
uses Crt, Strings;
var
A: array [0..79] of Char;
S: String[79];
begin
ClrScr; { }
Write(' : ');
Readln(S);
StrPCopy(A,S);
Writeln(A);
ReadKey; { - }
end.
StrPos
.
: StrPos (Strl, Str2)
Strl Str2 PChar.
: PChar.
StrPos .221.
.221. FuncSPos.pas
program FuncSPos;
uses Crt, Strings;
\
var
P: PChar;
S, SubStr: array [0..79] of Char;
begin
ClrScr; { }
- Write(' : ');
Readln(S);
Write(' : ');
Readln<SubStr) ;
P := StrPos(S, SubStr);
if P = nil
then WriteLn(' .')
else WriteLn(' ', - S);
ReadKey; { - }
end.
478
. , : Strings
StrRScan
.
: StrRScan(Str, Chr)
>
Str PChar.
Chr Char,
: PChar.
StrRScan .222.
.222. FuncSRSc. pas
program FuncSRSc;
uses Crt, Strings;
var
P: PChar;
S: array [0..79] of Char;
begin <
ClrScr; { }
Write(' : ');
Readln(S);
P := StrRScan(S,' ');
if P = nil
then WriteLn(' f7
else WriteLn(' - "', +1, '"');
ReadKey; ( - }
end.
StrScan
.
: StrScan (Str, Chrf
Str PChar.
Chr Char, .
: PChar.
StrScan .223.
.223. FuncSScn.pas
program FuncSScn;
uses Crt, Strings;
var
P: PChar;
S,W: array [0..79] of Char;
begin
ClrScr; ( }
Write(' : ');
Readln(S);
P := StrScan(S,' ') ;
if P = nil
theh WriteLn(' ')
else WriteLn(' - "', StrLCopy(W,S,P-S), '"')
SetVisualPage
479
.223
ReadKey; { - }
end.
StrUpper
.
: StrUpper (Str)
Str PChar.
: PChar.
StrUpper .224.
.224. FuncSUpp.pas
program FuncSUpp;
uses Crt, Strings;
var
,t
StrDispose
, .
: StrDispose (Str)
Str PChar.
StrDispose .218 (4< .
, StrNew).
,
, .
Out of memory
Identifier expected
Unknown identifier
Duplicate identifier
**
Syntax error
6
7
.
.
.
.
, , ,
, , ,
.
8
9
10
11
12
13
14
15
16
17
18
.
.
481
19
Undefined type
in pointer definition
20
Variable
identifier expected
21
Error in type
.
22
Structure too large
.
65535
Set
base
. 23
type out of range
0 255
256
24
File components may
482
3.
Boolean
Boolean
40
expression expected
41
Operand types do
not match operator
Error in expression
42
Illegal assignment
43
. 44
Field
identifier expected
. Turbo Pascal
45
Object file too large
. obj
64
. 46
Undefined external
public
.
47
Invalid
. obj
object file record
.
Code
48
65520
segment too large
Data
. 49
segment too large
65520 , ,
50
DO expected
do
Invalid PUBLIC definition public
51
52
Invalid EXTRN definition extrn
53
Too many
extrn. Turbo Pascal
EXTRN definition
. obj
256 extrn
54
OF expected
of
55
INTERFACE expected
56
Invalid
relocatable reference
57
THEN expected
then
58
TO or
to downto
DOWNTO expected
59
Undefined forward
61
Invalid typecast
62
Division by zero
63
Invalid file type
64
Cannot Read or Write
variables of this type
,
\
483
65
Pointer
-
variable expected
66
String variable expected
67
String
expression expected
68
Circular unit reference
.
interface
69
.
Unit name mismatch
, . tpu,
,
uses
70
71
72
73
Implementation
expected
Constant and case
types do not match
Record
variable expected
Constant out of range
File variable expected
Pointer
expression expected
Integer or real
expression expected
Label not
within current block
74
75
76
77
78
79
80
83
84
Unit expected
81
82
.
,
.
-
.
. tpu
. implementation
case
real integer
. goto ,
@.
unit
484
3.
";"
85
";" expected
86
":" expected
":"
","
87
"," expected
88
"("
"(" expected
")"
89
")" expected
"="
;
"=" expected
91
":=" expected
":="
92
"[" "("
"[" or "(" expected
"]" ")"
93
"]" or ")" expected
"."
94
"." expected
".."
".." expected
95
96
Too many variables
97
Invalid FOR
control variable
for. for
,
Integer
98
variable expected
99
Files are
not allowed here
String
100
. length mismatch
101
Invalid ordering of fields .
102
String constant expected
Integer or
103
integer real
real variable expected
104
Ordinal
variable expected
105
INLINE error
inline
106
Character
expression expected
107
Too many
.
relocation items
. 64
108
Overflow in
. arithmetic operation
Longint (-2147483648.. .2147483647)
109
No enclosing
for, while
FOR, WHILE or
repeat. Break ConREPEAT statement
tinue
for, while repeat
485
112
CASE
constant out of range
113
Error in statement
114
Cannot call an
interrupt procedure
116
Must be in 8087
mode tp compile this
117
Target
address not found
Include files
are not allowed here
8087.
{$N+}
118
119
No inherited methods
are accessible here
121
122
Invalid qualifier
Invalid
variable reference
123
124
Statement
part too large
126
Files must
be var parameters
Too many
conditional symbols
Misplaced
conditional directive
127
128
129
ENDIF
directive missing
130
Error in initial
conditional defines
.
. inherited
, ,
. ,
.
64
. Turbo
Pascal
24
-
. {$ELSE} {$ENDIF} {$IFDEF}, {$IFNDEF}
{$IFOPT}
{$ENDIF}.
{$IFxxx} {$ENDIF}
486
3.
Header
131
. , does not match
previous definition
forward,
. 132
Cannot evaluate
-
this expression
(
134
Expression
). Turbo Pascal
incorrectly terminated
,
,
(
Invalid format specifier
135
).
. 136
Invalid
indirect reference
137
Structured variable are
not allowed here
System (
138
Cannot evaluate without System unit
). , . tpl System
139
Cannot
access this symbol
( ).
,
.
(, ) ,
140
Invalid floating .
point operation
141
Cannot compile
overlay to memory
. , ,
142
Procedure
or function
.
variable expected
Assigned -
143
Invalid procedure
or function reference
487
144
145
Too
many nested scopes
146
147
148
Local object
type are not allows
VIRTUAL expected
Method
identifier expected
Virtual constructor are
not allowed
Constructor
identifier expected
Destructor
identifier expected
Fail only allowed within
constructors
Invalid combination of
opcode and operands
149
150
151
152
153
154
155
156
157
Memory
reference expected
Cannot
add or substract
relocatable symbols
158
Invalid
register combination
159
286/287 Instructions
not allowed
160
Invalid
symbol reference
.
, ^ {$0+}
. : uses,
, ,
with
.
.
virtual
.
Fail
.
.
. ,
.
[],
[], [SI], [Dl], [BX+SI], [BX+DI], [BP+SI] [BP+DI]
286/287 .
{$G+},
,
8086 8088
.
488
3.
161
162
ASM expected
163
Duplicate dynamic
method index
164
Duplicate
resource identifier
165
Duplicate or
invalid export index
166
Procedure or function
identifier expected
167
Cannot
export this symbol
168
169
Executable file
header too large
.
LOOPNE, LOOPE,
LOOP JCXZ,
asm
.
(
Windows ).
,
( Windows ). , Index, 1.. 32767,
( Windows ).
export
( Windows ). ,
export
(
Windows ). , name,
( Windows ). . 64
( )
489
MS-DOS
. DOS
3
4
5
6
12
15
16
17
18
-
{$!-} -
lOResult.
100
101
102
103
104
105
106
150
151
152
, CRC
153
154
155
'
490
3.
156
Disk seek error
157
Unknown media type
158
Sector not found
159
Printer out of paper
160
Device write fault
161
Device read fualt
162
Hardware failure
200
201
Division by zero
Range check error
202
203
204
Invalid
pointer operation
Floating point overflow
205
206
207
208
209
210
211
212
213
214
215
216
Floating
point underflow
Invalid floating
point operation
Overlay
manager not installed
Overlay file read error
Object not initialized
Call to abstract method
Stream
registration error
Collection
index out of range
Collection
overflow error
Arithmetic
overflow error
General
protection fault
TCollection
TCollection
.
{$6+}
(
)
i'
.-
"
!! " -1 '1
79054, . !, . , 92
. . , . .
' !
ISBN: 966-7323-27-7; : 400 ,, 1.; : 170x240 (70x100 1/16); ',
, !
, ! ' . ! ' , ! ! "'! i !"
" ". ! ! "'! !", ! 1
!, , !,
! .
i BCIM
CBOI ! ' . ! ! ,
! !, ' i ! !! ! '! !.
. . , . .
J -
ISBN: 966-7323-29-3; : 504 ., .; : 170x240 (70x100 1/16); ,
. , .
' ,
. - , :
, , ;
.
^
, .
" " ,
. ,
, . , .
..
. .
ISBN: 966-7323-31-5; : 384 ., .; : 36 .;
: 170x240 (70x100 1/16); , ( )
. .
,
.
..
.
.. ,
" . .
, ,
.
" , ", ,
, , .
" ", . . , JCTO , .
. . , . .
ISBN: 966-7323-32-3; : 704 ., .; : 170x240 (70x100 1/16); ,
,
, . , .
.
, , , IBM PC- .
\
. .
MicrosoftWindowsXP
.
ISBN: 966-7323-25-0; : 528 ., .; : 170x240 (70x100/16); ,
,
Windows XP, Internet,
, ,
. , ,
.
, , . ,
, ,
Internet, . Internet Explorer 6, Outlook
express 6, Messenger, Media Player, Movie Maker,
Windows XP.
Windows XP. , ,
Windows.
. .
HTML 4
ISBN: 966-7323-19-6; : 296 ., .; : 170x240 (70x100/16);
: Microsoft
Internet Explorer 5.5, Natscape Navigator 6 Opera 5.02.
. .
Turbo Pascal 7.0
ISBN: 966-7323-22-6; : 216 ., .; : 170x240 (70x100/16); ,
. , , " ". , , .
.
, ,
,
, , . , - ^^^^^^^^^^^^
.
.
. .
Delphi 7
ISBN: 966-7323-28-5; : 384 ., .; : 170x240 (70x100/16);
-
. , ,
.
Delphi 7, : ,
SQL-.
,
, , .
,
,
.
, Object
Pascal, Delphi, , HTML.
?
?
?
?
"", !
. , ,
.
""
|
'
E-mail:
,i
/\ /\ /\ /\ /\
jl ^ ^--^ ^--^ ^--^
^__
^_ _J
! " ^J
:
03142 . , . , 35, 111. ""
""
C/C++
Visual Basic
Visual
Delphi
Visual FoxPro
Web-:
JavaScript, Perl PHP
Windows Linux
Adobe PhotoShop Adobe Illustrator
3ds max
: edit@junior.com.ua
http://www.junior.com.ua; e-mail: sale@junior.com.ua; ./: (044) 452-82-22
Turbo Pascal 7.
.
Turbo Pascal 7.0.
Turbo Pascal: , , ; ; ;
;
,
: ; ; ,
, .
, : ""; ,
;
,
,
, -
-,
Turbo Pascal
,
BIOS/DOS, 8x86
Pascal
Turbo Pascal Turbo Pascal
Turbo Pascal
, .
"Delphi 7
". 1996
.
Turbo Pascal
1991
http://www.yshpak.net
ISBN 966-7323-30-7
-
9"78 9 6 6 7 "3 2 3 3 0 1 ">
21
<Alt+N>, N . ,
Window | List.
Turbo Pascal, , Help,
,
<Alt+F3>.
(. . 1.1). .
, .
. ,
.
- .
.
Turbo
Pascal, .
File | Save ( <F2>) File | Save As. , . 1.3.
. 1.3.
Files () ,
, Save file as ( ) (, ProgOl.pas). <Enter>.
.
Options | Directories.
, . 1.4.
22
1. Turbo Pascal
nclude
directories
nit directories
|bject directories
. 1.4. Directories
,
Turbo Pascal .
EXE & TPU directory. . , . tpu.
Include directories. ,
. ";".
Unit directories. , . tpu. Turbo Pascal . . \UNITS.
Object directories. , , ( . ob'j
> 15.
:
program
begin
end;
ProgOl;
{ }
(* *)
(* *)
ProgOl' Pascal, .
, . {. . .} ( * . . . * ) .
' ,
. . , , ,
.
,
. , program, begin end
, ProgOl , .
, , Options | Environment | Colors.
-I.!.-
23
.-,.::
ten
oreground
Compiler
Frame active
Desktop :
Frame icons :
Scroll bar page
, Dialogs
Editor
Scroll bar icons
Normal text
Help
,,,,
Selected text
Menus
Messages
Output |
Syntax
.
round
Help
. 1.5. Colors
, , .
Pascal,
, .. : absolute, and, array, asm, begin, case,
const, constructor, div, go to, do, downto, destructor, else, end, exports,
external, ~file, for., forward, function, if, implementation, in, inline, interrupt, interface, inherited, label, library, mod, nil", not, or, of, object, packed, procedure, program, record, repeat, set, shl, shr, string,
then, to, type, unit, until, uses, var, while, with, xor.
ProgOl , , Pascal. program
. . , .pas, . Pascal , , P'rogOl PROG01 .
";". ( "."). : .
begin end.
( ) Compile | Compile,
<Alt+F9>, .
, (. 1.6).
, . , - ? , end
. ,
, (. 1.7).
3.
24
1. Turbo Pascal
Hain f i l e s \...\TP\ePI>SSPROG0i.PftS
Done.
Destination: Memory
Free rcenory: 311
Line number:
Total lines:
Hel
w
:
1:16
Fl Help I Compile source file
. 1.6.
File
Edit
3:1
Search
Fl Help F2 Save
Hel
. 1.7.
, . Destination
() Compile.
Memory,
.
Destination Disk,
.. Destination Compile |
Destination.
end, Compile |
Destination . ,
25
, Compile | Compile
<Alt+F9>,- , .
ProgOl , . ^ ", ",
. , Prog01
. ,
1.1.
, , . Turbo Pascal
, , . , .
. " " .
' '
Writeln(', ! ' ) ;
end.
, <ctrl+F9>.
, . ,
, . , Debug | User screen
<Alt+F5>.
.
ProgOl ,
Writeln(', ! ' ) ; .
Writeln. Pascal,
.
7, . , .
. , Writeln ,
, .
Help. ,
<F1>. - Help.
26
1. Turbo Pascal
( ), <Ctrl+Fl>.
- ,
, , . ,
W r i t e l n 1.1, <Ctrl+Fl>.
, Writeln
(. 1.8).
File
Edit
Search Run
Conolle
Debtw
Tools
Options
SUOHKSBOOKSXCOIIPUTERM'PNflPPSNPROGOl. PfiS
program ProgOl;
begin
r?=ti-l=
Hriteln<'ripH
end.
Help =
Window Hel
=2=
. 1.8.
,
\TEMP4B3B7SDISK\81SPROG81.PflS has
Turbo Pascal
been modified. Save?
,
. , , ,
Information,
. 1.9. Information
. 1.9. ,
.
Information .pas.
Yes .pas.
, . Cancel () ,
.
Turbo Pascal
Turbo Pascal , :
File | Exit <Alt+x>.
Turbo Pascal