LBSOS KRNLI/O ERRORFILE 'SOS.KERNEL' NOT FOUNDINVALID KERNEL FILExةw,@  4  J  ȱ⩤i8#) ) 8Le DISK /// BACKUP: A Backup Program for the Apple /// By ALLAN M. BLOOM, PhD CDP A Beginning Note DISK /// BACKUP was provided by /// SIG member Allan Bloom for use by our members. Below is a complete discription of the program, what it does and how ?;MENU.MKAER  4ke5%! *SOS.KERNEL ,V5&!a-READ.ME.FIRSTV7 O./D3BACKUP.SOURCEC5'!5-%SEG.T Rj: Ÿ/ FLASHNAME.DATkM  DISKNAME.DAT  III.BLM.262311Au' ,D3BACKUP.DOC!>$ % *HELLO.TEXT+v O-HELLO - / *MENU.MAKER ) }: >*SOS.DRIVER 74: Z*SOS.INTERP mm#im#iЛ#Lȱ  6L憦  Lsmm l y` @8(Je稽 ʈto use it. Introduction DISK /// BACKUP is an automatic backup utility for Apple /// diskettes. The program displays side-by-side directories of a master and a backup diskette. By comparing file dates, it suggests master files to be backed up. You then  !"#$%&' | G: | Are these the right files? (Y | N) {} | |___________________________________________________________ ____________| A: The program identifies itself as D3BACKUP and specifies its revision date. B: A beep alerts you that D3BACKUP is reFile MLM.UT.BACKUP contains 20 files. | |___________________________________________________________ ____________| B: | Insert MASTER and BACKUP volumes. Press any key. | C/D:| RETURN to accept default, else edit pathname as needed. Enter pathname of the MASTER volume: [.D1 ] | D: | Enter pathname of the BACKUP volume: [.D2 ] | | | E: | Constructing Directory....... | | | F: | Master File MLM.UTILITIES contains 15 files. | | Backup l File Check ____________________________________________________________ ___________ | | A: | D3BACKUP: Back Up Disk /// Files AMB: v.06/84 | | | |___________________________________________________________ ____________| | | C: | l not let you do anything impossible, and it always lets you try again. The following sections tell you in detail how DISK /// BACKUP works. You will find it a powerful program that is easy and safe to use for backing up your disk files. Screen 1: Initiahe "copy" pass. As in the delete pass, you may require verification of every copy or let things happen automatically. After copying, you may exit the program or back up another diskette pair. As you will see, the program checks your work carefully. It wilenters the "delete" pass. DISK /// BACKUP deletes first so that the maximum disk space is available for copies. You may let the program do your deletions automatically or require approval of each and every one. After the "delete" pass, the program enters ta file, and the left/right arrows select a disposition for that file: copy or delete, master or backup. You page through the directory screens with the ESCAPE and RETURN keys. When you are ready, you press "X" to execute your selections. Then the program nt, which master files should be copied to backup, and which files on the backup volume either (1) don't exist on the master or (2) are more recent than corresponding master files. You may then override the program's suggestions. The up/down arrows select disk catalogs, deciding on what to do with each file, and doing it. When you boot DISK /// BACKUP, it asks you to insert your master and backup volumes, then displays a side-by-side catalog of the disks. The program shows you which backup files are currer copy from the backup. Until now, you had to list each disk directory, compare the lists manually, then use the System Filer to do the copies and deletes -- one at a time. DISK /// BACKUP eliminates that bother. The program handles everything -- comparing and an external diskette drive. Until now, backing up files on diskettes hasn't been easy. Unless you copied an entire volume. A volume copy may be inappropriate. You may want to keep a backup file, delete a file on the master instead of backing it up, o use keyboard arrows to change those suggestions, for any file on either diskette: copy master-to-backup or vice versa, delete backup or master file, leave things as they are. The program then executes your wishes. DISK /// BACKUP requires a 256K Apple ///ady to begin. C: If MASTER is not a diskette in the internal drive (.D1), edit the pathname [in brackets]: ESC: Default (.D1) reappears. RET: Accept bracket contents. L/R Arrows: Move cursor. Openapple-I : Toggle insert. Openapple-L-Arrow: Delete left. Openapple-R-Arrow: Delete right. D: The same as Message C, for the backup volume. E: D3BACKUP is constructing its internal paired directory. F: Identifies the MASTER and BACKUP volumes, and the number of files ihe MASTER directory's name. C-2: The number of blocks used by the file in the MASTER directory. D: The same information as column "C" for the BACKUP files. E: This is the SOS "type" of the file, of the MASTER file if both present. Screen 2: Change MASTER file date stamp in "year, month, day" format followed 24-hour time. If a file doesn't exist on the MASTER, the date stamp is "." C-1: Available space on the MASTER volume, 152 blocks in this case. The second line identifies tUP to MASTER. Del: Delete the file: "-->": BACKUP file. "<--": MASTER file. Delete: Delete the file from the MASTER\and\the BACKUP directories. B: File names, indented to show hierarchical level, alphabetized within level. C: needs to be done, and nothing will be done. ??: This may be a file that you wish to delete. If you don't change this status, D3BACKUP changes it to "OK" before processing. Cpy: Copy the file: "-->": MASTER to BACKUP. "<--": BACKsDta| | | |___________________________________________________________ ________________| | Message Area | |___________________________________________________________ ________________| A: The first column shows the status of each file: OK: Nothing PasDta | | ?? TEST04 84/03/11 18:05 2 Catlg | | ?? TEXTMAKER 83/08/18 08:01 1 Ascii | | Del--> PRT.MISSION 83/11/27 23:25 7 83/11/27 23:25 7 Pa83/08/18 08:01 1 Ascii | | <--Cpy STARTUP 84/01/23 18:44 1 84/03/11 21:13 1 Ascii | | Cpy--> SYS.PRT 84/01/21 12:36 1 Binar | | Cpy--> SYS.TAB 81/08/22 00:00 1 AW3COPY 84/03/11 18:04 2 84/03/11 18:04 2 Catlg | | Cpy--> GLOS.KEYPAD 84/03/11 21:14 1 84/02/02 18:41 1 Ascii | | <--Del LEVEL4 84/03/11 18:05 2 Catlg | | <--Del TEXTMAKER Blk F-Ty | | ------ -------------- -------------- --- -------------- --- ---- | |[?? ] [ATEST ] 84/03/11 22:15 2 Catlg | | OK MLMPRT 83/04/21 13:37 1 83/04/21 13:37 1 Catlg | | OK ___________________ ________________| | (A) (B) (C) (C-1) (C-2) (D) (E) | | Backup Master:[152]Blk Backup:[ 89]Blk | | Status File Name MLM.UTILITIES Blk MLM.UT.BACKUP "directory" screen. Brackets -- "[ ]" -- are used here to show highlighted items. ____________________________________________________________ _______________ | | | D3BACKUP: Back Up Disk /// Files AMB:v.06/84 | |________________________________________handles only 4 levels of directories. Press any key. Both MASTER and BACKUP are blank. Press any key. Two volumes with the same name. I am changing .D2 name. Press any key. The Directory Screen After the initial screen, everything looks like thisinate program. No pathname entered. Press any key. Please use SOS device name as the first level. Press any key. MASTER and BACKUP pathnames may not be the same. Press any key. E: PATHNAME is not a valid directory. Press any key. Program n each. G: Press "Y" to "Change Backup Status," or press "N" to go to "End of Task." --------------- Possible Error Messages: Go to "End of Task"----------------- C/D:ERROR: SOS Input/Output Error Message Enter RETURN to retry. "Abort" to termBackup Status Once leaving Screen 1, you come to the "backup status" screen. It is the standard "directory" screen accompanied by the following message area: ____________________________________________________________ _______________ | | |Arrows: Up/Dn to file. L/R sets status. X:Executes | | (Multi-page) ESC/RET: Last/Next page. X:Executes | | ESC/RET: Prev/Next page. X:Executes | | ESC/RET: Prev/ 1st page. X:Executes | |______________________________________________________________________________ _______________ | | | Entering copy pass. Verify each copy? (Y | N){} | |___________________________________________________________ ________________| The "copy" phase is similar to the delete ed. As a file is deleted, the "available space" in its column header increases. This phase ends when all deletes have been processed. If you chose to copy any files, go to the "copy" phase. Else, you proceed to "End of Task." Screen 4: Copying Files ) Deleting "PATHNAME" | |___________________________________________________________ ________________| In "verify" mode, press either "N" to change your mind or "Y" to confirm. If you "un-delete" a member of a sub-directory, its parent will not be deletfile level and work up to the root directory. This ensures no sub-directory being deleted if it contains files. ____________________________________________________________ _______________ | | | (Verify) Delete "PATHNAME"? (Y | N) {} | | (Automatic________________________________________ ________________| Press "N" to make all deletes automatically. Press "Y" for verification of each delete. Verification is slower, but it may be a valuable double check. Deletions begin at the lowest hierarchical nt sub-directory does not exist on destination volume. Press any key. Screen 3: Deleting Files ____________________________________________________________ _______________ | | | Entering delete pass. Verify each delete? (Y | N){} | |___________________-- Please delete all members before deleting a sub-directory. Press any key. You cannot copy a non-existent file. Press any key. You cannot delete a non-existent file. Press any key. Sub-directory already exists on destination volume. Press any key. Parend gives you a chance to reconsider. If any files are to be deleted, D3BACKUP goes to Screen 3's "Deleting Files" phase, else it goes directly to Screen 4's "Copying Files" phase. -------------- Possible Error Messages: Return to "file status"------------ status of as many files as you like, as often as you like. You may page through the file to your heart's content. When you are satisfied with each "Backup Status" entry, press the "X" key to proceed. If you haven't seen all pages, the program tells you a would be lost. You may not leave a file -- by pressing the vertical arrow, ESCAPE, RETURN, or "X" key -- in an illegal backup status. You'll be beeped at and invited to "Press any key" to erase the error message and correct your entry. You may change theve deleted all its members. Second, you may not copy a member of a sub-directory if its parent sub-directory does not, or will not, exist on the destination volume. Third, you may not copy over an existing directory. It might point to valid files, and theyorward. From the first page, ESCAPE "wraps" to the last page of the directory. From the last page, RETURN wraps to the first. You may press these keys at any time. D3BACKUP imposes three restrictions. First, you may not delete a sub-directory until you ha"current" file is highlighted. The horizontal (left/right) arrows cycle through the current file's backup status, highlighted while you are changing the status. For multi-page directories, the ESCAPE key backs you up a page, and the RETURN key moves you f_________________________________________ ________________| The "arrow" keys work within a "page" of up to 15 files. The vertical (up/down) arrows move from one file entry to the next and "wrap around" if you go beyond the top or bottom of the page. The phase of the program. Copying proceeds from the root directory and works down. This ensures that a member of a sub-directory has a parent on the destination volume. As a file is copied, "available space" on the destination volume is reduced. If there isn't enough space on the destination volume to hold a file, D3BACKUP will not attempt to copy it. If you decide not to copy a sub-directory, none of its members will be copied. After all copies have been processed, go to "End of Task." End of Task _____r making SOS calls from Pascal, and the author's own PLUTIL unit containing several generally useful Pascal utility routines. m for the number /4/ and replace it with /8/ if it refers to hierarchical level. The program's SOS directory reading routines are adapted from Volume 1, Number 2 of ON THREE magazine. The program's library contains two special files: Apple's SOSIO unit foages (filecount div 15 plus 1). D3BACKUP handles up to 4 hierarchical file levels. You may increase that to 8. First decrease the number of front-end blanks added to a file name in the "dir_line" procedure to one per level (from two). Then scan the progra The program presently handles up to 250 files. If you want to change that number, first use the Pascal Editor's global R)eplace command to change 250 to whatever number you like. Next, globally replace 17 with the new maximum number of 15-file directory pckup. Program Modification The Pascal source code for D3BACKUP is included on this side of the disk, as file D3BACKUP.SOURCE, should you need to modify it in any way. It's a big program, and you may have to break the textfile in half to do much editing.in size and complexity limits, you may back up a ProFile to another ProFile, or a Micro-Sci A143 to a twin. Within its design limits, DISK /// BACKUP is superior to Apple's "Backup ///" in that you don't have to back up a whole volume to have a complete baifferent volumes and they must have the same capacities. You may use the program to back up a ProFile sub-directory to diskette -- if the diskette has enough capacity to hold all the files. The program does not handle files that span multiple volumes. WithUP.CODE" and SYSTEM.STAR.LIB as "dirname/D3BACKUP.LIB." If you have Quark's "Catalyst," or Selector, follow the directions for installing simple Pascal programs. User Notes Neither MASTER nor BACKUP need be a diskette, but they must be directories on dike the "Standard" type font, use the "System Configuration Program" to re-configure the SOS.DRIVER file to your needs. To install this program on a hard disk, create a sub-directory with any "dirname" you wish. Then copy SYSTEM.STARTUP as "dirname/D3BACKrom your work copy. D3BACKUP comes on a bootable diskette. You need do nothing if your system is configured with two Apple "Disk ///" drives. A "ProFile" driver is included for your convenience. If your system includes other disk drives or if you do not lSide Two contains the actual Pascal D3Backup program. BACK IT UP! Copy each side -- preferably onto separate single-sided disks -- before doing anything else. Put the master disk in a safe place, and only use it to make another work copy. Always execute fark's "Catalyst," you will return to the Catalyst main menu. Otherwise INSERT SYSTEM DISKETTE AND REBOOT. Installation D3BACKUP is supplied on two sides of WAP /// SIG disk 3UTL-23. Side One is a Basic "boot disk" for the documentation and source code. ckup to do, or if you'd like another backup pass on the same disk pair, press "Y." If you invoked D3BACKUP from Pascal, press ESCAPE to return to the Pascal environment. Press "N" to terminate both the program and Pascal. If you invoked the program from Qu_______________________________________________________ _______________ | | | End of task. Back up another disk? (Y | N | ESC to Pascal) {} | |___________________________________________________________ ________________| If you have another ba0 WAP /// SIG MENU.MAKER PROGRAM (v. 6.2) =".D1"210: Coldstart (320: Warmstart &*X=11000: TEXT SLOW-DOWN LOOP ,X.1 CHANGE DISK SUBROUTINE23œ202:2200<RFa$=" YOU MAY SELECT YOUR DISK BY sic; +Q Quits."r12);::"80C";a$;:+w#9,"DISKNAME.DAT":#9;DISKNAME$:#9|d$=DISKNAME$$=23:=0::"80C";d$;::12)201M=3:=14:"This /// SIG Disk is \^ 19";Р,2)", Washington Apple `, Ltd."=4:B$(1)="":B$(2)=""A$=16,B) THEN 240 #1, d$="":=10:"80C";d$ ž#1300I=0"I=I+1:#1;A$(I):290,#1 6L=I-1@j=1:same=0 J:SEG=0 Tœ2030^CT<1CT=1cCT>13000Zha$="{,|,~,}; selects; to new disk; J/2)=4:=+1:ۙ=44B$(J);:J=J+1I:1,180,22:2,280,21:2,2380,23:8A$(1000),B$(1000),C%(511),C$(20),name$(20):=10:=0UCA=128:LCA=UCA+32CT=15 IF PREFIX$= PREFIX$+MID$(B$(I),HER SUBROUTINEnSLOW=110xFLASH/2=FLASH/2):۴ =11:=07 FLASH$ SLOW FLASH:".d1/Menu.Maker"5 WAP /// SIG HELLO PROGRAM. UPDATED 4/12/89 DGO :#1,".D1/hello.text" ž#170 (#1;ERIN$ 2ERIN$<40F#1/P=23:=25:"PRESS ANY KEY TO CONTINUE.":G$U-Z#2,".D1/FLASHNAME.DAT":#2;FLASH$:#2%dFLASH=110: FLAS3.Backup and is also self-booting. We hope you enjoy it and encourage your submission of programs to our PD library. y. great program that will let you make simple backups of your disks. It's provided by /// SIG member Allan Bloom, PhD. Side one contains the documentation and source code. It is self-booting and uses the /// SIG's Menu.Maker program. Side two contains D*,0 WELCOME! WAP /// SIG Public Domain Library Disk Category/Number :Bloom Disks/3BLM-26 Disk Format: Self-booting Basic (Side One); Pascal (Side Two) D3.Backup is a /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// SIG, Washington Apple Pi 12022 Parklawn Drive Rockville, MD. 20852 (301)-984-030(./012345VOLUME NAME (/DISKNAME) OR DEVICE NAME (.Dx)"P12);::"80C";a$;:Zb$="CHANGING DISKS"$d=23:=0::"80C";b$;::12).n=12:=20:"MAKE A NEW MENU FOR DISK: ";N$xN$)<2110=N$ :210 I=1L(A$(I),A$))200B$"BASIC 0":150A$="TEXT 0":150A$="CAT 0":150A$="FONT 0":150A$="FOTO 0":150A$(L),"BLOCKS")510*=27:=19:"FREE MEMORY AVAILABLE: ";=7:=20:"80C";A$(L);$:=5:THPOS=4:I=1:IBOTM=J-1:620Q=:=26:=21:1600 =Q:WW=0A=:A=21A=9&oldprefix$=40A=31410: Control C "aborts" program to Basic(:A=13770: Return Selects a file *DA=27:50: Escape to change disks/FA=324000: back out one directory level 3GA=(80+UCA)A=(80+L689:;<=>?@ABCDEFGHIJKLMNOPGA7  3  5  >>< (&20 *, **>> "2*&" " >>  ">> "8""> """"""< SOS DRVR"CUSTOM.3 )((8*,;((*,((+)((9/(p((>3  =9 :9 .(~|L|LNqooGoDDDcc0ccpc]]c"QM"|@@pAATT**|a$,1)="/"5060:s=s-1 5030=a$240 MENU.MAKER 6.2 * Thanks to C.M.Davidson for his help!el; G$:::320H: Error Routine 202:U=11:"79C";"BAD PATH ERROR (NO DISK IN DISK DRIVE OR DESIRED FILE NOT FOUND.)"X=11000:X:::210Z a$="{,|,~,}; selects; back 1 lev 1600 &:WW=1:0 :SEG=1;".D1/S EG.F" SEG=1".D1/SEG.G"diskname$=3802  CATCH PASCAL TEXT FILES 202 :F*=08:"78C";"SORRY BUT MENU.MAKER CAN'T READ PASCAL TEXT FILES."04=10:"M$="NOVEMBER":1750M$="DECEMBER":1750826);"-";M$;" ";Ѡ,2));", ";"19";Р,2);" ";/П,2))=>13П,2))-12;џ,6);:1780$П,2))=0"12";џ,6);:ٟ;$П,2))=>12" PM-":" AM-" 1830WW=1530 =26:=211660,1670,1680,1690,1700,1710,1720,1730,1740^M$="JANUARY":1750hM$="FEBRUARY":1750rM$="MARCH":1750|M$="APRIL":1750M$="MAY":1750M$="JUNE":1750M$="JULY":1750M$="AUGUST":1750M$="SEPTEMBER":1750M$="OCTOBER":1750T 0")2070H540R\A$="RUNNING "+B$(I),16,B)f"79C";A$;:=0pB$(I),16,B) z::SEG=1".D1/SEG.T"t=+B$(I),16,B) yCT=CT+1~240:=24:=0:"@ ..... "DATE.TIME.LINE" ....JM=Ҡ,4,2))BTM1630,1640,1650,0=+IBOTM/2-.5):I=IBOTM:I/2=I/2)I=I-1 œ2120B=B$(I),16)," ")-1 B$(I),"BASIC 0")850B$(I),"TEXT 0")890 B$(I),"CAT 0")1140*B$(I),"FONT 0")18504B$(I),"FOTO 0")1930>B$(I),"PASTXB$(I);v:520: 500THPOS=4:I/2=I/2)I=I-1I=IBOTM THPOS=44:I/2<>I/2)I=I+1I2=-1:I=I-2:IBOTM<30THPOS=44I=IBOTM/2)*2:=+IBOTM/2)-1:CA)"PRINT.ALL": OA+P 3HA=(81+UCA)A=(81+LCA):::: OA+Q Quits 3IA=(83+LCA)A=(83+UCA)"PRINT.SHOW": OA+S 2JA=(68+LCA)A=(68+UCA)/Screen.Savers/HELLON=THPOS:B$(I);XA<8A>11540bA-7640,660,690,720l:=THPOS:>> ""*:<"">""""""""""""">>><2"<""">""" ""  ">"6**"""""&*2""""""""""""*,"" "" ">""""""""""""""**6"""""""> >>>xrL ==L: ,lCL <=L: <,n)LL8 L8 u:L8 ;)ߍ;j`; ;j`uBL8 uCL8 u)u;) u;L8    x) `(,  LuL-upp<`uqq=L: vuL L L #1:CY` 9C<m><=m@=>@?AL8 >m<>@m=@<=L8 <m>?=m@AL8 C9L8 ; ;k`;);k`,@`<,m p<L<`<p<`,ms<L=q=L: ,lXґȥӑ,10 h0  `,g0L  ҅ӥĥŰ+,0p 4 Ls  Ls i )"|tȌs|st HH` MjH,: <J h̰ <rh,oL`%CYgu9 Ln90$0%,7 ҥ L$0T,8OK50P;ҥ,8 L%\   8҅¥Ӆé҅L,5,6  & @jIH,5 p  He҅Ґhe…å逅h,23Lhʩd8,h)ec efeede`,5 H  h 4  `5!    4(P 4 4  `,g0L,10kH0 ԥ f0)ĭ9)9҅xh(ĥŐL i,1HȊ©L,52,9-P" a{) b) )ab)a a,h0& &+%a0 +hcefd(c,@cfabdf`cnx  (,4h`dd,9P"<:J H) +̰ H) +ʭcP h̰BTVSPLH   5"ʘ HH` (# (=  0`)aI88  >!SHOLES 1!1!2@23#3#4$4$5%5%6^67&7&8*8*9(9(0)0)-_-=+=+\|QWERTYUI OP[{]}`~`~ASDFGHJ K L ;:;:'"'"ZXCVBNM ,<,<.>.>/?/?d0hp00000>0# #0~$ <"<"""<< <"""<"><$""< """"  "" 6***""""""""""<""< :< $"""2,"""""**6"""""< >>> <Le Le ,g0L HH`! ( 9EKQWbmz`(" ((è%È`2ȭ3`1`d`c`+È`&È` & IMk`4`5`6`7`8`9`<ȭ=` & @jI`:ȭpȭqé,i0L È`,g HH`LL! l      5  Hdcefh&+si  M0   h) `(" (  (È& 8  `)2ȱÍ3`)1`Ɂ" (cefd`Hc HH`! (`ɖ" (èÈ``,t0L4 HH`L  d!  `ɖ" ( dÈ  ``,t0L4 d0Cս30. , V  @„ȄL5/((((PPPP @``` @@@@`xp<@ @ :H9H` (# ( -l..PcJt`,t$ ( t`tL4`,t0L4www """"""""33333333DDDDDDDDUUUUUUUUffffffffwwwwwwww(C) 1980 Apple Computer (+@EIR[ty} NQ9Copyright (C) 1983 Apple Computer, Inc. Graphics Driver..GRAFIX b """"""""33333333DDDDDDDDUUUUUUUUffffffffwwwww     ! ( 0 7 I N S _  . G R Y f {    ! $ 4 9 F I P S V \ a h m p s x |     ' + < ? D G N U f k p x ?BEJMRUX]`h  2;AGMS[fot|              . 3 6 9 < ? B E H N S V \ _ b w  KORY\aelpu !$(+.147<?BFILORUX]`finsw| !%*/369<+;CNU\eh "*-036<BLORX_fj &+38;?DGLTot <?BGLQgjox',/25:BG̑ʈ0 Ցʭr̈A萠L: ֦ڱΑ0Б֤ h L  p,:0 JfiΥiώJe΅Хiю@ B $p̑бʑΈ0 Б̱ΑʈeمΐeمАA萿 :  `ʝ"`t  !#%')L: 8p,:Jf׮@$PA B $P@/A'ʤ˅΄ϥ̤ͅЄ B $̑бʑΈ0Ƞ h L: $)טɀIim>ٮ@8pذ `$0"8,:Jک@ׅפ؈۩MjL,:08*Ȅ B ,:J}΅н(I I $0;P̑бʑΈ,:JՐrx 0, )ߍ:) J)*PR,T,V( : `,k<,: JI`I`<,:J̰`=m@>,:J}ʅ̽(I I `<Mj,:0pJՐ̑ʈ`pJհ0`ՑʭrpȐ`=m@< B h A$g " x) (,`% (gL,}0, `gé ĩ `:) j:;jN;~j;O,:0'???>>8?>p<<AAA@@8A@q==C)CB)B C}0 x) `(`hh% ( ΍ ύ逅Ñ}`` " ( ĩ~Íĩϭ & &υΠÑΈ~ F ~ҰةeÅÐн},,P,`,g$ ( efh) `xÙ+(`xÙ&(`)4`)5`)6`)7`)8`)9`,i0!M:0p ȱq L `" (~)y ~JJ* I `x|x|,,}P-X~ F }~L } `,`ʝ`))ժuvЭ H ʊJyjhz|ֆ׆ح)JfJf$PIJfש ʈ8 @ש wx LVخ ʊJJJ莟mwwxix 0ޤՐڢ,P<0 )ߍL- J,P,QJ,R,SJ,T,U,W`,t0L40 ( dȅɥŐ ĐL /47=G\x{~'+.149?CGIKMOQSUWY[]_acegikmoqsuwy{}J) ܭL FܪJJJJ)`'+9;=?ACEGINR\aejns~  #&).369<ADGJMP^g $*-06=HLORWcfloruzp Q%Q̑`pPIE1pΦ#$01ʐ1`JJJJ)`%υߥ`1(ȦJJJ`&&*`JJ` **&*&ߥ`J` ***`` ` Jjjߊ` ߊ`JfJfFߪ߆` `JfJfJfF`ߩ`$011̰JJJ LP \LD$7߭$PH8 nߩ nh ߍϭ - k, ϥ- kϱϮEϑʩ`P z  HH` k(h`$0#$E$0p Q%Qʑ`pPIE1p$E$0(L%τ`ϩE҅0Ȅ(fL% ('Άѽн`8Hٰ hIiHمh8Iif٤Φݰ>Jj8ۅe݅eޅ $  m`!J8݅ eۅ$  m` , V $צ!ϤҐ мφi`Jf`<,&ʰ,i8i#Hiihifʦʆi) v`i,ʐi,iPIIʥ)ifʦʆ̐pLj/Fϐ&Ȅ`'@τ`Fϐ@ E҅F8ئȢΆѽϽ`/epɀjff&ݥeepɀjffݠ %)  %)`%  0.)      0  ` ` @ ``8٨JJJ ) u˘ vͽʅ̆`8Hi #i,$0F y բӅLx  mӥmԐL] h `  )`%)8`)    H   ʥ)Ģ    H Ģ L E% %) L 8`ۅ&ۥe륅eٍeڍ808٥8٥ 8مڅ H , V Εm٭mڭ))njnjnjfjfjfj+mӥmԐ8L( Ӣ й` m j`Hآ Hӭԭ h h`8٭028ٍڍ0Z$eٍeڍm٥m8٥08ٍڍ`8٥058ٍڍ0ԭ V 8fxL@ ] I)!) g 80 J8}L y L 0yʽz0 y L7  Lh `*f*&*)` ϭPh0 йPL)`)L` L``  `L` H , 8 V ТΕLϦI ] +)J* g I`LL) @L) L8``Lթ`~L8L)  =H 'HH N M))Mhh0 }LO}~~Șݻ~`}}~L< L }ީ~` ɠɀ)ӮԮmwӥmxԐ mi` HHGH`  &%(-47=FMUX\_jmz  .169DWfy   % * > A H K Z v z }      % , 1 5 : = B K R Z _ b g n s x ~    ) . 6 = J P S X [    $ 3 : = F d  > B H M s `e|&+.QVYcjuy~':{ange those suggestions, for any file on either diskette: copy master-to-backup or vice versa, delete backup or master file, leave things as they are. The program then executes your wishes. DISK /// BACKUP requires a 256K Apple /// and an external diskette UWXY DISK /// BACKUP is an automatic backup utility for Apple /// diskettes. The program displays side-by-side directories of a master and a backup diskette. By comparing file dates, it suggests master files to be backed up. You then use keyboard arrows to ch WAP /// SIG PUBLIC DOMAIN LIBRARY 12022 Parklawn Drive Rockville, MD. 20852 (301)-984-0300 CATEGORY: Bloom Disks DISK ID#: 3BLM-26 BOOTABLE?: BootableEAD PASCAL TEXT FILES."04=10:"78C";"ANY KEY RETURNS TO THE MENU."!>G$:::".D1/MENU.MAKER",320R",220(204::"79A";""; 2D=1:F=1 <#4;a$ FD=D+1 P#5;a$ZD=60#5;12)dD=60D=1nF=F+1::d$;::Y=1100:Y x13402  CATCH PASCAL TEXT FILES 202 :F*=08:"78C";"SORRY BUT MENU.MAKER CAN'T R".D1/MENU.MAKER",220 d$="" A$="PRINTING "+B$(I),16,B)=01:=0::"80C";A$;:#3,B$(I),16,B)Z=1#3;b$:"78A";b$Z=Z+1:Z=18:1290 1260 #4,B$(I),16,B)#5,".PRINTER"+ž#4#5;12):::".D1/MENU.MAKE30C$="N"C$="n"1160;:=23:=0::"79C";"PRESS ANY KEY TO HALT LISTING": $1020.202 8::Z=1B::=23:=0::"79C";"WOULD YOU LIKE A PRINTED COPY?":1C$:C$<>"Y"C$<>"y"C$<>"N"C$<>"n"1170*C$="N"C$="n"QST79C";"PRESS ANY KEY TO HALT LISTING"::202 1020#2,B$(I),16,B)ž#242:::1160Z=1#2;A$:"78A";A$Z=Z+1:Z>1842:::Z=1980*:=23:=0::"79C";"CONTINUE...?":1C$:C$<>"Y"C$<>"y"C$<>"N"C$<>"n"10 MENU.MAKER TEXT MODULESEG=0"MENU.MAKER"890&*X=11000: TEXT SLOW-DOWN LOOP ,X.1,180,22:2,280,21:2,2380,23:z:A$="LISTING "+B$(I),16,B)$=01:=0::"80C";A$;::12)>=23:=0::"drive. Until now, backing up files on diskettes hasn't been easy. Unless you copied an entire volume. A volume copy may be inappropriate. You may want to keep a backup file, delete a file on the master instead of backing it up, or copy from the backup. Until now, you had to list each disk directory, compare the lists manually, then use the System Filer to do the copies and deletes -- one at a time. DISK /// BACKUP eliminates that bother. The program handles everything -- comparing disk catalogs, deciding o/((((PPPP @``` @@@@`xp<@ @ :H9H` (# ( -l..PcJt`,t$ ( t`tL4`,t0L4 HH`! (`ɖ" ( """"""""33333333DDDDDDDDUUUUUUUUffffffffwwwwwwww(C) 1980 Apple Computer147:=@CWZadkn9Copyright (C) 1983 Apple Computer, Inc. Graphics Driver..GRAFIX b """"""""33333333DDDDDDDDUUUUUUUUffffffffwwwwwwwwDINS^bkmoqy!$'*-036<?FKUn|  $)036=BEJQX]`ejorw "'.\pqnp aLm bLm cZ ) ` ) `x,X0R p)(`KO} #9<CHKjoz $*-fYuqgQ,V0L@VEPf>i\]M,j,qg$[HX ))hq mm0 stqs[L,j,XLl)`Z5L,lLp,VP VeLE,WWVfLEZZLpnl,Y0g,dP\,]0X]eLERl`)  __ ` ) (`^" ( Ù^ `ÍTȱÍU`n064e0[x R X([ `R )l) )g mmL)` mmL ),d-eYL 8fqn,S0L lHkH`! (rs`^" (x^ÈȌm(`TȭU` n  q `ȩ`,S0L HH`Lfh,V W ,W0x_)_ qnZ[oprsXY\]mKL `,S0LrEąĩEŅq,k0stH 8fqhq:,V0-,X0x R) X)(LW h,TULarȥȑ`,S0LoEąĩEŅ o`n L# HH` (# (ALS`,S$ ( M iR)QKL % "_TUkVW S`% (SLn Zx R)(Two D3Backup Program files. Self-Booting Pascal. ting Pascal. uld be copied to backup, and which files on the backup volume either (1) don't exist on the master or (2) are more recent than corresponding master files. Side One D3BACKUP.DOC :D3Backup Manual D3BACKUP.SOURCE :Source code for this program. Side n what to do with each file, and doing it. When you boot DISK /// BACKUP, it asks you to insert your master and backup volumes, then displays a side-by-side catalog of the disks. The program shows you which backup files are current, which master files shoÈ``,t0L4 HH`L  d!  `ɖ" ( dÈ  ``,t0L4 d0Cս30. , V  @„ȄL5`ʝ`))ժuvЭ H ʊJyjhz|ֆ׆ح)JfJf$PIJfש ʈ8 @ש wx LVخ ʊJJJ莟mwwxix'+9;=?ACEGINR\aejns~  #&).369<ADGJMP^g $*-06=HLORWcfloruz/47=G`JJJJ)`%υߥ`1(ȦJJJ`&&*`JJ` **&*&ߥ`J` ***`` ` Jjjߊ` ߊ`JfJfFߪ߆` `JfJfJfF`ߩ`$011̰JJJJ) ܭL FܪJJJJ)`$PH8 nߩ nh ߍϭ - k, ϥ- kϱϮEϑʩ`P z  HH` k(h`$0#$E$0p Q%Qʑ`pPIE1p$E$0p Q%Q̑`pPIE1pΦ#$01ʐ1 ('Άѽн`8Hٰ hIiHمh8Iif٤Φݰ>Jj8ۅe݅eޅ $  m`!J8݅ eۅ$  m` , V $צ! LP \LD$7߭&ʰ,i8i#Hiihifʦʆi) v`i,ʐi,iPIIʥ)ifʦʆ̐pLj/Fϐ&Ȅ`'@τ`Fϐ@ E҅F8ئȢΆѽϽ`/(L%τ`ϩE҅0Ȅ(fL%)  %)`%  0.)      0  ` ` @ ``8٨JJJ ) u˘ vͽʅ̆`8Hi #iϤҐ мφi`Jf`<,ӅLx  mӥmԐL] h `  )`%)8`)    H   ʥ)Ģ    H Ģ L E% %) L 8`ۅ&ۥeepɀjff&ݥeepɀjffݠ %٥8٥ 8مڅ H , V Εm٭mڭ))njnjnjfjfjfj+mӥmԐ8L( Ӣ ,$0F y  h h`8٭028ٍڍ0Z$eٍeڍm٥m8٥08ٍڍ`8٥058ٍڍ0ԭeٍeڍ808@ ] I)!) g 80 J8}L y L 0yʽz0 y L7  Lh `*f*&*)` ` m j`Hآ Hӭԭ` L``  `L` H , 8 V ТΕLϦI ] +)J* g I V 8fxLL) L8``Lթ`~L8L)  =H 'HH N M))Mhh0 ϭPh0 йPL)`)LL }ީ~` ɠɀ)ӮԮmwӥmxԐ mi` HHGH`  &`LL) @ 0ޤՐڢ,P<0 )ߍL- J,P,QJ,R,SJ,T,U,W`,t0L40 ( dȅɥŐ ĐL  }LO}~~Șݻ~`}}~L< \x{~'+.149?CGIKMOQSUWY[]_acegikmoqsuwy{}%(-47=FMUX\_jmz  .169DWfy   % * > A H K Z v z }      % , 1 5 : = B K R Z _ b g n s x ~    ) . 6 = J P S X [ OERRLIERKBEOTIMEDATEPREFIXEXFNEXFN%OUTREINDENAAAAAAAPOHOMA SUB$OFTRACNOTRACNORMAINVERSSCALERESUMALEGOTIRESTORSWAGOSURETURRESTOOALOASAVDELETRURENAMLOCUNLOCCREATEXECHAIAAACATALOAADATIMAGCADEAPRIssssssssss\3!z~IssssssssssssIG%ӓ,ssևwn7}|tttUUZ{fzxxˆU膅[L<^ENFONEXINPUOUTPUDIREAWRITOPECLOSATEXABYAAAAAWINDOINVOKPERFORAAFRHPOVP̠Ώ h:gpOn[n٧s]ds3issssssss0b>&dsjs|T}|s[lnopqrstuvwxyz{|}~ŭ᭭򭭪𭭠򠭠頭퀠Šӳ頠𠠀𠠠堠젭ӠΠSOS NTRPRHeLZĠР쁭堠堠ՠP򠭠έ魭MANY THANKS TO AL BLOOM FOR HIS MANY CONTRIBUTIONS AND HELP TO THE /// SIG. $(/4:?IXad#ˆ̭U)? VW @ ?ddxtB˩Eʍ@Xx ,P Eʍ(itiBX`,A0Lp HH`! (```,A0Lp HH`L%&S```lBcguwy{} vHuH` (# (jjA`,A$ (BC x) @( A`% (ALpx)`(BC `,A0Lp& (,A0Lp9 æĬSɀ֙TȌS 9S`YX`X-,    $ 3 : = F d  > B H M s `e|&+.QVYcjuy~':{(Z.AUDIO C(C) 1980 by Apple Computer Inc.DNDEELSCONLISCLEAGENETABTSPCUSINTHEAMOSTEANOEXTENSIODIAFNOAAAAAAAAAAAAAASGNINTABSATYPRECAAAAAAAAAAPDLBUTTONSQRRNDLOGEXPCOSSINTANATNAAAAAAAAAAAASTR$HEX$CHR$LENVALASCTENAACONVCONV&CONV$CONV%LEFT$RIGHT$MID$INSTR>=<^/*-+NEXT WITHOUT FOSYNTARETURN WITHOUT GOSUOUT OF DATILLEGAL QUANTITOVERFLOOUT OF MEMORUNDEF'D STATEMENBAD SUBSCRIPRANGINVOKSTACK OVERFLOREDIM'D ARRADIVISION BY ZERILLEGAL DIRECTYPE MISMATh$PLh wlȱȱ%$LWH mh x~  m#W", mȱ28eLeji`Lwl mȱ"Ɂɂ ȱ :, iTjj ȱiVjj8逪XW0 Vf0WHW$ 0X: h ,@dd )e dʙdH &eh(dL ddک,ddLd:e``eLeHELLO ue 5eLse6e:7ee8ee:e`EAd j @a(% -, bLs j {ghhL<^gHhHhH , - b j$% @ag5h6h6hhhhh8g5h6h 悅`6 "]La ud `L  d.CONSOLE[[ TdSdddddd0 ddddd`dd A 6 s e 9c()' 9cKHLI jLdj89弅:彬: 悅`H hɝɞɜ)`dd  6芅 e ()'` e'()HKIL 9cL>hL<^) i!Ls j @aLK$L% :: 悅 lc!)` +b` +b` sL :b#`L,H s h ऊL(,L8f` A KL jLdjOPPKLL h AKL` Ѽ   (`H shLs Aji!S)Lt`SSS`L` z :0.`9::hhgg.%g& $gegަhH逪hhʰ` ҥ [ aLT ҥIJJABB=>>;<<?@@T ě hhhHH  `89$ 0~!L`!sm?iٰcL`S )!a{)Qi ڐ߽S) -ai) -aɢ ɣɍж$HS -ahʥ0SSȩ5%"/װ&hԐɈf0ɔĐ 8,f 8f L_ʅSS=ȄL`ȱi8eiidHddhd) _ ƢLh _L>h jhP _S @a-Qggeg5hih 6i6 "]S" ]$%SSSg a aL^ S S`La8 SiUjjS):,$f 0$ p fHhH_HcH uhch_hhhfhi0hhhB B A` ֥'( )&񦕤LNKM$Lb ě $m wl "m6X6+5 56ɀ56H $mhɀ(Z)& mL k~ wlL ͝dL Nsd# wl^_ ꂅ__hg^`8 悕`gHhHhH5?6@6@*5g5666gҦhhhhhhhhg:e:;e; ;m;`@c@c?be^@e@ _m__^ \Lx] i6g55``BY BSAMHH H] LPL(\)&P ěj9ȑ9ȑ99i=:i: >i>`Ɂ7XWWXjnXWi` ]?@@bgchch )^ ]b ]b^b^L\b8g+H__^8_ABB 9::)ѭ [ I[ aυ婶ZeLLL^$%Lae LGidFddddddd.ddddddddd ɕdˏd`Ls  Apple Business BASIC v1.23 - Copyright Apple Computer, 1980-83 CTERESOURCE UNAVAILABLDIRECTORY FULDUPLICATE VOLUM ERROR Please Press SPACE BAR IN PROGRAM INTERRUPTED%&'(%+.@C$DE FG!H"I'MN#PQRTW(X潭`: 808`:dd@՚H Z#IJJCSTRING TOO LONFORMULA TOO COMPLECAN'T CONTINUUNDEF'D FUNCTIOVARIABLSOS CALFILES BUSNOT SOI/FILE TOO LARGWRITE PROTECDISK SWITCHEBAD PATFILE NOT FOUNPATH NOT FOUNVOLUME NOT FOUNDUPLICATE FILDISK FULFILE LOCKEFILE NOT OPEDEVICE DISCONNEm Vf0 mLf) mWA 0 -a mL8fW;8<< 悕` 6kLU*i kXX 4XLy \\'_ch_chbi^g \ihh ] Qp aj ih `p b iq bqn %jjg56Ly { b bq | XHWHHHֺ iLOPP$pX0S&ȱhȱKȱLe潥ɂ逅$L# $mKL x~ m khLgLsLc h5逢)&a TH THLgL6k8:9: STT`)ɀLK$Lb8gLOPPKLMNhhXE )s LvɁ >H>H= x\L|F )XHABB8 __^hHI8e^ @1 @+?%GHHHIJJih BABGHh`$  ě u Дs IJJ^__Lveȱeȱe `LćHƽ Ƽh`$ lȱlLL{ɝɍLɎСL s HI s shmHmHlHHɦ# shmHmHlHH , hHLt  ,, shTTLui ui,L3$0 |Lu xijk6kxyy xxy6i L[ s r$PLsi,L3-hLs L*tɘcɭ_ TTLdd`jk8L|L3L3TL3,L3i LL r$PLLBLsș Ȅ ( qƚƚ` s s),;,=,#,(,,ѼLL<^L<^ llmm$P$?TUJ)TU  ' Lsi imLqLsh E0`H ty ))ELyq  8 $0!PizEn{dUeUi hLqLs `wLr !L2 {}$ 0`QɀX zLs.+"2mXm tL qXXW zzEn{i x }H$ ]kh8 )KLe9e:: }Lgi , p s$8$0p`PL<^Յ H s r ɀ ȱX Hih0 & ?<I?iE W Lq s )L<^ȱQȱȅR dj sLHoUVV$ LhU Lp$ LL<^opL^```?EXTRA IGNORED?REENTER $0pL,`LgXW ׫ k*iXX 4X \\L<^Xii7 { n k$ |WlXVVE$ P% eT{||Hd ̐h p IkLo00$0 L>o "m nV dj$D$ P 膼Lo$0",i [ kLoHSHhp< {}$ p0H 07h ]k ,LmUVV `p F sLn 2 ukLoF вLm jȪЖ LL<^~p l nhhLgOPP` Add# 6d s S SS@Ln A " r ,; s lLn#f  ;П ⭩,SLn "mʆ,S _S% nLh "mL_T ST#L(, U VV ׫$ 0  QpU= d hkddhe##5ddˏdd?Ll ,?#$04dHHd = d hkddˡddhhd`LsL#&F  ; s b 0` L+l$ Nsd#Lzm566ȱ5Ll H# wl m#͉LchL$m QRKLLsh$0LU$^`=8WW>X> 悅XXXL:^ g`L<^ l Jj bx bp,_;Ll  ~q$0P oՅ5R66R l ~ L%l $m0 =k $m#`$L#i)8#Ll  s s( L7bʊ# L-l m hxd5d$0H h`L^bLb$%/%5$ &5 &5e$$5e%%$&%$e$% Lk ׫ sHH ~qLPkHHh$0'ph | ZlWȥmW`L$|hXWXL-hm lmmLkl VYZZ{|| w ᐥlmmYZZ LxWXX ox ExYW# kXX 4=^W^0A, 9:: Ga.ghh 悅` A` \\ɾ,L<^hhZkKhLhhhe9e:: mLg jei `Ls j:,"hhhhLgɜEɝDɞLb Hɾɺдmhɾ Qp aj pi `p j` jLi j,d wlOZL^L^-L(dPL<^OPMNKLhhLg` Ls ҥ?ieCiLa,  aFL s a iLg ]hhh5h689H: H:HLHKHH6H5HHH` ui` pi` Qp j pi `p i` j jK$L%8eȢ_B_B`)&N> ȱI8gJJ hhge ghh f feLVt~w/z*|cYX ~uƀ1rP aziP | |iɈ { T}i8Huiiu x BU 瀩{h z` |] az 뀩]Laz | i8fe.șR0șRmymlylkykjyj00ڊIi i/ȄȪ)Re.șRI)ЪR0.ȩ+f.8f-RER/8 i:RRRRRR`y`'d |Ģ { &{f o0`LB ` H$ge &{h 80 '~L}H |h |zEn{iLxf d$h0Ly ef q80fL}COt#t$JZ mLKjk8 | ~Lm ^|-$nșRnȩ0iL f~ azea~ } \~ } &{e B{e yx %}ei0nihoi8傐IL|`7 z!L|iD8$n yiLyn)FjjjLyiɠ %}nnI*imLyjklm` s e-o+ smo..IE)2s S -+fh r$h8fL}fg s$gPf8ef B{f65m5l5k5n j5i`d,]WXX566 |m5 ^|l5k5n %j5i5` |m l)m |m`znth` |ht`i  y my`i n*` |jkjI*mlinLyFn`nEz0ʢiH xv5ui`uei0,iiL0y{n`nI0hhL,yLy |i{ xi` |={{ {LZ{ zL{ |8ii zivjwk xlym* 蕁24(y&x&w&v0⨥ymyxlxwkwvjvL{@jjj)(L{L<^~jklmL y56y^Vy dv88; 54541r |LiHi z xz U{y xy рz xh '~z zLz z~ zm zl zk zj zL{LyJ eyexew~ev~f~ffffJ`5665y5x5w5zEn{z lkj |yjJkjlkmlmi in`emeymlexlkewkjevjLkyi&m&l&k&j8iIiii9fjfkflfmf`nIngjIjgIm lkj`L<^}i0vvvvvj`Lu 1eL5665`iɀ*iH i  @8 ei $ tutt tj ȡhn` t` 0RN0R 0R$n-RRR`i` p`5665i`$0BP?iH i hLt $mlmkljkij8ihn`L,$0DpA q enHi80 @Lyu \ % @u ćh `&m&l&k&j`2L0 և yxLT}$0pLI oբRLi `u LLi u Lui0 ܆ چ,,% п 擩lm0UVUO / +'L U)łiV VL LI 8U 7ȱ7 UU ЯUVULU7V8 p L LZ U qUU qUH85h688V77U U 5qUWȥ6qUX7qWWȥ8qWW ٥IiV) V LVU?e8V je?e>e8U>e5V?e665e=e@eee8 hx57 xLCx8I77JJ8 88` H dhjL YYHH dYZZ oxhhe5566ɂ逅66 wZZY L YIL=m ) s  ʊHYImm shhhhYhZhZHHE` 3YZZ xLCxl5Ym6Z78ߠȘH yxy hL3 j kqHHHH s H , ,H s s ~qhh 1 lhhXhXhWWȱW7ȱW8 eLNLXZWX ` GGH HlHmHmH khmhmhlh hk8j7k8Lޒ e7788IjJkJk )lmm'&`UR{R||L̐: / cRRȹRRȥ Rл s `Lsh sh5lh6mh6mhxhyhy x x Qȱx7ȱx88 Ƃ 7e7888ł75 楽HHȱȱ6H6H5H s =к bqhhh Lshhhh` ~R/mZlmYZ PujHkki^^`H"h{||kjkȱ{ "ie{||  V{|56|6 w&5L<^i8e` ě u8A?pB@B@ )onL܇jkL| Nsdȩ8 NsdL2Lа,L<^ A s ׫ g iq s= sXHXHWHHHH ajL? b rLiq HHH s iqhhh5ȱ6ȱLI65 g5H6 2|Hgȑgʆ5a g5ȑgȥg <^^^__ɂ逅____<;إy6 hlhm^Ȋ^LL:^ȥ5^H^h ͎el5emȆ6п  ͎e^e__ iLZe *& eegggegȱgehh Ľ ,L<^  8` ^LQ ŠhhL6 $P 訽5 ͎56ۥ 8ee L:^?be^@ce@c __^_ \__^;<<6  $Phihi^Ȋ^6h656H |mHlHkHjHiHl5 8eeghh^__` HHH H bqh hhhn0iɐ1 }L yxL%}\i FHHHHH 6hhhHHlm ,҄ shh)>=>hgh<<;[a{p ;<<ccb? @c@ube.a{bb,\(eb cc`ebcA[8饰 a{8`8\e@@He? ]@@?hbbb0 ea ȑbc8L@ @@h5H ?5^6_6_hhXhXhWLk ? % ?Џ`5566` xe5566ɂ66` s p `  zLseff z.!'$ iߪ$ 0 H8eAi\h$ P8 (Lt$ 0}5}} ,kk} , kklm Lٓ[ 80@ 6 2`  dkH) ojhJJJJ ojL 0:i`L<^ jHHHHHH s jhLyqhhh6h6h555_ȱ5VHHHH %L/5H6H6H7V8U #   785U6VLΔU7e778ҥU^V_bcF_hcCgDhebbc \^__`U8傅UV` |UȱU` L<^ |UUƜ0ƛ ӗWqeWȱWqei W` |8UUWȥVUX`UeUV` 痠U` hh R LsL  z (L[ Rީ  @Y%(&:$LU s և ^|iHn %jHkHlHK s n ZlHmH5 s iH jHH楩e ) ,LsLR e  kLv;e je vk;ek Lje s ʊ0  ek;e`L HIJh*;e) H jehe;eed?eehi?e ueL5e qrL,op ɩ`et?ek;e`hZ L<^hZL<^L=ee>e ?e`opqrst !e5ehe?eLje LjeR=89R>:>:iR:RiRRiRL`8(RR(`EeFe  s bq Vml0L dMeL` bՍe :RRRiRȐȰRe9Re: J 2IHJh*=>> 95:6:6R L1 1Lԫ`L:^  aFL^R, ue 5eLڭR7>e?e5e?eJeKeLje֩ u>e?eՍ "] a a$% iLg֢   sLj$%`8f  a e ; ` s ɩ` YLILcopL7 z0xH ׫$0_ ;h8fH`aai shH2 h zJJJJf Ik ɩ` ̬ t os YLA ևLLק jWXX` ׫$`pd8isŠt`dyoopd8ip`J uv`&&&8孪孪宐橈`! @ uA?B@B 悅@=g>h>h ]=i>j>k a=g8i>hj>h 悅ki=5j>6k6k;el)@7Me0u(> ƬƫHH ,hohp` ɩCe0R`ȹR`ee?e@e ue 5e T L=e;e`Lso`n}pm aa`dyoh`L)i   HH `TH..TH..TH..THATS ALL, FOLKS!R`RT RT`#RT SOS KRNLb.D1/SOS.INTERPŠ̠Š.D1/SOS.DRIVERР頞 0 ) (lH'&3&'&#e'#%e'%'&"$"$#%'#%h`$e`î** }*`o^`on 8 JJAj@` *?($`ΠņɠŠ堠РѠ͠஠әƆH v?c,,,,h߈ߢ~))`3PLLP*%(i&`Ѕ񩏍E H pph`XǠĠӠ!((ͽϠРРSOS NTRPSOS DRVR(.D1(YYYYMMDDWHHMMSSMMM̱忠ΠͽŠ堠Р͠Ю̠Ɔx߭J ʈc(()o/ e/''ʈ((''()(1i / e/''ʈ((''((''((''' ('`ŠDAY, DD-MON-YY HH:MMSUNMONTUEWEDTHUFRISATJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECԠŠР@L&I/O ERRORINTERPRETER FILE NOT FOUNDINVALID INTERPRETER FILEINCOMPATIBLE INTERPRETERDRIVER FILE NOT FOUNDINVALID DRIVER FILEDRIVER FILE TOO LARGEROM ERROR: PLEASE NOTIFY YOUR DEALERTOO MANY DEVICESTOO MANY BLOCK DEVICESEMPTY DRIVER FILE '(i%%%h}%%`8 ȥ!8 !)"qȥ#q#e$ȱe%L)%`@(((( % %`((((࠰$(ɠH(@(h((((@(`%z %% %~(A{(L%`.8(.Je.&ʈ.s(1 6$P8"ȥ#L1$8"ȥ#(ϸ`"##L]$"qȥ#q0,$p)@"q"ȩq"8`*$% $% 8% $L$* $8%8 $`8 &'$% 8&$'% 8$%%`H   q ȥ q Hi hi 1  % H H ȱ h h % $$ 0 e e H i hi âz %` 1 8`    # &ȱ ' # i" i# # #`8 ȥ H h `8 6$P`8"#%#%"$w"$#%"`荚ٍ荺 荚`荺``` D ( )  * ) 4* * h* ))` L% q ȥ q Hi hi  i" i# #% $ȱ %ȱ &ȱ '`<!((g %(r(z(q( %y(i(0z %"#$ %&' $"#$%&'   `%$%ɠ%* " ~#C #p $ %*0"#)#)i $"% * %*  L! {" j% %ƌ(X#"$% "$ #%%& '   ` {" & ɠ% %)  !( (" %(r(z(q( %y(a(0: %   "$%&e$'e% R % <%e,ȥ,*,- y,,,-,,,ȱ,,- yL+,ȑ,` 2"p-,-L(Ġ %>,i-i8, ȱ,%,W,pp ڠ %p`l  " ) i LLLRLLLLL*LLLLLhh`LLL`SOS 1.3 01-NOV-82(C) 1980, 1982 BY APPLE COMPUTER INC. ) `G0 `8`HiHiH ihhȱh`86)IH)heuQɸ` ` W` ] %饚0` W` ߰4`)|E8ȍ۱Ǎ X̰% & !J8` *LĢ `8 iۥƍۥǍ`ۅ %  6 )Ѱ Ѱ` 𝭧e ǐ bǰL*ۈ5ȱ۠ƍȱǍ X̐ H h1  /ݐE`ۈۅ ۅ 8ƭ X̐`LLŠǠ  ݭv̅w̅ ðzv̍ŭw̍ŭƭ ­ōō T̰]ŅƮņ X̠8iȱiiȱi ṰŅǭŅ XLōۭ۩ۅ ȱ8D`F`8eYƍťǍŠ)͠ Wٍۭۅ5ۅƭۅ X̰ ìۈۑ T̰ۅƭۅ X̰ۙ%ۍ" T`K8`)` İ ۱ۈ` ưW/ۈęۈЍ۩@` 8 MƐ  5 Q8`LŅ ۅ ۩ۍۅ Lɰ ʰۅۄÍÍۙ'Ù ۍ*ۨ  Ѝ۹ۙ8v- ðJ ¥ ð, ðLO ʰƥLT`'  mې浰``8 8 nʰ0 ̰+泱Ƴ m° x̰ ̐8` m° x̰8 ۢ8 ˰y ` ¥ nʰ泱Ƴ T̰#泪 Ѳ *Ƴ ` L:Ϡ`泑Ƴ` LaĥH8`JȘ I8`  S`ۈۥۥ۩Íۭۍۭۍ հL¢H8`Jj Ȅ ۍۆeۅiۅ Lɰ ʰWۅۄ ¦J> ɩE` eĐL Ȑ 15WL QL5WW{5 ې'`,55 ې'` ݠ B1 ȩȑ Lɦ8`5  @ R㥶i ` İG8`F`X8``éۅĩ >` T֩xxMH]@ Kۅ5H ɐE$ eİ Ȱ h`h`8`W h8`hR`hLҿ i x +ۅ5ۅ6 ǰ `E8<W`­ `0XLۅ5` ռ``ߤeI`IiţO`Ȯʆ/ )󘑡`()0zq 滅ѺY Ueۅ5Ѻ Ѻ  Qܐ'`i ҩ *C8/y.i/ ȑ  © $ E7<3W`ȽLֽȄ @8`R ) [)_[AͰ")[)_[A:0/.ЩȑΘ8e * ȩ`Loü 7)?۽۩ W٠Յ<ōōř ռV7 uM78 V榠=ü#)@5 ɐ /ݐE ) .) @L `lqhٯ޿=ϓTXIֲ̛̐~ؠIJK,-NOPQ0vt `` LLɠ8`ΛLL渠`e`M) `ۅH)Ѱ%}ʈh Qܐ'``hi ` p6۽ʹZ5 HȐ/i i `гW8`0( ɐ Ȱ ʮ6E`5 խ ɐ ޢ ȰLǽi `< Ȱ+<#5 ې'` ɐ /ݐE`W8`R` 5&i ` Ȱ 0i `<8> ȐT eİF cȰB)Hh5 ˭)*ȑƑȥǑ'(ȑ`L)ɭ)Ѷ*i ڥ(8` ְ( ȱ5 HȦ)`Lxץ: ש ְ⥺i ꥻ(8`Lx Lxש u )۠0)p խ.8`)@ ϰ) ϰۈۅƭۅǭۅ5 X̰ *ƭ۬͵̶L  ΐ` Wհ> H۪ȱHۑhƳh sϰq ` ʰiȱi `)5©éՅĩ5 }JJ+`.`8`ɂ )`@ ש ְO ֤FHۑۑh8`P) հ Wհҥ,J+j泭۪ƳۑȊ ) ~ fPL ͊.>.ʱ+,EP!.E.Lw+,,ӄ*- P*e (` հB հ5 Wհ0,J۪泭ۑƳ sϰ(` L Ͱ2 ~ P kҐ#L8 T 2ΠHHȑhhȑ`Ld )N8` xհ*eȱ+eȱ,i۠Ѻ۹ۑ񥤅- ť.Lcԥ.La Ͱ$)rJ Lɰ )# Ԑ) ͰU..++,,IJ/ ӥ-.?Цե,J+jѲ4Ƴǥ4聠 H hH kh8`8-ȥ.L 8*Ʊ )8 0*-`.G.ʱ*+,EP'.E.LұE0+,,ӄ*p-e  )LBѠٳ )8`i (` )N8`*eȱ+eȱ,i۠Ѻ*ȱ+L - ť.Lkҥ. ՅL ͐Ld ~ pа.J/)@߅4N8`) ))УJ8` ۑȭۑǠۑۑȭۑ($S8`O8` "` / 򑺠+* ͐H h8` ΰi `()  *ǵ յý5Ņ4gȩυɩč5 iψ }.8` iϙLIѠ ˢ L΢ ΰ LϠ ˢ ΰ1` Đ@ АP8`B8`ۑJJJJ -ѥ +jѲ84ƳJJ 2ΐ3泑ƳLTΩ潑ƽ`ƱƳ ΰ( {Π۵*+)e`8`)` J J + ΰ" 0 ΰ 🱼ѼL8`ǩ Ϡ` ϰ ƑȥǑ` Ѻе*`)ȥ+8ۍې  ,ѺLTΠ"LΠ5 խ ɐ /ݐE`C8`)@ ϰa)ۥ,8ېu+J,\ ȱLJΠ) ϰ'#,J(] { ΰ ƑȥǑ.8` { ΰ,JѲ ƳL΅ƱƳ ΰҥ,J0`#$"0#`!qȱi 5H5Ƶ ǽ jh5`L2̩ƍv̥Ǎw̩ÎL%ϠƄǥLj̩۬L~̠HHh` ̐`*ѺG0?M`)J"u-- M8`۬` # ː`  = O̰)= I`JJJJѶQi Lˢ  0 ̐ `"L˦ `H8`8$$"$= O̰=`$0`#$"0`$` H hQ)fʅ F jF jF jF &!  eװ*  ̰F湥 ƹ`Z8`@  ʰ泭ۑƳ ʐ` ʐ` ˰ ƹ Wː`ۘ . . .۪8*JۦȱѶ"` ɰ Ȑ`E`Ɔ X̐8`>>5Ѷ Qܩ<`>`\ʊJJJJ ۍ۩  ˰Fȱ X̰6 0 Lɠ 0ۑۑ8ȱ`H8` ɹ $  8JJJJ8 ` ۅƄ X Ġȱ۠ ȍ۱۠ ۭ) ۍ ð*)#  O̰``)(`N8` ) xհۈ ̰آ*գ  Ͱ ݢգ LvL{ؠ; ˦,+* ʈJj =ؠ yiȩ`y4泱ƳHhz ʠiȱizLA`L;ؠ"  `1` Đ7@8V۩ Lɠ۪8ۊ۠X)JJJp8**-p hhJJJJ 00) 0`ǀЀOHH p0%Px0pNp(PhhQL(p8**-phh SU  U.ST  UOSQ R 窭 JJҘ)e}ҭ e8ЅЩѩӠEӅ ЭHH p0Hppxpppp( ̍pJJ ̍phh`HH p0Ex0pp(0 (   `x )HH8(=&(+ʈ&ਹ''&&hh(` * @ HH` 2``ӠР    0) ȑȱȱȱ008 8hhh H(`x )HH'Ƚ!88x , ,,(`," , *)` `߭lߩ * xLx @h hhh ,0)ߨ)Ah&'0HHHH xhhhh ,0)ߍLLhhh@)&&&(&('+*H)H(h)H@x )HH30.0\-JM-, J3,e$,d,,  * *l߅߅H ߅ \xi ߅LHHH *ح)0 D) HHHH,, ߩ0  xLߍ󠠩à٠΀ƉŠŠӠҠȠHHH *ح)0 D) HHHH,, ߘ)@ *)X  xI)}h)L, L )ڠ) w߭)Ů􅮈 ߠ'x)) J,QJ,SJ,U,P,W(`)(()  8)j`J j߅`0X ٠͠堘ӠȠŠ=`Insert volume: Τ in device: 蠠ɠ then press the ALPHA LOCK key twicex)_ @,P,R,T,V) )) `)8( ߠ',@ ߠ0  '葺 ݰL`5`i 祻(8`2ޝ51©ޅéąŅƍ >ϩ 1ޠ== f ɰ`ޭ`5=(5= i Х(`=H hDC5 L3ܵ ɐ /ݐ 8`5 ˥JJJJ8 H h ` ܠ825H h5 ɐ /ݐ 8`Hh ܥ5 `ɥܥܥܥܥ5`܅܅܅܅܅5`( ݰ)Ѻ ݰL ݰ泱Ƴ ʰȭۮ ʰͩΪΩۦ eװqȭqLJ  ˰Aۅƭۅ X̰2%&N  ʰƭ X̐`Ӏ堁ӠҠՈ՘̠ƠŠӠ̠ɤӮȪŅ͠Ϊ ܆5 HȰۈ)ۅƭۅ X̰ 3ڰLÍLT̥L㼠  ʰ` İK ХP8` LɐH80)N  հ)@LO ˰)0 ̐` M ­۠泭ۑƳѲƱƳ X̰ RڰäJۑĥ` İo!)N8`WپX0 ĥLä X0 ĥLà !"#$ Đ2@H AڰCŰrP` 3ڰ(` AڰѶ? İG8`Fە1 ռ İ ЩP߭)@N8`1@8` Aڰ񈱴`HJJJJh)y` (2`]PU]]UPPX0 0 PPXPP  į󠠩ҙ̙ɠΠɊՐӠӢ̢ՠҠŠԠҚРĠ鱃ԠȠࠠLQ  * WHHH>%H H @`)h8`  HШБˆeЅА SYSTEM FAILURE = $hh8`hhhxآY_Z@tPRVT,p S JJJJ ) ʍL@ i0i6`îӉ͠堧ǥӥ``HhHy)(h`H` 0L?i `h` `` `x)( 8 `jjJJԥ)եӬɂ )Ӆ҅`  `H0Xh`Π'à̠ȈL` 8`څ  Lk%  Lk8Lu텚8嚅 L L Ld V ``  h` ک V `ۅץ  VLFx) ( :` H ) L  .P'pб0 &L:L5'8+8`0Fܢ` ř,Ř 0 8f)J ӭƅХDžѥL1LUȑ  i ߩLL )  札)  ҩLL` **éL0;` H ) 4 )ߍ) hjjjjۥ0CF = -$(L !LLL&L L-LJ٥eƦ ,L  # ` (L.L…ҥÅγ`%!^0 ^)@`a R =` *^)ـooL]^)?i |TU QTU]qUoqTITsUsprRprqs]ToUXa` RL=Xa` R` *R`abRcdTefVghXijSdfhj RR`^0U ` 0 ʠ0 8 `ůàՠԠàࠝӢӠ ȠDž̖͌͊頀ϐωŠŠӠҠȠ1 o O^Bz numbers, this program will permit a screen text printout whenever a keyboard input is allowed. Use the KEYPAD NUMBERS for this command. You will see a letter at the upper right screen position indicating your selection. Except for programs which have redefined the use of the keypaden to your printer. Use Control-1 to request screen text printout. Control-2 will toggle from normal to condensed size print. (if you have an Apple DMP) A QUICK NOTE: Included with your SOS.Driver file is the Attach.Driver. An explanation of how to use it follows: The "ATTACH" Driver will let you send a copy of what you see on the scre  )* i LiHh`PQPQ>P Q,PQ"PɀQ@PAQ`8`nɀ<)nopoLpp` 0h8蘠fȊf` ab 1abo)abaݰb L9c`` a N0Ioa0H ha`pLopna n`  3ɠ/8 L %iLɠ8逨J Hh $`b >_-%^%p_^^_ab"08^c_L8^c_L8^c_L8^c_ȑcc\] ab^_ ``aV R0M bba dda `Q8STRQ ST`c\ȱc]a  b 5DU e\^e]_ ^_ ^_LH8\^]_?Je\^e]_,78\^]_ ^ݰ_ ^_LH^_ $bL@A^_aoQ*@A RQL@A `T8`RLSJTKQHIQiHiIKNJ)M8逅OPOPHMIN'a MHNILHOIPaOHPI8JHFKIGFGaHMINNMʆSTL8HSITQQSTde0f`   cCȱcD C Ea  UV 1 ELUFVG FUUCVDեYCWZDXWXCUDV[ v`b0WXYZiUcȥVcWX eeYZ ggE` @SATRDžŠƠŚ̮ÎȠ Ӡ̠Ӡ` LL#L/LL'Lgab `abBcd cdBrcadbho:ab.cݰdDcݰd8abҊ v+abc ger; $dc_max:integer; $dc_min:integer; $dc_return:integer; $dir_entry:integer; $dir_found:boolean; $dc_volname:array[1..2] of string15; $dc_d1d2:integer; $i,j:integer; $current_level:integer; $wk_string:string; $wk_char:char; $fatal_error:boole packed array[1..2] of string15; 'level: integer; 'link: integer; 'parent: integer; 'present: packed array[1..2] of boolean; 'blocks: packed array[1..2] of integer; 'status: integer; 'end; $dc_index:inte$Block_buf:PACKED ARRAY[0..511] OF 0..255; $Type_file:ARRAY[0..27] OF STRING[ 6]; $Directory:Dir_List; $mod_string:string15;{YY/MM/DD HH:MM} $dc:packed array[0..250] of packed record 'ftype: integer; 'fname: string15; 'mod_date: FILE; $Infile1:FILE; $Infile2:FILE; $Outfile:FILE; $Pathname:string; $Path_1:string; $Path_2:string; $d1_files:integer; $d2_files:integer; $free_blks:array[1..2] of integer; $File_count,Count :integer; e1:INTEGER; 4F_status:0..255; 4Waste2:INTEGER; 4Mod_date:Date_rec; 4Mod_time:Time_rec; 4Dir_start:INTEGER 2END; %Dir_List =RECORD 3Last_Next:Point; 3Root:Root_Entry; 3Files:PACKED ARRAY[0..12] OF File_Entry 1END; %ft= file; % VAR Infile:map_loc:INTEGER; 4Blks_on_disk:INTEGER 2END; %File_Entry=RECORD 4Len:Lgth_rec; 4Name:String15; 4F_type:Filekind; 4Start_blk:INTEGER; 4Num_blks:INTEGER; 4Num_bytes:PACKED ARRAY[0..2] OF 0..255; 4Create_date:Date_rec; 4Create_time:Time_rec; 4Wast4Byte_per_entry:0..255; 4block_entries:0..255 2END; %Root_Entry=RECORD 4Len:Lgth_rec; 4Name:String15; 4Waste1:Filler1; 4Create_date:Date_rec; 4Create_time:Time_rec; 4Vol:0..255; 4Waste2:Filler2; 4Entry:Entry_info; 4Files_on_dir:INTEGER; 4Bit_ate_rec=PACKED RECORD 2Day:0..31; 2Month:0..12; 2Year:0..99 0END; %Time_rec=PACKED RECORD 2Minute:0..255; 2Hour:0..31; 2Filler:0..7 0END; %Filler2=PACKED RECORD 2w1D:0..255; 2w1E:0..255 0END; %Entry_info=PACKED RECORD ]; # Filekind=(Unknown,Badfile,Codefile,Textfile,Asciifile,Datafile, 1Binary,Fontfile,Fotofile,Basicprog,Basicdata,WPtext, 1Sosfile,F_type13,F_type14,Sos_directory); %Filler1 =PACKED RECORD 2w10,w11,w12,w13:0..255; 2w14,w15,w16,w17:0..255 0END; %D format a smidge. } 3{Maint. 03-10/87 AMB Handle "unknown" file types. } 3 uses sosio,plutil;  TYPE Point=RECORD -Last_blk:INTEGER; -Next_blk:INTEGER +END; %Lgth_rec=PACKED RECORD 2Len:0..15; 2Typ:0..15 0END; %String15=STRING[15{$list}  program D3BACKUP; {Backup diskette volumes on an Apple /// AMB 04/16/84} 3{Modified 05-23-84 AMB Don't mess with file type. It can } 3{ change around quite a bit. } 3{Modified 06-09-84 AMB Improve messagean; $dsp_group:array[1..15] of integer; $dsp_name:array[1..15] of string; $dsp_status:array[0..6] of string; $max_dsp:integer; $dc_link:integer; $dsp_msg:array[1..6] of string; $dsp_msg_no:integer; $dsp_esc_ret:array[0..3] of string; $dsp_er_no:integer; $dsp_page:integer; $dsp_pmax:integer; $dsp_pstart:array [1..17] of integer; $dsp_phit:array [1..17] of boolean; $dsp_pmsg:array [1..17] of integer; $master_root:string; $backup_root:string; $oldpath:string; $newpath:string; $e same.'); %fatal_error:=true; %end "else begin %wk_string:=master_root; %if pos('/',wk_string)>0 then newlen(wk_string,(pos('/',wk_string)-1)); %success:=sos_volume(wk_string,dc_volname[1],i,j,retcode); %if not success then begin (err_23('MASTER i BACKUP volumes.'); "write(chr(30)); "master_root:='.D1'; "get_root(3,'.D1','MASTER volume',master_root); "get_root(6,'.D2','BACKUP volume',backup_root); "if master_root=backup_root then begin %err_23('MASTER and BACKUP volume pathnames may not be th"gotoxy(0,1); "write('_________________________________________________________________', +'_______________'); "gotoxy(0,21); "write('_________________________________________________________________', +'_______________'); "err_23('Insert MASTER andel.'); "until success; "end; BEGIN "dc_max:=0; "dc_return:=0; "dir_entry:=0; "current_level:=1; "dc_d1d2:=1; "gotoxy(0,0); "write(chr(29)); "write('D3BACKUP:Back Up Disk /// Files ', +' AMB:v.03/87'); lt; $open(infile,title,'RESET',root); $close(infile); $if root='' then begin 'err_23('No pathname entered.'); 'gotoxy(0,i+3); 'write(chr(30)); 'end $else if root[1]='.' 'then success:=true $else err_23('Please use SOS device name as the first levs; end; PROCEDURE initiation; "procedure get_root(i:integer; default,title:string; var root:string); "begin "repeat $gotoxy(0,23); $write(chr(30),'RETURN accepts default, else edit pathname as needed.'); $gotoxy(0,i); $success:=false; $root:=defau#success:= false; #gotoxy(0,23); #write(chr(30),s); #gotoxy(66,23); #write('(Y | N) --> '); #read(keyboard,wk_char); #upperchr(wk_char); #if((wk_char='Y')or(wk_char='N')) &then success:=true &else err_23('Please press "Y" or "N." '); until succes1st page. X:Executes'; end;{setup} procedure err_23(s:string); begin #unitclear(2); #gotoxy(0,23); #write(chr(30),chr(7),s,' Press any key.'); #read(keyboard,wk_char); end; procedure yn_23(s:string); begin repeat #unitclear(2); ub-directory does not exist on destination volume.'; "dsp_esc_ret[0]:=' X:Executes'; "dsp_esc_ret[1]:='ESC/RET:Prev/Next page. X:Executes'; "dsp_esc_ret[2]:='ESC/RET:Last/Next page. X:Executes'; "dsp_esc_ret[3]:='ESC/RET:Prev/lease delete all members before deleting directory.'; "dsp_msg[3]:='You cannot copy a non-existent file.'; "dsp_msg[4]:='You cannot delete a non-existent file.'; "dsp_msg[5]:='Sub-directory already exists on destination volume.'; "dsp_msg[6]:='Parent s"Type_file[26]:='EZP-WP';Type_file[27]:='EZP-SS'; "dsp_status[0]:='?? '; "dsp_status[1]:='OK '; "dsp_status[2]:='Cpy-->'; "dsp_status[3]:='Del-->'; "dsp_status[4]:='<--Cpy'; "dsp_status[5]:='<--Del'; "dsp_status[6]:='Delete'; "dsp_msg[1]:='P16]:='Unk16 ';Type_file[17]:='Unk17 '; "Type_file[18]:='Unk18 ';Type_file[19]:='Unk19 '; "Type_file[20]:='Unk20 ';Type_file[21]:='Unk21 '; "Type_file[22]:='Unk22 ';Type_file[23]:='Unk23 '; "Type_file[24]:='Unk24 ';Type_file[25]:='EZP-DB'; file[6]:='Binary';Type_file[7]:='Font '; "Type_file[8]:='Screen';Type_file[9]:='BasPgm'; "Type_file[10]:='BasDta';Type_file[11]:='WpText'; "Type_file[12]:='SOS ';Type_file[13]:='Rsrved'; "Type_file[14]:='Rsrved';Type_file[15]:='Catlg '; "Type_file[success:boolean; $retcode:integer; $dsp_verify:boolean; $ procedure setup; begin "dc[0].level:=0; "Type_file[0]:='Unknwn';Type_file[1]:='Bad '; "Type_file[2]:='PasCod';Type_file[3]:='PasTxt'; "Type_file[4]:='Ascii ';Type_file[5]:='PasDta'; "Type_s not a valid SOS volume.'); (fatal_error:=true; (end %else begin (if((j<0)or(j>9999)) +then free_blks[1]:=9999 +else free_blks[1]:=j; (wk_string:=backup_root; (if pos('/',wk_string)>0 +then newlen(wk_string,(pos('/',wk_string)-1)); (success:=sos_volume(wk_string,dc_volname[2],i,j,retcode); (if not success then begin +err_23('BACKUP is not a valid SOS volume.'); +fatal_error:=true; +end (else begin +if((j<0)or(j>9999)) .then free_blks[2]:=9999 .else free_blks[2]:=j; +end; (eger; BEGIN ${$iocheck-} $RESET(Infile1,Path_1); ${$iocheck+} $if ioresult > 0 then begin 'wk_string:=concat(pathname,' does not exist. Pgm error.'); 'err_23(wk_string); 'fatal_error:=true; 'end; $if not fatal_error then begin 'Open_Directory(ind_date[d1]); ,dc[dc_max].present [d1]:=true; ,dc[dc_max].blocks [d1]:=Num_blks; ,zero_dc(dc_max,d2); ,inc(File_count); *END; &inc(i) $UNTIL((i=13) OR(File_count=Directory.Root.Files_on_dir)) END; {Load_d1_files} PROCEDURE Do_D1; var i,j: int,if(dc_max mod 3)=0 then write('.'); ,if dc_max > 250 then begin /err_23('Too many files for program.'); /fatal_error:=true; /dc_max:=250; /end; ,dc[dc_max].ftype:=ORD(F_type); ,dc[dc_max].fname:=Name; ,Do_date_time(Mod_date,Mod_time,dc[dc_max].mo $REPEAT { Until the block is empty or there } &WITH Directory.Files[i] DO { are no more files to list. } (IF(Len.Typ <> 0) THEN *BEGIN { If the file slot isn't empty,load it. } ,inc(dc_max); 0:00'; #dc[i].present [j]:=false; #dc[i].blocks [j]:=0; end; PROCEDURE Load_d1_files (num:INTEGER); VAR i,Temp_counter:integer; $d1,d2: integer; $ BEGIN $i:=ord(num=12); $d1:=1; $d2:=2; $if dc_d1d2=2 then begin 'd1:=2; 'd2:=1; 'end; DIV 10+48); *mod_string[11]:=CHR(hour MOD 10+48); *mod_string[12]:=':'; *mod_string[13]:=CHR(minute DIV 10+48); *mod_string[14]:=CHR(minute MOD 10+48); 'end; END; {Do_date_time } procedure zero_dc(i,j:integer); begin #dc[i].mod_date[j]:='00/00/00 0*mod_string[ 3]:='/'; *mod_string[ 4]:=CHR(month DIV 10+48); *mod_string[ 5]:=CHR(month MOD 10+48); *mod_string[ 6]:='/'; *mod_string[ 7]:=CHR(day DIV 10+48); *mod_string[ 8]:=CHR(day MOD 10+48); (end; (WITH Time DO begin *mod_string[10]:=CHR(hour {Get_file_info } PROCEDURE Do_date_time(Date:Date_rec; Time:Time_rec; >var mod_string:string15); &BEGIN (mod_string:=' '; (WITH Date DO begin *mod_string[ 1]:=CHR(year DIV 10+48); *mod_string[ 2]:=CHR(year MOD 10+48); f[low_byte + 16],F_type,1); ,MOVELEFT(Block_buf[low_byte + 17],Start_blk,7); ,MOVELEFT(Block_buf[low_byte + 24],Create_date,6); ,F_Status:=0; ,MOVELEFT(Block_buf[low_byte + 30],F_Status,1); ,MOVELEFT(Block_buf[low_byte + 31],Waste2,8) *END &END END;e:=(bytes_per_entry * i) + offset; (WITH Directory.Files[i] DO *BEGIN ,MOVELEFT(Block_buf[low_byte + 0],Len,1); ,Name:=' '; ,MOVELEFT(Block_buf[low_byte + 1],Name[1],15); ,temp:=len.len; ,MOVELEFT(temp,Name,1); ,F_type:=Unknown; ,MOVELEFT(Block_bu(MOVELEFT(Block_buf[33],Waste2,10) &END END; {Get_root_info } PROCEDURE Get_file_info(num:INTEGER); CONST offset=4; &bytes_per_entry=39; VAR i:integer; $low_byte,first,temp:INTEGER; BEGIN $first:=ORD(num=12); $FOR i:=first TO 12 DO &BEGIN (low_byt $MOVELEFT(Block_buf[0],Directory,4); $WITH Directory.Root DO &BEGIN (MOVELEFT(Block_buf[4],Len,1); (Name:=' '; (MOVELEFT(Block_buf[5],Name[1],27); (temp:=len.len; (MOVELEFT(temp,Name,1); (Vol:=0; (MOVELEFT(Block_buf[32],Vol,1); -(Block_buf[35] <> 39)) THEN { on an Apple /// SOS directory. } /BEGIN 1wk_string:=concat(pathname,'is not a valid directory.'); 1err_23(wk_string); 1fatal_error:=true; /END; END; {Open_Directory } PROCEDURE Get_root_info; VAR temp:INTEGER; BEGINend; %end; "path_1:=master_root; "path_2:=backup_root; END; {initiation} PROCEDURE Open_Directory(var infile:ft; var pathname:string); BEGIN &Count:=BLOCKREAD(Infile,Block_buf,1); )IF((Block_buf[0] <> 0) OR { that should always be '0' & '39' } file1,path_1); 'if not fatal_error then begin *File_count:=0; *Get_root_info; *if Directory.Root.Files_on_dir > 0 then begin -Get_file_info(12); -load_d1_files (12); -WHILE(NOT EOF(infile1)) DO BEGIN 1Count:=BLOCKREAD(infile1,Block_buf,1); 1Get_file_info(13); 1load_d1_files(13) -END; -end; *end;{if not bad dir} 'end;{if not fatal open} 'CLOSE(Infile1); END; {Do_D1} PROCEDURE Load_d2_files (num:INTEGER); VAR i,j,Temp_counter,imatch:integer; BEGIN $i:=ord(num=12); $REPEAT &WITH c[i].ftype=15) and dc[i].present[1] and dc[i].present[2]) - then -else if dc[i].mod_date[1] > dc[i].mod_date[2] 0then dc[i].status:=2 -else if dc[i].present[1]=false 0then dc[i].status:=0 -else if dc[i].mod_date[1] < dc[i].mod_date[2] 0then dc[i].al do_d2} %end;{if not fatal do_d1} %if fatal_error then dir_found:=false; "until(dir_found=false); end;{load_array} procedure set_status; var i:integer; begin *d1_files:=0; *d2_files:=0; *for i:=1 to dc_max do begin -dc[i].status:=1; -if((d2path_2:=concat(dc[j].fname,'/',path_2); 2j:=dc[j].parent; .end; .path_2:=concat(backup_root,'/',path_2); .dc_d1d2:=1; .if dc[i].present[1]=false then begin 1dc_d1d2:=2; 1path_1:=path_2; 1end; .i:=dc_max + 1; .end ,end; %end; %end;{if not fatme; .j:= dc[i].parent; .while(j > 0) do begin 2path_1:=concat(dc[j].fname,'/',path_1); 2j:=dc[j].parent; .end; .path_1:=concat(master_root,'/',path_1); .path_2:=dc[i].fname; .j:= dc[i].parent; .while(j > 0) do begin n begin /err_23('Program handles only 4 levels of directories.'); /current_level:=4; /fatal_error:=true; /end ,else begin .dc_link:=dc[i].link; .dc[i].link:=dc_max + 1; .if i=dc_max 1then dc_return:=0 1else dc_return:=dc_link; .path_1:=dc[i].fnanot fatal_error then begin %if dc_max >= dc_min then sort_level; %dir_found:=false; %for i:=(dir_entry + 1) to dc_max do begin )if dc[i].ftype=15 then begin ,dir_found:=true; ,dir_entry:=i; ,current_level:=dc[i].level + 1; ,if current_level > 4 theend;{sort_level}  procedure load_array; var i: integer; begin #repeat %dc_min:=dc_max + 1; %Do_D1; %if not fatal_error then begin %if Directory.Root.Files_on_dir=0 (then dc[dir_entry].link:=dc_link; %if dc_d1d2=1 then Do_D2; %if [dc_max+1]; 0end; 'for i:=dc_min to(dc_max-1) do begin +dc[i].link :=i + 1; +dc[i].level:=current_level; +dc[i].parent:=dir_entry; 'end;{for i} 'dc[dc_max].level:=current_level; 'dc[dc_max].parent:=dir_entry; 'dc[dc_max].link :=dc_return; procedure sort_level; var i,j:integer; begin &for i:=dc_min to(dc_max-1) do *for j:=i downto dc_min do -if dc[j].fname <= dc[j+1].fname then begin 0j:=0; 0end -else begin 0dc[dc_max + 1]:=dc[j]; 0dc[j] :=dc[j+1]; 0dc[j + 1] :=dc-Get_file_info(12); -load_d2_files(12); -WHILE(NOT EOF(infile2)) DO BEGIN 1Count:=BLOCKREAD(infile2,Block_buf,1); 1Get_file_info(13); 1load_d2_files(13) -END; -end; *end {if not fatal open} 'end; {if dir present} $CLOSE(Infile2); END; {Do_D2 } var i,j: integer; BEGIN ${$iocheck-} $RESET(Infile2,Path_2); ${$iocheck+} $if ioresult=0 then begin 'Open_Directory(infile2,path_2); 'if not fatal_error then begin *File_count:=0; *Get_root_info; *if Directory.Root.Files_on_dir>0 then begin _time(Mod_date,Mod_time,dc[imatch].mod_date[2]); -dc[imatch].blocks [2]:=Num_blks; -dc[imatch].present [2]:=true; -inc(File_count); *END; &inc(i) $UNTIL((i=13) OR(File_count=Directory.Root.Files_on_dir)) END; {Load_d2_files} PROCEDURE Do_D2; max mod 3)=0 then write('.'); /if dc_max>250 then begin 2err_23('Too many files for program.'); 2fatal_error:=true; 2dc_max:=250;; 2end; /dc[dc_max].ftype:=ord(F_type); /dc[dc_max].fname:=Name; /imatch:=dc_max; /zero_dc(dc_max,1); /end; -Do_dateDirectory.Files[i] DO (IF(Len.Typ<>0) THEN *BEGIN ,imatch:=0; ,for j:=dc_min to dc_max do 0if Name=dc[j].fname then begin 3imatch:=j; 3j:=dc_max+1; 3end; ,if imatch=0 then begin /if dc_max>0 then dc[dc_max].link:=dc_max+1; /inc(dc_max); /if(dc_status:=4; -if dc[i].present[1] then d1_files:=d1_files+1; -if dc[i].present[2] then d2_files:=d2_files+1; *end; end;{set_status} procedure col_title; begin "gotoxy(0,3); "write(chr(29)); "writeln('Backup ',' ', %'Master:',chr(18),free_blks[1]:4,chr(17),' Blk ',' Backup:', %chr(18),free_blks[2]:4,chr(17),' Blk'); "write('Status ',' File Name ', %dc_volname[1],' Blk ':(21-length(dc_volname[1])), %dc_volname[2],' Blk ':(21-length(dc_volname[:=false; 3dsp_msg_no:=6; 3end 0else if((dc[tlink].status=2) or dc[tlink].present[2]) 3then 0else begin 3wk_valid:=false; 3dsp_msg_no:=6; 3end 0end; *if wk_valid then -if((dc[k].status=4) and (dc[k].parent > 0)) then begin 0tlink:=dc[k].parent; n 0if (dc[k].present[1] and dc[k].present[1]) 3 then 0else begin 3wk_valid:=false; 3dsp_msg_no:=4; 3end; *if wk_valid then -if((dc[k].status=2) and (dc[k].parent > 0)) then begin 0tlink:=dc[k].parent; 0if dc[tlink].status=3 then begin 3wk_valid0wk_valid:=false; 0dsp_msg_no:=5; 0end; *if wk_valid then -if((dc[k].status=3)or(dc[k].status=5)) then 0if dc[k].present[(7 - dc[k].status) div 2]=false then begin 3wk_valid:=false; 3dsp_msg_no:=4; 3end; *if wk_valid then -if dc[k].status=6 theif dc[k].present[dc[k].status div 2]=false then begin 0wk_valid:=false; 0dsp_msg_no:=3; 0end; *if wk_valid then if dc[k].ftype=15 then -if((dc[k].status=2)or(dc[k].status=4)) then 0if(dc[k].present[1] and dc[k].present[2]) then begin if dc[tlink].present[2] then 5if((dc[tlink].status=3)or(dc[tlink].status=6)) 8then 5else begin 8dsp_msg_no:=1; 8wk_valid:=false; 8end; 2tlink:=dc[tlink].link; /end; /end; -end; *if wk_valid then -if((dc[k].status=2)or(dc[k].status=4)) then 0c[k].status=6 then begin /tlink:=dc[k].link; /while((tlink > 0)and(dc[k].level < dc[tlink].level)) do begin 2if dc[tlink].present[1] then 5if((dc[tlink].status=5)or(dc[tlink].status=6)) 8then 5else begin 8dsp_msg_no:=1; 8wk_valid:=false; 8end; 2/while((tlink > 0) and(dc[k].level < dc[tlink].level)) do begin 2if dc[tlink].present[(7 - dc[k].status) div 2] then 5if dc[tlink].status <> dc[k].status then begin 8dsp_msg_no:=1; 8wk_valid:=false; 8end; 2tlink:=dc[tlink].link; /end; /end; -if d0then dc[k].status:=5 -else if (dc[k].present[2] and (not dc[k].present[1])) 0then dc[k].status:=3; *if dc[k].ftype=15 then begin -if((dc[k].status=3)or(dc[k].status=5)) then begin /tlink:=dc[k].link; * *function check_valid:boolean; *var k: integer; 4tlink: integer; 4wk_valid: boolean; *begin *k:=dsp_group[j]; *check_valid:=true; *wk_valid:=true; *if dc[k].status=6 then -if (dc[k].present[1] and (not dc[k].present[2])) ].ftype:3); end;{dir_line}  procedure do_disp(var msg_char:char; esc_ret:integer); var i,j: integer; *procedure bot_msg; *begin *gotoxy(0,23); *write(chr(30),'Arrows:Up/Dn to file. L/R sets', .' status. ',dsp_esc_ret[esc_ret]); *end;)else write(' '); &write(' '); &if dc[i].present[2] )then write(dc[i].mod_date[2],dc[i].blocks[2]:4) )else write(' '); &if dc[i].ftype < 28 )then write(' ',Type_file[dc[i].ftype]:6) )else write(' ','Unk',dc[ing,' '); &dsp_name[count]:=wk_string; &if dc[i].status > 1 )then write (dsp_status[dc[i].status]) &else write (dsp_status[dc[i].status]); &write(' ',wk_string,' '); &if dc[i].present[1] )then write(dc[i].mod_date[1],dc[i].blocks[1]:4) 6); end;{col_title} procedure dir_line(var count:integer; var i:integer); var j:integer; begin &wk_string :=dc[i].fname; &for j:=2 to dc[i].level do wk_string:=concat(' ',wk_string); &while length(wk_string) < 23 do " wk_string:=concat(wk_stri2])),'F-Type'); "write('------ ','--------------------- ', %'-------------- ',' --- ','-------------- ',' --- ','------'); "gotoxy(0,21); "write('_________________________________________________________________', +'_______________'); "gotoxy(0,0if dc[tlink].status=5 then begin 3wk_valid:=false; 3dsp_msg_no:=6; 3end 0else if((dc[tlink].status=4) or dc[tlink].present[1]) 3then 0else begin 3wk_valid:=false; 3dsp_msg_no:=6; 3end 0end; *if wk_valid=false then begin -write(chr(7)); -err_23(dsp_msg[dsp_msg_no]); -bot_msg; -check_valid:=false; -end; *end; * *procedure check_end; *begin *if eoln(keyboard) then wk_char:=chr(13); *upperchr(wk_char); *if wk_char in [chr(27),chr(13),'X'] -then if not check_valid then wk_char:=' del_count:=0; %repeat (inc(count); (dsp_group[count]:=i; (if(((dc[i].status=3)or(dc[i].status=5)or(dc[i].status=6)) +and(dc[i].level=del_level)) +then inc(del_count); (i:=dc[i].link; (if((i=0)or((count mod 15)=0)) then begin +if del_count > 0 thede ', 1retcode,'. Press any key.'); .read(keyboard,wk_char); .end; *exit_status; "end; begin "count_status(3,5,6,del_count); "if del_count=0 then exit(do_deletes); "check_verify('delete'); "for del_level:=4 downto 1 do begin %i:=1; %count:=0; %.free_blks[l]:=free_blks[l] + dc[k].blocks[l]; .if status=3 1then gotoxy(60,3) 1else gotoxy(39,3); .write (chr(18),free_blks[l]:4,chr(17)); .zero_dc(k,l); .dc[k].status:=1; .end +else begin .gotoxy(0,23); .write(chr(30),'Delete failed,return co].present[(7-status) div 2] then begin 3dc[k].status:=1; 3exit_status; 3end; -tlink:=dc[tlink].link; -end; -end; +success:=sos_destroy(path_2,retcode); +if success then begin .l:=2; .if status=5 then l:=1; *display_verify('Delete','Deleting',path_2,wk_char); *if wk_char='N' then begin -dc[k].status:=1; -exit_status; -end; *if dc[k].ftype=15 then begin -tlink:=dc[k].link; -while((tlink > 0) /and(dc[k].level < dc[tlink].level)) do begin 0if dc[tlinke[j],chr(17)); *path_2:=dc[k].fname; *l:=dc[k].parent; *while(l > 0) do begin .path_2:=concat(dc[l].fname,'/',path_2); .l:=dc[l].parent; *end; *if status=3 -then path_2:=concat(backup_root,'/',path_2) -else path_2:=concat(master_root,'/',path_2); #procedure delete_file (status: integer); *procedure exit_status; *begin *gotoxy(0,j + 5); *dir_line(j,k); *exit(delete_file); *end; #begin *gotoxy(0,j + 5); *write (chr(18),dsp_status[status],chr(17)); *gotoxy(8,j + 5); *write (chr(18),dsp_nams3,'"? '); %yn_23(wk_string); %end "else begin %write (chr(30),s2,' "',s3,'"'); %wk_char:='Y'; %end; end; " procedure do_deletes; var del_level:integer; *del_count:integer; *i,j,k,l:integer; *tlink:integer; s,' pass. Verify each ',s,'? '); "yn_23(wk_string); "if wk_char='N' then dsp_verify:=false; end; " procedure display_verify(s1,s2,s3:string; var wk_char:char); begin "gotoxy(0,23); "unitclear(2); "if dsp_verify then begin %wk_string:=concat(s1,' "',e count_status(x,y,z:integer; var k:integer); begin "k:=0; "for i:=1 to dc_max do &if((dc[i].status=x)or(dc[i].status=y)or(dc[i].status=z)) )then inc(k); end; procedure check_verify(s:string); begin "dsp_verify:=true; "wk_string:=concat('Entering ',2dc[dsp_group[j]].status:=i; 2gotoxy(0,j + 5); 2write (chr(18),dsp_status[i],chr(17)); 2end -else begin 2write(chr(7)); 2end; *until((wk_char=chr(13))or(wk_char=chr(27))or(wk_char='X')); *msg_char:=wk_char; *write(chr(5)); end;{do_disp} procedursp; 5gotoxy(8,j + 5); 5write (chr(18),dsp_name[j],chr(17)); 5end; 2end -else if wk_char in[chr( 8),chr(21)] then begin 2i:=dc[dsp_group[j]].status; 2if wk_char=chr( 8) 5then i:=i + 1 5else i:=i - 1; 2if i > 6 then i:=1; 2if i < 1 then i:=6; ] then begin 2if check_valid then begin 5gotoxy(0,j + 5); 5write (dsp_status[dc[dsp_group[j]].status]); 5gotoxy(8,j + 5); 5write (dsp_name[j]); 5if wk_char=chr(11) 8then j:=j - 1 8else j:=j + 1; 5if j > max_dsp then j:=1; 5if j < 1 then j:=max_d'; *end; * begin *write(chr(6)); *bot_msg; *gotoxy(8,6); *j :=1; *write (chr(18),dsp_name[j],chr(17)); *repeat -unitclear(2); -read (keyboard,wk_char); -check_end; -if wk_char in [chr(27),chr(13),'X'] 2then -else if wk_char in[chr(10),chr(11)n begin .col_title; .if i=0 1then max_dsp:=count 1else max_dsp:=15; .for j:=1 to max_dsp do dir_line(j,dsp_group[j]); .for j:=1 to max_dsp do begin 2k:=dsp_group[j]; 2if dc[k].level=del_level then 2if dc[k].status=3 5then delete_file(3) 2else if dc[k].status=5 5then delete_file(5) 2else if dc[k].status=6 then begin 5delete_file(3); 5delete_file(5); 5end; .end; .end; +count:=0; +del_count:=0; +end; %until(i=0); "end; end;{do_deletes} procedure do_copies; var cpy_level:iuccess then begin >free_blks[dest]:=free_blks[dest] A+ dc[k].blocks[dest]; >copy_file; >if success then begin @free_blks[dest]:=free_blks[dest] C- dc[k].blocks[dest]; @if dc[k].status=2 Cthen gotoxy(60,3) Celse gotoxy(39,3); @write (chr(18),freee_wk < 0 then begin >dc[k].status:=1; >err_23('No room for copy.'); >end; ;end; 8if((dc[k].status=2)or(dc[k].status=4)) then begin ;success:=sos_destroy(path_2,retcode); ;if not success then >if not dc[k].present[dest] Athen success:=true; ;if s8if dc[k].parent > 0 then begin ;tlink:=dc[k].parent; ;if not dc[tlink].present[dest] >then dc[k].status:=1; ;end; 8if((dc[k].status=2)or(dc[k].status=4)) then begin ;free_wk:= free_blks[dest] + dc[k].blocks[dest] >- dc[k].blocks[source]; ;if fre_2:=concat(master_root,'/',path_2); 8end; 5display_verify('Copy','Copying',path_1,wk_char); 5if wk_char='N' 8then dc[k].status:=1 5else begin 8if dc[k].status=2 ;then begin; source:=1; dest:=2; end ;else begin; source:=2; dest:=1; end; begin 9path_2:=concat(dc[l].fname,'/',path_2); 9l:=dc[l].parent; 5end; 5if dc[k].status=2 then begin 8path_1:=concat(master_root,'/',path_2); 8path_2:=concat(backup_root,'/',path_2); 8end 5else begin 8path_1:=concat(backup_root,'/',path_2); 8paths=2)or(dc[k].status=4)) 5and(dc[k].level=cpy_level)) then begin 5gotoxy(0,j + 5); 5write (chr(18),dsp_status[dc[k].status],chr(17)); 5gotoxy(8,j + 5); 5write (chr(18),dsp_name[j],chr(17)); 5path_2:=dc[k].fname; 5l:=dc[k].parent; 5while(l > 0) do (if((i=0)or((count mod 15)=0)) then begin +if cpy_count > 0 then begin .col_title; .if i=0 1then max_dsp:=count 1else max_dsp:=15; .for j:=1 to max_dsp do dir_line(j,dsp_group[j]); .for j:=1 to max_dsp do begin 2k:=dsp_group[j]; 2if(((dc[k].statu; "for cpy_level:=1 to 4 do begin %i:=1; %count:=0; %cpy_count:=0; %repeat (inc(count); (dsp_group[count]:=i; (if(((dc[i].status=2)or(dc[i].status=4)) +and(dc[i].level=cpy_level)) +then inc(cpy_count); (i:=dc[i].link; nfo (path_2,filelist,15,retcode); *if not success then error_msg('SOS_Get_Inf'); *moveleft(filelist[9],eofblk,2); *dc[k].blocks[dest]:=eofblk; *end; * begin "count_status(2,4,0,cpy_count); "if cpy_count=0 then exit(do_copies); "check_verify('copy')file); -close(outfile); -end; *success:=sos_get_info (path_1,filelist,15,retcode); *if not success then error_msg('SOS_Get_Inf'); *success:=sos_set_info (path_2,filelist,15,retcode); *if not success then error_msg('SOS_Set_Inf'); *success:=sos_get_i*if not success then error_msg('SOS_Create'); *if fileid <> 15 then begin -reset(infile,path_1); -reset(outfile,path_2); -repeat 0i:=blockread(infile,buffer,2); 0j:=blockwrite(outfile,buffer,i); 0if eof(infile) then i:=0; -until(i < 2); -close(inrd,wk_char); .exit(copy_file); *end; *begin *fileid:=dc[k].ftype; *eofblk:=dc[k].blocks[source]-1; *if fileid=15 then begin -storage:=13; -inc(eofblk); -end *else storage:=1; *success:=sos_create(path_2,fileid,0,storage,eofblk,retcode); nteger; .ref_1:integer; .ref_2:integer; .i,j:integer; .filelist:packed array[0..14] of 0..255; *procedure error_msg(msg:string); *begin .gotoxy(0,23); .unitclear(2); .write(chr(30),msg,' error number ',retcode, 1'. Press any key.'); .read(keyboanteger; *cpy_count:integer; *i,j,k,l,m:integer; *free_wk:integer; *tlink:integer; *source:integer; *dest:integer; *procedure copy_file; *var buffer:packed array[0..1023] of 0..255; .fileid:integer; .storage:integer; .eofblk:integer; .retcode:i_blks[dest]:4,chr(17)); @dc[k].mod_date[dest]:= dc[k].mod_date[source]; @dc[k].present [dest]:= dc[k].present [source]; @dc[k].status:=1; @end; >end ;else begin >gotoxy(0,23); >unitclear(2); >write(chr(30),'Delete failed,return code ', Aretcode,'. Press any key.'); >read(keyboard,wk_char); >end; ;end; 8end; 5gotoxy(0,j + 5); 5dir_line(j,k); 5end; .end; .end; +count:=0; +cpy_count:=0; +end; %until(i=0); "end; end;{do_copies} procedure rename_backup; begin err_23('Two volu $do_copies; $end;{no fatal wrong file} $end;{no fatal re-name } $end;{no fatal both blank} $end;{no fatal load error} $end;{no fatal init error} $repeat &unitclear(2); &success:= false; &gotoxy(0,23); &write (chr(30),'End of task. Start againif wk_char=chr(13) then begin -inc(dsp_page); -if dsp_page>dsp_pmax then dsp_page:=1; -i:=dsp_pstart[dsp_page]; -end; *col_title; *count:=0; *end; $until(wk_char='X'); $for i:= 1 to dc_max do if dc[i].status=0 then dc[i].status:= 1; $do_deletes;*dsp_phit[dsp_page]:=true; ) if wk_char='X' then check_execute; *if wk_char=' ' -then i:=dsp_pstart[dsp_page] *else if wk_char=chr(27) then begin -dsp_page:=dsp_page-1; -if dsp_page<1 then dsp_page:=dsp_pmax; -i:=dsp_pstart[dsp_page]; -end *else $count:=0; $dsp_page:=1; $repeat 'inc(count); 'dsp_group[count]:=i; 'dir_line(count,i); 'i:=dc[i].link; 'if((i=0)or(count=15)) then begin *if i=0 -then max_dsp:=count -else max_dsp:=15; *do_disp(wk_char,dsp_pmsg[dsp_page]); ot)>0 then wk_string:=backup_root; $writeln('Backup File ',wk_string,' contains ', 'd2_files,' files.'); $yn_23('Are these the right files? '); $if wk_char='N' 'then fatal_error:=true; $if not fatal_error then begin $set_pages; $col_title; $i:=1;or then begin $gotoxy(16,16); $wk_string:=dc_volname[1]; $if pos('/',master_root)>0 then wk_string:=master_root; $writeln('Master File ',wk_string,' contains ', 'd1_files,' files.'); $gotoxy(16,18); $wk_string:=dc_volname[2]; $if pos('/',backup_ro'writeln(chr(30),'Both ',dc_volname[1],' and ',dc_volname[2], *' are blank. Press any key.'); 'read(keyboard,wk_char); 'fatal_error:=true; 'end; $if not fatal_error then begin $if dc_vol_name[1]=dc_vol_name[2] then rename_backup; $if not fatal_erritiation; $if not fatal_error then begin $gotoxy(0,23); $write(chr(30)); $gotoxy(0,11); $write('Constructing Directory'); $load_array; $if not fatal_error then begin $set_status; $if dc_max=0 then begin 'gotoxy(0,23); dsp_phit[i]=false then success:= false; #if not success then begin &yn_23('You have not hit all screens. Execute anyway? '); &if wk_char='N' )then wk_char:=' ' )else wk_char:='X'; &end; end; BEGIN {MAIN} "setup; "repeat $fatal_error:=false; $inge); (dsp_pstart[dsp_page]:=i; (dsp_phit[dsp_page]:=false; (dsp_pmsg[dsp_page]:=1; (count:=0; (end; #until(i=0); #if dsp_pmax=1 then dsp_pmsg[1]:=0; end; procedure check_execute; var i:integer;  begin #success:= true; #for i:=1 to dsp_pmax do ifbegin #i:=1; #count:=0; #dsp_page:=1; #dsp_pstart[1]:=1; #dsp_pmsg[1]:=2; #dsp_phit[1]:=false; #repeat %inc(count); %i:=dc[i].link; %if i=0 then begin (dsp_pmsg[dsp_page]:=3; (dsp_pmax:=dsp_page; (end %else if count=15 then begin (inc(dsp_pa then dc_volname[2]:=newpath 'else begin *gotoxy(0,23); *unitclear(2); *write(chr(30),chr(7),'Rename failed,return code ',retcode, -'. Press any key.'); *read(keyboard,wk_char); *fatal_error:=true; *end; end;{rename_backup} procedure set_pages; 'else begin *{$rangecheck-} *dc_volname[2,0]:=chr(11); *{$rangecheck+} *newpath:=concat(dc_volname[2],'.BKP'); *end; 'if pos('..',newpath) > 0 *then delete(newpath,pos('..',newpath),1); 'success:=sos_rename(oldpath,newpath,retcode); 'if successmes with the same name. I am changing ".D2" name.'); 'oldpath:=dc_volname[2]; 'newpath:=dc_volname[2]; 'if pos('.BKP',newpath) > 0 then *delete(newpath,pos('.BKP',newpath),4) 'else if length(newpath) < 12 then *newpath:=concat(dc_volname[2],'.BKP')?'); &gotoxy(55,23); &write ('(Y | N | ESC to Pascal)'); &read(keyboard,wk_char); &upperchr(wk_char); &if((wk_char='Y')or(wk_char='N')or(wk_char=chr(27))) )then success:=true )else err_23('Please press "Y" or "N" or ESCAPE'); $until success; $if wk_char=chr(27) then begin 'write(chr(28)); 'exit(program); 'end; "until(wk_char='N'); "success:=sos_terminate; END. {D3BACKUP} 511),C$(20),name$(20):=10:=0nx=+B$(I),16,B)140 PREFIX$=.D1 #1, ž#1180I=0I=I+1:#1;A$(I):170#1 L=I-1j=1:same=0:/#9,".D1/DISKNAME.DAT":#9;DISKNAME$:#9Ta$="{,|,~,}; selects; J/2)=4:=+1:ۙ=44PB$(J);:J=J+1ZI:8dA$(1000),B$(1000),C%(D3 Backup by Bloom "WHICH SY::******** : œ15:""DATE IS: ";:"TIME IS ";L"PRESS IF OKAY, N)o TO CHANGE:";:OK$:"NO",OK$)"TIMESET"(#1,".RS232"%2A$=:="":"/APPLCOM/ACCESS3.INV"'<:=30::"WELCOME TO ACCESS ///":4F=3:=22:ck$=".Co"console=1(console -ž#165 2#1;a$ 7#2;a$<50Aconsole=1:=23F0K"Would you like to print another file? ";b$5Pb$="Y"b$="y"b$="YES"b$="yes"b$="Yes"43Ub$="N"b$="n"b$="NO"b$="no"b$="No"90 Z x=1100x9"Name the file you would like to print: ";inputfile$ #1,inputfile$ console=0;"Where would you like to print the file? ";outputfile$#2,Outputfile$check$=outputfile$,1,3)8#check$=".co"check$=".CO"che