mrr@amanpt1.UUCP (Mark Rinfret) (02/07/88)
In my recent posting of MRBackup, I omitted the file Screen.c. I sincerely
apologize for the omission. I've posted it here to get it out as quickly
as possible. By the way - I also found a bug (a typo) in Backup.c. Look
for a statement beginning with:
if ( ! CheckExclude( FIB->fib_FileName && ...
There should be a right paren after fib_FileName. Natch, you'll have to
balance parens in the rest of the statement.
For those who are interested, MRBackup 2.1 is ready for consumption. I've
added the ability to test/set the file system archive bits (thanks to
Steve Drew for the idea). I've also changed the context saving routine to
use an external file and there's a new command, Resume Backup, which you
may find extremely useful. Essentially, information about the state of the
backup list is saved to a file (S:MRBackup.context) as each new backup
floppy is started. Should some non-recoverable error occur during a backup
(power failure, core meltdown, etc.) you can pick up where you left off
with the Resume Backup command. Clever people will also discover that this
is a nifty way to backup a disjoint set of files (edit s:mrbackup.context,
then use Resume Backup).
I will probably not be posting any more source (since I can't seem to do
it right anyway :-) but it will remain available. For anyone who wants it,
just mail me $2.00 and I'll send you whatever's "hot":
Mark R. Rinfret
348 Indian Avenue
Portsmouth, RI 02871
Of course, that will include the most recent executable and docs.
Mark
P.S. I haven't gotten a response to my previous query regarding the endless
retry situation with "Write to bad floppy". Has anyone checked it out?
------------------- cut here ------------------------------------
struct NewScreen NewScreenStructure = {
0,0,
640,200,
3,
0,1,
HIRES,
CUSTOMSCREEN,
NULL,
(UBYTE *)"MRBackup V2.0, Mark Rinfret, 11/87",
NULL,
NULL
};
#define NEWSCREENSTRUCTURE NewScreenStructure
USHORT Palette[] = {
0x0000,
0x0FFF,
0x0666,
0x0F00,
0x00F0,
0x0B70,
0x00FF,
0x0F0F
#define PaletteColorCount 8
};
#define PALETTE Palette
UBYTE UNDOBUFFER[81];
UBYTE curVolumeGadgetSIBuff[31];
struct StringInfo curVolumeGadgetSInfo = {
curVolumeGadgetSIBuff,
NULL,
0,
31,
0,
0,0,0,0,0,
0,
0,
NULL
};
SHORT BorderVectors1[] = {
0,0,
243,0,
243,9,
0,9,
0,0
};
struct Border Border1 = {
-2,-1,
4,0,JAM1,
5,
BorderVectors1,
NULL
};
struct IntuiText IText1 = {
4,0,JAM2,
0,-9,
NULL,
(UBYTE *)"Current Backup Volume Name",
NULL
};
struct Gadget curVolumeGadget = {
NULL,
28,90,
240,8,
NULL,
RELVERIFY,
STRGADGET,
(APTR)&Border1,
NULL,
&IText1,
NULL,
(APTR)&curVolumeGadgetSInfo,
CURVOLUME,
NULL
};
UBYTE errorGadgetSIBuff[6] =
"0";
struct StringInfo errorGadgetSInfo = {
errorGadgetSIBuff,
NULL,
0,
6,
0,
0,0,0,0,0,
0,
0,
NULL
};
SHORT BorderVectors2[] = {
0,0,
47,0,
47,9,
0,9,
0,0
};
struct Border Border2 = {
-2,-1,
5,0,JAM1,
5,
BorderVectors2,
NULL
};
struct IntuiText IText2 = {
5,0,JAM2,
-60,0,
NULL,
(UBYTE *)"Errors:",
NULL
};
struct Gadget errorGadget = {
&curVolumeGadget,
272,55,
44,8,
GADGHBOX+GADGHIMAGE,
NULL,
STRGADGET,
(APTR)&Border2,
NULL,
&IText2,
NULL,
(APTR)&errorGadgetSInfo,
NULL,
NULL
};
struct PropInfo gaugeGadgetSInfo = {
AUTOKNOB+FREEHORIZ,
0,-1,
3276,-1,
};
struct Image Image1 = {
0,0,
7,4,
0,
NULL,
0x0000,0x0000,
NULL
};
struct IntuiText IText5 = {
3,0,JAM2,
114,9,
NULL,
(UBYTE *)"Full",
NULL
};
struct IntuiText IText4 = {
4,0,JAM2,
1,9,
NULL,
(UBYTE *)"Empty",
&IText5
};
struct IntuiText IText3 = {
6,0,JAM2,
11,-9,
NULL,
(UBYTE *)"Output Capacity",
&IText4
};
struct Gadget gaugeGadget = {
&errorGadget,
25,55,
144,8,
NULL,
RELVERIFY,
PROPGADGET,
(APTR)&Image1,
NULL,
&IText3,
NULL,
(APTR)&gaugeGadgetSInfo,
GAUGE,
NULL
};
USHORT ImageData2[] = {
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0xFFFF,0xFFFF,0x8000,0x0000,0x0003,
0xFFFF,0xFFFF,0xE000,0x0000,0x0007,0xFFFF,0xFFFF,0xF000,
0x0000,0x001F,0xFFFF,0xFFFF,0xFC00,0x0000,0x003F,0xFFFF,
0xFFFF,0xFE00,0x0000,0x00FF,0xFFFF,0xFFFF,0xFF80,0x0000,
0x01FF,0xFFFF,0xFFFF,0xFFC0,0x0000,0x07FF,0xFFFF,0xFFFF,
0xFFF0,0x0000,0x0FFF,0xFFFF,0xFFFF,0xFFF8,0x0000,0x0FFF,
0xC381,0xC703,0xFFF8,0x0000,0x0FFF,0x99A5,0x9399,0xFFF8,
0x0000,0x0FFF,0x8FE7,0x3999,0xFFF8,0x0000,0x0FFF,0xC7E7,
0x3983,0xFFF8,0x0000,0x0FFF,0xF1E7,0x399F,0xFFF8,0x0000,
0x0FFF,0x99E7,0x939F,0xFFF8,0x0000,0x0FFF,0xC3C3,0xC70F,
0xFFF8,0x0000,0x0FFF,0xFFFF,0xFFFF,0xFFF8,0x0000,0x07FF,
0xFFFF,0xFFFF,0xFFF0,0x0000,0x01FF,0xFFFF,0xFFFF,0xFFC0,
0x0000,0x00FF,0xFFFF,0xFFFF,0xFF80,0x0000,0x003F,0xFFFF,
0xFFFF,0xFE00,0x0000,0x001F,0xFFFF,0xFFFF,0xFC00,0x0000,
0x0007,0xFFFF,0xFFFF,0xF000,0x0000,0x0003,0xFFFF,0xFFFF,
0xE000,0x0000,0x0000,0xFFFF,0xFFFF,0x8000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0xFFFF,0xFFFF,0x8000,0x0000,0x0003,0xFFFF,0xFFFF,
0xE000,0x0000,0x0007,0xFFFF,0xFFFF,0xF000,0x0000,0x001F,
0xFFFF,0xFFFF,0xFC00,0x0000,0x003F,0xFFFF,0xFFFF,0xFE00,
0x0000,0x00FF,0xFFFF,0xFFFF,0xFF80,0x0000,0x01FF,0xFFFF,
0xFFFF,0xFFC0,0x0000,0x07FF,0xFFFF,0xFFFF,0xFFF0,0x0000,
0x07FF,0xC381,0xC703,0xFFF0,0x0000,0x07FF,0x99A5,0x9399,
0xFFF0,0x0000,0x07FF,0x8FE7,0x3999,0xFFF0,0x0000,0x07FF,
0xC7E7,0x3983,0xFFF0,0x0000,0x07FF,0xF1E7,0x399F,0xFFF0,
0x0000,0x07FF,0x99E7,0x939F,0xFFF0,0x0000,0x07FF,0xC3C3,
0xC70F,0xFFF0,0x0000,0x07FF,0xFFFF,0xFFFF,0xFFF0,0x0000,
0x01FF,0xFFFF,0xFFFF,0xFFC0,0x0000,0x00FF,0xFFFF,0xFFFF,
0xFF80,0x0000,0x003F,0xFFFF,0xFFFF,0xFE00,0x0000,0x001F,
0xFFFF,0xFFFF,0xFC00,0x0000,0x0007,0xFFFF,0xFFFF,0xF000,
0x0000,0x0003,0xFFFF,0xFFFF,0xE000,0x0000,0x0000,0xFFFF,
0xFFFF,0x8000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000
};
struct Image Image2 = {
0,0,
65,29,
2,
ImageData2,
0x0003,0x0000,
NULL
};
struct Gadget stopGadget = {
&gaugeGadget,
65,14,
71,31,
GADGIMAGE,
RELVERIFY+GADGIMMEDIATE,
BOOLGADGET,
(APTR)&Image2,
NULL,
NULL,
NULL,
NULL,
STOP,
NULL
};
#define GadgetList1 stopGadget
struct IntuiText IText6 = {
0,1,JAM1,
0,0,
NULL,
(UBYTE *)"Pathnames",
NULL
};
struct MenuItem MenuItem1 = {
NULL,
0,0,
72,8,
ITEMTEXT+ITEMENABLED+HIGHCOMP,
0,
(APTR)&IText6,
NULL,
NULL,
NULL,
MENUNULL
};
struct Menu Menu3 = {
NULL,
173,0,
75,0,
MENUENABLED,
"Windows",
&MenuItem1
};
struct IntuiText IText7 = {
0,1,JAM1,
19,0,
NULL,
(UBYTE *)"Format Destination",
NULL
};
struct MenuItem MenuItem6 = {
NULL,
0,36,
163,8,
CHECKIT+ITEMTEXT+MENUTOGGLE+ITEMENABLED+HIGHCOMP+CHECKED,
0,
(APTR)&IText7,
NULL,
NULL,
NULL,
MENUNULL
};
struct IntuiText IText8 = {
0,1,JAM1,
19,0,
NULL,
(UBYTE *)"Speak",
NULL
};
struct MenuItem MenuItem5 = {
&MenuItem6,
0,27,
163,8,
CHECKIT+ITEMTEXT+MENUTOGGLE+ITEMENABLED+HIGHCOMP+CHECKED,
0,
(APTR)&IText8,
NULL,
NULL,
NULL,
MENUNULL
};
struct IntuiText IText9 = {
0,1,JAM1,
19,0,
NULL,
(UBYTE *)"Generate Listing",
NULL
};
struct MenuItem MenuItem4 = {
&MenuItem5,
0,18,
163,8,
CHECKIT+ITEMTEXT+MENUTOGGLE+ITEMENABLED+HIGHCOMP+CHECKED,
0,
(APTR)&IText9,
NULL,
NULL,
NULL,
MENUNULL
};
struct IntuiText IText10 = {
0,1,JAM1,
19,0,
NULL,
(UBYTE *)"Do Big Files",
NULL
};
struct MenuItem MenuItem3 = {
&MenuItem4,
0,9,
163,8,
CHECKIT+ITEMTEXT+MENUTOGGLE+ITEMENABLED+HIGHCOMP+CHECKED,
0,
(APTR)&IText10,
NULL,
NULL,
NULL,
MENUNULL
};
struct IntuiText IText11 = {
0,1,JAM1,
19,0,
NULL,
(UBYTE *)"Compress Files",
NULL
};
struct MenuItem MenuItem2 = {
&MenuItem3,
0,0,
163,8,
CHECKIT+ITEMTEXT+MENUTOGGLE+ITEMENABLED+HIGHCOMP+CHECKED,
0,
(APTR)&IText11,
NULL,
NULL,
NULL,
MENUNULL
};
struct Menu Menu2 = {
&Menu3,
109,0,
57,0,
MENUENABLED,
"Flags",
&MenuItem2
};
struct IntuiText IText12 = {
0,1,JAM1,
0,0,
NULL,
(UBYTE *)"Quit",
NULL
};
struct MenuItem MenuItem12 = {
NULL,
0,45,
168,8,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,
(APTR)&IText12,
NULL,
'Q',
NULL,
MENUNULL
};
struct IntuiText IText13 = {
0,1,JAM1,
0,0,
NULL,
(UBYTE *)"Save Preferences",
NULL
};
struct MenuItem MenuItem11 = {
&MenuItem12,
0,36,
168,8,
ITEMTEXT+ITEMENABLED+HIGHCOMP,
0,
(APTR)&IText13,
NULL,
NULL,
NULL,
MENUNULL
};
struct IntuiText IText14 = {
0,1,JAM1,
0,0,
NULL,
(UBYTE *)"Load Preferences",
NULL
};
struct MenuItem MenuItem10 = {
&MenuItem11,
0,27,
168,8,
ITEMTEXT+ITEMENABLED+HIGHCOMP,
0,
(APTR)&IText14,
NULL,
NULL,
NULL,
MENUNULL
};
struct IntuiText IText15 = {
0,1,JAM1,
0,0,
NULL,
(UBYTE *)"Restore",
NULL
};
struct MenuItem MenuItem9 = {
&MenuItem10,
0,18,
168,8,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,
(APTR)&IText15,
NULL,
'R',
NULL,
MENUNULL
};
struct IntuiText IText16 = {
0,1,JAM1,
0,0,
NULL,
(UBYTE *)"Backup",
NULL
};
struct MenuItem MenuItem8 = {
&MenuItem9,
0,9,
168,8,
ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
0,
(APTR)&IText16,
NULL,
'B',
NULL,
MENUNULL
};
struct IntuiText IText17 = {
0,1,JAM1,
0,0,
NULL,
(UBYTE *)"About",
NULL
};
struct MenuItem MenuItem7 = {
&MenuItem8,
0,0,
168,8,
ITEMTEXT+ITEMENABLED+HIGHCOMP,
0,
(APTR)&IText17,
NULL,
NULL,
NULL,
MENUNULL
};
struct Menu Menu1 = {
&Menu2,
0,0,
102,0,
MENUENABLED,
"Operations",
&MenuItem7
};
#define MenuList1 Menu1
struct IntuiText IText18 = {
3,0,JAM2,
218,40,
NULL,
(UBYTE *)"",
NULL
};
#define IntuiTextList1 IText18
struct NewWindow NewWindowStructure1 = {
0,0,
640,200,
0,1,
GADGETDOWN+GADGETUP+MENUPICK+CLOSEWINDOW+MENUVERIFY+DISKINSERTED+DISKREMOVED,
WINDOWSIZING+WINDOWDRAG+WINDOWDEPTH+WINDOWCLOSE,
&stopGadget,
NULL,
(UBYTE *)"MRBackup V2.0, Mark Rinfret, 11/87",
NULL,
NULL,
640,100,
640,200,
CUSTOMSCREEN
};
struct IntuiText IText19 = {
4,0,JAM1,
2,2,
NULL,
(UBYTE *)"Skip This File",
NULL
};
struct Gadget fileSkipGadget = {
NULL,
77,65,
117,11,
NULL,
RELVERIFY+GADGIMMEDIATE+ENDGADGET,
BOOLGADGET+REQGADGET,
NULL,
NULL,
&IText19,
NULL,
NULL,
FILESKIP,
NULL
};
struct IntuiText IText20 = {
4,0,JAM1,
2,2,
NULL,
(UBYTE *)"Restart Diskette",
NULL
};
struct Gadget diskRestartGadget = {
&fileSkipGadget,
71,52,
132,11,
NULL,
RELVERIFY+GADGIMMEDIATE+ENDGADGET,
BOOLGADGET+REQGADGET,
NULL,
NULL,
&IText20,
NULL,
NULL,
DISKRESTART,
NULL
};
struct IntuiText IText21 = {
4,0,JAM1,
1,2,
NULL,
(UBYTE *)"Retry File",
NULL
};
struct Gadget fileRetryGadget = {
&diskRestartGadget,
93,39,
82,11,
NULL,
RELVERIFY+GADGIMMEDIATE+ENDGADGET,
BOOLGADGET+REQGADGET,
NULL,
NULL,
&IText21,
NULL,
NULL,
FILERETRY,
NULL
};
struct IntuiText IText22 = {
4,7,JAM1,
2,2,
NULL,
(UBYTE *)"Abort",
NULL
};
struct Gadget abortGadget = {
&fileRetryGadget,
112,26,
43,11,
NULL,
RELVERIFY+GADGIMMEDIATE+ENDGADGET,
BOOLGADGET+REQGADGET,
NULL,
NULL,
&IText22,
NULL,
NULL,
ABORT,
NULL
};
#define GadgetList2 abortGadget
struct IntuiText IText23 = {
6,0,JAM2,
19,13,
NULL,
(UBYTE *)"Select from the enabled options:",
NULL
};
#define IntuiTextList2 IText23
struct Requester RequesterStructure2 = {
NULL,
334,110,
290,80,
0,0,
&GadgetList2,
NULL,
&IntuiTextList2,
NULL,
2,
NULL,
NULL,
NULL
};
UBYTE xcldPathGadgetSIBuff[81] =
"S:MRBackup.xcld";
struct StringInfo xcldPathGadgetSInfo = {
xcldPathGadgetSIBuff,
UNDOBUFFER,
0,
81,
0,
0,0,0,0,0,
0,
0,
NULL
};
SHORT BorderVectors3[] = {
0,0,
161,0,
161,9,
0,9,
0,0
};
struct Border Border3 = {
-2,-1,
7,0,JAM1,
5,
BorderVectors3,
NULL
};
struct IntuiText IText24 = {
6,0,JAM2,
-110,1,
NULL,
(UBYTE *)"Exclude Path:",
NULL
};
struct Gadget xcldPathGadget = {
NULL,
130,63,
158,8,
NULL,
RELVERIFY+GADGIMMEDIATE,
STRGADGET,
(APTR)&Border3,
NULL,
&IText24,
NULL,
(APTR)&xcldPathGadgetSInfo,
XCLDPATH,
NULL
};
UBYTE listPathGadgetSIBuff[81] =
"PRT:";
struct StringInfo listPathGadgetSInfo = {
listPathGadgetSIBuff,
UNDOBUFFER,
0,
81,
0,
0,0,0,0,0,
0,
0,
NULL
};
SHORT BorderVectors4[] = {
0,0,
162,0,
162,9,
0,9,
0,0
};
struct Border Border4 = {
-2,-1,
7,0,JAM1,
5,
BorderVectors4,
NULL
};
struct IntuiText IText25 = {
6,0,JAM2,
-110,1,
NULL,
(UBYTE *)"Listing Path:",
NULL
};
struct Gadget listPathGadget = {
&xcldPathGadget,
129,48,
159,8,
NULL,
RELVERIFY+GADGIMMEDIATE,
STRGADGET,
(APTR)&Border4,
NULL,
&IText25,
NULL,
(APTR)&listPathGadgetSInfo,
LISTPATH,
NULL
};
UBYTE backPathGadgetSIBuff[81] =
"DF1:";
struct StringInfo backPathGadgetSInfo = {
backPathGadgetSIBuff,
UNDOBUFFER,
0,
81,
0,
0,0,0,0,0,
0,
0,
NULL
};
SHORT BorderVectors5[] = {
0,0,
162,0,
162,9,
0,9,
0,0
};
struct Border Border5 = {
-2,-1,
7,0,JAM1,
5,
BorderVectors5,
NULL
};
struct IntuiText IText26 = {
6,0,JAM2,
-102,1,
NULL,
(UBYTE *)"Backup Path:",
NULL
};
struct Gadget backPathGadget = {
&listPathGadget,
129,33,
159,8,
NULL,
RELVERIFY+GADGIMMEDIATE,
STRGADGET,
(APTR)&Border5,
NULL,
&IText26,
NULL,
(APTR)&backPathGadgetSInfo,
BACKPATH,
NULL
};
UBYTE homePathGadgetSIBuff[81] =
"DH0:";
struct StringInfo homePathGadgetSInfo = {
homePathGadgetSIBuff,
UNDOBUFFER,
0,
81,
0,
0,0,0,0,0,
0,
0,
NULL
};
SHORT BorderVectors6[] = {
0,0,
161,0,
161,9,
0,9,
0,0
};
struct Border Border6 = {
-2,-1,
7,0,JAM1,
5,
BorderVectors6,
NULL
};
struct IntuiText IText27 = {
6,0,JAM2,
-86,1,
NULL,
(UBYTE *)"Home Path:",
NULL
};
struct Gadget homePathGadget = {
&backPathGadget,
129,19,
158,8,
NULL,
RELVERIFY+GADGIMMEDIATE,
STRGADGET,
(APTR)&Border6,
NULL,
&IText27,
NULL,
(APTR)&homePathGadgetSInfo,
HOMEPATH,
NULL
};
#define GadgetList3 homePathGadget
struct NewWindow NewWindowStructure3 = {
332,19,
300,80,
0,1,
GADGETDOWN+GADGETUP+CLOSEWINDOW,
WINDOWDRAG+WINDOWDEPTH+WINDOWCLOSE,
&homePathGadget,
NULL,
(UBYTE *)"Pathname Specifications",
NULL,
NULL,
300,80,
300,80,
CUSTOMSCREEN
};
struct NewWindow NewWindowStructure4 = {
0,105,
622,95,
0,1,
NULL,
WINDOWSIZING+WINDOWDRAG+WINDOWDEPTH,
NULL,
NULL,
(UBYTE *)"Progress Report",
NULL,
NULL,
40,40,
640,200,
CUSTOMSCREEN
};
struct NewWindow NewWindowStructure5 = {
172,140,
309,51,
0,1,
NULL,
WINDOWSIZING+WINDOWDRAG+WINDOWDEPTH,
NULL,
NULL,
(UBYTE *)"Debug",
NULL,
NULL,
5,5,
640,200,
CUSTOMSCREEN
};
/* EOF */
--
< Mark R. Rinfret, mrr@amanpt1.ZONE1.COM | ...rayssd!galaxia!amanpt1!mrr >
< Aquidneck Management Associates Home: 401-846-7639 >
< 6 John Clarke Road Work: 401-849-8900 x56 >
< Middletown, RI 02840 "If I just had a little more time...">papa@pollux.usc.edu (Marco Papa) (02/07/88)
I am using the current version, and I do like it a lot. Incremental backups are real easy, thought I am sure that people would like the new version. How about submitting it to comp.binaries.amiga anyway? -- Marco P.S.: Mark, your appreciation is very welcome. I tried to reach you directly, but mail bounced back every time.