Код:
Program DeBasic;
uses Crt;
const
BasWord : array [32..228] of string[8]=(
{32} ' ','!','"','#','$','%','&','^','(',')','*','+',',','-','.','/','0','1',
{50} '2','3','4','5','6','7','8','9',':',';','<','=','>','?','@','A','B','C',
{68} 'D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U',
{86} 'V','W','X','Y','Z','[','\',']','^',' ','Ю','А','Б','Ц','Д','Е','Ф','Г',
{104} 'Х','И','Й','К','Л','М','Н','О','П','Я','Р','С','Т','У','Ж','В','Ь','Ы',
{122} 'З','Ш','Э','Щ','Ч','_',
{128} 'CLS','FOR','NEXT','DATA','INPUT','DIM','READ','CUR','GOTO','RUN','IF',
{139} 'RESTORE','GOSUB','RETURN','REM','STOP','OUT','ON','PLOT','LINE','POKE',
{149} 'PRINT','DEF','CONT','LIST','CLEAR','CLOAD','CSAVE','NEW','TAB(','TO',
{159} 'SPC(','FN','THEN','NOT','STEP','+','-','*','/','^','AND','OR','>','=','<',
{174} 'SGN','INT','ABS','USR','FRE','INP','POS','SQR','RND','LOG','EXP','COS',
{186} 'SIN','TAN','ATN','PEEK','LEN','STR$','VAL','ASC','CHR$','LEFT$','RIGHT$',
{197} 'MID$','POINT','INKEY$','AT','&','BEEP','PAUSE','VERIFY','HOME','EDIT',
{207} 'DELETE','MERGE','AUTO','HIMEM','@','ASN','ADDR','PI','RENUM','ACS',
{217} 'LG','LPRINT','LLIST','SCREEN','COLOR','GET','PUT','BSAVE','BLOAD',
{226} 'PLAY','PAINT','CIRCLE');
{ BasDWord: array [154,156,204,208,224,225] of string[8]=(
'LOAD','SAVE','BYE','FILES','CLOSE','OPEN');}
var
fin : file of byte;
fout : text;
a,c,e: byte;
Size : longint;
S : string;
n : integer;
begin
WriteLn('"DEBASIC", v(1.1), @TimSoft, Chernigov, 2000');
if paramcount=0 then begin
WriteLn('debasic.exe filename.bbd [basfile.bas]');
exit
end;
Assign(fin,paramStr(1));
if ParamCount=2 then Assign(fout,ParamStr(2)) else Assign(fout,'vector.bas');
Reset(fin); ReWrite(fout);
repeat
read(fin,a)
until (a=$43);
c:=3;
repeat
read(fin,a);
if c=3 then n:=a;
if c=4 then n:=n+a*256;
if c=5 then begin
write(fout,n);
write(fout,#32)
end;
if c>4 then begin
if a=0 then begin
Write(fout,#$0D#$0A);
c:=0;
end else
if a in [0..31] then write(fout,chr(a)) else
if a in [32..228] then begin
S:=BasWord[a];
write(fout,S);
end else write(fout,a);
end;
inc(c);
if a<>0 then e:=0 else inc(e)
until Eof(fin) or (e=3);
Close(fin); Close(fout)
end.