Compare commits

...

2 commits

Author SHA1 Message Date
slederer
428fc95481 reclaim: mark end of directory with EndScan flag 2024-10-20 17:30:39 +02:00
slederer
1ca6c13c4b editor: clear input buffer when getting screen size
- not clearing the keyboard buffer could lead to wrong
  results when reading the screen size from terminal
2024-10-20 17:28:19 +02:00
2 changed files with 14 additions and 2 deletions

View file

@ -135,7 +135,11 @@ begin
end; end;
procedure getScreenSize; procedure getScreenSize;
var c:char;
begin begin
(* empty keyboard buffer *)
while conavail do read(con, c);
GetTermSize(screenW, screenH); GetTermSize(screenW, screenH);
pageSize := screenH - vMargins; pageSize := screenH - vMargins;
(* set scrolling region - DECSTBM *) (* set scrolling region - DECSTBM *)
@ -2463,6 +2467,8 @@ begin
close(infile); close(infile);
end; end;
open(con, '%RAW', ModeOverwrite);
initScreen; initScreen;
showScreen; showScreen;
@ -2471,7 +2477,6 @@ begin
else else
statusMsg('Successfully read file. Press F1 for help', false, false); statusMsg('Successfully read file. Press F1 for help', false, false);
open(con, '%RAW', ModeOverwrite);
if errorLine > 0 then if errorLine > 0 then
begin begin

View file

@ -323,6 +323,7 @@ begin
(* find next occupied slot *) (* find next occupied slot *)
occSlotNo := scanDirSlots(volid, freeSlotNo + 1, occSlot, [SlotFirst]); occSlotNo := scanDirSlots(volid, freeSlotNo + 1, occSlot, [SlotFirst]);
if occSlotNo <> 0 then if occSlotNo <> 0 then
begin begin
fileExtents := (occSlot.sizeBytes + extentSize - 1) div extentSize; fileExtents := (occSlot.sizeBytes + extentSize - 1) div extentSize;
@ -379,8 +380,14 @@ begin
i := i + fileExtents; i := i + fileExtents;
end end
else (* no occupied slot found *) else (* no occupied slot found *)
begin
done := true; done := true;
(* TODO: mark first free slot of last free region as EndScan *) (* mark first free slot of last free region as EndScan *)
freeslot.flags := freeslot.flags + [SlotEndScan];
putdirslot(volid, freeSlotNo, freeSlot, error);
if error <> IONoError then
writeln('Error writing dirslot ', clearSlotNo);
end
end end
else (* no free slot found *) else (* no free slot found *)
done := true; done := true;