Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator) (07/08/90)
Submitted-by: davids@ucscb.UCSC.EDU (Dave Schreiber) Posting-number: Volume 90, Issue 203 Archive-name: util/ruler-4.0/part01 [ uuencoded executables enclosed ...tad ] Ruler gives you a ruler in a window to help in aligning text, keeping filenames from becoming too long, etc. The author has given me permission to submit it. #!/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: ArpRuler4.uu README Ruler4.doc Ruler4.uu arpruler4.c # makefile ruler4.c # Wrapped by tadguy@xanth on Sun Jul 8 11:49:57 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'ArpRuler4.uu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'ArpRuler4.uu'\" else echo shar: Extracting \"'ArpRuler4.uu'\" \(6750 characters\) sed "s/^X//" >'ArpRuler4.uu' <<'END_OF_FILE' Xbegin 664 ArpRuler4 XM```#\P`````````#``````````(```2`````+0````$```/I```$@$[Z"8X`\ XM`%1E>'0@4G5L97(@($%R<%]6-"XP("`@,CDM1&5C+3@Y(*DQ.3@Y(%1H860@` XM1FQO<GEA;B!A;F0@0VAA9"!.971Z97(@("`@("`@("`@("`@("`@("`@("`@6 XM("`@("`@("``"B4T,',*3W!E;G,@82!B;W)D97)L97-S(%=O<FM"96YC:"!WE XM:6YD;W<@:6X@=VAI8V@@:7,@8V]N=&%I;F5D(&$@<G5L97(*9F]R('1H92!PI XM=7)P;W-E(&]F(&%L:6=N:6YG(&]R(&-O;G-T<F%I;FEN9R!T97AT.R!T:&4@- XM9&5F875L="!R=6QE<@II<R`S,"!C:&%R86-T97)S('=I=&@@86X@."!P:7AE1 XM;"!S8V%L92!A;F0@:7,@:6YT96YD960@=&\@:&5L<`IP<F5V96YT(&5N=&5RF XM:6YG('1O;RUL;VYG(&9I;&5N86UE<RX*"E5S86=E.@H*"4-,23X@4E5.("`E_ XM<R`@6R!S:7IE(%T@6R!S8V%L92!="@IW:&5R92!@<VEZ92<@:7,@=&AE(&YUW XM;6)E<B!O9B!R=6QE<B!M87)K:6YG<RP@86YD(&!S8V%L92<@:7,@=&AE"G=I6 XM9'1H(&)E='=E96X@96%C:"!M87)K:6YG("AA('!A<G1I8W5L87(@9F]N="!WR XM:61T:"!F;W(@97AA;7!L92DN"@I@<VEZ92<@;75S="!B92!B971W965N(#$RF XM(&%N9"`E;&0@:6YC;'5S:79E+"!A;F0@9&5F875L=',@=&\@,S`N"F!S8V%L2 XM92<@8V%N;F]T(&)E(&=R96%T97(@=&AA;B`E;&0@;W(@;&5S<R!T:&%N(#@NI XM("!4:&4@9&5F875L="!I<R`X+@H*``!.5?_60FR`9DAX`"=(>@3^3KH.<%!/8 XM*4"`3DJL@$YF"DAZ!/9.N@8^6$]2;(!F(&R`3BEH`#B`4DAY``$``$AX`5I.> XMN@WT4$\I0(!:2JR`6F8.3KH%T$AZ!-I.N@8(6$]2;(!F0J=(>``!2'@!6B\L? XM@%I.N@[<3^\`$$C`*T#_UDJM_]9F!$ZZ!=PK?````![_["M\````"/_X(&R`C XM6C`H``Q(P%>`<@A.N@KR*T#_\"!L@%HP*``,54!(P('\``Q(P"M`__0,;0`!% XM``AO8B!M``HB:``$#!$`/V<J(&T`"B)H``0,$0`M9QP@;0`*(F@`!`P1`&AGN XM#B!M``HB:``$#!$`2&8J+RW_]"\M__`@;0`*+Q`O+(`R+RR`-DZZ!;)/[P`4' XM3KH$_D)G3KH+&%1/#&T``P`(;QX@;0`*+Q!(>@003KH%C%!/3KH$VC\\``I.O XMN@KR5$\,;0`"``AM2@QM``,`"&Y"(&T`"B\H``1.N@5P6$\K0/_L#*T````,X XM_^QM"B`M_^RPK?_P;QPO+?_P2'H#YDZZ!3I03TZZ!(@_/``*3KH*H%1/#&T`T XM`P`(9EH@;0`*+R@`"$ZZ!2983RM`__@,K0````C_^&P82'H#S$ZZ!/Y83TZZ# XM!$P_/``*3KH*9%1/("W_^+"M__1O'"\M__1(>@/'3KH$V%!/3KH$)C\\``I.P XMN@H^5$\B+?_X("W_[$ZZ"+`K0/_H("W_Z%B`.4"`!@QL`2R`!F\$<`!@!#`\> XM`/`Y0(`"*6R`,H`<<@4@+?_X3KH(?BM`__P@;(!:,"R`!K!H``QO"DAZ`X9.[ XMN@0$6$\@;(!.*6@`-(!62&R``DZZ#.Y83RE`@$9*K(!&9@I(>@.%3KH#W%A/P XM4FR`9B!L@$8I:``R@$I"IR\L@$I.N@Q24$]"IR\L@$I.N@Q&4$](>``8("W_! XMZ%:`+P!(>``*0J<O+(!*3KH,&$_O`!1(>``!+RR`2DZZ#!I03TAX``A(>``<: XM+RR`2DZZ"^1/[P`,2'@`"$AX`!\O+(!*3KH+OD_O``Q(>``)2'@`'"\L@$I.E XMN@N\3^\`#$AX``D@;?_H2&C_SB\L@$I.N@N23^\`#$AX`!A(>``#2'@`"4*GF XM+RR`2DZZ"YQ/[P`40JW_Y&```0X@+?_DL*W_Z&T0*VW_Z/_D*WP````*_^!@J XM,$JM_^1F"BM\````"O_@8"`B+?_\("W_Y$ZZ"#QF"BM\````$__@8`@K?```H XM`!;_X"\M_^`@+?_D5H`O`"\L@$I.N@L@3^\`#$AX`!@@+?_D5H`O`"\L@$I.' XMN@KV3^\`#$JM_^1O``"$("W_Y+"M_^AL>"(M__P@+?_D3KH'VF9J(BW_^"`MO XM_^1.N@>D+P!(>@(@2&W_VTZZ`KA/[P`,2'@`$2`M_^2PK?_\9@P@+?_DD+P`+ XM```)8`8@+?_D6X`O`"\L@$I.N@J<3^\`#$AM_]M.N@*L6$](P"\`2&W_VR\L3 XM@$I.N@JR3^\`#"`M__C1K?_D("W_Z-"M__@B+?_DLH!M`/[D(&R`1B)H`%9PZ XM`!`I``]R`>&A+P%.N@H>6$\@;(!&+R@`5DZZ"=Q83RE`@%X@;(!>*6@`%(!B/ XM+RR`7DZZ">A83R!L@$8O*`!63KH)MEA/*4"`7F<,+RR`7DZZ"<I83V#@#*P`S XM``(`@&)F#$ZZ`49"9TZZ!V!43PRL`````H!B9A(@;(!&,"@`"%-`2,!7@"M`# XM_^A@`/V@3EU.=6%R<"YL:6)R87)Y`#]#86YN;W0@;W!E;B!A<G`N;&EB<F%RY XM>0H`/W)A;B!O=70@;V8@879A:6QA8FQE(&UE;6]R>0H`/U1O;R!M86YY(&%RM XM9W5M96YT<RP@8&`E<R`_)R<@9F]R(&AE;'`*`#]@<VEZ92<@;75S="!B92`^] XM/2`Q,B!A;F0@/#T@)6QD"@`_1F]N="!S8V%L92!M=7-T(&)E(&%T(&QE87-T' XM(#@A"@`_1F]N="!S:7IE(&-A;B!B92!.3R!L87)G97(@=&AA;B`E;&0A"@`_1 XM4G5L97(@=&]O(&QA<F=E(&9O<B!7;W)K0F5N8V@@<V-R965N"@`_0V%N;F]T] XM(&]P96X@=VEN9&]W"@`E,FQD``!.50``,"R`9DC`8"0O+(!&3KH)#EA/2'@!4 XM6B\L@%I.N@@:4$\O+(!.3KH'VEA/8`Q3@&?P4X!GWE.`9]!.74YU3E4``$JM1 XM``AF#$AZ`"1.N@!<6$]@"B\M``A.N@!06$]AGC\\`!1.N@6X5$].74YU26YT' XM97)N86P@9F%I;'5R92P@97AI=&EN9R!G<F%C969U;&QY+BXN"@``3.\!`0`$! XM0^\`#"QL@$Y.[OU^(&\`!$/O``@L;(!.3N[_'"!O``0L;(!.3N[^_B!O``0@) XM"$H89OR1P"`(4X!.=6%P0^R`1D7L@$:UR68.,CP`&VL(=``BPE')__PI3X!H3 XM+'@`!"E.@&Q(YX"`""X`!`$I9Q!+^@`(3J[_XF`&0J?S7TYS0_H`($ZN_F@I) XM0(!P9@PN/``#@`=.KO^48`1.N@`:4$].=61O<RYL:6)R87)Y`$GY``!__DYUX XM3E4``"\*2'D``0``,"R`.L'\``8O`$ZZ!JPI0(!T4$]F%$*G2'D``0``3KH&/ XM;%!/+FR`:$YU(&R`=$)H``0@;(!T,7P``0`0(&R`=#%\``$`"B!L@&@@+(!H< XMD*@`!%"`*4"`>"!L@'@@O$U!3EA"ITZZ!F`D0$JJ`*Q83V<N+RT`#"\M``@O3 XM"DZZ`*XY?``!@'P@;(!T`&B````$(&R`=`!H@```"D_O``Q@0DAJ`%Q.N@:(@ XM2&H`7$ZZ!D0I0(!^(&R`?DJH`"103V<0(&R`?B)H`"0O$4ZZ!8983R\L@'XOW XM"DZZ`HPI;(!^@()03TZZ!7H@;(!T((!.N@6&(&R`="%```9G%DAX`^U(>@`J. XM3KH%8B!L@'0A0``,4$\O+(""/RR`ADZZ]V)"9TZZ`Z!03R1?3EU.=2H`3E4`; XM`$CG##`D;0`0(&T`"$JH`*QG&"!M``@@*`"LY8`H`"!$("@`$.6`)D!@!"9L1 XM@#P0$TB`2,#0K0`,5(`Y0("(0J<P+("(2,`O`$ZZ!3XI0("*4$]F"$S?##!.1 XM74YU$!-(@#H`/P4@2U*(+P@O+("*3KH!?C`%2,`@0-'L@(I#^@%$$-EF_#\M. XM``XO"B\L@(I.N@$Z(&R`BD(P4``Y?``!@(8P!4C`T*R`BB9`4HLD2T_O`!00: XM$TB`.@"P?``@9QBZ?``)9Q*Z?``,9PRZ?``-9P:Z?``*9@12BV#8#!,`(&UZB XM#!,`(F8N4HL@2U*+$!!(@#H`9QX@2E**$(6Z?``B9A`,$P`B9@12BV`&0BK_C XM_V`"8-9@."!+4HL0$$B`.@!G)KI\`"!G(+I\``EG&KI\``QG%+I\``UG#KI\N XM``IG""!*4HH0A6#.($I2BD(02D5F`E.+4FR`AF``_UI"$D*G,"R`AE)`2,#E* XM@"\`3KH$'"E`@()03V8(0FR`AF``_MAZ`"9L@(I@)#`%2,#E@"!L@((ABP@`W XM($L@"$H89OR1P%.(,`A20$C`U\!21;IL@(9MUC`%2,#E@"!L@()"L`@`8`#^Z XME"``,#Q__V`$,"\`#"!O``1*&&;\4T@B;P`(4T`0V5?(__QG`D(0("\`!$YU? XM3.\#```$(`@R+P`,8`(0V5?)__QG!E)!8`)"&%')__Q.=4CG<``T`<3`)@%(8 XM0\;`2$-"0]2#2$#`P4A`0D#0@DS?``Y.=4Y5``!(YPXP)&T`"$*G2'H`CDZZ[ XM`XHI0(".4$]F"$S?#'!.74YU(&T`#")H`"0O*0`$3KH$'"@`6$]G4DAZ`&T@( XM1"\H`#9.N@/N)D!*@%!/9S1(>`/M+PM.N@*H+`!03V<D(`;E@"H`($4E:``(5 XM`*0E1@"<2'@#[4AZ`#A.N@*$)4``H%!/+P1.N@.Z6$\O+(".3KH"K$*L@(Y89 XM3V"`:6-O;BYL:6)R87)Y`%=)3D1/5P`J`$CG2`!"A$J`:@1$@%)$2H%J!D2!, XM"D0``6$^2D1G`D2`3-\`$DJ`3G5(YT@`0H1*@&H$1(!21$J!:@)$@6$:(`%@Z XMV"\!81(@`2(?2H!.=2\!808B'TJ`3G5(YS``2$%*068@2$$V`30`0D!(0(##) XM(@!(0#("@L,P`4)!2$%,WP`,3G5(028!(@!"04A!2$!"0'0/T(#3@;:!8@228 XM@U)`4<K_\DS?``Q.=4Y5``!*K("29P8@;("23I`_+0`(3KH`"%1/3EU.=4Y5G XM__PO!#`M``A(P"M`__Q*K(!T9RAX`&`*/P1.N@#^5$]21+AL@#IM\#`L@#K!P XM_``&+P`O+(!T3KH!QE!/2JR`EF<&(&R`EDZ02JR`0&<*+RR`0$ZZ`4A83TJL7 XM@)IG""!L@)H@K(">2JR`HF<*+RR`HDZZ`5983TJL@*9G"B\L@*9.N@%&6$]*S XMK("J9PHO+("J3KH!-EA/2JR`KF<*+RR`KDZZ`2983RQX``0(+@`$`2EG%"\-I XM2_H`"DZN_^(J7V`&0J?S7TYS2JR`?F8P2JR`BF<H,"R`B$C`+P`O+("*3KH!Y XM'C`L@(920$C`Y8`O`"\L@().N@$*3^\`$&`.3KH`]"\L@'Y.N@$P6$\@+?_\7 XM+FR`:$YU*!].74YU3E4``$CG#B`X+0`(,`3!_``&)$#5[(!T2D1M"KAL@#IL& XM!$J29A`Y?``"@+)P_TS?!'!.74YU""H`!P`$9@@O$DZZ``I83T*2<`!@XB(OW XM``0L;(!P3N[_W"(O``0L;(!P3N[_@BQL@'!.[O_*3.\`!@`$+&R`<$[N_^(L@ XM;(!P3N[_Q$[Z``(B+P`$+&R`<$[N_Z9(YP$$3.\@@``,+&R`;$ZN_Y1,WR"`< XM3G5.^@`"(F\`!"QL@&Q.[OYB3OH``DSO``,`!"QL@&Q.[O\Z(F\`!"QL@&Q.N XM[O[:+&R`;$[N_WQ.^@`"(F\`!"`O``@L;(!L3N[_+D[Z``(@;P`$+&R`;$[N! XM_HQ.^@`"+&R`;")O``0@+P`(3N[]V$[Z``(B;P`$+&R`;$[N_H8@+P`$+&R`C XM;$[N_L(@;P`$+&R`;$[N_H`B;P`$3.\``P`(+&R`5D[N_PHB;P`$3.\``P`(B XM+&R`5D[N_Q`B;P`$3.\`#P`(+&R`5D[N_LXB;P`$("\`""QL@%9.[OZJ(F\`E XM!"!O``@@+P`,+&R`5B\'3J[_Q"X?3G5,[P,```0L;(".3N[_H"!O``0L;(".E XM3N[_IB!O``0L;(".3N[_LB!O``0L;(!23N[_N"!O``1,[P(#``@L;(!23N[^V XM5B!O``0L;(!23N[_-````^P````!`````0``"@0````````#\@```^H````1T XM`/````#Q`!D``0```@(``P@/```````````````$````````````9```__\`_ XM```!````!@```&@`%`````````````````/L`````P`````````:````,```_ X6`#0````````#\@```^L````!```#\@``- X`` Xend Xsize 4792 END_OF_FILE if test 6750 -ne `wc -c <'ArpRuler4.uu'`; then echo shar: \"'ArpRuler4.uu'\" unpacked with wrong size! fi # end of 'ArpRuler4.uu' fi if test -f 'README' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'README'\" else echo shar: Extracting \"'README'\" \(718 characters\) sed "s/^X//" >'README' <<'END_OF_FILE' X X There are two versions of the program included, Ruler4 and ArpRuler4. XThey are functionally identical. The only difference between the twoprograms Xis that one uses the ARP (AmigaDos Replacement Project) library X(libs:arp.library) and the other doesn't. In any case, by using the X"arp.library" the program is somewhat smaller (about 3K)... Just copy Xwhichever version is appropriate to your c: directory (or anywhere in your XPath) as "Ruler" (or whatever you want to call it), and you'll be all set. X X Read the docs, or type "Ruler ?" to get help. X X X If you have have no idea what "arp.library" is all about, then Xjust use the program titled "Ruler4" for now, since it will work for Xeverybody. X X X Chad Netzer END_OF_FILE if test 718 -ne `wc -c <'README'`; then echo shar: \"'README'\" unpacked with wrong size! fi # end of 'README' fi if test -f 'Ruler4.doc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Ruler4.doc'\" else echo shar: Extracting \"'Ruler4.doc'\" \(3088 characters\) sed "s/^X//" >'Ruler4.doc' <<'END_OF_FILE' X RULER X X Opens a borderless WorkBench window in which is contained a ruler X for the purpose of aligning or constraining text; the default ruler X is 30 characters with an 8 pixel scale and is intended to help X prevent entering too-long filenames. X X Usage: X X CLI> RUN RULER [ size ] [ scale ] X X where `size' is the number of ruler markings, and `scale' is the X width between each marking (a particular font width for example). X X Evoking the command with an argument of "?", such as: X X CLI> RULER ? X X will print out a help message detailing what values are valid for X your particular Workbench environment. X X X The window, of course, can be moved to any convenient location on the X screen, and resized with an invisible resizing gadget found in the X lower right corner. X X Version 4.0 29-Dec-1989 (copyright)1989 Chad Netzer and Thad Floryan X X Based upon code, idea, and logic from: X X Version 1.0 7-Nov-1988 (copyright)1988 Thad Floryan X X Revision history: X 29-December-1989 - (Ver. 4.0) - Added an offset so that you can X just stick the window on the left edge of the workbench screen, X and it will automatically be lined up with the characters. X Fixed some more minor bugs and rearranged the code a bit. X Added ARP support for those who want it. (CFN) X X 09-March-1989 - (Ver. 3.1) - Fixed a visual bug so that scale can X no longer be less than eight. (CFN) X X 06-Dec-1988 - (Ver. 3.0) - Added support for measuring fonts of X varying widths (selectable scale). (CFN) X X 22-Nov-1988 - (Ver. 2.2) - More adjustments to code, No major X changes. Program size is slightly smaller. (CFN) X X 14-Nov-1988 - (Ver. 2.1) - Fixed a few minor (harmless) bugs. The X right edge of the ruler is now always redrawn after resizing. X I got rid of that GOTO statement (which in 'C', is considered a X bug. :-) Version 2.1 now lets you open a ruler to be as low as X 12 characters wide, which 2.0 only advertised. (CFN) X X 13-Nov-1988 - (Ver. 2.0) - I added minor enhancements, most X noteably, the ability to resize the window, and support for X overscanned screens. (CFN) X X X Feel welcome to use this program for any non-commercial purposes or X for your personal learning. Commercial users are requested to contact X Thad at either: X X UUCP: thad@cup.portal.com (OR) ..!sun!portal!cup.portal.com!thad X BBS: BBS-JC, 415/961-7250 (300/1200/2400), "Thad Floryan" | "SYSOP" X X or Chad at: X X UUCP: chad@ucscb.ucsc.edu (during school term) X UUCP: chad@cup.portal.com (holidays, summer, etc.) X BBS: BBS-JC, 415/961-7250 (300/1200/2400), "Chad Netzer" X X X Building instructions (Manx Aztec C): X X ************************ X *** Non-ARP Version *** X ************************ X X cc ruler4 X ln ruler4 -lc X X X ******************* X *** ARP Version *** X ******************* X X cc arpruler4 X ln arpruler4 -la -lc END_OF_FILE if test 3088 -ne `wc -c <'Ruler4.doc'`; then echo shar: \"'Ruler4.doc'\" unpacked with wrong size! fi # end of 'Ruler4.doc' fi if test -f 'Ruler4.uu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Ruler4.uu'\" else echo shar: Extracting \"'Ruler4.uu'\" \(11122 characters\) sed "s/^X//" >'Ruler4.uu' <<'END_OF_FILE' Xbegin 664 Ruler4 XM```#\P`````````#``````````(```;[````P0````$```/I```&^T[Z"DX`+ XM`%1E>'0@4G5L97(@("!6-"XP("`@,CDM1&5C+3@Y(*DQ.3@Y(%1H860@1FQO_ XM<GEA;B!A;F0@0VAA9"!.971Z97(@("`@("`@("`@("`@("`@("`@("`@("`@5 XM("`@("`@("``"B4T,',*3W!E;G,@82!B;W)D97)L97-S(%=O<FM"96YC:"!WE XM:6YD;W<@:6X@=VAI8V@@:7,@8V]N=&%I;F5D(&$@<G5L97(*9F]R('1H92!PI XM=7)P;W-E(&]F(&%L:6=N:6YG(&]R(&-O;G-T<F%I;FEN9R!T97AT.R!T:&4@- XM9&5F875L="!R=6QE<@II<R`S,"!C:&%R86-T97)S('=I=&@@86X@."!P:7AE1 XM;"!S8V%L92!A;F0@:7,@:6YT96YD960@=&\@:&5L<`IP<F5V96YT(&5N=&5RF XM:6YG('1O;RUL;VYG(&9I;&5N86UE<RX*"E5S86=E.@H*"4-,23X@4E5.("`E_ XM<R`@6R!S:7IE(%T@6R!S8V%L92!="@IW:&5R92!@<VEZ92<@:7,@=&AE(&YUW XM;6)E<B!O9B!R=6QE<B!M87)K:6YG<RP@86YD(&!S8V%L92<@:7,@=&AE"G=I6 XM9'1H(&)E='=E96X@96%C:"!M87)K:6YG("AA('!A<G1I8W5L87(@9F]N="!WR XM:61T:"!F;W(@97AA;7!L92DN"@I@<VEZ92<@;75S="!B92!B971W965N(#$RF XM(&%N9"`E;&0@:6YC;'5S:79E+"!A;F0@9&5F875L=',@=&\@,S`N"F!S8V%L2 XM92<@8V%N;F]T(&)E(&=R96%T97(@=&AA;B`E;&0@;W(@;&5S<R!T:&%N(#@NI XM("!4:&4@9&5F875L="!I<R`X+@H*``!.5?_60FR"MD*G2'H%$DZZ&%!03RE`4 XM@J)*K(*B9@I(>@403KH&J%A/4FR"MDAY``$``$AX`5I.NA?>4$\I0(*J2JR"> XMJF8.3KH&*DAZ!01.N@9\6$]2;(*V0J=(>``!2'@!6B\L@JI.NAC43^\`$$C`> XM*T#_UDJM_]9F!$ZZ!E`K?````![_["M\````"/_X(&R"JC`H``Q(P%>`<@A.M XMN@_0*T#_\"!L@JHP*``,54!(P('\``Q(P"M`__0,;0`!``AO8B!M``HB:``$3 XM#!$`/V<J(&T`"B)H``0,$0`M9QP@;0`*(F@`!`P1`&AG#B!M``HB:``$#!$`` XM2&8J+RW_]"\M__`@;0`*+Q`O+(`R+RR`-DZZ"Y9/[P`43KH%6$)G3KH4U%1/" XM#&T``P`(;QX@;0`*+Q!(>@0Z3KH+<%!/3KH%-#\\``I.NA2N5$\,;0`"``AML XM3`QM``,`"&Y$(&T`"B\H``1.N@746$](P"M`_^P,K0````S_[&T*("W_[+"M6 XM__!O'"\M__!(>@0.3KH+'%!/3KH$X#\\``I.NA1:5$\,;0`#``AF7"!M``HO] XM*``(3KH%B%A/2,`K0/_X#*T````(__AL&$AZ`_).N@K>6$].N@2B/SP`"DZZ; XM%!Q43R`M__BPK?_T;QPO+?_T2'H#[4ZZ"KA03TZZ!'P_/``*3KH3]E1/(BW_K XM^"`M_^Q.N@EX*T#_Z"`M_^A8@#E`@`8,;`$L@`9O!'``8`0P/`#P.4"``BELT XM@#*`''(%("W_^$ZZ"48K0/_\(&R"JC`L@`:P:``,;PI(>@.L3KH$=%A/0J=(& XM>@/'3KH5_%!/*4""IDJL@J9F"DAZ`\1.N@146$]2;(*V2&R``DZZ%LA83RE`- XM@II*K(*:9@I(>@/!3KH$,EA/4FR"MB!L@IHI:``R@IY"IR\L@IY.NA8L4$]"9 XMIR\L@IY.NA8@4$](>``8("W_Z%:`+P!(>``*0J<O+(*>3KH5\D_O`!1(>``!@ XM+RR"GDZZ%?103TAX``A(>``<+RR"GDZZ%;Y/[P`,2'@`"$AX`!\O+(*>3KH5N XMF$_O``Q(>``)2'@`'"\L@IY.NA663^\`#$AX``D@;?_H2&C_SB\L@IY.NA5L] XM3^\`#$AX`!A(>``#2'@`"4*G+RR"GDZZ%79/[P`40JW_Y&```0X@+?_DL*W_$ XMZ&T0*VW_Z/_D*WP````*_^!@,$JM_^1F"BM\````"O_@8"`B+?_\("W_Y$ZZ# XM#/QF"BM\````$__@8`@K?````!;_X"\M_^`@+?_D5H`O`"\L@IY.NA3Z3^\`4 XM#$AX`!@@+?_D5H`O`"\L@IY.NA303^\`#$JM_^1O``"$("W_Y+"M_^AL>"(M^ XM__P@+?_D3KH,FF9J(BW_^"`M_^1.N@QD+P!(>@)<2&W_VTZZ"$1/[P`,2'@`3 XM$2`M_^2PK?_\9@P@+?_DD+P````)8`8@+?_D6X`O`"\L@IY.NA1V3^\`#$AM\ XM_]M.N@+46$](P"\`2&W_VR\L@IY.NA2,3^\`#"`M__C1K?_D("W_Z-"M__@B! XM+?_DLH!M`/[D(&R"FB)H`%9P`!`I``]R`>&A+P%.NA/X6$\@;(*:+R@`5DZZ- XM$ZA83RE`@JX@;(*N*6@`%(*R+RR"KDZZ$[183R!L@IHO*`!63KH3@EA/*4""5 XMKF<,+RR"KDZZ$Y983V#@#*P```(`@K)F#$ZZ`8)"9TZZ$/Y43PRL`````H*R_ XM9A(@;(*:,"@`"%-`2,!7@"M`_^A@`/V@3EU.=6EN='5I=&EO;BYL:6)R87)YU XM`#]#86YN;W0@;W!E;B!I;G1U:71I;VXN;&EB<F%R>0H`/W)A;B!O=70@;V8@Q XM879A:6QA8FQE(&UE;6]R>0H`/U1O;R!M86YY(&%R9W5M96YT<RP@8&`E<R`_C XM)R<@9F]R(&AE;'`*`#]@<VEZ92<@;75S="!B92`^/2`Q,B!A;F0@/#T@)6QDX XM"@`_1F]N="!S8V%L92!M=7-T(&)E(&%T(&QE87-T(#@A"@`_1F]N="!S:7IEZ XM(&-A;B!B92!.3R!L87)G97(@=&AA;B`E;&0A"@`_4G5L97(@=&]O(&QA<F=E$ XM(&9O<B!7;W)K0F5N8V@@<V-R965N"@!G<F%P:&EC<RYL:6)R87)Y`#]#86YNG XM;W0@;W!E;B!G<F%P:&EC<RYL:6)R87)Y"@`_0V%N;F]T(&]P96X@=VEN9&]W_ XM"@`E,FQD``!.50``,"R"MDC`8#@O+(*:3KH2K%A/+RR"IDZZ$7A83TAX`5HOQ XM+(*J3KH1H%!/+RR"HDZZ$6!83V`<``+_VO_,_\+_N+"\````!60*XX`P.P#J` XM3OL``$Y=3G5.50``2JT`"&8,2'H`)$ZZ!<Q83V`*+RT`"$ZZ!<!83V&$/SP`3 XM%$ZZ#P!43TY=3G5);G1E<FYA;"!F86EL=7)E+"!E>&ET:6YG(&=R86-E9G5LN XM;'DN+BX*```@;P`$(`A*&&;\D<`@"%.`3G5.5?_\2.<(("1M``@,$@`@9P8,, XM$@`)9@12BF#P>``,$@`M9@9X`5**8`@,$@`K9@)2BD*M__Q@)"!*4HH0$$B`& XM2,!R"B\`("W__$ZZ!``B']*`DKP````P*T'__!`22(!20$'L@$P(,``"``!F4 XMRDI$9P@@+?_\1(!@!"`M__Q,WP003EU.=6%P0^R"DD7L@I*UR68.,CP`'&L(T XM=``BPE')__PI3X*X+'@`!"E.@KQ(YX"`""X`!`$I9Q!+^@`(3J[_XF`&0J?SR XM7TYS0_H`($ZN_F@I0(+`9@PN/``#@`=.KO^48`1.N@`:4$].=61O<RYL:6)R$ XM87)Y`$GY``!__DYU3E4``"\*2'D``0``,"R"AL'\``8O`$ZZ#\HI0(+$4$]F7 XM%$*G2'D``0``3KH/BE!/+FR"N$YU(&R"Q$)H``0@;(+$,7P``0`0(&R"Q#%\E XM``$`"B!L@K@@+(*XD*@`!%"`*4""R"!L@L@@O$U!3EA"ITZZ#WXD0$JJ`*Q86 XM3V<N+RT`#"\M``@O"DZZ`*XY?``!@LP@;(+$`&B````$(&R"Q`!H@```"D_OC XM``Q@0DAJ`%Q.N@^T2&H`7$ZZ#V(I0(+.(&R"SDJH`"103V<0(&R"SB)H`"0O( XM$4ZZ#G983R\L@LXO"DZZ`HPI;(+.@M)03TZZ#G8@;(+$((!.N@Z6(&R"Q"%`S XM``9G%DAX`^U(>@`J3KH.<B!L@L0A0``,4$\O+(+2/RR"UDZZ]J)"9TZZ#)!0T XM3R1?3EU.=2H`3E4``$CG##`D;0`0(&T`"$JH`*QG&"!M``@@*`"LY8`H`"!$% XM("@`$.6`)D!@!"9L@H@0$TB`2,#0K0`,5(`Y0(+80J<P+(+82,`O`$ZZ#EPIW XM0(+:4$]F"$S?##!.74YU$!-(@#H`/P4@2U*(+P@O+(+:3KH!?C`%2,`@0-'L[ XM@MI#^@%$$-EF_#\M``XO"B\L@MI.N@$Z(&R"VD(P4``Y?``!@M8P!4C`T*R") XMVB9`4HLD2T_O`!00$TB`.@"P?``@9QBZ?``)9Q*Z?``,9PRZ?``-9P:Z?``*K XM9@12BV#8#!,`(&UZ#!,`(F8N4HL@2U*+$!!(@#H`9QX@2E**$(6Z?``B9A`,[ XM$P`B9@12BV`&0BK__V`"8-9@."!+4HL0$$B`.@!G)KI\`"!G(+I\``EG&KI\& XM``QG%+I\``UG#KI\``IG""!*4HH0A6#.($I2BD(02D5F`E.+4FR"UF``_UI"U XM$D*G,"R"UE)`2,#E@"\`3KH-.BE`@M)03V8(0FR"UF``_MAZ`"9L@MI@)#`%3 XM2,#E@"!L@M(ABP@`($L@"$H89OR1P%.(,`A20$C`U\!21;IL@M9MUC`%2,#EG XM@"!L@M)"L`@`8`#^E"``,#Q__V`$,"\`#"!O``1*&&;\4T@B;P`(4T`0V5?(+ XM__QG`D(0("\`!$YU3.\#```$(`@R+P`,8`(0V5?)__QG!E)!8`)"&%')__Q.H XM=4CG<``T`<3`)@%(0\;`2$-"0]2#2$#`P4A`0D#0@DS?``Y.=4Y5``!(YPXP= XM)&T`"$*G2'H`CDZZ#*@I0(+>4$]F"$S?#'!.74YU(&T`#")H`"0O*0`$3KH-Q XM2"@`6$]G4DAZ`&T@1"\H`#9.N@T:)D!*@%!/9S1(>`/M+PM.N@NX+`!03V<D4 XM(`;E@"H`($4E:``(`*0E1@"<2'@#[4AZ`#A.N@N4)4``H%!/+P1.N@SF6$\O2 XM+(+>3KH+RD*L@MY83V"`:6-O;BYL:6)R87)Y`%=)3D1/5P`J`$Y5```O!"EMX XM``B"DDAM`!`O+0`,2'H`&DZZ`-PX`"!L@I)"$#`$3^\`#"@?3EU.=4Y5```@I XM;(*24JR"DA`M``D0@$B`P'P`_TY=3G5.50``2&T`#"\M``A(>@1@3KH`F$_OE XM``Q.74YU3E4``$CG""`D;0`.#&T`!``29@@@;0`(*!!@'$IM``QO#"!M``AP< XM`#`0*`!@"B!M``@P$$C`*`!";0`22FT`#&P01&T`#$J$;`A$A#M\``$`$C(M' XM``Q(P2`$3KH#D$'L@#I3BA2P```R+0`,2,$@!$ZZ`X8H`&;:2FT`$F<&4XH44 XMO``M(`I,WP003EU.=4Y5_R)(YP@P)&T`""9M``Q";?_Z*VT`$/_\($M2BQ`06 XM2(`X`&<``NZX?``E9@`"S$(M_S`[?``!__@[?``@__8[?"<0__0@2U*+$!!(. XM@#@`L'P`+68.0FW_^"!+4HL0$$B`.`"X?``P9A`[?``P__8@2U*+$!!(@#@`Q XMN'P`*F88(&W__%2M__P[4/_R($M2BQ`02(`X`&`R0FW_\F`<,"W_\L'\``K07 XM1)!\`#`[0/_R($M2BQ`02(`X`#`$4D!![(!,"#```@``9M2X?``N9EH@2U*+Q XM$!!(@#@`L'P`*F88(&W__%2M__P[4/_T($M2BQ`02(`X`&`R0FW_]&`<,"W_J XM],'\``K01)!\`#`[0/_T($M2BQ`02(`X`#`$4D!![(!,"#```@``9M0[?``"- XM__"X?`!L9A(@2U*+$!!(@#@`.WP`!/_P8!"X?`!H9@H@2U*+$!!(@#@`,`1(Y XMP&!Z.WP`"/_N8!8[?``*_^Y@#CM\`!#_[F`&.WS_]O_N/RW_\$AM_S`_+?_NC XM+RW__$ZZ_>0K0/_J,"W_\$C`T:W__$_O``Q@7"!M__Q8K?_\(E`K2?_J(`E*Q XM&6;\D\!3B3M)__!@2B!M__Q4K?_\.!!![?\O*TC_ZA"$8"B0O````&-GXE.`R XM9Y*0O`````MG`/]R68!GLE6`9P#_<%>`9P#_<F#,0>W_,)'M_^H[2/_P,"W_R XM\+!M__1O!CMM__3_\$IM__AG:"!M_^H,$``M9PH@;?_J#!``*V8N#&T`,/_V; XM9B93;?_R(&W_ZE*M_^H0$$B`/P!.DK!\__]43V8*</],WPP03EU.=6`6/RW_D XM]DZ2L'S__U1/9@1P_V#D4FW_^C`M__)3;?_RL&W_\&[<0FW_[F`@(&W_ZE*M> XM_^H0$$B`/P!.DK!\__]43V8$</]@L%)M_^X@;?_J2A!G"C`M_^ZP;?_T;<XP8 XM+?_NT6W_^DIM__AF*&`8/SP`($Z2L'S__U1/9@9P_V``_WA2;?_Z,"W_\E-M% XM__*P;?_P;MI@%C\$3I*P?/__5$]F!G#_8`#_4E)M__I@`/T(,"W_^F``_T)(3 XMYT@`0H1*@&H$1(!21$J!:@9$@0I$``%A/DI$9P)$@$S?`!)*@$YU2.=(`$*$W XM2H!J!$2`4D1*@6H"1(%A&B`!8-@O`6$2(`$B'TJ`3G4O`6$&(A]*@$YU2.<PX XM`$A!2D%F($A!-@$T`$)`2$"`PR(`2$`R`H+#,`%"04A!3-\`#$YU2$$F`2(`' XM0D%(04A`0D!T#]"`TX&V@6($DH-20%'*__),WP`,3G5.50``2&R`Y#\M``A.$ XMN@`(7$].74YU3E4``"\$."T`""\M``H_!$ZZ`#"X?``*7$]F)"!M``H0*``,- XM2(`(```'9Q0_//__+RT`"DZZ`/1<3R@?3EU.=6#X3E4``"\*)&T`"B!2L>H`I XM!&48,"T`",!\`/\_`"\*3KH`R%Q/)%].74YU(%)2DA`M``D0@$B`P'P`_V#H\ XM3E4``"\*0>R`SB1(($K5_````!8O"&$06$]![(*&M<AEZB1?3EU.=4Y5``!(` XMYP@@)&T`"'@`(`IF"G#_3-\$$$Y=3G5**@`,9U`(*@`"``QG##\\__\O"F%2E XM.`!<3Q`J``U(@#\`3KH%'(A`""H``0`,5$]G"B\J``A.N@(N6$\(*@`%``QG? XM$B\J`!).N@+`+RH`$DZZ`A103T*20JH`!$*J``A"*@`,,`1@D$Y5__Y(YP@@Z XM)&T`"$'Z_T8I2(+B""H`!``,9PIP_TS?!!!.74YU""H``@`,9S`@4I'J``@X! XM"#\$+RH`"!`J``U(@#\`3KH"@+!$4$]G$`CJ``0`#$*20JH`!'#_8,`,;?__: XM``QF$`BJ``(`#$*20JH`!'``8*A*J@`(9@@O"DZZ`)I83PQJ``$`$&8J&VT`) XM#?__/SP``4AM__\0*@`-2(`_`$ZZ`B*P?``!4$]FH#`M``Q@`/]J)*H`"#`JH XM`!!(P-"J``@E0``$".H``@`,(%)2DA`M``T0@$B`P'P`_V``_SY.50``+PI!P XM[(#.)$A**@`,9QC5_````!9![(*&M<AE"'``)%].74YU8.)"DD*J``1"J@`(& XM(`I@ZDY5__PO"B1M``@_/`0`3KH`P"M`__Q43V88-7P``0`0($K1_`````XE> XM2``()%].74YU-7P$```0".H``0`,)6W__``($"H`#4B`/P!.N@#B2D!43V<&L XM`"H`@``,8,Y.50``2.<`,"1L@I9@%"92("H`!%"`+P`O"DZZ!%903R1+(`IF` XMZ$*L@I9,WPP`3EU.=4Y5```O"D'Z_\8I2(+F0J<@+0`(4(`O`$ZZ!``D0$J`_ XM4$]F"'``)%].74YU)*R"EB5M``@`!"E*@I8@"E"`8.9.50``<``P+0`(+P!A' XMLEA/3EU.=4Y5``!(YP`PE\LD;(*68`X@;0`(48BQRF<2)DHD4B`*9NYP_TS?A XM#`!.74YU(`MG!":28`0I4H*6("H`!%"`+P`O"DZZ`ZAP`%!/8-A.50``+PHP+ XM+0`(P?P`!B1`U>R"Q$IM``AM#C`M``BP;(*&;`1*DF8..7P``H+J</\D7TY=F XM3G4P+0`(P?P`!B!L@L0O,`@`3KH"QDJ`6$]G!'`!8`)P`SE4``"\M``A.@ XMN@*02H!83V8.3KH"FCE`@NIP_TY=3G5P`Ϥ``$CG#"`X+0`(3KH`<#`$V XMP?P`!B1`U>R"Q$I$;0JX;(*&;`1*DF80.7P``H+J</],WP0P3EU.=3`J``3`> XM?``#9@HY?``%@NIP_V#D<``P+0`.+P`O+0`*+Q).N@)F*@"PO/____]/[P`,% XM9@Q.N@(:.4""ZG#_8+@@!6"T3E7__$AX$`!"ITZZ`MXK0/_\"```#%!/9Q)*6 XM;(+,9@@@+?_\3EU.=4ZZ``9P`&#T3E4``$AX``1(>@`<3KH!\"\`3KH"`C\\D XM``%.N@`.3^\`#DY=3G5>0PH`3E4``$JL@N)G!B!L@N).D#\M``A.N@`(5$].I XM74YU3E7__"\$,"T`"$C`*T#__$JL@L1G*'@`8`H_!$ZZ`/Y43U)$N&R"AFWP\ XM,"R"AL'\``8O`"\L@L1.N@'T4$]*K(+F9P8@;(+F3I!*K(*,9PHO+(*,3KH!7 XM:%A/2JR"[&<((&R"[""L@O!*K(+T9PHO+(+T3KH!A%A/2JR"^&<*+RR"^$ZZZ XM`7183TJL@OQG"B\L@OQ.N@%D6$]*K(,`9PHO+(,`3KH!5%A/+'@`!`@N``0!= XM*6<4+PU+^@`*3J[_XBI?8`9"I_-?3G-*K(+.9C!*K(+:9R@P+(+82,`O`"\L\ XM@MI.N@%,,"R"UE)`2,#E@"\`+RR"TDZZ`3A/[P`08`Y.N@$B+RR"SDZZ`5Y84 XM3R`M__PN;(*X3G4H'TY=3G5.50``2.<.(#@M``@P!,'\``8D0-7L@L1*1&T*W XMN&R"AFP$2I)F$#E\``*"ZG#_3-\$<$Y=3G4(*@`'``1F""\23KH`"EA/0I)PV XM`&#B(B\`!"QL@L!.[O_<(B\`!"QL@L!.[O^"(B\`!"QL@L!.[O^X+&R"P$[NL XM_\HL;(+`3N[_?"(O``0L;(+`3N[_*$SO``8`!"QL@L!.[O_B+&R"P$[N_\1./ XM^@`"(B\`!"QL@L!.[O^F3.\`#@`$+&R"P$[N_]!(YP$$3.\@@``,+&R"O$ZNK XM_Y1,WR"`3G5.^@`"(F\`!"QL@KQ.[OYB3OH``DSO``,`!"QL@KQ.[O\Z(F\`: XM!"QL@KQ.[O[:+&R"O$[N_WQ.^@`"(F\`!"`O``@L;(*\3N[_+D[Z``(@;P`$- XM+&R"O$[N_HQ.^@`"+&R"O")O``0@+P`(3N[]V$[Z``(B;P`$+&R"O$[N_H9,Z XM[P`#``0L;(*\3N[^SB`O``0L;(*\3N[^PB!O``0L;(*\3N[^@")O``1,[P`#O XM``@L;(*F3N[_"B)O``1,[P`#``@L;(*F3N[_$")O``1,[P`/``@L;(*F3N[^4 XMSB)O``0@+P`(+&R"ID[N_JHB;P`$(&\`""`O``PL;(*F+P=.KO_$+A].=4SOE XM`P``!"QL@MY.[O^@(&\`!"QL@MY.[O^F(&\`!"QL@MY.[O^R(&\`!"QL@J).; XM[O^X(&\`!$SO`@,`""QL@J).[OY6(&\`!"QL@J).[O\T```#[`````$````![ XM```*Q`````````/R```#Z@```*0`\````/$`&0`!```"`@`#"`\`````````M XM``````0```````````!D``#__P````$````&````:#`Q,C,T-38W.#EA8F-DL XM968````@("`@("`@("`P,#`P,"`@("`@("`@("`@("`@("`@()!`0$!`0$!`K XM0$!`0$!`0$`,#`P,#`P,#`P,0$!`0$!`0`D)"0D)"0$!`0$!`0$!`0$!`0$!\ XM`0$!`0$!0$!`0$!`"@H*"@H*`@("`@("`@("`@("`@("`@("`@)`0$!`(```* XM```````````````!``````$``````````````````````0$````!````````% XM``````````````$"`````0``````````````````````````````````````$ XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM````````````````````````````````````````````````````````````` XM```````````````````````````````````````````````4````````````4 XM`````^P````#`````````!H````P````-`````````/R```#ZP````$```/R) X`` Xend Xsize 7920 END_OF_FILE if test 11122 -ne `wc -c <'Ruler4.uu'`; then echo shar: \"'Ruler4.uu'\" unpacked with wrong size! fi # end of 'Ruler4.uu' fi if test -f 'arpruler4.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'arpruler4.c'\" else echo shar: Extracting \"'arpruler4.c'\" \(12217 characters\) sed "s/^X//" >'arpruler4.c' <<'END_OF_FILE' X/* RULER X * X * Opens a borderless WorkBench window in which is contained a ruler X * for the purpose of aligning or constraining text; the default ruler X * is 30 characters with an 8 pixel scale and is intended to help X * prevent entering too-long filenames. X * X * Usage: X * X * CLI> RUN RULER [ size ] [ scale ] X * X * where `size' is the number of ruler markings, and `scale' is the X * width between each marking (a particular font width for example). X * X * Evoking the command with an argument of "?", such as: X * X * CLI> RULER ? X * X * will print out a help message detailing what values are valid for X * your particular Workbench environment. X * X * X * The window, of course, can be moved to any convenient location on the X * screen, and resized with an invisible resizing gadget found in the X * lower right corner. X * X * Version 4.0 29-Dec-1989 (copyright)1989 Chad Netzer and Thad Floryan X * X * Based upon code, idea, and logic from: X * X * Version 1.0 7-Nov-1988 (copyright)1988 Thad Floryan X * X * Revision history: X * 29-December-1989 - (Ver. 4.0) - Added an offset so that you can X * just stick the window on the left edge of the workbench screen, X * and it will automatically be lined up with the characters. X * Fixed some more minor bugs and rearranged the code a bit. X * Added ARP support for those who want it. (CFN) X * X * 09-March-1989 - (Ver. 3.1) - Fixed a visual bug so that scale can X * no longer be less than eight. (CFN) X * X * 06-Dec-1988 - (Ver. 3.0) - Added support for measuring fonts of X * varying widths (selectable scale). (CFN) X * X * 22-Nov-1988 - (Ver. 2.2) - More adjustments to code, No major X * changes. Program size is slightly smaller. (CFN) X * X * 14-Nov-1988 - (Ver. 2.1) - Fixed a few minor (harmless) bugs. The X * right edge of the ruler is now always redrawn after resizing. X * I got rid of that GOTO statement (which in 'C', is considered a X * bug. :-) Version 2.1 now lets you open a ruler to be as low as X * 12 characters wide, which 2.0 only advertised. (CFN) X * X * 13-Nov-1988 - (Ver. 2.0) - I added minor enhancements, most X * noteably, the ability to resize the window, and support for X * overscanned screens. (CFN) X * X * X * Feel welcome to use this program for any non-commercial purposes or X * for your personal learning. Commercial users are requested to contact X * Thad at either: X * X * UUCP: thad@cup.portal.com (OR) ..!sun!portal!cup.portal.com!thad X * BBS: BBS-JC, 415/961-7250 (300/1200/2400), "Thad Floryan" | "SYSOP" X * X * or Chad at: X * X * UUCP: chad@ucscb.ucsc.edu (during school term) X * UUCP: chad@cup.portal.com (holidays, summer, etc.) X * BBS: BBS-JC, 415/961-7250 (300/1200/2400), "Chad Netzer" X * X * X * Building instructions (Manx Aztec C): X * X * ******************* X * *** ARP Version *** X * ******************* X * X * cc arpruler4 X * ln arpruler4 -la -lc X */ X X#include <exec/types.h> X#include <exec/memory.h> X#include <libraries/arpbase.h> X#include <intuition/intuition.h> X#include <intuition/intuitionbase.h> X#include "arpfunctions.h" X X#define NEW(typ) AllocMem((ULONG)sizeof(typ), MEMF_CLEAR) X#define FREE(p,typ) FreeMem(p,(ULONG)sizeof(typ)) X X#define ever (;;) /* used for infinite loops */ X X#define FATAL 20 /* exit code */ X#define WARN 10 /* exit code */ X#define NORMAL 0 /* exit code */ X X#define LEFT_OFFSET 3L /* "dead space" on left side of ruler margin */ X Xextern void *OpenLibrary(); Xextern void *OpenWindow(); Xextern void *GetMsg(); Xextern void *AllocMem(); Xextern void ReplyMsg(); Xvoid release_resources(); Xvoid error_exit(); X Xstruct NewWindow window_def = X{ X 240, 0, /* Initial LeftEdge, TopEdge */ X 241, 25, /* Default pixel-width, pixel-height */ X 0, 1, /* DetailPen, BlockPen */ X CLOSEWINDOW | /* IDCMP flags */ X NEWSIZE, X WINDOWDRAG | /* window flags */ X WINDOWDEPTH | X WINDOWCLOSE | X WINDOWSIZING | X SMART_REFRESH | X NOCAREREFRESH | X BORDERLESS | X RMBTRAP, X NULL, /* Gadget list */ X NULL, /* checkmark stuff */ X (UBYTE *)"", /* window title (to be filled in later) */ X NULL, /* custom screen pointer */ X NULL, /* bitmap pointer */ X 97 + LEFT_OFFSET, 0, /* Minwidth, no MinHeight */ X -1, 0, /* no MaxWidth, MaxHeight */ X WBENCHSCREEN /* screen type */ X}; X Xstruct Window *window; Xstruct RastPort *rp; Xstruct ArpBase *ArpBase; Xstruct Library *IntuitionBase; Xstruct Library *GfxBase; Xstruct Screen *screen; Xstruct IntuiMessage *sys_message; XULONG class; Xint resource_state; X Xchar *version = X "Text Ruler Arp_V4.0 29-Dec-89 \xA91989 Thad Floryan and Chad Netzer" X " "; /* padding for "nice" title */ X Xchar *help_text = /* help message on startup */ X "\n" X "%40s\n" X "Opens a borderless WorkBench window in which is contained a ruler\n" X "for the purpose of aligning or constraining text; the default ruler\n" X "is 30 characters with an 8 pixel scale and is intended to help\n" X "prevent entering too-long filenames.\n\n" X "Usage:\n\n\t" X "CLI> RUN %s [ size ] [ scale ]\n\n" X "where `size' is the number of ruler markings, and `scale' is the\n" X "width between each marking (a particular font width for example).\n\n" X "`size' must be between 12 and %ld inclusive, and defaults to 30.\n" X "`scale' cannot be greater than %ld or less than 8. The default is 8." X "\n\n"; X X/**********************************************************************/ X Xmain (argc, argv) X int argc; X char *argv[]; X{ X X long fivec; /* pixel size of five chars */ X long fsize; /* The font size of ruler scale */ X long max_scale; /* The max scale size possible */ X long max_width; /* maximum size of ruler */ X long w; /* character width of ruler */ X long w_lim; /* pixel width (w * fsize) */ X long x; /* present window x coordinate */ X long y; /* present window y coordinate */ X char buf[5]; X X long success; /* indicates bad return values */ X X resource_state = 0; X X/* X * Open ARP_library, revision 39 X */ X ArpBase = OpenLibrary ("arp.library", ArpVersion); X if (ArpBase == 0L) X { X error_exit("?Cannot open arp.library\n"); X } X ++resource_state; X X/* X * Get IntuitionBase from ArpBase so we can get the screen size limits. X */ X IntuitionBase = ArpBase->IntuiBase; X X/* X * Get WorkBench screen information X */ X screen = NEW(struct Screen); /* Allocate a buffer for screen data */ X if (screen == 0L) X { X release_resources(); X error_exit("?ran out of available memory\n"); X } X ++resource_state; X success = GetScreenData(screen, (ULONG) sizeof (struct Screen), X WBENCHSCREEN, 0L); X if (success == FALSE) X { X error_exit(); X } X/* X * Set up defaults... X */ X w = 30L; /* default ruler is 30 chars for a filename */ X fsize = 8L; /* default font scale is 8 pixels per char */ X X/* X * find maximum values, adjusted for morerows X */ X max_width = (screen->Width - LEFT_OFFSET) / 8; X max_scale = (screen->Width - 2) / 12; X X/* X * Parse command line to obtain requested parameters. X */ X if (argc > 1) X { X if (*argv[1] == '?' || X *argv[1] == '-' || X *argv[1] == 'h' || X *argv[1] == 'H' ) X { X Printf( help_text, X version, argv[0], max_width, max_scale); X X release_resources(); X exit (NORMAL); X } X } X X if (argc > 3) X { X Printf("?Too many arguments, ``%s ?'' for help\n", argv[0]); X release_resources(); X exit (WARN); X } X X if ((argc >= 2) && (argc <= 3)) X { X w = Atol(argv[1]); X if ( w < 12L || w > max_width ) X { X Printf("?`size' must be >= 12 and <= %ld\n", max_width); X release_resources(); X exit (WARN); X } X } X X if (argc == 3) X { X fsize = Atol(argv[2]); X if (fsize < 8) X { X Printf("?Font scale must be at least 8!\n"); X release_resources(); X exit (WARN); X } X if (fsize > max_scale) X { X Printf("?Font size can be NO larger than %ld!\n", max_scale); X release_resources(); X exit (WARN); X } X } X X/* X * Now calculate window sizing and placement parameters and setup title. X */ X w_lim = w * fsize; X window_def.Width = w_lim + LEFT_OFFSET + 1; X window_def.LeftEdge = (window_def.Width > 300L) ? 0 : 240; X window_def.Title = (UBYTE *)version; X fivec = 5L * fsize; X/* X * Bomb out if requested ruler size would be larger than the screen. X */ X if (window_def.Width > screen -> Width ) X { X error_exit("?Ruler too large for WorkBench screen\n"); X } X X/* X * Set up GfxBase from ArpBase. X */ X GfxBase = ArpBase->GfxBase; X X/* X * Open the ruler display window. X */ X window = OpenWindow (&window_def); X if (window == 0L) X { X error_exit("?Cannot open window\n"); X } X ++resource_state; X/* X * Get pointer to raster port. X */ X rp = window -> RPort; X SetAPen (rp, 0L); X/* X * Use RectFill to blank the window area and set pen for drawing. X */ X for ever X { X SetAPen(rp, 0L); X RectFill(rp, 0L, 10L, w_lim + LEFT_OFFSET, 24L); X/* X * Now set pen to draw. X */ X SetAPen(rp, 1L); X/* X * Because we've used a BORDERLESS window, must fill in some of the X * title-/drag-bar space near the lower left where the text starts. X */ X Move(rp, 28L, 8L); X Draw(rp, 31L, 8L); X/* X * Because we've used a BORDERLESS window, must draw our own line beneath X * the title bar to make the bar the same height as the window gadgets. X * The `28' is the pixel position just to the right of the close gadget. X * The `53' is the pixel width of the depth-arranging gadgets in the upper X * right corner of the window. X */ X Move(rp, 28L, 9L); X Draw(rp, (w_lim + LEFT_OFFSET - 53L), 9L); X X/* X * When I use the ruler, I like to jam it up against the left hand side of X * my workbench screen, so that it to measure something on the CLI. X * However, the CLI is offset by a small amount, so I compensate by X * starting the "virtual" area of the ruler a little to the right... X * X * Fill in the offset area that is unused. X */ X RectFill(rp, 0L, 9L, LEFT_OFFSET, 24L); X X/* X * Shorten virtual ruler size by subtracting LEFT_OFFSET from w_lim. X */ X/* w_lim -= LEFT_OFFSET;*/ X X/* X * Draw ruler and text X */ X for (x = 0L; x < (w_lim + fsize); x += fsize) X { X if (x >= w_lim) /* right edge */ X { X x = w_lim; X y = 10L; X } X else if (x == 0L) y = 10L; /* left edge */ X else if ((x % fivec) == 0L) y = 19L; /* big tic every 5 chars */ X else y = 22L; /* small tic every char */ X Move (rp, x + LEFT_OFFSET, y); X Draw (rp, x + LEFT_OFFSET, 24L); X/* X * Label ruler. X * The test for position `fivec' (in the Move()) is for centering ``5'' X * differently than the centering for two-digit numbers. X */ X if ((x > 0L) && (x < w_lim) && ((x % fivec) == 0L)) X { X SPrintf (buf, "%2ld", (x / fsize)); X Move (rp, (x == fivec) ? (x - 12L + LEFT_OFFSET) X : (x - 8L + LEFT_OFFSET), 17L); X Text (rp, buf, (long) strlen (buf)); X } X } X/* X * Wait for gadget activation. No busy-/spin-/wait-loops here! X */ X Wait (1L << window -> UserPort -> mp_SigBit); X/* X * Retrieve LAST message in Message Port X */ X sys_message = GetMsg(window -> UserPort); X class = sys_message -> Class; X ReplyMsg(sys_message); X/* X * Dump uneeded messages (respond only to the last on LIFO queue). X */ X while (sys_message = GetMsg(window -> UserPort)) X { X ReplyMsg(sys_message); X } X X if (class == CLOSEWINDOW) X { X release_resources(); X exit (NORMAL); X } X X if (class == NEWSIZE) X { X w_lim = (window -> Width) - 1 - LEFT_OFFSET; X } X } X} X X/********************************************************************** X * X * cleanup routine X * X * The ``switch'' on resource_state is to assure we don't attempt to X * free something we don't have. Items are released in the reverse X * order they were obtained (by "falling thru" the cases). X */ Xvoid release_resources() X{ X switch (resource_state) X { X case 3: CloseWindow (window); X case 2: FREE (screen, struct Screen); X case 1: CloseLibrary(ArpBase); X } X} X X/********************************************************************** X * X * error handler X */ Xvoid error_exit(message) X char *message; X{ X if (message == 0L) X { X Printf("Internal failure, exiting gracefully...\n"); X } X else X { X Printf(message); X } X release_resources(); X exit (FATAL); X} END_OF_FILE if test 12217 -ne `wc -c <'arpruler4.c'`; then echo shar: \"'arpruler4.c'\" unpacked with wrong size! fi # end of 'arpruler4.c' fi if test -f 'makefile' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'makefile'\" else echo shar: Extracting \"'makefile'\" \(162 characters\) sed "s/^X//" >'makefile' <<'END_OF_FILE' X# Ruler makefile X# X# Manx Aztec C X XArpRuler4: arpruler4.c X cc arpruler4 X ln -o ArpRuler4 arpruler4 -la -lc X XRuler4: ruler4.c X cc ruler4 X ln -o Ruler4 ruler4 -lc END_OF_FILE if test 162 -ne `wc -c <'makefile'`; then echo shar: \"'makefile'\" unpacked with wrong size! fi # end of 'makefile' fi if test -f 'ruler4.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'ruler4.c'\" else echo shar: Extracting \"'ruler4.c'\" \(12221 characters\) sed "s/^X//" >'ruler4.c' <<'END_OF_FILE' X/* RULER X * X * Opens a borderless WorkBench window in which is contained a ruler X * for the purpose of aligning or constraining text; the default ruler X * is 30 characters with an 8 pixel scale and is intended to help X * prevent entering too-long filenames. X * X * Usage: X * X * CLI> RUN RULER [ size ] [ scale ] X * X * where `size' is the number of ruler markings, and `scale' is the X * width between each marking (a particular font width for example). X * X * Evoking the command with an argument of "?", such as: X * X * CLI> RULER ? X * X * will print out a help message detailing what values are valid for X * your particular Workbench environment. X * X * X * The window, of course, can be moved to any convenient location on the X * screen, and resized with an invisible resizing gadget found in the X * lower right corner. X * X * Version 4.0 29-Dec-1989 (copyright)1989 Chad Netzer and Thad Floryan X * X * Based upon code, idea, and logic from: X * X * Version 1.0 7-Nov-1988 (copyright)1988 Thad Floryan X * X * Revision history: X * 29-December-1989 - (Ver. 4.0) - Added an offset so that you can X * just stick the window on the left edge of the workbench screen, X * and it will automatically be lined up with the characters. X * Fixed some more minor bugs and rearranged the code a bit. X * Added ARP support for those who want it. (CFN) X * X * 09-March-1989 - (Ver. 3.1) - Fixed a visual bug so that scale can X * no longer be less than eight. (CFN) X * X * 06-Dec-1988 - (Ver. 3.0) - Added support for measuring fonts of X * varying widths (selectable scale). (CFN) X * X * 22-Nov-1988 - (Ver. 2.2) - More adjustments to code, No major X * changes. Program size is slightly smaller. (CFN) X * X * 14-Nov-1988 - (Ver. 2.1) - Fixed a few minor (harmless) bugs. The X * right edge of the ruler is now always redrawn after resizing. X * I got rid of that GOTO statement (which in 'C', is considered a X * bug. :-) Version 2.1 now lets you open a ruler to be as low as X * 12 characters wide, which 2.0 only advertised. (CFN) X * X * 13-Nov-1988 - (Ver. 2.0) - I added minor enhancements, most X * noteably, the ability to resize the window, and support for X * overscanned screens. (CFN) X * X * X * Feel welcome to use this program for any non-commercial purposes or X * for your personal learning. Commercial users are requested to contact X * Thad at either: X * X * UUCP: thad@cup.portal.com (OR) ..!sun!portal!cup.portal.com!thad X * BBS: BBS-JC, 415/961-7250 (300/1200/2400), "Thad Floryan" | "SYSOP" X * X * or Chad at: X * X * UUCP: chad@ucscb.ucsc.edu (during school term) X * UUCP: chad@cup.portal.com (holidays, summer, etc.) X * BBS: BBS-JC, 415/961-7250 (300/1200/2400), "Chad Netzer" X * X * X * Building instructions (Manx Aztec C): X * X * ************************ X * *** Non-ARP Version *** X * ************************ X * X * cc ruler4 X * ln ruler4 -lc X */ X X#include <exec/types.h> X#include <exec/memory.h> X#include <intuition/intuition.h> X#include <intuition/intuitionbase.h> X X#define NEW(typ) AllocMem((ULONG)sizeof(typ), MEMF_CLEAR) X#define FREE(p,typ) FreeMem(p,(ULONG)sizeof(typ)) X X#define ever (;;) /* used for infinite loops */ X X#define FATAL 20 /* exit code */ X#define WARN 10 /* exit code */ X#define NORMAL 0 /* exit code */ X X#define LEFT_OFFSET 3L /* "dead space" on left side of ruler margin */ X Xextern void *OpenLibrary(); Xextern void *OpenWindow(); Xextern void *GetMsg(); Xextern void *AllocMem(); Xextern void ReplyMsg(); Xvoid release_resources(); Xvoid error_exit(); X Xstruct NewWindow window_def = X{ X 240, 0, /* Initial LeftEdge, TopEdge */ X 241, 25, /* Default pixel-width, pixel-height */ X 0, 1, /* DetailPen, BlockPen */ X CLOSEWINDOW | /* IDCMP flags */ X NEWSIZE, X WINDOWDRAG | /* window flags */ X WINDOWDEPTH | X WINDOWCLOSE | X WINDOWSIZING | X SMART_REFRESH | X NOCAREREFRESH | X BORDERLESS | X RMBTRAP, X NULL, /* Gadget list */ X NULL, /* checkmark stuff */ X (UBYTE *)"", /* window title (to be filled in later) */ X NULL, /* custom screen pointer */ X NULL, /* bitmap pointer */ X 97 + LEFT_OFFSET, 0, /* Minwidth, no MinHeight */ X -1, 0, /* no MaxWidth, MaxHeight */ X WBENCHSCREEN /* screen type */ X}; X Xstruct Window *window; Xstruct RastPort *rp; Xstruct Library *IntuitionBase; Xstruct Library *GfxBase; Xstruct Screen *screen; Xstruct IntuiMessage *sys_message; XULONG class; Xint resource_state; X Xchar *version = X "Text Ruler V4.0 29-Dec-89 \xA91989 Thad Floryan and Chad Netzer" X " "; /* padding for "nice" title */ X Xchar *help_text = /* help message on startup */ X "\n" X "%40s\n" X "Opens a borderless WorkBench window in which is contained a ruler\n" X "for the purpose of aligning or constraining text; the default ruler\n" X "is 30 characters with an 8 pixel scale and is intended to help\n" X "prevent entering too-long filenames.\n\n" X "Usage:\n\n\t" X "CLI> RUN %s [ size ] [ scale ]\n\n" X "where `size' is the number of ruler markings, and `scale' is the\n" X "width between each marking (a particular font width for example).\n\n" X "`size' must be between 12 and %ld inclusive, and defaults to 30.\n" X "`scale' cannot be greater than %ld or less than 8. The default is 8." X "\n\n"; X X/**********************************************************************/ X Xmain (argc, argv) X int argc; X char *argv[]; X{ X X long fivec; /* pixel size of five chars */ X long fsize; /* The font size of ruler scale */ X long max_scale; /* The max scale size possible */ X long max_width; /* maximum size of ruler */ X long w; /* character width of ruler */ X long w_lim; /* pixel width (w * fsize) */ X long x; /* present window x coordinate */ X long y; /* present window y coordinate */ X char buf[5]; X X long success; /* indicates bad return values */ X X resource_state = 0; X X/* X * Open Intuition so we can get the screen size limits. X */ X IntuitionBase = OpenLibrary ("intuition.library", 0L); X if (IntuitionBase == 0L) X { X error_exit("?Cannot open intuition.library\n"); X } X ++resource_state; X X/* X * Get WorkBench screen information X */ X screen = NEW(struct Screen); /* Allocate a buffer for screen data */ X if (screen == 0L) X { X release_resources(); X error_exit("?ran out of available memory\n"); X } X ++resource_state; X success = GetScreenData(screen, (ULONG) sizeof (struct Screen), X WBENCHSCREEN, 0L); X if (success == FALSE) X { X error_exit(); X } X/* X * Set up defaults... X */ X w = 30L; /* default ruler is 30 chars for a filename */ X fsize = 8L; /* default font scale is 8 pixels per char */ X X/* X * find maximum values, adjusted for morerows X */ X max_width = (screen->Width - LEFT_OFFSET) / 8; X max_scale = (screen->Width - 2) / 12; X X/* X * Parse command line to obtain requested parameters. X */ X if (argc > 1) X { X if (*argv[1] == '?' || X *argv[1] == '-' || X *argv[1] == 'h' || X *argv[1] == 'H' ) X { X printf( help_text, X version, argv[0], max_width, max_scale); X X release_resources(); X exit (NORMAL); X } X } X X if (argc > 3) X { X printf("?Too many arguments, ``%s ?'' for help\n", argv[0]); X release_resources(); X exit (WARN); X } X X if ((argc >= 2) && (argc <= 3)) X { X w = atol(argv[1]); X if ( w < 12L || w > max_width ) X { X printf("?`size' must be >= 12 and <= %ld\n", max_width); X release_resources(); X exit (WARN); X } X } X X if (argc == 3) X { X fsize = atol(argv[2]); X if (fsize < 8) X { X printf("?Font scale must be at least 8!\n"); X release_resources(); X exit (WARN); X } X if (fsize > max_scale) X { X printf("?Font size can be NO larger than %ld!\n", max_scale); X release_resources(); X exit (WARN); X } X } X X/* X * Now calculate window sizing and placement parameters and setup title. X */ X w_lim = w * fsize; X window_def.Width = w_lim + LEFT_OFFSET + 1; X window_def.LeftEdge = (window_def.Width > 300L) ? 0 : 240; X window_def.Title = (UBYTE *)version; X fivec = 5L * fsize; X/* X * Bomb out if requested ruler size would be larger than the screen. X */ X if (window_def.Width > screen -> Width ) X { X error_exit("?Ruler too large for WorkBench screen\n"); X } X X/* X * Open up the graphics library. X */ X GfxBase = OpenLibrary ("graphics.library", 0L); X if (GfxBase == 0L) X { X error_exit("?Cannot open graphics.library\n"); X } X ++resource_state; X X/* X * Open the ruler display window. X */ X window = OpenWindow (&window_def); X if (window == 0L) X { X error_exit("?Cannot open window\n"); X } X ++resource_state; X/* X * Get pointer to raster port. X */ X rp = window -> RPort; X SetAPen (rp, 0L); X/* X * Use RectFill to blank the window area and set pen for drawing. X */ X for ever X { X SetAPen(rp, 0L); X RectFill(rp, 0L, 10L, w_lim + LEFT_OFFSET, 24L); X/* X * Now set pen to draw. X */ X SetAPen(rp, 1L); X/* X * Because we've used a BORDERLESS window, must fill in some of the X * title-/drag-bar space near the lower left where the text starts. X */ X Move(rp, 28L, 8L); X Draw(rp, 31L, 8L); X/* X * Because we've used a BORDERLESS window, must draw our own line beneath X * the title bar to make the bar the same height as the window gadgets. X * The `28' is the pixel position just to the right of the close gadget. X * The `53' is the pixel width of the depth-arranging gadgets in the upper X * right corner of the window. X */ X Move(rp, 28L, 9L); X Draw(rp, (w_lim + LEFT_OFFSET - 53L), 9L); X X/* X * When I use the ruler, I like to jam it up against the left hand side of X * my workbench screen, so that it to measure something on the CLI. X * However, the CLI is offset by a small amount, so I compensate by X * starting the "virtual" area of the ruler a little to the right... X * X * Fill in the offset area that is unused. X */ X RectFill(rp, 0L, 9L, LEFT_OFFSET, 24L); X X/* X * Shorten virtual ruler size by subtracting LEFT_OFFSET from w_lim. X */ X/* w_lim -= LEFT_OFFSET;*/ X X/* X * Draw ruler and text X */ X for (x = 0L; x < (w_lim + fsize); x += fsize) X { X if (x >= w_lim) /* right edge */ X { X x = w_lim; X y = 10L; X } X else if (x == 0L) y = 10L; /* left edge */ X else if ((x % fivec) == 0L) y = 19L; /* big tic every 5 chars */ X else y = 22L; /* small tic every char */ X Move (rp, x + LEFT_OFFSET, y); X Draw (rp, x + LEFT_OFFSET, 24L); X/* X * Label ruler. X * The test for position `fivec' (in the Move()) is for centering ``5'' X * differently than the centering for two-digit numbers. X */ X if ((x > 0L) && (x < w_lim) && ((x % fivec) == 0L)) X { X sprintf (buf, "%2ld", (x / fsize)); X Move (rp, (x == fivec) ? (x - 12L + LEFT_OFFSET) X : (x - 8L + LEFT_OFFSET), 17L); X Text (rp, buf, (long) strlen (buf)); X } X } X/* X * Wait for gadget activation. No busy-/spin-/wait-loops here! X */ X Wait (1L << window -> UserPort -> mp_SigBit); X/* X * Retrieve LAST message in Message Port X */ X sys_message = GetMsg(window -> UserPort); X class = sys_message -> Class; X ReplyMsg(sys_message); X/* X * Dump uneeded messages (respond only to the last on LIFO queue). X */ X while (sys_message = GetMsg(window -> UserPort)) X { X ReplyMsg(sys_message); X } X X if (class == CLOSEWINDOW) X { X release_resources(); X exit (NORMAL); X } X X if (class == NEWSIZE) X { X w_lim = (window -> Width) - 1 - LEFT_OFFSET; X } X } X} X X/********************************************************************** X * X * cleanup routine X * X * The ``switch'' on resource_state is to assure we don't attempt to X * free something we don't have. Items are released in the reverse X * order they were obtained (by "falling thru" the cases). X */ Xvoid release_resources() X{ X switch (resource_state) X { X case 4: CloseWindow (window); X case 3: CloseLibrary(GfxBase); X case 2: FREE (screen, struct Screen); X case 1: CloseLibrary(IntuitionBase); X } X} X X/********************************************************************** X * X * error handler X */ Xvoid error_exit(message) X char *message; X{ X if (message == 0L) X { X printf("Internal failure, exiting gracefully...\n"); X } X else X { X printf(message); X } X release_resources(); X exit (FATAL); X} END_OF_FILE if test 12221 -ne `wc -c <'ruler4.c'`; then echo shar: \"'ruler4.c'\" unpacked with wrong size! fi # end of 'ruler4.c' 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@cs.odu.edu>. Mail comments to the moderator at <amiga-request@cs.odu.edu>. Post requests for sources, and general discussion to comp.sys.amiga.