Compare commits
3 commits
347b57cae3
...
f18176e3fa
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f18176e3fa | ||
|
|
2f81ee73e1 | ||
|
|
74a467cba6 |
4 changed files with 50 additions and 7 deletions
|
|
@ -480,6 +480,9 @@ end;
|
|||
That means you cannot use pos to search inside a string
|
||||
literal. Hopefully this is not something you want to do.
|
||||
*)
|
||||
|
||||
(* TODO: UCSD-Pascal and TP3.0 specs say, searched string
|
||||
is a string expression so cannot be var parameter *)
|
||||
function pos(substr:string;var s:string):integer;
|
||||
var substrlen:integer;
|
||||
slen:integer;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
(* Copyright 2021-2024 Sebastian Lederer. See the file LICENSE.md for details *)
|
||||
{$H384}
|
||||
{$S64}
|
||||
program PascalCompiler;
|
||||
{$R+}
|
||||
{$!}{$ifdef FPC}uses math,crt;{$endif}
|
||||
|
|
|
|||
|
|
@ -137,7 +137,8 @@ end;
|
|||
procedure getScreenSize;
|
||||
var c:char;
|
||||
begin
|
||||
(* empty keyboard buffer *)
|
||||
(* empty keyboard buffer to make sure GetTermSize
|
||||
can read the response from the terminal *)
|
||||
while conavail do read(con, c);
|
||||
|
||||
GetTermSize(screenW, screenH);
|
||||
|
|
@ -1661,11 +1662,10 @@ end;
|
|||
|
||||
procedure gotoLine(l:integer);
|
||||
begin
|
||||
if l < 1 then
|
||||
l := 1
|
||||
else
|
||||
if l > lineCount then
|
||||
l := lineCount;
|
||||
if l < 1 then
|
||||
l := 1;
|
||||
|
||||
topY := l - (screenH div 2);
|
||||
if topY < 1 then
|
||||
|
|
@ -1713,7 +1713,7 @@ var error:integer;
|
|||
begin
|
||||
success := true;
|
||||
if isModified then
|
||||
save;
|
||||
writeFile(success);
|
||||
if success then
|
||||
begin
|
||||
if isAsmFile(filename) then
|
||||
|
|
|
|||
|
|
@ -239,7 +239,7 @@ def listvolumes(img):
|
|||
return firstvolume
|
||||
|
||||
|
||||
def listdir(img, part, verbose=False):
|
||||
def listdir(img, part, verbose=False, deleted=False):
|
||||
print("Directory of {}:".format(part.name))
|
||||
slotno = 0
|
||||
done = False
|
||||
|
|
@ -247,6 +247,8 @@ def listdir(img, part, verbose=False):
|
|||
slot = getdirslot(img, part, slotno)
|
||||
if (slot.flags & SlotFirst):
|
||||
print(slot.name, slot.sizeBytes, slotno)
|
||||
elif deleted and (slot.flags & SlotDeleted):
|
||||
print(slot.name, slot.sizeBytes, slotno, slot.generation)
|
||||
else:
|
||||
if verbose:
|
||||
print(flags2str(slot.flags))
|
||||
|
|
@ -272,6 +274,21 @@ def findfile(img, part, name):
|
|||
return None
|
||||
|
||||
|
||||
def finddeleted(img, part, name, gen):
|
||||
slotno = 0
|
||||
done = False
|
||||
while not done:
|
||||
slot = getdirslot(img, part, slotno)
|
||||
if slot.flags & SlotDeleted:
|
||||
if slot.name == name and slot.generation == gen:
|
||||
return slotno
|
||||
slotno += 1
|
||||
if (slot.flags & SlotEndScan) or (slotno >= part.dirSize):
|
||||
done = True
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def readfile(img, part, slotno):
|
||||
pos = part.startBlock * 512 + slotno * part.extentSize
|
||||
dirslot = getdirslot(img, part, slotno)
|
||||
|
|
@ -317,6 +334,24 @@ def readfromimg(img, pathname,outfilepath):
|
|||
f.write(data)
|
||||
|
||||
|
||||
def recoverfromimg(img, pathname, gen, outfilepath):
|
||||
vol, filename = parsepath(img, pathname)
|
||||
if vol is None:
|
||||
return
|
||||
|
||||
listdir(img, vol, deleted=True)
|
||||
|
||||
slotno = finddeleted(img, vol, filename, gen)
|
||||
if slotno is None:
|
||||
print("File", filename,"not found with generation no", gen)
|
||||
return
|
||||
|
||||
data = readfile(img, vol, slotno)
|
||||
|
||||
with open(outfilepath, "wb") as f:
|
||||
f.write(data)
|
||||
|
||||
|
||||
def writetoimg(img, pathname, infilepath):
|
||||
vol, filename = parsepath(img, pathname)
|
||||
if vol is None:
|
||||
|
|
@ -555,6 +590,9 @@ if __name__ == "__main__":
|
|||
if sys.argv[1] == "get":
|
||||
f = open(sys.argv[2], "rb")
|
||||
readfromimg(f, sys.argv[3], sys.argv[4])
|
||||
elif sys.argv[1] == "recover":
|
||||
f = open(sys.argv[2], "rb")
|
||||
recoverfromimg(f, sys.argv[3], int(sys.argv[4]), sys.argv[5])
|
||||
elif sys.argv[1] == "put":
|
||||
imgfile = open(sys.argv[2], "r+b")
|
||||
infilepath = sys.argv[3]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue