/* FLIP HISTORY & MANUAL */ /* HISTORY: *========= * 2.6b tells when copies an executable boot to detect virii * 2.6a bug de 'r' repaired * No checksum done if no previous checksum * option 's' for single instead of double (double=default) * v 2.6 27 fevrier 88 * 2.5c re-designing of command parsing * formats disk ('f' command) * randomization of serial # at each copy * 2.5b t can override disk * ESC aborts without confirm * 2.5a no ESC to another disk, BS! * aborts on key even in format * man in another C file * v 2.5 released * 2.4.5 write-protect detected * 2.4.3 option v to verify source only * multipass copies possible * 2.4.2 all sects# outputted on any kind of error. * twister modified to accept starttrack parameter * track_map to know what to copy * t option to specify track * r takes options fvV * 2.4.1 i for interactive: default no stop * V verify after format (case-sensitive options) * bug of verify reading into main buffer repaired * v 2.4: Jan 15 88 * 2.3.2 If esc on insert abort * track_read first * no more skip opt * # of sect printed * 2.3.1 Drive B presence is really tested * v 2.3: Dec 28 87 * 2.2.3 comparisons were not done!!! -- repaired * copy by 3 sectors * stops if copy sector only by 1 * 2.2.2 bug de a1a1 repare * 2.2.1 no verify by default * r for re-copy * v 2.2: Dec 19 87 * 2.1.1 prints buffer size on start * sector_read done 4 times with comparison! * RETURN repeats last command * v 2.1: Nov 28 87 * 2.0.1 retrys in writes and verify work now. * verify there is a drive B before copying * v 2.0: Nov 22 87 * 1.6.3 verify is another pass * 1.6.2 format does not verify anymore * format outputs a char * 1.6.1 uses TWISTER's code mmtwst.c to format * v 1.6: Nov 11 87 * 1.5.4 abort on ESC * option "2" for 2-sided. * 1.5.3 abort on key with confirm * 1.5.2 track, sectors begin at 1 instead of 0 * retrys on writes retry format-write-verify loop * on write errors, ESC to go to another disk * 1.5.1 port to megamax * uses all memory * v 1.5: more checking of entry syntax. * on-line help * fills bad sectors with 0s before writing * more sensible memory allocation * s option for auto skip * v 1.4: one automatic retry without prompting. If skips, copies good * sectors anyway. * v 1.3: when error on a track, asks for retrys, which are done sector * by sector. * v 1.2: when double sided, copy the two sides * v 1.1: whole side in memory for one drive use. * v 1.0: original one in mark williams. quick and really dirty. */ /* ON_LINE_MANUAL: *================ */ char *help_text[] = { "", " FLIP 2.6 manual", " Colas Nahaboo", "", " flip - disk copier with error-recovery, on either sides.", " with FAST formatting as TWISTER or DCFORMAT", "", "SYNTAX", " the commands are given as: (items in [] are optional)", "", " [][fvVtios9] : copy disks", " f[][fvVtis9] : format disk", " v[][tios9] : verify disk", " r[][fvVi] : re-write disk in memory", " q : quits", " ? : help", "", " A drive is specified by the letter \"a\" or \"b\", followed optionally by", " \"1\" or \"2\" to indicate the side. (default drive is \"a\", side is \"1\")", "", "OPTIONS", " f - to format destination side", " V - verify disk by re-reading track just after being formatted.", " v - verify copy by re-reading track just after being written", " t - to specify what track(s) to copy (used with \"z\" to give the", " number of tracks of the new disk, default 80)", " i - interactive: ask user in case of error (default don't)", " o - override: do not look at the source disk boot sector to determine", " its type, take 10 sectors, 1 sided, 80 tracks, unless told", " otherwise by options \"9\", \"d\" or \"t\"", " 9 - disk is 9 sectors per track (default 10). Used with \"z\" or \"o\"", " s - disk is single-sided (default double). Used with \"z\" or \"o\"", "", "EXAMPLES", " ab2fv - to copy a non-protected SS disk in drive A on the unformatted", " back of a SS disk in drive B, verifying the copy.", " afv - (or fv) to copy ANY disk with format and verify, in drive A.", " rfv - to re-write last copy into drive A", " ffv - to format a double-sided disk in drive A", " fs - to erase all files of a previously formatted single sided disk", "", "OPERATION", " During copy, flip prints for each track, a:", " , for reading track without problem", " ; for reading track successfully after 4 retrys sector-by-sector", " - for formatting a track (in FAST format)", " v for verifying a track", "", " You can pause during the copy at any time by pressing a key, but pressing", " ESC will abort. ^C always quits.", "", " Without i option, on read error, it retries 4 times to read the track,", " then reads sector by sector. With option i, it prompts you for what to do:", " (the track and sector number given start at 1, but sector number at 0)", " - RETURN or SPACE retries. You'd better try to extract, then re-insert", " the disk to try to re-center it. (or try on another drive later)", " - \"s\" skips the bad sectors, going on with the rest of the copy.", " the bad sectors will be filled with 0s on the copy", " (but all that could be read is kept, of course!)", " - if it is writing the copy, you can press BACKSPACE if you want to try", " to write to another disk.", " - any other key aborts the copy.", " Experience shows that you can recover most of your damaged disks this way.", " If it cannot read the track, it reads it sector by sector, but tells you so", " because due to a bug in the TOS, a sector can be read incorrectly without", " giving an error. So FLIP does 4 reads of the same sector and compares", " them to be sure, but even if reads are equals, it warns you because the", " risk subsists, due to the bug in old TOS roms...", "", "DESCRIPTION", " The program copies TOS disks as a whole, and only non-protected", " ones. It can consider the back side of a single-sided disk as another disk", " so, it is very useful to use the back sides of protected disks, or", " single sided disks, such as MAGIC! ones. (with a two-side drive, of", " course!)", "", " But it also reads disks with care, being able to read CORRECTLY most disks", " causing a read error to copiers or the GEM desktop. Thus, if you get a", " read error on a disk, copy it with FLIP!. Moreover, if it cannot read a", " sector, it tells you so! (Unlike the HELP program)", "", " Version 2.6 can format and changes randomly the serial # of the disk", " when copying, (without the override option). It copies also executable", " boot sectors, but tells you so (in 2.6b) so that you can check for a VIRUS.", " it gives you the values at $3A offset to identify the virus", " Known virus values are: 41,FA,FF ", " ", " When it reads a disk, it first tries to read the boot sector in order", " to know the size (tracks and sectors per track) of the disk. If it", " can't make sense out of it, it uses 80 tracks by 9 sector, unless you", " used the \"o\" option", " Thus you don't have to tell him the type of the disk you want to copy.", " It will recognize double sided disks automatically, but you can only", " copy double sided disks, without flipping their faces!", "", " So, NEVER COPY A DISK WICH GIVES READ ERRORS WITH A BIT-COPIER (procopy)", " use FLIP instead!", "", " From version 2.0 on, FLIP format in FAST format, all disks accesses on", " this disk will be twice faster compared to a normal disk!. It ALWAYS ", " formats disks in 10 sectors, even if only to store 9 sectors.", " Be aware that I didn't test the validy of the formatting code on the", " new roms, so make some tests if you have them.", "", "COPYRIGHT", " This program is PUBLIC DOMAIN, and should be given with its sources", " Feel free to improve it!, but please mention my name.", " I would be very glad if you send me back any improved version, such as", " a GEM port", " CREDIT: It uses code from TWISTER from Dave SMALL & Dan MOORE.", "", "BUGS", " Not under GEM - yet!", " Cannot copy IBM boot sectors (use DCFORMAT)", "", "AUTHOR", " Colas NAHABOO", " 383 ch du clos d'Embertrand", " 06250 MOUGINS", " FRANCE.", " Personal phone: 93 75 68 29, give me a call...", " Electronic mail address: colas@mirsa.inria.fr", 0L }; #include "osbind.h" #include "stdio.h" more(text) char **text; { char **p = text, c; int line = 0; while (*p) { printf("%s\n", *p++); line++; if (line > 22) { printf("%cp more (SP, CR, BS or ESC) %cq", 27, 27); fflush(stdout); while (!Cconis()); c = Cnecin(); printf("%cM", 27); fflush(stdout); switch (c) { case 27: case 'q': printf("\n"); return; break; case ' ': line = 0; break; case 8: line = 0; p -= 48; if (p < text) p = text; printf("%cp...Backing 1 page...%cq\n", 27, 27); break; } } } printf("\n"); }