home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug022.arc / RTW.PAS < prev    next >
Pascal/Delphi Source File  |  1979-12-31  |  2KB  |  132 lines

  1. PROGRAM RTW;
  2. {program to recover crashed wordstar/turbo files}
  3. {crs 25-9-85}
  4.  
  5.  
  6. const
  7. {wordstar constants}
  8. wc_file=$846d;{address of base of crashed file}
  9. wo_fname=$34b9;{string containg old file name}
  10.  
  11.  
  12. {turbo constants}
  13. tc_file=$8118;
  14. to_fname=$4500;
  15.  
  16.  
  17. type
  18. file_string=string[16];
  19.  
  20. var
  21.  
  22. x,r_type:char;
  23. wend_mkr:integer absolute $37bc;
  24. tend_mkr:integer absolute $4528;
  25. i,j,end_mkr,c_file,o_fname : integer;
  26. o_file : text;
  27. fname : file_string;
  28.  
  29.  
  30. PROCEDURE GETFN(NUM,BASE : INTEGER);
  31. {recover the filename}
  32. var
  33. i:integer;
  34.  
  35.  
  36. begin
  37. i:=0;
  38. while (i<=num)and(mem[to_fname+i+base]<>$20)do
  39. begin
  40. fname :=fname +chr(mem[to_fname+i+base]);
  41. i :=i+1;
  42. end;
  43. end;
  44.  
  45.  
  46. PROCEDURE SOURCE_TYPE(VAR R_TYPE : CHAR);
  47. {WAS IT TURBO EDITOR OR WORDSTAR FILE}
  48. BEGIN
  49. WRITELN('PROGRAM TO RECOVER CRASHED WORDSTAR/TURBO FILES');
  50. WRITELN('CRS 25 SEPTEMBER 85');
  51. WRITELN;
  52. WRITE('TURBO OR WORDSTAR FILE TO RESTORE (T OR W) ?');
  53. REPEAT
  54. READ(KBD,R_TYPE)
  55. UNTIL(UPCASE(R_TYPE) ='T' ) OR (UPCASE(R_TYPE) = 'W');
  56. R_TYPE :=UPCASE(R_TYPE);
  57. WRITELN(R_TYPE);
  58. WRITELN;
  59. END;
  60.  
  61.  
  62. PROCEDURE SETUP_VAR;
  63. BEGIN
  64. IF R_TYPE = 'T' THEN
  65. BEGIN
  66. END_MKR :=TEND_MKR-1;
  67. C_FILE :=TC_FILE;
  68. FNAME :='';
  69. GETFN(8,0);
  70. FNAME :=FNAME +'.';
  71. GETFN(3,8);
  72. end
  73. else begin
  74. end_mkr :=wend_mkr;
  75. c_file :=wc_file;
  76. i := 0;
  77. fname :='';
  78. while(mem[wo_fname+i]<> 0) do
  79. begin
  80. fname:=fname + chr(mem[wo_fname+i]);
  81. i := i+1;
  82. end;
  83. end;
  84. end;
  85.  
  86.  
  87. function check_fname(fname  : file_string) :file_string;
  88.  
  89.  
  90. Var
  91. x : char;
  92. begin
  93. writeln('OLD NAME OF FILE IS  ',FNAME);
  94. WRITE('USE THIS NAME (Y OR N) ? ');
  95. REPEAT
  96. READ(KBD,X);
  97. UNTIL (UPCASE(X)= 'Y') OR (UPCASE(X)= 'N');
  98. X :=UPCASE(X);
  99. WRITELN;
  100. IF UPCASE(X) = 'N' THEN
  101. BEGIN
  102. WRITE('ENTER NEW NAME ?');
  103. READLN(FNAME);
  104. END;
  105. CHECK_FNAME :=FNAME;
  106. END;
  107.  
  108.  
  109. BEGIN
  110. SOURCE_TYPE(R_TYPE);
  111. SETUP_VAR;
  112. IF END_MKR = C_FILE THEN
  113. BEGIN
  114. WRITE('THE FILE YOU ARE ATTEMPTING TO RESTORE ');
  115. WRITELN('IS EITHER OF ZERO LENGTH');
  116. WRITE('OR IS AN UNCHANGED IMAGE OF AN ');
  117. WRITELN('EXISTING FILE. ')
  118. end else
  119.     begin
  120. write('CALCULATED LENGHT OF RESTORABLE ');
  121. WRITELN('IMAGE IS',END_MKR-C_FILE,' BYTES');
  122. WRITELN;
  123. FNAME :=CHECK_FNAME(FNAME);
  124. ASSIGN(O_FILE,FNAME);
  125. REWRITE(O_FILE);
  126. FOR i :=C_FILE TO END_MKR-1 DO
  127. WRITE(O_FILE,CHR(MEM[i]));
  128. close(o_file);
  129. writeln('FILE CLOSED.');
  130. END;
  131. END.
  132.