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.