Home » Archimedes archive » Micro User » MU 1991-12.adf » PD-Stuff » ArcFSExtra/BgArcFS104

ArcFSExtra/BgArcFS104

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Micro User » MU 1991-12.adf » PD-Stuff
Filename: ArcFSExtra/BgArcFS104
Read OK:
File size: 02BE bytes
Load address: 0000
Exec address: 0000
Duplicates

There are 2 duplicate copies of this file in the archive:

File contents
    5 REM >BgArcFS104
   10 MODE 0
   20 DIM pointers(200)
   25 PRINT "Recovery of files lost by the bug in ArcFS v1.04"''
   30 INPUT "Archive pathname ? "N$
   40 X=OPENUP(N$)
   50 PTR#X=8
   60 pointers(0)=BGET#X OR (BGET#X<<8) OR (BGET#X<<16) OR (BGET#X<<24)
   65 pointers(0)+=96
   70 level%=1
   80 PTR#X=&60
   90 REPEAT
   95 byte%=BGET#X
   97 PTR#X=PTR#X+&1F
  100 word=(BGET#X) OR (BGET#X<<8) OR (BGET#X<<16) OR (BGET#X<<24)
  105 levelend%=FALSE
  110 IF byte%=0 THEN
  130 IF PTR#X<>pointers(level%-1) THEN PROCerror ELSE level%-=1:levelend%=TRUE
  140 ENDIF
  150 IF (NOT levelend%) AND byte%<>1 THEN
  160 IF (word<0) THEN pointers(level%)=(word-&80000000)+96:level%+=1
  170 ENDIF
  180 UNTIL level%=0
  190 CLOSE#X
  200 END
  500 DEFPROCerror
  510 PTR#X=PTR#X-36
  520 PRINT "Removing end-of-directory marker at &";~PTR#X;" level ";level%-1
  530 BPUT#X,1:PTR#X=PTR#X+35
  540 ENDPROC
 � >BgArcFS104

 � 0
 � pointers(200)
; � "Recovery of files lost by the bug in ArcFS v1.04"''
 � "Archive pathname ? "N$
( X=�(N$)
2
 �#X=8
<7 pointers(0)=�#X � (�#X<<8) � (�#X<<16) � (�#X<<24)
A pointers(0)+=96
F
 level%=1
P �#X=&60
Z �
_ byte%=�#X
a �#X=�#X+&1F
d2 word=(�#X) � (�#X<<8) � (�#X<<16) � (�#X<<24)
i levelend%=�
n � byte%=0 �
�? � �#X<>pointers(level%-1) � �error � level%-=1:levelend%=�
� �
�! � (� levelend%) � byte%<>1 �
�@ � (word<0) � pointers(level%)=(word-&80000000)+96:level%+=1
� �
� � level%=0
� �#X
� �
� ��error
� �#X=�#X-36
F � "Removing end-of-directory marker at &";~�#X;" level ";level%-1
 �#X,1:�#X=�#X+35
 �
�
00000000  0d 00 05 12 20 f4 20 3e  42 67 41 72 63 46 53 31  |.... . >BgArcFS1|
00000010  30 34 0d 00 0a 08 20 eb  20 30 0d 00 14 14 20 de  |04.... . 0.... .|
00000020  20 70 6f 69 6e 74 65 72  73 28 32 30 30 29 0d 00  | pointers(200)..|
00000030  19 3b 20 f1 20 22 52 65  63 6f 76 65 72 79 20 6f  |.; . "Recovery o|
00000040  66 20 66 69 6c 65 73 20  6c 6f 73 74 20 62 79 20  |f files lost by |
00000050  74 68 65 20 62 75 67 20  69 6e 20 41 72 63 46 53  |the bug in ArcFS|
00000060  20 76 31 2e 30 34 22 27  27 0d 00 1e 1e 20 e8 20  | v1.04"''.... . |
00000070  22 41 72 63 68 69 76 65  20 70 61 74 68 6e 61 6d  |"Archive pathnam|
00000080  65 20 3f 20 22 4e 24 0d  00 28 0c 20 58 3d ad 28  |e ? "N$..(. X=.(|
00000090  4e 24 29 0d 00 32 0a 20  cf 23 58 3d 38 0d 00 3c  |N$)..2. .#X=8..<|
000000a0  37 20 70 6f 69 6e 74 65  72 73 28 30 29 3d 9a 23  |7 pointers(0)=.#|
000000b0  58 20 84 20 28 9a 23 58  3c 3c 38 29 20 84 20 28  |X . (.#X<<8) . (|
000000c0  9a 23 58 3c 3c 31 36 29  20 84 20 28 9a 23 58 3c  |.#X<<16) . (.#X<|
000000d0  3c 32 34 29 0d 00 41 14  20 70 6f 69 6e 74 65 72  |<24)..A. pointer|
000000e0  73 28 30 29 2b 3d 39 36  0d 00 46 0d 20 6c 65 76  |s(0)+=96..F. lev|
000000f0  65 6c 25 3d 31 0d 00 50  0c 20 cf 23 58 3d 26 36  |el%=1..P. .#X=&6|
00000100  30 0d 00 5a 06 20 f5 0d  00 5f 0e 20 62 79 74 65  |0..Z. ..._. byte|
00000110  25 3d 9a 23 58 0d 00 61  10 20 cf 23 58 3d 8f 23  |%=.#X..a. .#X=.#|
00000120  58 2b 26 31 46 0d 00 64  32 20 77 6f 72 64 3d 28  |X+&1F..d2 word=(|
00000130  9a 23 58 29 20 84 20 28  9a 23 58 3c 3c 38 29 20  |.#X) . (.#X<<8) |
00000140  84 20 28 9a 23 58 3c 3c  31 36 29 20 84 20 28 9a  |. (.#X<<16) . (.|
00000150  23 58 3c 3c 32 34 29 0d  00 69 10 20 6c 65 76 65  |#X<<24)..i. leve|
00000160  6c 65 6e 64 25 3d a3 0d  00 6e 10 20 e7 20 62 79  |lend%=...n. . by|
00000170  74 65 25 3d 30 20 8c 0d  00 82 3f 20 e7 20 8f 23  |te%=0 ....? . .#|
00000180  58 3c 3e 70 6f 69 6e 74  65 72 73 28 6c 65 76 65  |X<>pointers(leve|
00000190  6c 25 2d 31 29 20 8c 20  f2 65 72 72 6f 72 20 8b  |l%-1) . .error .|
000001a0  20 6c 65 76 65 6c 25 2d  3d 31 3a 6c 65 76 65 6c  | level%-=1:level|
000001b0  65 6e 64 25 3d b9 0d 00  8c 06 20 cd 0d 00 96 21  |end%=..... ....!|
000001c0  20 e7 20 28 ac 20 6c 65  76 65 6c 65 6e 64 25 29  | . (. levelend%)|
000001d0  20 80 20 62 79 74 65 25  3c 3e 31 20 8c 0d 00 a0  | . byte%<>1 ....|
000001e0  40 20 e7 20 28 77 6f 72  64 3c 30 29 20 8c 20 70  |@ . (word<0) . p|
000001f0  6f 69 6e 74 65 72 73 28  6c 65 76 65 6c 25 29 3d  |ointers(level%)=|
00000200  28 77 6f 72 64 2d 26 38  30 30 30 30 30 30 30 29  |(word-&80000000)|
00000210  2b 39 36 3a 6c 65 76 65  6c 25 2b 3d 31 0d 00 aa  |+96:level%+=1...|
00000220  06 20 cd 0d 00 b4 0f 20  fd 20 6c 65 76 65 6c 25  |. ..... . level%|
00000230  3d 30 0d 00 be 08 20 d9  23 58 0d 00 c8 06 20 e0  |=0.... .#X.... .|
00000240  0d 01 f4 0c 20 dd f2 65  72 72 6f 72 0d 01 fe 0f  |.... ..error....|
00000250  20 cf 23 58 3d 8f 23 58  2d 33 36 0d 02 08 46 20  | .#X=.#X-36...F |
00000260  f1 20 22 52 65 6d 6f 76  69 6e 67 20 65 6e 64 2d  |. "Removing end-|
00000270  6f 66 2d 64 69 72 65 63  74 6f 72 79 20 6d 61 72  |of-directory mar|
00000280  6b 65 72 20 61 74 20 26  22 3b 7e 8f 23 58 3b 22  |ker at &";~.#X;"|
00000290  20 6c 65 76 65 6c 20 22  3b 6c 65 76 65 6c 25 2d  | level ";level%-|
000002a0  31 0d 02 12 15 20 d5 23  58 2c 31 3a cf 23 58 3d  |1.... .#X,1:.#X=|
000002b0  8f 23 58 2b 33 35 0d 02  1c 06 20 e1 0d ff        |.#X+35.... ...|
000002be