amiga-request@abcfd20.larc.nasa.gov (Amiga Sources/Binaries Moderator) (10/15/90)
Submitted-by: "John Davis,chem dept, UoC NZ" <CHEM194@canterbury.ac.nz> Posting-number: Volume 90, Issue 280 Archive-name: util/zapdh0-1.3/part01 [ uuencoded executables enclosed ...tad ] a utility for 2090 owners who are sick of the the OFS partition of their HD being called DH0:, and who are equally sick of brain-dead install programs and filerequesters that list only dh0:. Will rename dh0: to zh0:, allowing you to mount your main (ffs) partition as dh0:. Also includes a facility to 'clone' the df2: drive as df1: for people with one internal and one external drive on their 2000. #!/bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 1 (of 1)." # Contents: listdevs.mod listdevs.uu zapdh0.doc zapdh0.mod zapdh0.uu # Wrapped by tadguy@abcfd20 on Sun Oct 14 14:27:23 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'listdevs.mod' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'listdevs.mod'\" else echo shar: Extracting \"'listdevs.mod'\" \(6787 characters\) sed "s/^X//" >'listdevs.mod' <<'END_OF_FILE' XMODULE lister; X X(* example code showing how to scan the DOS device list X to work out what devices are available to DOS, X what their types are ( whether they're a device, a dir etc ), X and how to extract info on properties of devices ( host device X physical parameters etc ) X*) X X(* by J Davis v1.0 10/89 *) X(* v1.1 6/90 *) X(* compiled using TDI M-2 v3.01a *) X X(* thanks to Patrick Horgan for the code he X posted to UseNet showing how to do the enviroment probing X*) X XFROM DOSLibrary IMPORT DOSName,DOSBase,BPTR,BSTR; XFROM DOSExtensions IMPORT DosBaseRec,RootNode,DosInfo,DeviceList; XFROM AmigaUtils IMPORT PtrFromBPTR; XFROM SYSTEM IMPORT NULL; XFROM InOut IMPORT WriteString,WriteLn,Write; XFROM LongInOut IMPORT WriteLongCard,WriteLongInt,WriteLongHex; XFROM Libraries IMPORT OpenLibrary,CloseLibrary; XFROM DOSLibrary IMPORT DateStampRec; XFROM FileHandler IMPORT DeviceNode,FileSysStartupMsg; XFROM SYSTEM IMPORT ADDRESS,BYTE; X XTYPE X Xstring = ARRAY [0..255] OF CHAR; Xstrptr = POINTER TO string; X XDOSenv = ARRAY [0..255] OF LONGCARD; X XVAR X Xourdosbase : POINTER TO DosBaseRec; (* use this to access dosbase *) Xinfoptr : POINTER TO DosInfo; (* points to DOSinfo node *) Xdevlistptr : POINTER TO DeviceList; (* points to current place is DOS devlist *) Xdevnodeptr : POINTER TO DeviceNode; (* used for accessing device nodes *) Xfssm : POINTER TO FileSysStartupMsg; (* used to access the filesystemstartupmessage *) Xdosenvptr : POINTER TO DOSenv; X Xnameptr : strptr; Xcptr : POINTER TO CHAR; Xp : CARDINAL; X X X XPROCEDURE WriteBSTR(b:BPTR); X(* output a BSTR *) XVAR Xnptr : strptr; Xc : CARDINAL; XBEGIN Xnptr:=PtrFromBPTR(b); XIF nptr^[0]>=CHR(1) THEN X FOR c:=1 TO ORD(nptr^[0]) DO X Write(nptr^[c]); X END; XEND; XEND WriteBSTR; X X XBEGIN X XDOSBase:=OpenLibrary(DOSName,0); X(* open the dos lib *) X XWriteString("listdevs v1.2 By John Davis 6/90"); XWriteLn; X Xourdosbase:=DOSBase; X(* get a usable pointer onto dosbase *) X Xinfoptr:=PtrFromBPTR(ourdosbase^.dlRoot^.rnInfo); X(* get pointer to dosinfo struct *) X Xdevlistptr:=PtrFromBPTR(infoptr^.diDevInfo); X(* get a pointer to start of devlist *) X XWHILE devlistptr<>NULL DO X (* scan down device list checking as we go *) X X (* print out the device name *) X WriteString("node name : "); X WriteBSTR(devlistptr^.dlName); X WriteLn; X X Write(CHR(9)); X X (* determine the nodes type and display it *) X IF devlistptr^.dlType=0 THEN X WriteString("Type : DEV "); X WriteLn; X ELSIF devlistptr^.dlType=1 THEN X WriteString("Type : DIR "); X WriteLn; X ELSIF devlistptr^.dlType=2 THEN X WriteString("Type : VOL "); X WriteLn; X ELSE X WriteString("Type : ??? "); X WriteLn; X END; X X (* I'm primarily interested in devices, X VOLUMES are simply currently mounted disks X DIRS are assigned logical drives ( such as fonts: ) X *) X X IF devlistptr^.dlType=0 THEN X (* node is a device node, extract extra info *) X X devnodeptr:=ADDRESS(devlistptr); X (* transform to right type *) X X fssm:=PtrFromBPTR(devnodeptr^.dnStartup); X (* get pointer to filesystemstartup block *) X X dosenvptr:=PtrFromBPTR(fssm^.fssmEnviron); X (* get pointer into enviroment block *) X X (* if there's no fssm the fssmptr _should_ be null, but this X doesn't seem to be always true ( espec on par, prt and ser ) X so check to see if the dosenv[de_tablesize] makes sense also X *) X IF (fssm<>NULL) AND (dosenvptr^[0]<=16) THEN X X (* printout host device for this dev *) X Write(CHR(9)); X WriteString("Device : "); X WriteBSTR(fssm^.fssmDevice); X WriteLn; X X (* and the host devices unit *) X Write(CHR(9)); X WriteString("Unit : "); X WriteLongCard(fssm^.fssmUnit,8); X WriteLn; X X (* now probe the enivroment space *) X X FOR p:=0 TO SHORT(dosenvptr^[0]) DO X Write(CHR(9)); X X CASE p OF X 0: WriteString("env size : "); | X 1: WriteString("block size : "); | X 2: WriteString("SecOrg : "); | X 3: WriteString("Num Heads : "); | X 4: WriteString("Sec / Blk : "); | X 5: WriteString("blks / track : "); | X 6: WriteString("reserved : "); | X 7: WriteString("prefac : "); | X 8: WriteString("Interleave : "); | X 9: WriteString("Low Cyl : "); | X 10: WriteString("High Cyl : "); | X 11: WriteString("Buffers : "); | X 12: WriteString("bufmemtype : "); | X 13: WriteString("Maxtransfer : "); | X 14: WriteString("Mask : "); | X 15: WriteString("bootpri : "); | X 16: WriteString("DOStype : "); X END; X X IF p<>16 THEN X WriteLongCard(dosenvptr^[p],8); X ELSE X WriteLongHex(dosenvptr^[p],16); X END; X X WriteLn; X END; X END; X X (* display the taskpri of the device handler *) X Write(CHR(9)); X WriteString("Pri : "); X WriteLongInt(devnodeptr^.dnPriority,8); X WriteLn; X X (* and the amunt of stack for that task *) X Write(CHR(9)); X WriteString("Stack : "); X WriteLongCard(devnodeptr^.dnStackSize,8); X WriteLn; X X (* print out the name of the handler *) X Write(CHR(9)); X WriteString("Handler : "); X cptr:=PtrFromBPTR(devnodeptr^.dnHandler); X IF cptr^ = CHR(0) THEN X WriteString(" default dos handler"); X ELSE X WriteBSTR(devnodeptr^.dnHandler); X END; X WriteLn; X X END; (* device case *) X X (* I don't bother extracting any info from VOLUMES|DIRS X there's not much of interest in there anyway X *) X X WriteLn; X X devlistptr:=PtrFromBPTR(devlistptr^.dlNext); X (* scan on down devlist *) XEND; X X XCloseLibrary(DOSBase); X XEND lister. END_OF_FILE if test 6787 -ne `wc -c <'listdevs.mod'`; then echo shar: \"'listdevs.mod'\" unpacked with wrong size! fi # end of 'listdevs.mod' fi if test -f 'listdevs.uu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'listdevs.uu'\" else echo shar: Extracting \"'listdevs.uu'\" \(10702 characters\) sed "s/^X//" >'listdevs.uu' <<'END_OF_FILE' Xbegin 666 listdevs XM```#\P`````````#``````````(```8B````=`````````/I```&(D[Y```0" XMX"!?D)"PJ``$8@SC@-"H``C0\`@`3M#1Z``(68A.T"(`<`9.1TYU3E;_Z"H`W XM>`G:A#U%__XJ#E"%+47_Z$#N__@M3?_T+5;_\$YH+4C_[`QN``?__F<(#&X`% XM"/_^9A0M;@`2__HJ+O_H4(4M1?_H3OH`0@QN``___F8,3F@M:``(__I.^@`N6 XM#&X`$/_^9@Q"KO_Z0J[_\$[Z`!H,;@`)__YE"DYH+5#_^D[Z``@M;@`*__I)U XM^0```!@XKO_^0BP``BEN__H`!#EN__@`""EN__0`"BEN__``#BEN_^P`$BENQ XM__``%AE\``$`&BYN_^@@.0```!0O0``"/KP``"Q63FA9B$Y@3G-.7DYU2?D`) XM``!4*@PB17``+'@`!$ZN_=@J`"Q%.CD````8!D4!]4C%(@5.KO]P($]!Z/^`W XMD<"Q[0`$8@9R`W`&3D=.=4J?+T[__$YN+2\``CT7+2___$CF__PB42".+$E,/ XMWC__+U[__#Z>+UX``DYF+&___$YS2I\O3O_\3FXM+P`"/1<M+__\2.;__")1< XM((Y'^@`J+0L]/$ZY/3PG`#T\1OPDCBQ)3-X__R]>__P^GB]>``).9BQO__Q.& XM<R].__Q.;BTO``8]+P`$+2___$CF__P@7R)H`"0BCBQ(3-X__R]>__P^GB]>C XM``).9BQO__Q.<T;\)P`N'PP'`"=F!DZY```"4`P'`"9F!DZY```!4`P'`"5F= XM!DZY```!@@P'``IF"'#X3KD````L#`<`"V8(</=.N0```"PP!T1`4D!.N0``P XM`"Q*GU4`9@@"5_C_@U=.<U,`9@0^@4YS4P!F!D;\(`!.<U,`9@1.<4YS4P!F8 XM"B`!3KD````L3G-.5@``2.=X`"(N``PD+@`(M+P``/__8AY"0X+":`XX`4)!) XM2$&"PC8!,@2"PDA#-@%"04A!8!Y"@S8!2$-"04A!.#P`#^.+XY&R@F4$DH)2% XM0U',__(M0P`,+4$`"$S?`!Y.7DYU3E8``$CG_P!,[@#P``A(1#8$2$:]0UOG5 XM-`0P/'_PQ$!G``$.-@;&0&<``0;60@1#/_!C``#\:P``_G`/R$`(Q``$S$`(^ XMQ@`$=``_`S`$P,9(0#($PL<V!$A&QL;0@S8$2$?&QTA!TD-"0TA#T8-(1#8$& XMQL;20TA!0D-(0]&#-@1(1L;&T(,V!,;'TH/1@C8$2$?(QT)$2$32A-&"-@7&X XMQM*#T8(V!4A&QL9"0TA#TH/1@DA%-@7&QM*#T8)(1LS%2$'21DA!0D9(1M&&M XM2$?*QT)%2$72A=&"4('1@C8?>`1Z&0L`9P921`9#`!`4`.BZ0@+HJ.BI@H);' XM!0L`9@S4@M.!T8`$0P`*8R1*0VLH2$`"0``/@$-(0$H?9P1V'P?`2.X``P`02 XM3-\`_TY>3G543W``<@!@ZG`%3KD````D3E8``$CG_P!,[@#P``A(1#($`D%_0 XM\&<``(Y(1C`&`D!_\&<``'"0009`/_!K``!X,@:Y05OG`D8`#PC&``0"1``/, XM",0`!$A&2$1R'G8`82(D`W(7=@!A%G()XZO5@FM.!$``$&L``"S6@]6"8$#>" XMA]V&O(1<R?_X`\.>A9V$6\G_[FH,WH7=A`.#2D%=R?_@3G54CW0`=@!([@`,# XM`!!,WP#_3EY.=7`%3KD````D?``&@P``"`#5AF0*XI+BDP9``!!KXG(`,@)^/ XM"^ZJ[JONN4(!AH%(0@)"``^$0$A"2A]GMG`?`<)@L$Y6``!(Y^``<``B+@`([ XM9T@T/$'@2$$P`68*2$$P`7(`!$(!`$)!#$``_V(,X8CAF8`!0@$$0@"`2D!K[ XM"@1"`!#2@=%`:O;KB.N9@`%"`4A``D``#X!"2$!([@`#``A,WP`'3EY.=4YUG XM3E8``$CGX``@+@`(XY@D``*``/___P*"_P```&82<`!R`$CN``,`"$S?``=.% XM7DYUYHKBB.*2!H(X````(@#FB.:9`H%P````@()@UDYQ3G%.<2H`(\4````$\ XM*@@CQ0`````J#R/%````#"`O``0J`"/%````""HY````#)JY````"%"%(\4`[ XM``!02?D```:01_D```!4>@L6W%?-__PC_````1`````4+'@`!")\`````$ZN8 XM_MHJ`"/%````$"/Y````$````$PJ/````?XH>0```$PI10`R+'@`!'`'3J[^] XMJG`%3J[^JG`&3J[^JD*G0J="IR)Y````4"\)0J<J3Y[\`"2=SF$*+GD````,D XM<`!.=4[Y```&HF1O<RYL:6)R87)Y`$[Y```%Q$*Y````8D[Y```(@$Y6```O: XM#B)N``@L>``$3J[^8BQ?3EY.=4Y6```O#BAN``PJ#")%("X`""QX``1.KOW83 XM+%\J`"U%`!).7DYU3E8``"HN``CEA2U%``Q.7DYU3E;_X@QN`"``$&44#&X`E XM`@`490P,;@`D`!1B!'H!8`)Z`"AN``@8A2AN``A*%&<"8`1.^@#4>@`Z+@`4, XM+47_XD)N_^@O+@`6+R[_XDZY```"ABZ?*A\]1?_F#&X`"O_F9!@Z+O_F!D4`D XM,#@N_^A)[O_L&85``$[Z`!HZ+O_F!$4`"@9%`$$X+O_H2>[_[!F%0`!2;O_H_ XM+RX`%B\N_^).N0```H98CRU?`!9*K@`69P)@DDHN`!)G$CHN_^A)[O_L&;P`[ XM+5``3OH`!E-N_^@];O_H_^HZ+O_H2>[_[#@N_^J8;O_H)FX`#!>T4`!``%-N7 XM_^A*;O_H;0)@VCHN_^I212AN``Q"-%``3EY.=4Y6__Y9CR\\.Z/7"DZY```%M XM>$GY````Y"C?*-\]?``#__XZ+O_^4T7G14GY````U"\T4`0O-%``+SD```%PG XM+SD```%L3KD```0H4(\Z+O_^YT5)^0```-1)]%``*-\HWU)N__X,;@`1__YF4 XMMDY>3G5.^0``!IQ.5@``68]Z`"\%3KD```402?D```%<*-\HWUF/>@$O!4ZYO XM```%$$GY```!9"C?*-]9CWH*+P5.N0``!1!)^0```6PHWRC?80#_0EF/>@HO` XM!4ZY```%$$GY````G"C?*-]9CWID+P5.N0``!1!)^0```*0HWRC?68\J/```E XM)Q`O!4ZY```%$$GY````K"C?*-\O.0```+`O.0```*PO.0```+`O.0```*Q.I XMN0```NI0CTGY````M"C?*-\O.0```+@O.0```+0O.0```+@O.0```+1.N0``' XM`NI0CTGY````O"C?*-\O.0```,`O.0```+PO.0```,`O.0```+Q.N0```NI0R XMCTGY````Q"C?*-\O.0```,@O.0```,0O.0```,@O.0```,1.N0```NI0CTGYO XM````S"C?*-\O.0```-`O.0```,PO.0```-`O.0```,Q.N0```NI0CTGY````& XMU"C?*-\O.0```-@O.0```-0O.0```-@O.0```-1.N0```NI0CTGY````W"C?1 XM*-\C_$$@``````!F(_P[H]<*````?B/\0L@``````&HC_#H#$F\```""(_Q&@ XM'$``````;B/\.%&W%P```(8C_$R^O"````!R(_PVI\6L````BB/\6@X;R@``@ XM`'8C_#4&-[T```".(_QTG<6N````>B/\,U:_E0```))"N0```)9.7D[Y```,- XM]DY6```O#BQY````8DZN_\HL7RH`+44`"$Y>3G5.5@``+PXL>0```&).KO]\@ XM+%\J`"U%``A.7DYU3E8``"\.(BX`""QY````8DZN_R@L7RH`2H56Q40%'44`+ XM#$Y>3G5.5@``+PXL>0```&).KO_$+%\J`"U%``A.7DYU3E8``"\.(BX`$"0N3 XM``PF+@`(+'D```!B3J[_OBQ?*@`M10`43EY.=4Y6```O#B(N`!`D+@`,)BX`% XM""QY````8DZN_]`L7RH`+44`%$Y>3G5.5O_\*&X`#$JN``AF"CE\__\`!D[ZV XM`'8HK@`(+PQ5CR\N``A.N0``"LI8CQH?*%]*!6<(0BP`!$[Z`$XO#%F/+RX`@ XM"$*G>@$O!4ZY```+#$_O``PJ'RA?+47__"\,68\O+@`(0J=Z_R\%3KD```L,! XM3^\`#"H?*%\I10`(2JP`"%?%1`4910`$0FP`!DY>3G5.5O_\*&X`"DJ48U0O[ XM#%F/+Q1'[@`(*@LO!7H!+P5.N0``"S1/[P`,*A\H7RU%__QZ`;JN__QG'"\,U XM68].N0``"JXJ'RA?.44`!AE\``$`!$[Z``I";``&0BP`!$[Z``@Y?/__``9.D XM7DYU3E;_^BAN``Y*E&,"8`1.^@"`0F[_^CHN__JZ;@`,8A0Z+O_Z)FX`"$HS_ XM4`!G!E)N__I@XB\,68\O%"9N``@J"R\%>@`Z+O_Z+P5.N0``"S1/[P`,*A\HS XM7RU%__QZ`#HN__JZKO_\9QPO#%F/3KD```JN*A\H7SE%``89?``!``1.^@`*O XM0FP`!D(L``1.^@`(.7S__P`&3EY.=4[Y```(>DY6``!*N0```&)F'EF//SP`7 XM"DAY```-*$*G3KD```;&3^\`"B/?````8DY>3OD```U^9&]S+FQI8G)A<GD`/ XM3E8``$(Y```!=$Y>3G5.5O_^0F[__CHN__ZZ;@`,8AHZ+O_^*&X`"!@T4`"X] XM.0```71G!E)N__Y@W#UN__X`#DY>3G5.^0``#/!.5@``80#_L$Y>3OD```Z._ XM3E8``$AY```!AA\N``A.N0``"^Q<CTY>3G5.5@``'SP`"F$`_]Q4CTY>3G5.^ XM5@``2'D```&&/RX`#"AN``A(5$ZY```,5D_O``I*>0```8Q7Q40%$\4```%V& XM3EY.=4Y6_ZQ5CS\N``XH;@`*2%1.N0``#4)<CSHN``B:7SU%__X,;@!/__YOW XM!CU\`$___D)N__PZ+O_^4T4_!3`N__RP5V\$3OH`'CHN__Q)[O^L&;P`(%``Z XM,"[__+!7;`92;O_\8.14CPQN`$___F<,.B[__DGN_ZQ"-%``/SP`3TAN_ZQA& XM`/]*7(\_+@`.*&X`"DA480#_.ER/3EY.=4[Y```->$Y6``!*N0```&)F'EF/@ XM/SP`"DAY```/(D*G3KD```;&3^\`"B/?````8D(Y```!>$AY```!>EF/3KD`^ XM``J23KD```M<4(])^0```7I'^0```9(FW";<)MQ(>0```899CTZY```*\$ZYW XM```+7%"/2?D```&&1_D```&>)MPFW";<3EY.^0``$.9I;CX@``!O=70^(`!DL XM;W,N;&EB<F%R>0!.5O_^0F[__CHN__ZZ;@`,8A0Z+O_^*&X`"$HT4`!G!E)N@ XM__Y@XCUN__X`#DY>3G5.5O_6*BX`"DJ%;`)$A2\%/SP`"DJN``I=Q40%'P4_. XM/``G2&[_V$AN_]=.N0``!OY/[P`2/SP`)TAN_]@_+@`(3KD```WL4(\3^0``F XM`78```&J3EY.=4Y6_]8O+@`*/SP`"D(G/SP`)TAN_]A(;O_73KD```;^3^\`C XM$C\\`"=(;O_8/RX`"$ZY```-[%"/$_D```%V```!JDY>3G5.5O_4+RX`"C\\+ XM`!!")S\\`"=(;O_82&[_U4ZY```&_D_O`!)5CS\\`"=(;O_880#_!%R//5__* XMUCHN_]9)[O_8&;P`2%``.B[_UE)%2>[_V$(T4``_/``G2&[_V#\N``A.N0``A XM#>Q0CQ/Y```!=@```:I.7DYU<`9.N0```3I.5O_Z68\O+@`(3KD```;L6(\MD XM7__\*&[__`P4``%E1#U\``'_^BAN__QZ`!H4/P4P+O_ZL%=C!$[Z`"@H;O_\K XM.B[_^DN\`/\?-%``3KD```V.5(\P+O_ZL%=D!E)N__I@VE2/3EY.=4[Y```.Q XMB$Y6``!9CS\\``I(>0``%H9"ITZY```&QD_O``HCWP```&(_/``?2'D``!:2A XM3KD```VZ7(].N0``#:@C^0```&(```&L68\H>0```:PH;``B+RP`&$ZY```&, XM[%B/(]\```&P68\H>0```;`O+``$3KD```;L6(\CWP```;1*N0```;1G`F`$[ XM3OH%`C\\``M(>0``%K1.N0``#;I<CRAY```!M"\L`"A.N0``$'!8CTZY```-T XMJ!\\``E.N0``#8Y4CRAY```!M$JL``1F'#\\`!)(>0``%L).N0``#;I<CTZY) XM```-J$[Z`&XH>0```;1Z`;JL``1F'#\\`!)(>0``%M9.N0``#;I<CTZY```-O XMJ$[Z`$0H>0```;1Z`KJL``1F'#\\`!)(>0``%NI.N0``#;I<CTZY```-J$[Z] XM`!H_/``22'D``!;^3KD```VZ7(].N0``#:@H>0```;1*K``$9@)@!$[Z!`0C` XM^0```;0```&X68\H>0```;@O+``<3KD```;L6(\CWP```;Q9CRAY```!O"\L@ XM``A.N0``!NQ8CR/?```!P$JY```!O&<.*'D```'`>A"ZE&4"8`1.^@+('SP`2 XM"4ZY```-CE2//SP`#DAY```7$DZY```-NER/*'D```&\+RP`!$ZY```0<%B/E XM3KD```VH'SP`"4ZY```-CE2//SP`#DAY```7(DZY```-NER/*'D```&\+Q0_! XM/``(3KD```^T7(].N0``#:A">0```<PH>0```<`J%#\%,#D```',L%=C!$[Z- XM`CH?/``)3KD```V.5(]Z`#HY```!S"`%3KD````&`````````!````&&/SP`C XM#DAY```7,DZY```-NER/3OH!D#\\``Y(>0``%T).N0``#;I<CT[Z`7H_/``.2 XM2'D``!=23KD```VZ7(].^@%D/SP`#DAY```78DZY```-NER/3OH!3C\\``Y(T XM>0``%W).N0``#;I<CT[Z`3@_/``.2'D``!>"3KD```VZ7(].^@$B/SP`#DAY- XM```7DDZY```-NER/3OH!##\\``Y(>0``%Z).N0``#;I<CT[Z`/8_/``.2'D`[ XM`!>R3KD```VZ7(].^@#@/SP`#DAY```7PDZY```-NER/3OH`RC\\``Y(>0``B XM%]).N0``#;I<CT[Z`+0_/``.2'D``!?B3KD```VZ7(].^@">/SP`#DAY```7A XM\DZY```-NER/3OH`B#\\``Y(>0``&`).N0``#;I<CT[Z`'(_/``.2'D``!@2& XM3KD```VZ7(].^@!</SP`#DAY```8(DZY```-NER/3OH`1C\\``Y(>0``&#).* XMN0``#;I<CT[Z`#!.^@`D``P`(@`X`$X`9`!Z`)``I@"\`-(`Z`#^`10!*@%`, XM`58!;'`"3KD````D#'D`$````<QG)BAY```!P#HY```!S$N\`/_E12\T4``_4 XM/``(3KD```^T7(].^@`D*'D```'`.CD```',2[P`_^5%+S10`#\\`!!.N0``\ XM#_I<CTZY```-J#`Y```!S+!79`I2>0```<Q@`/W*5(\?/``)3KD```V.5(\_E XM/``.2'D``!A"3KD```VZ7(\H>0```;@O+``8/SP`"$ZY```/7ER/3KD```VH) XM'SP`"4ZY```-CE2//SP`#DAY```84DZY```-NER/*'D```&X+RP`%#\\``A.P XMN0``#[1<CTZY```-J!\\``E.N0``#8Y4CS\\``Y(>0``&&).N0``#;I<CUF/Q XM*'D```&X+RP`$$ZY```&[%B/(]\```'(*'D```'(2A1F%C\\`!-(>0``&').; XMN0``#;I<CT[Z`!0H>0```;@O+``03KD``!!P6(].N0``#:A.N0``#:A9CRAY[ XM```!M"\43KD```;L6(\CWP```;1@`/KT+SD```!B3KD```:N6(].7DYU````X XM`&1O<RYL:6)R87)Y`&QI<W1D979S('8Q+C(@0GD@2F]H;B!$879I<R`V+SDP- XM``!N;V1E(&YA;64@.B```%1Y<&4@("`@("`@("`Z($1%5B``5'EP92`@("`@^ XM("`@(#H@1$E2(`!4>7!E("`@("`@("`@.B!63TP@`%1Y<&4@("`@("`@("`Z" XM(#\_/R``1&5V:6-E("`@("`@(#H@`%5N:70@("`@("`@("`Z(`!E;G8@<VEZ@ XM92`@("`@.B``8FQO8VL@<VEZ92`@(#H@`%-E8T]R9R`@("`@("`Z(`!.=6T@, XM2&5A9',@("`@.B``4V5C("\@0FQK("`@(#H@`&)L:W,@+R!T<F%C:R`Z(`!R8 XM97-E<G9E9"`@("`@.B``<')E9F%C("`@("`@(#H@`$EN=&5R;&5A=F4@("`Z\ XM(`!,;W<@0WEL("`@("`@.B``2&EG:"!#>6P@("`@(#H@`$)U9F9E<G,@("`@# XM("`Z(`!B=69M96UT>7!E("`@.B``36%X=')A;G-F97(@(#H@`$UA<VL@("`@# XM("`@("`Z(`!B;V]T<')I("`@("`@.B``1$]3='EP92`@("`@(#H@`%!R:2`@` XM("`@("`@("`Z(`!3=&%C:R`@("`@("`@.B``2&%N9&QE<B`@("`@(#H@`"!D& XM969A=6QT(&1O<R!H86YD;&5R``````/L````I0`````````"```"#````A@`C XM``(D```",@```D````),```"@```!"0```32```&!```!A@```9"```&C```L XM!IX```:J```'3```!YX```@8```(4```"'P```B,```(H@``"+@```C2```(H XMZ```"0(```DJ```)5```"7X```FH```)T@``"?P```J.```+@@``"Z@```O(& XM```,#```#"H```RB```,Q```#/(```T*```-$@``#20```UZ```-B@``#9X`Z XM``W0```-_@``#HH```ZB```.J@``#L@```[.```.\```#O8```\2```/B@``6 XM#Z````_0```/Y@``$!8``!!<```0=```$(0``!#&```0X@``$/(``!#Z```12 XM#@``$10``!$<```1/```$58``!%V```1?```$8X``!&6```1H```$;@``!&^W XM```1Q@``$>(``!'H```1\```$@P``!(2```2&@``$B@``!(N```2-@``$F0`J XM`!)^```2J@``$K8``!*\```2S@``$M8``!+@```2[```$O(``!,&```3#@``8 XM$S8``!-(```37@``$V0``!-T```3>@``$XH``!.0```3H```$Z8``!.V```3H XMO```$\P``!/2```3X@``$^@``!/X```3_@``%`X``!04```4)```%"H``!0Z: XM```40```%%```!16```49@``%&P``!1\```4@@``%)(``!28```4J```%*X`2 XM`!2^```4Q```%/@``!4B```52```%5```!5P```5?```%8(``!68```5H```^ XM%:H``!6V```5O```%=(``!7:```5Y```%?```!7V```6"@``%B8``!8L```6N XM0@``%DH``!90```68```%G@```"2`````0```+H```#V```!$@```2H```7.@ XM```%U@``!=X```7J```%\```!?8```7^```&"@``!AP```8R```&.```!CP`* XM``9(```&;@``!H(```:D```('@``"#8```A$```(2@``"%X```B2```(J```F XM"+X```C8```([@``"0@```D2```)&```"1X```DD```),@``"3P```E"```)1 XM2```"4X```E<```)9@``"6P```ER```)>```"88```F0```)E@``"9P```FB[ XM```)L```";H```G````)Q@``"<P```G:```)Y```">H```GP```)]@``"@0`R XM``H2```*'```"B8```HP```*.@``"D0```I.```*6```"F(```IL```*=@``: XM"H````J&```*F@``"K8```K6```*^```"R````M(```,_```#1P```TZ```-C XM8@``#90```W````-V@``#>0```Z4```.M```#KH```[````.U@``#MP```[HF XM```._@``#P0```^H```/K```#^X```_R```09```$&@``!$$```1(@``$28`Z XM`!$N```11```$4P``!%>```19```$80``!&H```1T```$?H``!(\```23@``] XM$E(``!):```2;```$G0``!*&```2C```$I0``!+$```2^@``$Q0``!,:```3Y XM)```$T```!4````5"```%0X``!4N```5-```%58``!5@```5B@``%<0``!8`& XM```6$@``%A@``!8X```66```%F@``!9R`````````_(```/K````=````_(`D X+``/J`````````_(X: X`` Xend Xsize 7616 END_OF_FILE if test 10702 -ne `wc -c <'listdevs.uu'`; then echo shar: \"'listdevs.uu'\" unpacked with wrong size! fi # end of 'listdevs.uu' fi if test -f 'zapdh0.doc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'zapdh0.doc'\" else echo shar: Extracting \"'zapdh0.doc'\" \(8428 characters\) sed "s/^X//" >'zapdh0.doc' <<'END_OF_FILE' XZapDH0 X------ XBy John Davis, X XVersion 1 October 1989 XVersion 1.1 April 1990 XVersion 1.2 24 June 1990 XVersion 1.3 26 June 1990 ( 1.2 didn't last long did it :-) X XWhat it does X------------ XAll you 2090 owners .... ever get _really_ annoyed with that forced XOldFileSystem DH0 partition? It's bad enough that you hvae to waste 400k Xof disk space with the OFS partition, but what is really inconvenient is Xthat you can't cancel the device ( <assign dh0: remove> sends you off to Xmeet the guru ), and therefore means you can't assign DH0: to be the FFS Xpartition. X XThis in turn means that all those _nice_ programs with install programs Xthat want to install to DH0, or those equally _nice_ programs that give Xyou file requester gadgets only for DH0 aren't much fun at all ( okay ... Xcall me lazy, but newzapping three zillion programs so as DH0->FH0 is not Xmy idea of fun ... at this point I should say a big thank you to all X_real_ programmers whose filereq's know what the _current_ dir is and Xstart there, or even better those that know how to scan a device list for Xavailable devices < not hard ... see the included example code for XListDevs > ) X XWell this program is just for you. What it does is munge it's way through Xthe DOS device list, looking for that 'orrible DH0 node . When it finds Xit, it alters the DeviceNodeName so as it's name is now ZH0. You are then Xfree to assign DH0: onto your real main partition. X XOn top of this, if it detects that you have a df2: floppy disk but no Xdf1: it will create a 'clone' drive called df1:. This is linked (arghhh X... creeping unix terminology :-)) to df2:, and helps with programs that Xonly have gadgets for df0: and df1:, or if you (like me) have got used to Xtyping 'df1:' when referring to the second drive (old a500 traits die hard Xit seems) X XUsage X----- X XPretty simple really, just chuck ZAPDh0 somewhere in your Xstartup-sequence. X XIt is _probably_ safer if you do it once you've assigned everything over Xto the FFS partition, but it seems that it's pretty safe to put just about Xanywhere (as any existing dos locks to dh0:blah will still point to the X_old_ DH0: ... it's just any new references that will get the assigned XDH0). X Xeg .. in your startup-sequence X X ZAPDh0 X assign DH0: fh0: X XFrom now on all references to DH0: will refer to FH0:. If you want to Xacces the OFS partition, you still can (unlike if you use assigndev), it's Xjust now called ZH0: ( and you can still access it via workbench). Plus X( if you had a df2: but no df1: ) you'll find you've grown a df1: as Xwell. X XIncidentally, should you want to STOP the floppy rename ( due to problems Xor if you just don't like the idea ) then just add these lines to your Xstartup-sequence instead of the above : X X ASSIGN DF1: sys: X ZapDH0: X ASSIGN DF1: X ASSIGN DH0: fh0: X X( I don't check to see if an existing DF1 is really a device or just a Xdir, so the assigned df1: will fool me into not touching the floppies ) X XWarning X------- X XThis program is what CBM tech support would probably describe as 'wildly Xillegal' ... I access structures in a manner I've got no right to. As Xsuch I cannot guarantee it will work on any given setup, nor that it will Xwork in future releases of the OS. I have tested it on 2000's with X2090's,on 500's with A590s and on C-Ltd drives, and it's worked ok on all Xof them. X XBUT - there is now warranty implied or express on this package!! If it Xcauses your hard disk to explode, killing your cat and causing you to have Xa nervous breakdown, it is NOT MY FAULT. However, if you do experience Xany strange side effects or any other problems with or due to this Xprogram, get in touch so as I can see about remedying them. X X X XRevision History and Tech Notes X------------------------------- X Xv 1.3 X----- X XTime for a total rethink of how the df2: floppy is renamed to be df1:!! XPlus a general code cleanup ( was starting to look a tad loosed in there). X XPrevious versions just altered the name field of the df1: devicelist node Xin place, this worked great for the 99% of the programs that went by the Xrules for working out what the host device was ( by host device I mean the Xunderlying block structured device the filesystem level device sits on e.g Xfor df0: the host device is trackdisk.device unit 0), but it turned out Xthat some programs were wrongly assuming that there would ALWAYS be a Xcorrespondence between the devname and the trackdisk devce unit acting as Xhost ( that is df1: is unit 1, df2: unit 2 etc ... which is normally Xtrue, but assuming this is NOT an officially supported practice ). X X ! Included in this archive is ListDevs, a small example program that X ! shows how to LEGALLY work out what the host device for a given dos X ! device is, plus it shows how to extract a lot of other info on the X ! host-dev - based in part on code posted to UseNet by Patrick X ! Horgan. X X ! You should NEVER assume a connection between device name and host X ! device and/or it's parameters .. cos sooner or later CBM are X ! likely to change them ( to support higher densities or the like ). X ! REMEMBER .. if they don't state it in the RKM, it's NOT safe to X ! assume it!!!! X XThis release gets around this problem by instead 'cloning' the devicelist Xnode for df2: back into the devicelist as df1:. This effectively makes Xdf1: an alias for df2:, and still costs <100 bytes of memory. X XThis allows ill-behaved programs (Virusx4 and the ARP install were notable Xoffenders) to work ( like why is it that two of my favourite programs, by Xsome of the programmers I respect the most, have to be the one's that do Xthings illegally :-( :-) ). X XI've tested the cloned drives fairly extensively, and everything seems to Xwork as it should with them. This includes correct operation thru XWorkBench, and with format and diskcopy ( format df1: puts a lock on BOTH Xdf1: and df2:, diskcopy df1: to df2: is the same as diskcopy df1: to Xdf1: in that it will prompt you to do disk-swaps ). X XHowever, the df2: clone/rename is still basically illegal operation X(a.k.a a neat hack :-), and it is possible some programs may not like Xhaving a drive clone done. Hence, if anyone experiences any anomalies due Xto using Zapdh0_1.3, could they please contact me ( stating what program Xhad difficulties ). X Xv 1.2 X----- X XMy conscience got the better of me, the floppy rename is now handled in a Xsafer manner (unlike 1.1). ZapDH0 now first looks to see if there's Xalready a DF1 in the system ( an internal 3.5 floppy ). If there is Xalready a df1: it leaves the floppies alone (otherwise if you had an Xexternal as well you'd end up having two DF1:'s !! having this happen Xwasn't much fun). If it can't find a df1:, it looks to see if it can find Xa df2: and renames it if possible. X Xv 1.1 X----- X XNothing mind-blowing I'm afraid ( boy, what I'd give to get rid of that Xslowfilesystem partition altogether, guess I'll just have to buy a 2091 ). X XAll that's changed is that ZapDH0's output is now cleaner, PLUS it now Xalso renames Df2: to be df1: (for people like me with one internal and Xone external floppy, but who are too used to df1: being the second drive) X XIt still renames DH0 ( if found ) to be ZH0 (it simply traverses down the XDOS devicelist and changes the name field in devicelist node for dh0: -> Xzh0: and for df2: -> df1:). To see exactly how this is done ( I smell XBPTRs :-) refer to the source code X X XLicence Agreement X----------------- X XThere is none !! ZapDH0 is absolutely 100% Public Domain (and is Xdedicated to all the other PD authors who help make the Amiga a great Xmachine). X XIf this program makes you happy, and makes your life a little easier, Xthat's good. If you feel obliged to thank me, then that's alright, I Xalways enjoy getting letters from fellow amiga users. If it makes you Xunhappy ( i.e. it's got some bug I haven't found ), then also write to Xme. X XMy contact adress is ..... X X John Davis X 31 Clarence St X Christchurch 2 X New Zealand X Xor you can find me on AmigaINFO BBS X NZ +3-371-531 1200/2400 Baud 24hrs a day X "home of the midnight coders" X Xor you can reach me via Internet/UseNet as CHEM194@canterbury.ac.nz X END_OF_FILE if test 8428 -ne `wc -c <'zapdh0.doc'`; then echo shar: \"'zapdh0.doc'\" unpacked with wrong size! fi # end of 'zapdh0.doc' fi if test -f 'zapdh0.mod' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'zapdh0.mod'\" else echo shar: Extracting \"'zapdh0.mod'\" \(5239 characters\) sed "s/^X//" >'zapdh0.mod' <<'END_OF_FILE' XMODULE zapper; X X(* zap DH0 device node name *) X(* by J Davis v1.3 26 6/90 *) X(* compiled using TDI m-2 3.01a *) X X X(* X this is an attempt to get around the problem with 2090's where X the first partition MUST be OFS and is called DH0. This is a real X problem when you have a main FFS partition, on which you have all X your programs etc, and programs that insist on using DH0 X X This program zaps the DH0 node name so as it is called ZH0. X this is _extremely_ grungy, illegal etc ... but if it works X then it is a good way to cure the problem. X*) X X(* v1.1 changes X cleaned up screen output X now also renames df2: -> df1: for people like me who have X one internal and one external floppy drive X*) X X(* v1.2 changes X only renames df2: -> df1: if no df1: present already X gets around nastiness if you have 2 internals and an external :-) X*) X X(* v1.3 changes X changed strategy on df2:, now clones the device node, links it X back into the device list and renames the clone X*) X XFROM Memory IMPORT AllocMem,MemReqSet,MemPublic,MemClear; XFROM DOSLibrary IMPORT DOSName,DOSBase,BPTR,BSTR; XFROM DOSExtensions IMPORT DosBaseRec,RootNode,DosInfo,DeviceList; XFROM AmigaUtils IMPORT PtrFromBPTR,BPTRFromPtr; XFROM SYSTEM IMPORT NULL; XFROM InOut IMPORT WriteString,WriteLn; XFROM Libraries IMPORT OpenLibrary,CloseLibrary; XFROM DOSLibrary IMPORT DateStampRec; XFROM SYSTEM IMPORT TSIZE; X XTYPE X Xstring = ARRAY [0..255] OF CHAR; Xstrptr = POINTER TO string; X X XVAR X Xourdosbase : POINTER TO DosBaseRec; (* use this to access dosbase *) Xinfoptr : POINTER TO DosInfo; (* points to DOSinfo node *) Xdevlistptr : POINTER TO DeviceList; (* points to current place is DOS devlist *) Xnameptr : strptr; Xdf1present : BOOLEAN; (* flag to indicate df1: is already mounted *) Xcloneptr : POINTER TO DeviceList; (* for cloning operation *) X XBEGIN X XDOSBase:=OpenLibrary(DOSName,0); (* open the dos lib *) X XWriteString("ZAPDh0 v1.3 By John Davis 6/90"); XWriteLn; X Xourdosbase:=DOSBase; X(* get a usable pointer onto dosbase *) X Xinfoptr:=PtrFromBPTR(ourdosbase^.dlRoot^.rnInfo); X(* get pointer dosinfo struct *) X Xdevlistptr:=PtrFromBPTR(infoptr^.diDevInfo); X(* get a pointer to start of devlist *) X Xdf1present:=FALSE; X(* initially assume df1: is not present *) X XWHILE devlistptr<>NULL DO X (* scan down device list checking as we go *) X X nameptr:=PtrFromBPTR(BPTR(devlistptr^.dlName)); X (* get pointer to nodename *) X X IF (nameptr^[1]='D') AND (nameptr^[2]='H') AND (nameptr^[3]='0') THEN X (* this is dh0 so zap it *) X WriteString(" renamed DH0: to ZH0: "); X WriteLn; X nameptr^[1]:='Z'; (* we'll make it be called zh0: instead *) X END; X X IF (nameptr^[1]='D') AND (nameptr^[2]='F') AND (nameptr^[3]='1') THEN X (* found an existing df1 .. set flag so as not to try rename of df2 *) X WriteString(" found existing DF1:, will not attempt to rename DF2:"); X WriteLn; X df1present:=TRUE; X END; X X devlistptr:=PtrFromBPTR(devlistptr^.dlNext); X (* scan on down devlist *) XEND; X XIF NOT df1present THEN X (* didn't find df1:, see if we can find df2 X go back to start of devlist and re-scan X *) X X devlistptr:=PtrFromBPTR(infoptr^.diDevInfo); X (* get a pointer to the start of the devlist *) X X WHILE devlistptr<>NULL DO X (* scan down device list checking as we go *) X X nameptr:=PtrFromBPTR(BPTR(devlistptr^.dlName)); X X IF (nameptr^[1]='D') AND (nameptr^[2]='F') AND (nameptr^[3]='2') THEN X (* this is df2:,so clone it *) X X WriteString(" found df2:, creating clone as df1:"); X WriteLn; X X cloneptr:=AllocMem(TSIZE(DeviceList),MemReqSet{MemPublic,MemClear}); X X (* first link in our clone on the devlist *) X cloneptr^.dlNext :=devlistptr^.dlNext; X devlistptr^.dlNext :=BPTRFromPtr(cloneptr); X X (* now copy the rest of the df2 struct over *) X cloneptr^.dlType :=devlistptr^.dlType; X cloneptr^.dlTask :=devlistptr^.dlTask; X cloneptr^.dlLock :=devlistptr^.dlLock; X cloneptr^.dlVolumeDate :=devlistptr^.dlVolumeDate; X cloneptr^.dlLockList :=devlistptr^.dlLockList; X cloneptr^.dlDiskType :=devlistptr^.dlDiskType; X cloneptr^.dlunused :=devlistptr^.dlunused; X X X (* now alter the name of the clone to be df1: *) X nameptr:=AllocMem(4,MemReqSet{MemPublic,MemClear}); X cloneptr^.dlName:=BPTRFromPtr(nameptr); X X (* now put BSTR 'df1'into name *) X nameptr^[0]:=CHR(3); X nameptr^[1]:='D'; X nameptr^[2]:='F'; X nameptr^[3]:='1'; X X END; (* found df2 if *) X X devlistptr:=PtrFromBPTR(devlistptr^.dlNext); X (* scan on down devlist *) X X END; (* while *) X XEND; (* if not found df1 *) X XCloseLibrary(DOSBase); X XEND zapper. END_OF_FILE if test 5239 -ne `wc -c <'zapdh0.mod'`; then echo shar: \"'zapdh0.mod'\" unpacked with wrong size! fi # end of 'zapdh0.mod' fi if test -f 'zapdh0.uu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'zapdh0.uu'\" else echo shar: Extracting \"'zapdh0.uu'\" \(7554 characters\) sed "s/^X//" >'zapdh0.uu' <<'END_OF_FILE' Xbegin 666 zapdh0 XM```#\P`````````#``````````(```0Z````<`````````/I```$.D[Y```,F XM["(`<`9.1TYU3E;_Z"H`>`G:A#U%__XJ#E"%+47_Z$#N__@M3?_T+5;_\$YH/ XM+4C_[`QN``?__F<(#&X`"/_^9A0M;@`2__HJ+O_H4(4M1?_H3OH`0@QN``__K XM_F8,3F@M:``(__I.^@`N#&X`$/_^9@Q"KO_Z0J[_\$[Z`!H,;@`)__YE"DYHZ XM+5#_^D[Z``@M;@`*__I)^0```!@XKO_^0BP``BEN__H`!#EN__@`""EN__0`5 XM"BEN__``#BEN_^P`$BEN__``%AE\``$`&BYN_^@@.0```!0O0``"/KP``"Q6; XM3FA9B$Y@3G-.7DYU2?D```!4*@PB17``+'@`!$ZN_=@J`"Q%.CD````8!D4!# XM]4C%(@5.KO]P2I\O3O_\3FXM+P`"/1<M+__\2.;__")1((XL24S>/_\O7O_\I XM/IXO7@`"3F8L;__\3G-*GR].__Q.;BTO``(]%RTO__Q(YO_\(E$@CD?Z`"HM^ XM"ST\3KD]/"<`/3Q&_"2.+$E,WC__+U[__#Z>+UX``DYF+&___$YS+T[__$YNG XM+2\`!CTO``0M+__\2.;__"!?(F@`)"*.+$A,WC__+U[__#Z>+UX``DYF+&__, XM_$YS1OPG`"X?#`<`)V8&3KD```(<#`<`)F8&3KD```$<#`<`)68&3KD```%.! XM#`<`"F8(</A.N0````X,!P`+9@AP]TZY````#C`'1$!20$ZY````#DJ?50!F6 XM"`)7^/^#5TYS4P!F!#Z!3G-3`&8&1OP@`$YS4P!F!$YQ3G-3`&8*(`%.N0``Z XM``Y.<TY6``!(Y_\`3.X`\``(2$0V!$A&O4-;YS0$,#Q_\,1`9P`!#C8&QD!G? XM``$&UD($0S_P8P``_&L``/YP#\A`",0`!,Q`",8`!'0`/P,P!,#&2$`R!,+') XM-@1(1L;&T(,V!$A'QL=(0=)#0D-(0]$0V!,;&TD-(04)#2$/1@S8$2$;&A XMQM"#-@3&Q]*#T8(V!$A'R,="1$A$TH31@C8%QL;2@]&"-@5(1L;&0D-(0]*#$ XMT8)(138%QL;2@]&"2$;,Q4A!TD9(04)&2$;1ADA'RL="14A%TH71@E"!T8(V] XM'W@$>AD+`&<&4D0&0P`0%`#HND("Z*CHJ8*"6P4+`&8,U(+3@=&`!$,`"F,DD XM2D-K*$A``D``#X!#2$!*'V<$=A\'P$CN``,`$$S?`/].7DYU5$]P`'(`8.IP5 XM!4ZY````!DY6``!(Y_\`3.X`\``(2$0R!`)!?_!G``".2$8P!@)`?_!G``!P+ XMD$$&0#_P:P``>#(&N4%;YP)&``\(Q@`$`D0`#PC$``1(1DA$<AYV`&$B)`-RG XM%W8`819R">.KU8)K3@1``!!K```LUH/5@F!`WH?=AKR$7,G_^`/#GH6=A%O)J XM_^YJ#-Z%W80#@TI!7<G_X$YU5(]T`'8`2.X`#``03-\`_TY>3G5P!4ZY````T XM!GP`!H,```@`U89D"N*2XI,&0``0:^)R`#("?@ONJNZK[KE"`8:!2$("0@`/6 XMA$!(0DH?9[9P'P'"8+!.5@``2.?@`'``(BX`"&=(-#Q!X$A!,`%F"DA!,`%R' XM``1"`0!"00Q``/]B#.&(X9F``4(!!$(`@$I`:PH$0@`0TH'10&KVZXCKF8`!! XM0@%(0`)```^`0DA`2.X``P`(3-\`!TY>3G5.=4Y6``!(Y^``("X`"..8)``"U XM@`#___\"@O\```!F$G``<@!([@`#``A,WP`'3EY.=>:*XHCBD@:".````"(`L XMYHCFF0*!<````(""8-9.<4YQ3G$J`"/%````!"H((\4`````*@\CQ0````P@2 XM+P`$*@`CQ0````@J.0````R:N0````A0A2/%````4$GY```%^$?Y````5'H+\ XM%MQ7S?_\(_P```#R````%"QX``0B?`````!.KO[:*@`CQ0```!`C^0```!``> XM``!,*CP```'**'D```!,*44`,BQX``1P!TZN_JIP!4ZN_JIP!DZN_JI"IT*G2 XM0J<B>0```%`O"4*G*D^>_``DG<YA"BYY````#'``3G5.^0``!BQD;W,N;&EB, XM<F%R>0!.5@``+PX@+@`,(BX`""QX``1.KO\Z+%\J`"U%`!!.7DYU3OD```4L, XM0KD```!B3OD```<03E8``"\.(FX`""QX``1.KOYB+%].7DYU3E8``"\.*&X`I XM#"H,(D4@+@`(+'@`!$ZN_=@L7RH`+44`$DY>3G5.5@``*BX`".2-+44`#$Y>_ XM3G5.5@``*BX`".6%+44`#$Y>3G5.5O_^68\O/#NCUPI.N0``!.!)^0```.0H* XMWRC?/7P``__^.B[__E-%YT5)^0```-0O-%`$+S10`"\Y```!<"\Y```!;$ZY] XM```#D%"/.B[__N=%2?D```#42?10`"C?*-]2;O_^#&X`$?_^9K9.7DYU3OD`+ XM``8F3E8``%F/>@`O!4ZY```$>$GY```!7"C?*-]9CWH!+P5.N0``!'A)^0``R XM`60HWRC?68]Z"B\%3KD```1X2?D```%L*-\HWV$`_T)9CWH*+P5.N0``!'A)A XM^0```)PHWRC?68]Z9"\%3KD```1X2?D```"D*-\HWUF/*CP``"<0+P5.N0``4 XM!'A)^0```*PHWRC?+SD```"P+SD```"L+SD```"P+SD```"L3KD```)24(])3 XM^0```+0HWRC?+SD```"X+SD```"T+SD```"X+SD```"T3KD```)24(])^0``O XM`+PHWRC?+SD```#`+SD```"\+SD```#`+SD```"\3KD```)24(])^0```,0H* XMWRC?+SD```#(+SD```#$+SD```#(+SD```#$3KD```)24(])^0```,PHWRC?T XM+SD```#0+SD```#,+SD```#0+SD```#,3KD```)24(])^0```-0HWRC?+SD`> XM``#8+SD```#4+SD```#8+SD```#43KD```)24(])^0```-PHWRC?(_Q!(```V XM````9B/\.Z/7"@```'XC_$+(``````!J(_PZ`Q)O````@B/\1AQ``````&XC& XM_#A1MQ<```"&(_Q,OKP@````<B/\-J?%K````(HC_%H.&\H```!V(_PU!C>]W XM````CB/\=)W%K@```'HC_#-6OY4```"20KD```"63EY.^0``"X9.5@``+PXL; XM>0```&).KO_*+%\J`"U%``A.7DYU3E8``"\.+'D```!B3J[_?"Q?*@`M10`(, XM3EY.=4Y6```O#B(N``@L>0```&).KO\H+%\J`$J%5L5$!1U%``Q.7DYU3E8`[ XM`"\.+'D```!B3J[_Q"Q?*@`M10`(3EY.=4Y6```O#B(N`!`D+@`,)BX`""QY! XM````8DZN_[XL7RH`+44`%$Y>3G5.5@``+PXB+@`0)"X`#"8N``@L>0```&).5 XMKO_0+%\J`"U%`!1.7DYU3E;__"AN``Q*K@`(9@HY?/__``9.^@!V**X`""\,H XM58\O+@`(3KD```E:6(\:'RA?2@5G"$(L``1.^@!.+PQ9CR\N``A"IWH!+P5.. XMN0``"9Q/[P`,*A\H7RU%__PO#%F/+RX`"$*G>O\O!4ZY```)G$_O``PJ'RA?) XM*44`"$JL``A7Q40%&44`!$)L``9.7DYU3E;__"AN``I*E&-4+PQ9CR\41^X`- XM""H++P5Z`2\%3KD```G$3^\`#"H?*%\M1?_\>@&ZKO_\9QPO#%F/3KD```D^- XM*A\H7SE%``89?``!``1.^@`*0FP`!D(L``1.^@`(.7S__P`&3EY.=4Y6__HHC XM;@`.2I1C`F`$3OH`@$)N__HZ+O_ZNFX`#&(4.B[_^B9N``A*,U``9P92;O_Z/ XM8.(O#%F/+Q0F;@`(*@LO!7H`.B[_^B\%3KD```G$3^\`#"H?*%\M1?_\>@`Z+ XM+O_ZNJ[__&<<+PQ9CTZY```)/BH?*%\Y10`&&7P``0`$3OH`"D)L``9"+``$D XM3OH`"#E\__\`!DY>3G5.^0``!PI.5@``2KD```!B9AY9CS\\``I(>0``"[A"0 XMITZY```&4$_O``HCWP```&).7D[Y```+V&1O<RYL:6)R87)Y`$Y6``!".0``. XM`71.7DYU3OD```N`3E8``&$`_^9.7D[Y```,3$Y6``!(>0```88?+@`(3KD`S XM``I\7(].7DYU3E8``!\\``IA`/_<5(].7DYU3E8``$AY```!AC\N``PH;@`(Z XM2%1.N0``"N9/[P`*2GD```&,5\5$!1/%```!=DY>3G5.^0``"]).5@``2KD`9 XM``!B9AY9CS\\``I(>0``#.!"ITZY```&4$_O``HCWP```&)".0```7A(>0``G XM`7I9CTZY```)(DZY```)[%"/2?D```%Z1_D```&2)MPFW";<2'D```&&68].$ XMN0``"8!.N0``">Q0CTGY```!AD?Y```!GB;<)MPFW$Y>3OD```SR:6X^(```Q XM;W5T/B``9&]S+FQI8G)A<GD`3OD```Q&3E8``%F//SP`"DAY```00D*G3KD`, XM``903^\`"B/?````8C\\`!U(>0``$$Y.N0``#!1<CTZY```,`B/Y````8@``> XM`:I9CRAY```!JBAL`"(O+``83KD```:(6(\CWP```:Y9CRAY```!KB\L``1.: XMN0``!HA8CR/?```!LD(Y```!NDJY```!LF<"8`1.^@#068\H>0```;(O+``HS XM3KD```:(6(\CWP```;8H>0```;8,+`!$``%F0"AY```!M@PL`$@``F8R*'D`# XM``&V#"P`,``#9B0_/``72'D``!!N3KD```P47(].N0``#`(H>0```;89?`!:K XM``$H>0```;8,+`!$``%F/"AY```!M@PL`$8``F8N*'D```&V#"P`,0`#9B`_M XM/``V2'D``!"(3KD```P47(].N0``#`(3_``!```!NEF/*'D```&R+Q1.N0``# XM!HA8CR/?```!LF``_R9*.0```;IF`F`$3OH!T%F/*'D```&N+RP`!$ZY```&V XMB%B/(]\```&R2KD```&R9P)@!$[Z`:A9CRAY```!LB\L`"A.N0``!HA8CR/?5 XM```!MBAY```!M@PL`$0``68>*'D```&V#"P`1@`"9A`H>0```;8,+``R``-F) XM`F`$3OH!0C\\`"1(>0``$,!.N0``#!1<CTZY```,`EF/>BPO!2\\``$``4ZY^ XM```&!%"/(]\```&\*'D```&R)GD```&\)I19CR\Y```!O$ZY```&=EB/*'D`J XM``&R*)\H>0```;(F>0```;PG;``$``0H>0```;(F>0```;PG;``(``@H>0``Y XM`;(F>0```;PG;``,``PH>0```;(F>0```;Q)[``01^L`$";<)MPFW"AY```!9 XMLB9Y```!O"=L`!P`'"AY```!LB9Y```!O"=L`"``("AY```!LB9Y```!O"=L? XM`"0`)%F/>@0O!2\\``$``4ZY```&!%"/(]\```&V68\O.0```;9.N0``!G98: XMCRAY```!O"E?`"@H>0```;88O``#*'D```&V&7P`1``!*'D```&V&7P`1@`"S XM*'D```&V&7P`,0`#68\H>0```;(O%$ZY```&B%B/(]\```&R8`#^3B\Y````E XM8DZY```&.%B/3EY.=0````!D;W,N;&EB<F%R>0!:05!$:#`@=C$N,R!">2!*: XM;VAN($1A=FES(#8O.3```"`@(')E;F%M960@1$@P.B!T;R!:2#`Z(```("`@+ XM9F]U;F0@97AI<W1I;F<@1$8Q.BP@=VEL;"!N;W0@871T96UP="!T;R!R96YA9 XM;64@1$8R.@`@("!F;W5N9"!D9C(Z+"!C<F5A=&EN9R!C;&]N92!A<R!D9C$Z- XM```````#[````%(``````````@```=@```'D```!\````?X```(,```"&```9 XM`DP```.,```$.@``!6P```6````%J@``!?0```8H```&-```!J@```;@```'\ XM#```!QP```<R```'2```!V(```=X```'D@``![H```?D```(#@``"#@```ABD XM```(C```"1X```H2```*.```"E@```J<```*N@``"S(```M4```+@@``"YH`S XM``NB```+M```"]0```OD```+^```#"H```Q(```,8```#&@```R&```,C```1 XM#*X```RT```,T```#.X```S^```-!@``#1H```T@```-*```#4@```UB```-' XMD```#<P```W2```-V@``#AH```X@```.*```#D````YL```.E```#M8```[<S XM```.Y```#O8```\:```/O```#](``!`<```0-````)L````!````G````-@`+ XM``#T```!#```!38```4^```%1@``!5(```58```%7@``!68```5R```%A```, XM!9H```6@```%I```!;````76```%Z@``!BX```:N```&Q@``!M0```;:```&@ XM[@``!R(```<X```'3@``!V@```=^```'F```!Z(```>H```'K@``$```"18```DJ```)1@``"68```F(```)L```"=@```N,P XM```+K```"\H```ON```,&@``##0```P^```,4@``#'(```QX```,?@``#)0`_ XM``R:```,I@``#+P```S"```-$```#2X```TR```-.@``#5````U8```-:@``% XM#7````UV```-A@``#9@```V>```-K```#;H```W@```-[```#?H```X(```.T XM,```#C@```Y(```.4@``#F(```YT```.>@``#HH```Z<```.H@``#K````Z^B XM```._@``#P0```\*```/%```#R(```\J```/,```#SP```]"```/3@``#U0`@ XM``]@```/9@``#WH```^````/C```#Y(```^>```/I```#\0```_,```/V@``O XM#^0```_N```/^@``$`8``!`4```0)```$"X````````#\@```^L```!P```#[ X-\@```^H````````#\@8`: X`` Xend Xsize 5368 END_OF_FILE if test 7554 -ne `wc -c <'zapdh0.uu'`; then echo shar: \"'zapdh0.uu'\" unpacked with wrong size! fi # end of 'zapdh0.uu' fi echo shar: End of archive 1 \(of 1\). cp /dev/null ark1isdone MISSING="" for I in 1 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have the archive. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Mail submissions (sources or binaries) to <amiga@uunet.uu.net>. Mail comments to the moderator at <amiga-request@uunet.uu.net>. Post requests for sources, and general discussion to comp.sys.amiga.