rha2.pas 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. var
  2. INP,OUT : file of byte;
  3. cur, min,plus : byte;
  4. mask : byte;
  5. fout : string;
  6. fin : string;
  7. i,h : byte;
  8. begin
  9. if (ParamCount<1) then
  10. begin
  11. WriteLn('Usage: rha.exe <file>');
  12. Halt(2);
  13. end;
  14. Fin:=ParamStr(1);
  15. Assign(INP,fin);
  16. {$I-}
  17. Reset(INP);
  18. {$I+}
  19. if (IOResult<>0) then
  20. begin
  21. WriteLn('File ',Fin,' don''t exist!');
  22. end;
  23. if pos('.rha',Fin)>0 then
  24. begin
  25. Read(inp,cur);
  26. fout:='';
  27. while (cur <> 0) do
  28. begin
  29. fout:=fout+chr(cur);
  30. Read(inp,cur)
  31. end;
  32. end
  33. else fout := Copy(Fin,1,pos('.',Fin)) + 'rha';
  34. Assign(OUT,fOut);
  35. ReWrite(OUT);
  36. if pos('.rha',Fin) = 0 then
  37. begin
  38. for i:=1 to length(FIN) do begin h:= ORD(FIN[i]); write(OUT,h);end;
  39. h:=0;
  40. write(OUT,h);
  41. end;
  42. min:=0;plus:=0;
  43. if pos('.rha',fin) = 0 then begin
  44. while not eof(INP) do
  45. begin
  46. read(INP,cur);
  47. mask:=128;
  48. while (mask <> 0) do
  49. begin
  50. if (cur and mask) = mask then
  51. begin
  52. if (plus=15) then
  53. begin
  54. Write(OUT,plus);
  55. plus:=0;
  56. min :=0;
  57. end;
  58. inc(plus);
  59. end
  60. else
  61. begin
  62. if (plus<>0) then
  63. begin
  64. plus := min shl 4 + plus;
  65. Write(OUT,plus);
  66. plus:=0;
  67. min :=0;
  68. end
  69. else
  70. if (min=15) then
  71. begin
  72. plus := min shl 4;
  73. Write(OUT,plus);
  74. plus:=0;
  75. min :=0;
  76. end;
  77. inc(min);
  78. end;
  79. mask:=mask shr 1;
  80. end;
  81. end;
  82. plus := min shl 4+plus;
  83. Write(OUT,plus);
  84. end
  85. else
  86. begin
  87. min:=0;plus:=0;h:=0;
  88. while not eof(INP) do
  89. begin
  90. read(inp,cur);
  91. min:=cur shr 4;
  92. plus:=cur and 15;
  93. while (plus or min) <> 0 do
  94. begin
  95. while i<>8 do
  96. begin
  97. if (plus or min) = 0 then break;
  98. if min>0 then begin dec(min);h:=h shl 1;end
  99. else
  100. if plus>0 then begin dec(plus);h:=(h shl 1)+1;end;
  101. inc(i);
  102. end;
  103. if (i=8) then
  104. begin
  105. Write(OUT,h);
  106. i:=0;
  107. h:=0;
  108. end;
  109. end;
  110. end;
  111. end;
  112. close(INP);
  113. close(OUT);
  114. end.