Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:МПС / МПС лаб / Машинные коды / Source / TXT2HEX
.PAS const Chars=[' ','0'..'9','A'..'F'];
VAR s,z,secname: String;
f:text;
g:file of Byte;
i,j,p:byte;
procedure GoAway;
begin
writeln('ЋиЁЎЄ ў ⥪бв®ў®¬ д ©«Ґ (бва®Є ',p,').');
writeln(secname+' г¤ «с.');
close(g);
erase(g);
halt(2);
end;
procedure DoIt(var s:string);
var i:byte;bool:boolean;
Begin
for i:=1 to length(s) do { <tab> := ' '}
if ord(s[i])=9 then s[i]:=' ';
i:=1; { out double spaces }
j:=1;
bool:=true;
while i<=length(s) do
begin
if (s[i]<>' ') or (not bool) then
begin
s[j]:=UpCase(s[i]);
inc(j);
if s[i]=' ' then bool:=true else bool:=false;
end;
inc(i);
end;
s[0]:=char(j-1);
for i:=1 to length(s) do if not (s[i] in Chars) then GoAway;
end;
function ToByte(str:string):byte;
CONST HEX : ARRAY['A'..'F'] OF INTEGER = (10,11,12,13,14,15);
var Int,i: byte;
begin
Int := 0;
FOR i := 1 TO Length(str) DO
IF str[i] < 'A' THEN Int := Int * 16 + ORD(str[i]) - 48
ELSE Int := Int * 16 + HEX[str[i]];
ToByte:=Int;
end;
BEGIN
if paramcount=0 then { note }
begin
Writeln;
Writeln('=========================== TXT2HEX ======================================');
Writeln;
Writeln('‡ ¤ ©вҐ Ё¬п ў 襣® д ©« ў Є зҐб⢥ Ї а ¬Ґва ЇаЁ § ЇгбЄҐ ¤ ®© ЇаЈа ¬¬л:');
Writeln('txt2hex.exe <Ё¬п_д ©« >');
Writeln;
Writeln('„ п Їа®Ја ¬¬ ЇаҐ®Ўа §гҐв ⥪бв®ўлҐ д ©«л, ᮤҐа¦ йЁҐ ⥪бв Їа®Ја ¬¬,');
Writeln(' ЇЁб ле ў ¬ иЁле Є®¤ е, ў Їа®Ја ¬¬л д®а¬ в .com');
Writeln;
Writeln('‚ ⥪бв®ўле д ©« е ¤®ЇгбЄ Ґвбп ЁбЇ®«м§®ў ЁҐ Є Є бва®зле, в Є Ё Їа®ЇЁбле');
Writeln('ЎгЄў « вЁбЄ®Ј® «д ўЁв ᮤҐа¦ йЁебп ў ЇЁб ЁЁ иҐбв ¤ж вЁаЁзле жЁда.');
Writeln;
Writeln('Ћв¤Ґ«млҐ Ў ©вл ®в¤Ґ«повбп ¤агЈ ®в ¤агЈ бЁ¬ў®« ¬Ё Їа®ЎҐ« Ё«Ё в Ўг«пжЁЁ.');
Writeln;
Writeln('’ҐЄбв, а бЇ®« Ј ойЁ©бп ў бва®ЄҐ Їа ўҐҐ бЁ¬ў®« ";" бзЁв Ґвбп Є®¬¬Ґв аЁҐ¬');
Writeln('Ё ЁвҐаЇаҐв в®а®¬ ЁЈ®аЁагҐвбп.');
Writeln;
Writeln('‘®§¤ « Њ вгеЁ ђ.‚. / Ґ ЎҐ§ гз бвЁп ђг¦ҐбЄ®Ј® Ћ.‚. /');
Halt(0);
end;
s:=paramstr(1);
assign(f,s);
if pos('.',s)<>0 then s[0]:=Char(pos('.',s)-1);
secname:=s+'.com';
assign(g,secname);
reset(f);
rewrite(g);
p:=1;
while not eof(f) do
begin
READLN(f,s);
if pos(';',s)<>0 then s[0]:=Char(pos(';',s)-1); {Cut comments}
DoIt(s);
j:=1;
s:=s+' '; { vot tak }
while j<length(s) do
begin
z:='';
while s[j]<>' ' do
begin
z:=z+s[j];
inc(j)
end;
inc(j);
i:=ToByte(z);
WRITE(g,i);
end;
inc(p);
end;
close(f);
close(g);
{ “cс }
END.
VAR s,z,secname: String;
f:text;
g:file of Byte;
i,j,p:byte;
procedure GoAway;
begin
writeln('ЋиЁЎЄ ў ⥪бв®ў®¬ д ©«Ґ (бва®Є ',p,').');
writeln(secname+' г¤ «с.');
close(g);
erase(g);
halt(2);
end;
procedure DoIt(var s:string);
var i:byte;bool:boolean;
Begin
for i:=1 to length(s) do { <tab> := ' '}
if ord(s[i])=9 then s[i]:=' ';
i:=1; { out double spaces }
j:=1;
bool:=true;
while i<=length(s) do
begin
if (s[i]<>' ') or (not bool) then
begin
s[j]:=UpCase(s[i]);
inc(j);
if s[i]=' ' then bool:=true else bool:=false;
end;
inc(i);
end;
s[0]:=char(j-1);
for i:=1 to length(s) do if not (s[i] in Chars) then GoAway;
end;
function ToByte(str:string):byte;
CONST HEX : ARRAY['A'..'F'] OF INTEGER = (10,11,12,13,14,15);
var Int,i: byte;
begin
Int := 0;
FOR i := 1 TO Length(str) DO
IF str[i] < 'A' THEN Int := Int * 16 + ORD(str[i]) - 48
ELSE Int := Int * 16 + HEX[str[i]];
ToByte:=Int;
end;
BEGIN
if paramcount=0 then { note }
begin
Writeln;
Writeln('=========================== TXT2HEX ======================================');
Writeln;
Writeln('‡ ¤ ©вҐ Ё¬п ў 襣® д ©« ў Є зҐб⢥ Ї а ¬Ґва ЇаЁ § ЇгбЄҐ ¤ ®© ЇаЈа ¬¬л:');
Writeln('txt2hex.exe <Ё¬п_д ©« >');
Writeln;
Writeln('„ п Їа®Ја ¬¬ ЇаҐ®Ўа §гҐв ⥪бв®ўлҐ д ©«л, ᮤҐа¦ йЁҐ ⥪бв Їа®Ја ¬¬,');
Writeln(' ЇЁб ле ў ¬ иЁле Є®¤ е, ў Їа®Ја ¬¬л д®а¬ в .com');
Writeln;
Writeln('‚ ⥪бв®ўле д ©« е ¤®ЇгбЄ Ґвбп ЁбЇ®«м§®ў ЁҐ Є Є бва®зле, в Є Ё Їа®ЇЁбле');
Writeln('ЎгЄў « вЁбЄ®Ј® «д ўЁв ᮤҐа¦ йЁебп ў ЇЁб ЁЁ иҐбв ¤ж вЁаЁзле жЁда.');
Writeln;
Writeln('Ћв¤Ґ«млҐ Ў ©вл ®в¤Ґ«повбп ¤агЈ ®в ¤агЈ бЁ¬ў®« ¬Ё Їа®ЎҐ« Ё«Ё в Ўг«пжЁЁ.');
Writeln;
Writeln('’ҐЄбв, а бЇ®« Ј ойЁ©бп ў бва®ЄҐ Їа ўҐҐ бЁ¬ў®« ";" бзЁв Ґвбп Є®¬¬Ґв аЁҐ¬');
Writeln('Ё ЁвҐаЇаҐв в®а®¬ ЁЈ®аЁагҐвбп.');
Writeln;
Writeln('‘®§¤ « Њ вгеЁ ђ.‚. / Ґ ЎҐ§ гз бвЁп ђг¦ҐбЄ®Ј® Ћ.‚. /');
Halt(0);
end;
s:=paramstr(1);
assign(f,s);
if pos('.',s)<>0 then s[0]:=Char(pos('.',s)-1);
secname:=s+'.com';
assign(g,secname);
reset(f);
rewrite(g);
p:=1;
while not eof(f) do
begin
READLN(f,s);
if pos(';',s)<>0 then s[0]:=Char(pos(';',s)-1); {Cut comments}
DoIt(s);
j:=1;
s:=s+' '; { vot tak }
while j<length(s) do
begin
z:='';
while s[j]<>' ' do
begin
z:=z+s[j];
inc(j)
end;
inc(j);
i:=ToByte(z);
WRITE(g,i);
end;
inc(p);
end;
close(f);
close(g);
{ “cс }
END.
Соседние файлы в папке Source