brad@gcc-milo.ARPA (Brad Parker) (10/07/86)
This is a shar file containing a quick hack mac application to plot generic UNIX plot(5) files. It does not support all of the plot options (unsupported ones are ignored). Adding code to suport these should be simple - the source is ultra-simplistic. What is supported is sufficient to plot the uucp map provided by uplot. uplot is a pd program posted a few days ago which reads the uucp map and produces a plot(5) format file. I've included it's slightly modified source also. So, with this and LaserKey, you can plot the uucp map on your mac and them print the screen to your laserwriter and get a nifty plot of the uucp for all of your friend to enjoy. Thanks to Larry Campbell for doing uplot. Great idea! Enjoy! Brad Parker General Computer harvard!gcc-milo!brad caveat: this code is not intended to be a full mac application. It is just enough to support enough events to let LaserKey work. I have not tested it with DA's. #!/bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #!/bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # macplot.Hqx # macplot.c # macplot.rc # README # Makefile # uplot.c # uplot.sed # uplot.sh # This archive created: Tue Oct 7 14:56:08 1986 export PATH; PATH=/bin:$PATH if test -f 'macplot.Hqx' then echo shar: over-writing existing file "'macplot.Hqx'" fi cat << \SHAR_EOF > 'macplot.Hqx' (This file must be converted with BinHex 4.0) :"feKBh"XEh3!39"36%0$6dd!N!JbBXVN!*!%!3#3!c)!N!-a!*!%BJ#3mb!!N!- `!*!(%!#3!b!!!$mm!!'Tm!!!2c`!!UR`!!!ZJJ#3!`'J0PQ2,ca%394"2c`!!+Q J*PpCMbm,UD8S(cSmr"*)a85&)!A3K+-H+%MCa5(-!VBJ8b*-)!5J,Lm,UD01V3! U3Hd!+MJSrri[#+Ra@Bm[2%024%8r"+QJ)&qJ5D!G3QHTG%SIC`!!%Mmm!!'Tb%* RUA4+(fB!rrK)E2rk5'crrNkk#lC3MbmXrrSr,2rq6VSFm%kk#P4FMcmm!!"1ZL% q6R96N!"Q!!!',`LTm8je8j!!CJ!!"Lm)UI&1d8j@rjJ-VJ#3"3KQ!!!+-$`!!'! !"Ba1ZJ@k5'`!!#mZ!!K1ZKjd8)mY32rm$+i!N!6rr'B!!!S`2!!!B!!&BNkk#hj +!'F!!"Br2!!$6VSXU&521A`!!Ir`3QcrlMmm!!41ZJ[L9)mr2!!*6VS,p&52,bl rr%kk&f4BMae!rrYR!!8#%#lrqdL!B!!!!V"m!'9R!!!'B!!!($!Xrr"R!!!-5'` !!Nkk&)"BMf!!"0*J!!!1X(`!FfF!!!CJ!!"Q,blrr%kk"0jBMcP!rrJ[,[rm6VS %d&L218$rpLmZrra1ZJ6#@)mj32rd,blrr%kk",4BMcP!rr)`,2r`C`!!(MmXrr) r,2rd2bcrpMmXrrK)E!!+6VS8%Ylm!!aJ!!4LB!!!$V"m!'eR!!!'B!!!GLmZrra 1ZJ4Z@)mr!%kk"2*8Mdkk*[K1ZLEJ28$rq#mZrra1ZJ43@)mr!%kk"8T8Mdkk*YT 1ZLE#28$rpM!XrqjR!!!32blrpMmZrrK1ZL6-@)m`,2r`C`!!&$mZrrBr,[ri5'` !(Nkk%j!!8)pJ!!2LB!!!$V"m!("R!!!'B!!!J#mZrra1ZJ2Z@)mr!%kk"(*8Mdk k*RK1ZLCJ28$rq#mZrra1ZJ23@)mr!%kk"-T8Mdkk*PT1ZLC#28$rpM!XrqjR!!! D2blrpMmZrrK1ZL4-@)p#Cd*R6VSNH&L2-#crm'F!!"3r,[rf2blrq%KX!#T1ZK- '8)pJ!!0BB!!!$V"m!'jR!!!'B!!!GLmZrra1ZJ0N@)mr!%kk!qK8Mdkk*Hj1ZLA @28$rm#mZrra1ZJ0'@)mr!%kk"%"8Mdkk*G"1ZL@i28$rlM!XrqjR!!!32blrlMm Zrr"1ZL2Q@)m`,2r`C`!!&$mZrqir,[r`5'`!1%kk%SC3Mf!!!YKJ!!!1X(`!E'F !!!CJ!!$+,blrr%kk!Z4BMcm!6VS$D&526VSPENkk*9Bp32rd,blrr%kk!XCBMcm !6VS$`&526VSP8%kk*6Jp32rb,blrr%kk!UKBMcm!6VS$,&526VSP-Nkk*4Sp32r i,blrr%kk!STBMcm!6VS$K&526VSP&%kk*2`p32rf-#crlQF!!"ir,[rb2blrp%k k)`CBMcmZrrBr,[ri6VSM(&L2-#crm'F!!"ir,[rf2blrq$mZrr)r,[rd5'`!5%k k%E6Hr!!-B!!#"'!!!!k`I!"MC`!!"Q!!!&3[,[rm6VS#%&L228$rp#mZrra1ZJ) #@)mp32rb,blrr%kk!I4BMce!rqJ`,2r`C`!!'MmZrqJr,[rb2blrp%KX!'*1ZK& @h[`!#Q!!!DCJ!!!1X(`!B@F!!!CJ!!#+,blrr%kk!E*BMce!rr3[,[rm6VS"T&L 228$rmLmZrra1ZJ'@@)mp32r`,blrr%kk!BKBMce!rqi[,[rm6VS"HPL228$rl#m Zrra1ZJ&X@)mp32rU-#crm'F!!#Br,[rU2blrl$mZrqir,[r`2blrmMmZrr4)E!# !6VS3`Ylm!""J!!%5B!!!$V"m!(4R!!!'B!!!G#mZrr`r2!"35'lrQ%kk'p6Hr!! +5'lrQ%kk*-KBMd(ZrjI3`"!35)#`I!!JE!!!&%KZrjK1ZL5X@)p"l[qAd-"#%$! XrqjR!!!-5'lrQ%kk"l*BMc!Xrr"R!!!35'lrQ%KX!+T1ZK"#8)pJ!!#8B!!!$V" m!'CR!!!'B!!!J#mZrr`r2!"35'lrQ%kk'eEHr!!+5'lrQ%kk*%TBMd(ZrjI3`"! 35)#`I!!JE!!!&%KZrjK1ZL3Z@)p"l[qAd-"#%$!Xrr"R!!!35'lrQ%KX!,41ZJr @8)pJ!!!SB!!!!M!Xrr"R!!!8%#lrqdL!2`")E!$#6VS2Y&b2B!!!"Q!!rq"J!2V `2c`!!Nkk*fj8MbmZrra1ZL&F@)m`2!!"B!!!!NjH6R919[rq,bi!#%kk%LjBMm" m!2m[!#mZ!!K1ZK)H@)mL!#!Ii8'!3@!!!!*1ANje6PErr%KZrra1ZKHi@)mJE[r m-#J!&L"Zrrb3!'J!%NM!6VSL)%kk)PJT32rS)'lrr$!S!"3JE[rmN!"S!"")`%k k)J*1ZL)k+8$rj#!X!-`T32rJ)#`!d#P!rpa1ANje6PB!!$!Xrr"R!!!32bi!#%K X!041ZJlLA)mJ,2rJ6VSKl%KXrqK)E2dD2c`3"+RV-Li!#**XrrJr!5m25'cp'Mm m)!5Tke52-Lcrp**XrrK)`8kk)H"1ZL(`,`%[$dKXr4Sr2"!'UHYBMdkk)E4J!!! #6Pj1G8j@rrB`,2r`C`!!%$mZ!!K)E!$D6VS1E&b2)#crh%kk)AC)E2rN5'cp'Mm m%!5Tkc)Z!!L5E2rf2`%[$dKXr4Sr2#!%UHY8Mc)Xrr+5E2rf5-&1ZL&U6VSKHLm ",`p)E2dD2c`3"URV@)mYE2dDrrBYE2dHrrSpE2dLrriJ,2rN6VSK&%KZrrC)E2d D2c`!!URV6VSK&Q!!!!*1ANje6PB!!$mZ!!K1Z[lL9)p1ZL$S6VSJd$e!!!Jr,J! +6VVr3P526VSJdNkk),Sp3!!+2bi!#M!Z!!KE3$m!6VSHb&L23QFr2!!+6VSHmPL 2-#i!#PY!2`!r,J!)6VSHUPL22c`!#N*R6VSHe&L26Pj1G8j@!!![,J!)6VS9ZPL 26VSP#N*R2ccrrdkk"!*BMdkk""*1ZJ%L6VSFIN+R6VSPF&L26VS9I%jH6R919[r d2c`!C$mm!-Jr2!!b2c`!-NKZrr41ZL%Qh[`!$%+R3QF[22q3"%*R2c`!!8KX!1" )E[rd,c`!N!41ZJ2)h[`!'Le!rr`[,[rm6VS95&L22c`!&$mm!"j1ZKhq@)p)E!$ U6VS%,&L22c`!+$mm!"j1ZKhQ@)p)E!$i6VS%&&L22c`!2$mm!"j1ZKh1@)p)E!% %6VS$r&L26VS$0%S!CJ!!"Q!!rr3[,[rm6VS$QPL26Pj1G8j@rr``2!"N28$rr$e !rrj)E2q+3UG)E!%X2c`!!5mm!*!%5'`")NKZrra1ZK[Lh[`!'K!XriTR!!!-3Hc rP#!)B!!!$#!m!*!%B!!!!NjH6R919[rq6VSMB"em!"6rrN)Zrrp)E[rq2c`!!8k k)e4FMbP!rpK)E!%b,bcrf%kk)fa3MdKX!8B[,2rB6VSMK,bcrf%kk$bKBMdK X!8`r2!!#6VSM(&b2+8$re%KX!9)[,2r86VSM0,bcre%kk$[jBMdkk$`T1ANj e6PEqrM!Z!!KJ!!!#X(`!!@F!!!CJ!!!q$'i!!3!+CJ!!#NkkrP4J!!!N5'lr!$m Z!!S[,2rB6VSM+Ylm!!T)E[m!6VSM6&L228$qrQ!!!&aJ!!!1X(`!!QF!!!CJ!!" --#i!#Q!!!!+`I!!"C`!!"Q!!!"C1Z[kk,`"1Z[B-@)pJ!!!JB!!!$V"m!!0R!!! 'B!!!%$Pm!!(rl'!!!!CJ!!!#B!!!"Q!!!!*#Cdkk)ej8MdjH6R919[rF5'cq9Nk krAjBMdKZrra1ZK08@)mJE[rm3qJ!%%(Zrr4`!dkk%Pir2!!82c`!#NKZrr41ZKl S8)p#E2rX3UG#Cbmmrj!%3QFr2!!"5'`"C%KZrr3[2!#3"%kk!@VHr!!D,8$rm#m Zrr"1ZK,U@)p1ZK@f5'lri$mmrrp1ZJ$LA)m`,[rJB!!!!V"m!!&R!!!'B!!!C%K Zrpa)E[rU6VSL`B!!!!V"m!!&R!!!'B!!!(%KZrqT1ZL+%@)m[!%kkrS4BMf! !!#KJ!!!1X(`!!QF!!!CJ!!!B,blrh%KZrq"1ZJ"U8)pJ!!!'B!!!!Q!!!%aJ!!! 1X(`!"QF!!!CJ!!!m)#lriLe!rp`[,[rF6VSENPL2)#lrh,#Zrr"Q!!!-,blrm%k k%LjBMbmZrpa1ZKZ!@)pJ!!!'B!!!!JaX!!$rl'F!rbT1ANje6R919J!!,bi!##m Z!!bTXdjH6R919J!!98mr,J!),bi!#UP`%"p)J%jH6R919J!!98mr,J!),bi!#UP a%"p)J%jH6R919J!!98qTG"!I5)"1ANje6PB!!$!Z!!VKL1')-#i!#+!b6Pj1G8j @!!#T%MPm!!(qDNjH6R919J!!,bi!%%kk$P"BMeP2,bi!##mZ!!`[,J!3(bi!&6m Z!"B[,J!B(bi!(5mZ!"kT%bmZ!""1ZJk-@)mJ(djH6R919J!!,bi!#+N86Pj1G8j @!!!r,J!)U)G1ANje6PB!!$mZ!!LSL8jH6R919J!!2bi!#+L+6Pj1G8j@!!!3,J! *5)!r!+L$6Pj1G8j@!!![,J!)6VS0a&L2,bi!#+L%,bi!#%kk$KjBMdjH6R919J! !,bi!#$mZ!!`r,J!1U)91ANje6PB!!#mZ!!LSLdjH6R919[q`,`X[#LeZ!!Mr`Me Z!!craN)ZrmT#CdKZrl"1ZJ`5A)p+3'B!!&T#E[r-3QG)E[q`6VSEU&b23Hlrd#C )*'i!%KD5&fS!!3!"&fS!!J!#&fS!!`!$3Hlre#C)*'i!$KD5&fS!!3!"&fS!!J! #&fS!!`!$3QG)E[q`6VSET&b2-#lr`#4I*Pp1ANje6PErX$eZ!!Mrb#eZ!!lrd#" Z!!SY82r83Qlrh%*R5'lrX%kk$"*FMb"Z!!SJV[rB-#lr`%jH6R919[q`2@i!#2r )3QG)E[q`6VS-*&b2)'i!#L#Zrpi`,[r!6Pj1G8j@rl!pEJ!)rmJpEJ!+rp`YEJ! -rpj#CdKZrl"1ZJ`1A)p1ANje6PErX$eZ!!Mrb%*R5'lrX%kk$""FMb!Zrm`JEJ! +))!`,[r!6Pj1G8j@rl!pEJ!)rmJJ,J!+,8$rc%*R5'lrX%kk#raFMdjH6R919[q `2@i!#2r)3QG)E[q`6VS,rPb26Pj1G8j@rpB[#bCZ!!a#E[r@2`F`,J!)B!!!!V" m!'4R!!!'B!!!$Mim!!TJ!!"+B!!!$V"m!(9R!!!'B!!!$Mim!!TJ!!!bB!!!$V" m!'pR!!!'B!!!$Mim!!KJ!!!DB!!!$V"m!(KR!!!'B!!!#Mim!""J!!!#$+i!N!8 3E!!!-JaZ!'3!#'B!!"JJ8e+6%,`!,5!Z!""%J#e!!""J!!!5-#i!#QB!!!S#VJ! !rrm!%!a(!!KQ!!!3)#i!%-#m!*!$"f!!!#`-4`!3CJ!!%#!Z!"$![!#3!`pJ!!! @)#i!%#m!-!G)`#m!6VS*A&L2)"mb,[r@8QlreZ1"3Hlrf0$"-)!-4`!)CJ!!%L! Z!"$QJ-#m(rq3!f!!!#i-4`!3CJ!!%L!Z!"$SJ-#m$rq3!f!!!"BJ,J!3,`!`"dM !,`"1ZJN')"pBMbe!!"!J,J!3CJ$rB$!ZrpCR!!"38flreM!ZrpEMJ%(ZrpM3`!a 3!!TY!!!F-#lreZ1!3Hlrf0$!-"#3!(`!#Y"m!%&J!!!8-#lreZ1!3Hlrf0$!-"$ 3I!!`)&05Na#!B!$rV$iI*Pp1ANje6PErj#m,*Qi!$$m(2`B-EJ%!!!TQ!!!)2A` !"J!+2@i!#[rq$'i!CJ!)CJ!!$"em!!(rr'!!!"i-EJ"P!!KR!!!-$'i!C`!)CJ! !#N)Zrra5E[rq5'lrr%KZ!"")E[rN2c`)#kRV5'lrk%kk#Q"BMa!Zrq4R!!!+)&0 5Na#m!#d3,[rS5)#`I!!`E3!!(K!ZrqK)J,"m!$PZ!!!3%#lrk%L!X(`!-'B!!"B 3,[rTCJ!!$L"68T-3V[rSB!!"!!aZ!'B!#'B!!)K)E[rS6VSBTPL2N!"Z!!Sq!%* '$%F!!'m!!"S`"P*'3Hlrk0$!%"!J8e+6%)"64f!!rq)`,J!+C`!!#L"68T-3[!! Z-!G54`a!!!"X!!!5)&05Na#m!$"6EJ!+B!$rjM!Z!!T6EJ!+5N"R!!!B-!C54N( ZrqM3`"!3)&05Na#!B!$rhQ!!!(!J8e+6%+lrk$!Z!!TR!!!+)&05Na#m!#iq2!! "-#i!#Y&ZrqB`,J!+8fi!#NT!C`!!'$!(8NG"l[rSd-!3%#"68T-3J'!!rpiJ8e+ 6%,`!46mZrqC)E!&X,a01ZJ1Qh[`!#Lm66VSA`&L25-$4Nc`I2KmQAdjH6R919[r q3QlrrL"Z!!JJ8"!35)#`I!!`E3!!1L"Z!!JJ8"!35)#`I!!jEJ!!+$!Zrrl"r!! +)'i!##"3&K")Jp"$N!"m!$!p32rq)'i!#&+3!'!!rlJ`,[rqB!!!!NjH6R919[r Q,`XQEJ!-,`Sr"cm',@i!#2rm)!XJ3#43@)X3%QF!!US3%QF!!"`3%NL!X(`!*@F !!"!JEJ!)8Ui!#"#DB!$riK!55)#`I!!PCJ!#HP++3Qlrl$em!3$rk%*ZrqBGI!! Jrqm3%NL!X(`!,@B!!!SpI!!"rqa5LK!55)#`I!!`CJ!!#Kem!$$rle++,8Vrm%K Zrr"1Z[m+@)mp32rU*'lrm"!55)#`I!!ZCJ!!'P++,8Vrm%KZrr"1Z[lQ@)mp32r S*'lrm"!55)#`I!"XCJ!!#Mem!!(rjP++%"*R!!!)%"T)J$i!,@i!#2ri$%F!C'F !!"S-4`"[C`!!%Ja(!(KR!!!+$%F!G@B!!%``,[rQC`!!$#!,)%!J%'!!!!SJ#b" !-"")`#m!5'i!#$mZrqBr"dkkq[EHr!!--#lrjQF!!!S`2!!%B!!!"M!m!!*)`0I !B!!!`Ja(!'0Q!!!D)!Y5J#"!%"!JEJ!)8Ui!#"#!9)YJ!!#L$%F!FfB!!$iJ#b" !,9$rp&L,2#lrk$!'C`!!*L"Zrr33%'F!!"`JE[rd8Ulrp"!3)'i!#&+Z!!J3J&0 'B!$rf'!!!&i-4`"PC`!!%Ja(!'CR!!!+$%F!CfB!!$SJ#b"!5&")E2dD2c`)$UR V8Bp)E2dD5'm!"$mm#"#TkdKZ!!Jr,[rS2`G1Z[[Fh[`!%&#,B!!!$M!()'i!#&+ Z!!J3J#!Z!!L3!+lrq,"ZrqTX!!#L-#lrl'F!!#i`,[rU)Li!#*+ZrrL3!%%m!$! 'C`!!&#"Z!!K5VJ!)%+lrle0'B!$rkQ!!!'iJ,[ri-LlrkP0"5-(3J5e!rr3Y32r `)#i!#*!!V[ri2!!`"QF!!#)J,[ri-JC638M"d)%J3"!3)'lrp&1Zrr33J&0'B!$ rh#!ZrrL`V[rdEJ!!%L"ZrrK5V[ri%+lrlf!!rqBJ,[r`8S!Y3!!)B!$p9#"Z!!K #%#!Z!!L3!+lrr'!!!!)m(ciI*&mQAdjH6R919[lq,bi!$%KZr`"1Z[d)8)mp32l q,bi!#%KZr`"1ZJpX8)m`,[lq6Pj1G8j@!!")EJ!)5'cqMNkkrmC3MdjH6R919J! !5'i!$#mZ!!K1Z[c'8)p1ANje6PErr#m,*Qi!#$!V!!V!I!!"CJ!!#!"V!%!!#M! V!!V!I!"JC`!!#M!mrrpJ!!$f$+X!N!8'CJ!!AM!V!!V!I!!)C`!!)L!,3HcqI*! !L)(m!"*"l2jXdF""d#!)*S!R3!!'B!!!,Lmm!!!#!%kk%1TBMbD!*d!!"Jb!!*! %CJ!!$!"V!!J!#Q!!!!J!D`!3!!TJ!2qD,8[rr#"Zrra"k!!1,`Jr+`!-6VVhMPb 2*UX!"M!V!!V!I!%)C`!!#M!m!!&J!!!'-$`#!$m!,a-r+`!-6VS93P#20d!!"&0 V!!3`+`!%$%!!!'`!!#J-Drrr!!4Q!!!-!'X!)!!+B!!!#!"V!%!!#N*V!!3`22r rB!!!%L"68T-3%%L!`(`!rf!!!!)QAdjH6R919[rm,`XQEJ!+-#X!#X"m!!*Q!!! )!'X!3!!+-#X!#X"m!%"R!!!+-$crrf!!!5S-U`#3"3CQ!!"H-#X!#X"m!!KR!!! L)!Y"l2jmN!#)JI`!%N(XrQc4`%(3)!JQJ#G!!!CJ!!!Z,c`!!!)!6VS2`&L2*S! R3!!'$)!!N!4Q!!!-!'X!#!!+B!!!#!"V!"!!#Q!!rjS`+`!+`(`!#'F!!"3J8e+ 6%+i!#3"V!)!!#Q!!!%B`+`!+`(`"!'F!!$S!D`#!!!SJ8e+6%+i!#4!Z!!P)J," m!!TR!!!H)"13!+X!"V"m!J"X!!!3%#i!#8L!`(`!rf!!!'![#dkk$p4BMdT!C`! !%!"V!%!!#M!mrrpJ!!"%-#X!#X"m!3KR!!!B3QX!""!Z!!P)J-"m!2pJ!!!QB!! !)MGm!Im!"!"V!)!!#K!Z!!NJ8e+6%)")J-"m!2pJ!!!#*Pp1ANje6PB!!#"Z!!K 6D!!%-#J!"!a!!!"Y!!!B)'i!##!38T!!)%!3%%L!`(`!rf!!!!`[,J!)6VVp4&L 2B!!!!NjH6R919J!!)'i!#P0S!!3`+!!%$%!!!'d!!"`3,J!*)'i!#L)38T!!)%% 3J%L!`(`!rf!!!"3[,J!+%#i!#8L!2`"1Z[iLA)pJ!!!#6Pj1G8j@!!![,J!)2bi !$+Ne6Pj1G8j@!!#T0djH6R919[rq51I`!#3Z!!JL,J!-3QlrrNU"E!!!#&CZrrj %J8U#E!!!#&*Zrrj%JRB"Y)&N!!!+ii,MJf!!rr4#J,5"BJ!!"S#$NS,LLZ+,C!$ rm!aZ!!2rrQd!!!4%JH,ZrrjN!!!%4)!Y3!!),8%!$%cI!!p1ANje6PB!!#"Z!!J [+!!56VS"5&L2)'i!#%SZ!!eR!!!)T!KJ!!!%S!JJEJ!),bJ!%Nkk!C!!@)mJEJ! )-#J!%'!!!!*1ANje6PErrL"Z!!J[+!!56VS""&L2)'i!#%SZ!!eR!!!)T!"J!!! %S!!p32rq)'i!##mS!"*1ZJ&)@)mJEJ!)-@lrrJ!3-#lrrQ!!!!*1ANje6PB!!#" Z!!K+,J!0C`!!#+3#B!!!"+!#6Pj1G8j@!!!JEJ!)5Li!$@F!!!LN!f!!!!5J!dj H6R919J!!)'i!#%SZ!!eR!!!)T"KJ!!!%S"K1ANje6PB!!#"Z!!K+,J!0C`!!#+4 %B!!!"+"%6Pj1G8j@!!!JEJ!)5Li!$@F!!!LN%@!!!!5J%8jH6R919J!!)'i!#%S Z!!eR!!!)T"*J!!!%S"*1ANje6PB!!#"Z!!K+,J!0C`!!#+3"B!!!"+!"6Pj1G8j @rr`J,J!)C`!!9#!Z!!M![!%!N!0Q!!"'3QlrrM!ZrriJEJ!)d-!G82rm-#lrrL" Z!!M3`"#Zrre5E[rq(@lrr2rp%#lrr%L!X(`!!'B!rmi`,[rq8d!JEJ!)%)!J,J! )B!!!!NjH6R919[rm)#i!#'F!!'!J,J!)`,`"!*!$CJ!!8L"Z!!J3%-"m!2mp32r m3QlrrM!Zrrk`E[rmE!!!+$!ZrriJEJ!)d-!3+!!"-LlrrL"Z!!M3`4#!-#lrrP* ZrrjJ!2r3-#lrr#"Z!!M3`%)3)#i!#'!!!!*1ANje6PErp$!XrQTQ!!#Q5'cq9Nk k!MCBMdkk%BC1Z[#D6VS4%%kk#3C#Tdkk%IKBMdkk!J41ZJ)+2A`!+2rd2A`!"2r f2A`"8[ri2A`"r2rk3UG#Cbmmrj!%3QFr2!!",bi!#%KZrr4#Tdkkm&cHr!!D,8$ rr#mZrra1ZJ(F@)p#Cdkkm+*8Mcmm!!41Z[#+9)mr2!!*6VV`R&526VS!'$!XrQ, 3E2jS2`"#Cdkk#S"BMdjH6R919[rm5'lrr%kk!DCBMdKXrQ*1Z[$#@)m[2!#3!`K )E2jD)'lrr%(S!"![#%kk$(VHr!!-6Pj1G8j@rrC)E[rm6VS+&PL2-#lrr$)XrQM 5E2jLX%&X!!!H-#cqD0"XrQ)r!%*R6VS+!&L25'lrr%kk#HKBMc!Zrr`b,2jHNQc qD**XrQ53!%&%3$e!rrS-EJ!!rrTX!!!f6VS+&Le!rrB[,[rf2blrqN*R5'cq@Nk k%4EHr!!-,blrpNkk#J*BMcmZrrT#Cdkk#E*BMdjH6R919J!!,`N`f9()rr`LAdj H6R919J!!6Pj1G8j@!!"1ANje6PErTLem484*92qX,Aa849K8rkK)E[qS5'lrV%* R,bi!#%kklp$Hr!!1,@i!#2r#2@cpK2r'3LlrbKem!!,rbd+Zrma#CdKZrl"1Z[` HA)mpE[r)rkBjE[r!rBCR!!!+-$crrf!!!#C#TcmZrkC1Z[#qA)m`,J!-`(`J!$m !2blrTNkk"jTBMc!ZrkC1ANje6PB!!+K36Pj1G8j@!!#S8NjH6R919J!!,bi!#+K Z6Pj1G8j@!!![,J!)U(01ANje6PB!!#mZ!!LSG%jH6R919[rf5'lrr$mZ!!K1ZZr HA)p)E[ri2bi!#%kkm"aFM`aZ!!%!$QB!!")J,[rmd+i!#Le!!!TJ!!!Z$'i!!J! 1CJ!!%L!ZrrM3VJ!+,8!!#Q!!!"3`,J!1C`!!$#!mrj!%B!!!6#!Z!!U`V[riE`! !%#mZ!!Sr,J!)6VV[j&b2,bi!#Mmm!!%r,J!)6VV[KÚ$pKQF!!"!J22q3"'! !!!jJ!!!+)#i!#Q!!!!*1ANje6PB!!$mZ!!K1ZJEQ9)m-EJ#3!`K[!!!N2bi!#%k kll"8McP!rBCR!!!+-$crrf!!!!B`2!!!B!!!"M!mrrp1ANje6PErq#m,*Qi!$$m (,`T#E[ri%"0)J,"m!'*Q!!!+2A`J!2ri8SX3%dL!X(`!FQF!!#33%dL!X(`!GfF !!"J3%dL!X(`!B@F!!!`J2!#3"'!!!@3J,2f)*%!-J!#3"'B!!$4"l2jm*%JJ#N( XrR`L#0+m!!!"$V#"E!!!'M!U!!V!I!!$CJ!!"Q!!!!V8r!!5B!$reL!+3HcqI#) )dV`!!!%1X)&Y!!!-)$`!N!4J!!%%3UcpL%*U!!SpI!!"rrS3+`!"5)#`I!!VCJ! !$Mem!!2rqJ"U!!-!#K!65)#`I!"hCJ!!($mZrrJ[,J!)6VVp5Pb22J!!DJ!#!!T J!!"`%"0)J,"m!'&Q!!")-$`!!i"ZrrJr!#mZ!!K1ZJAqA)mq!!a!rrpQ!!!52bl rq#mZ!!K1Z[d'A)mq!$mm!!*#Tcm(6VVpa!'S!"J!+B!!!(M!ZrrU!E[ri2`! [,J!)6VS&Z&b22J!!DJ!"!!S-4rrrCJ!!%%*U!!SJ2!#3"'!!!$)e4`!-3QS!"#! m!*!%*)!P3!!',8Vrr#"Zrra"k!!1,`Jr"dkkl8TFMb!+B!!!!L4I2KmQAdjH6R9 19J!!UE41ANje6PErrLm,*Qi!##m+*%Y6EJ!--#i!$!a!!!"[!!"D)'i!$P0S!!3 `+!!%$%!!!'d!!"JJEJ!1)""5N!!J3"!35)$!I!$rB!!!$#mZ!!j1Z[5N@)mp32r q$%$rrfF!!"S`,[rq&-")J,"m!!TQ!!!'B!!!"Q!!rjT#%JaZrj!$rQB!!"3J#V# ,CJ!!$#!m!*!%B!!!"#!,B!!!!L4I*Pp1ANje6PErr#eY!"$rr#"Zrr`J8$#Z!!K 1ZJa'6Pj1G8j@rri[#d*Zrri-EJ!9rrjX!!!b-#lrrZ@!3Hcp-0$!$&!!!'m!!"B `,[rqjB""l2d`d-!r%%kkl-a8Me*ZrrjJ!2r)2bi!#%kkrjT8MbCI6Pj1G8j@rq4 )E!&`6VVjXPL26VVkB$!Z!!aR!!(@5'lrkMmm!!K1ZZS3A)m-EJ!$rqTQ!!"U-#l rq-"m!3"R!!"H5'lrkMmm!!K1ZZR8A)mJ,[rX`,`!N!0r$)!!N!0cCJ!!(NKZrqS r2!!)6VVTXPb2$'i!!rrUCJ$rkQ!!!#!J,[rX`,`!N!0r$)!!N!-ZCJ!!$$mm!!* 1Z[m@9)mYEJ!)rqBJE[rQ8UlrjKe3rq83,[rP5)#`I!!+C`!!1"!Zrq9)J,"m!!K R!!!U%#lrj8L!X(`!$@F!!"`3,[rP5)#`I!!*C`!!$P0Z!!``,J!-CJ$rXNkkqEB J,[rQN!#Z!!K63$m!3QF[,J!)6VVU+,@lrjJ!)-#i!$'F!!-4)E[rm6VS$U&L 2%#lrj8L!X(`!#QB!!#!`,[rmd'cqBY"XrQ63E2jS2`"#Cdkk!ijBMf!!!)B3,[r P5)#`I!!*CJ!!2$!Zrrj)`)(XrQBp32rk-#lrqNM!JI`!#&*!`I`!#$e!rrSr,[r m-#lrqX(XrQBr!%kk!dCBMf!!!$i3,[rP5)#`I!!)CJ!!&N*R-#cqCN4!2`"1ZJ- f@)pJ!!!F%#lrj8L!X(`!$@B!!!ir,[rm3QG1ZJ-'@)p6EJ!-B!!!%"!Zrq9)J$m !6VVT&P52B!$q*NjH6R919[qZ,`XQEJ!+,`SN5ceZ!!lrVJaZI3%!#'B!!")r,J! 1,`Y1Z[hSA)pJ!!#i2bi!#%kk!Hj8MdT!CJ!!*M!Zrkj6E[qZ5N"R!!!B%"*)J," m!!TQ!!!'&,`!$9++B!$rhN+Zrl`pEJ!)rmJY5rr3-#i!$X#m!!$rrbe!rp4#E[r F3QG)E[q`6VVeZ&b218$pKJa!!!"X!!!+-$crrf!!!%`J,[rB28$rVMmZ!!K1ZJ& b9)p+3'B!!#`pE[qZ!!i`,J!18fi!$NT!C`!!'"!65)#`I!!0CJ!!"KDm!!T5Lf! !rpi`,[qZB!!!!L4I*Pp1ANje6PB!!+R-6Pj1G8j@!!")E2k1,bi!#%kk!"C3MdK XrSir2!!+6VVcR&b26Pj1G8j@!!!JEJ!)%""R!!!H,bi!$#"Z!!K5VJ!)%"")J$m !6VVcFPb2B!$rh%jH6R919J!!)'i!##m3,bi!$#mZ!"!r,J!8,bi!&LmZ!"S[,J! H2c`!!URU)'i!(N(S!!S[#%kkpG"BMdjH6R919[rq3QlrrJaZ!"ArrQ`!!%!`,[r qjB""l2d`d-!`%'B!!#B`,[rqjB""l2d`d-!`VJ!)-#lrrZ@!3Hcp-Y$!-+i!#Q! !!!T5E[rqB!$rZNjH6R919[rq3QlrrJaZ!"ArrQ`!!#i`,[rqjB""l2d`d-!`%," Z!!KQ!!!3-#lrrZ@!3Hcp-0$!3P"5E[rqB!$rc%jH6R919J!!2`Fq,J!)3Hcp-#* )d[`!9,j3C`!!#PK)XmKQ!2rd-#J!!MiI6Pj1G8j@rl!YEJ!)rm)pE2f%rmC#,[r +)'i!#"!35)#`I!!ZCJ!!#M!m!!"J!!!+-#i!$-"m$rmG32r,3Ulrc%*R5'lrX%k kmdCFMcP!rBCR!!!D)'i!#"!35)#`I!!ZC`!!#M!mrrpJ!!!H-#i!$-"m)!!r!$m ZrmK1Z[l'@)m`,[r)B!!!!NjH6R919J!!,bi!#+LD6Pj1G8j@!!!r,J!)2bi!#UL 66Pj1G8j@!!!r,J!)2bi!#UL86Pj1G8j@!!!r,J!)2bi!#UL46Pj1G8j@!!!r,J! )2bi!#UL56Pj1G8j@!!"C6kMB)"p1ANje6PB!!#mZ!!LSf8jH6R919J!!)#i!#+% H18$m%L!)6Pj1G8j@!!!JEJ!)S"mj32`56Pj1G8j@!!![,J!)U5*1ANje6PB!!#m Z!!LT)djH6R919J!!,`XQEJ!),`Y1ZJ"5@)p+3'F!!!S`22rrB!!!2$!V!!V!I!! 3C`!!$#mV!!C1Z[qJ@)p#D`!+2bX!$%kkpbC8MdT!C`!!#M!mrrpJ!!!+-$`!!'! !!!)QAdjH6R919[rm,`XQEJ!)2`F`+`!+`(`!!fB!!!S`22rrB!!!RL!6N!#V!!B q!$!V!!V!I!#!C`!!@$!V!!V!I!!#CJ!!#M!mrrpJ!!"f-#X!#X"m!!4R!!!52c` !!N+R2bX!$%kkpI*3Mcm(,bX!"MmV!!a1Z[ZQ8)m-32rrCJ!!#M!mrrpJ!!!k!Q[ rI`!+,8[rr!aVI3!!$'`!!"BJE[rm3HJ!$Lm)2bX!$%kkjCCFMbDV!!C#D`!%-$` !!'!!!!)q(bCI6Pj1G5P!r5C)E2dQ5'cp'Mmm+!kTkdje5'cp'NKXr5Br2#J3UHX J,2dQ6R8T32dQ5'cp*NKXr4Sr2"!1UHY1G8KXr4T)E2dQ2c`3%+RV)#cp*Nje+8( p*NKXr5C)E2d12c`S$URV6R9)E2d15'cp*Mmm%"#Tkb)Xr5C1G8j@!!!JEJ!))Qi !$#!Z!"#J,MP!r"*1ANje6PB!!#"Z!!J[+!!56VVaR&L2)'i!#%SZ!!eR!!!)T!a J!!!%S!`JEJ!),bJ!%NkkmH4BMb"Z!!J`+!!3B!!!!NjH6R919J!!)'i!##mS!"* 1Z[&B@)mJEJ!)5Li!$@F!!!LN$@!!!!5J$5"Z!!J[+!!56VVaS&L2)'i!#$!S!"" J!!!#6Pj1G8j@!!![,J!)2bi!$$mZ!!ir,J!32bi!%ULR6Pj1G8j@!!![,J!)2bi !$$mZ!!kSU8jH6R919J!!,`XQEJ!)2`G#4a!EC`!!#&*(B!$rpM!(B!!!!MiI*Pp 1ANje6PErk$!Xr"D`E2`8C`!!($!Xr"45E2`83HcmZ0$!%"")J'!!!ETJ!!'f-$` !!$P!r"3j32`@5'`"I%kkm@TBMdkkmP")E2k16VVpI&L25'lrk%kkr&jBMdKXrSi r2!"I6VVZ-&b25'cqMNkkr9TBMcmZrqJr,[rU6VVm4PL25'lrlMmm!#K1ZZ&qA)p +!'F!!3J-EJ!$rqjR!!!-$'i!"IrZCJ!!p#!Zrr$![!#3!rmp32rX$'i!#2rXCJ! !+M!Xr"CR!!!H2blrk&0Xr"B`,2`@ii""l2`Bd-!r%%kkqq*BMf!!!,3-EJ!0rqa Q!!!L-#cm&P*Xr"C"l2bid-!3[!!+5'`"K%kkqG*BMf!!!*J-EJ!ZrqaQ!!!B-#l rr-"m!3"R!!!-2c`!!NkkpQT8M`aZ!'6rl'B!!#i`,[rm`(`"!'F!!#)`,2`@8Qc m&N(Xr,M3`"#mrrp)E!')6VVjI&L2B!!!3M!Xr"EMJ%(Xr"M3`$#ZrqS`,[rX-Lc m&P*Xr"C"l2bid-%3J%KXrSir,[rX6VVXrPb25'cqMNkkr#KBMf!!rT)`,2`83Hc mZ0$!%"")J,"mrrpQ!!!1-$crrf!!!"aJ!!!B-#cm&&*Xr"4"l2bid-!3%%L!B!! !!NjH6R919[rm,`XQEJ!+,`SN5c!Z!!l![!!!rrmY32rm$'jp!!!)CJ!!8N+Zrr` `,J!18fi!$NT!C`!!*%kkrH38J%L!X(crrfB!!!TJ!!!3B!!!#&++8Ulrr'!!rp) J,[rmCJ!!#M!mrrpJ!!#%)#lrr'!!!(aJ!!!d,`Y)E[rm2bi!#%kki@MHr!!+18$ pKJa!rpPQ!!!'3QcpKM!XrBCR!!!+-$crrf!!!%Br,J!)6VVjEP525N"Q!!!Z)#l rr$e!!!i`,J!18fi!$NT!C`!!'"!65)#`I!!0CJ!!"KDm!!T5Lf!!rpiJ,[rmB!! !!L4I*Pp1ANje6PB!!+N`6Pj1G8j@!!![,J!+6VVYh&L2@8mr,J!),bi!#UNa,bi !#NkklM"BMb!I6Pj1G8j@!!![,J!-6VVYXPL2,bi!##mZ!!bT-bmZ!!a1ZZi)@)p 1ANje6PB!!#mZ!!JJEJ!-,a#T68jH6R919J!!U2j1ANje6PB!!#mZ!!Jr,J!-,bi !$UP',bi!$NkklFTBMdjH6R919J!!2bi!#+R)6Pj1G8j@!!![#bCZ!!J3%fB!!!B @[!!",`Y1ZZdb@)mJ#e+!)%!3%%L!X(`!!@B!!!SJ#e+!)%"#%&92,`ZTYLm,6VV YG&L2-"mQAdjH6R919J!!,bi!#+Pl6Pj1G8j@!!"1ZZpQUI41ANje6PB!!&P2)'i !##m3U6dJ(djH6R919J!!2bi!#+Ni6Pj1G8j@!!"96b"Z!!J[%#mZ!!bT,$!I6Pj 1G8j@!!![,J!)2bi!$$mZ!!i[,J!3U1p1ANje!*!$QJ!)!!%jI!!!rr!jI!!"rqi jI!!!rqa$l2jm)[`!N!3br!!!)[`!N!3br!!*-[ap!#,m!*!%)[`!N!3br!!!)[` !N!3br!%#-[ap!5,m!*!%)[`!N!3br!!!)[`!N!3br!%#-[ap!5,m!*!%d[`!f#P m!*!%rBJjI!!!rB3TE!&ir3JjI!!!r"BjI!!!r"41G3!!!C*b!'9bBA0P#J!!Fh" KBf8J*@3J*@3J*@3J*@3+!!"YEhCP)#9N)#9N#J"`EfPZG#!PC#!PC!S!!'aTEQ8 JG'mJ*@3J*@3+!!"XD@jP)'CbEfdJ*@3J*@3JG'mJ*@3J*@3+!'0TFQ0XC5"QFQp Y)#9N)#9N)(*KC'PeFb!PC!S!!'0MGb"KFQ-JBf9ZG'9b)#9N)#9N)'CbEfdJ*@3 J*@3JG'mJ*@3J*@3+!'aKBQ9X)#9c#J"XD@jP)'e[C'8J*A-+!'KeD$mJ*@-+!!! rJ!!!2fD3!hJJ*@3+!(NJ*@3+!%&LEh9d,T!$!!"0B@0`E'pd)(Ba,M!!!%*bB@3 J8'&bDf9b!%GPEQ9bB@`J3fpYF(9dCA)J3fpbF#iJ-6![1$B!!&"XEh4QD@aP!!" 849K8!!""BQpeG#"0B@0`E'pd,T!$1bJY!%459P)!!%CTE'8!!("XEh3JCQPXC6X S,6Y4G@Pd!%eKBh"XEh3!*@3!!&0dC'peG!!!2i!!!&0dC'peG!!!)#!!!#!J!!" $6d4&!*!p(!"H!!&$6d4&!!)!%N4"9%%!N!-f!*!0!3!"!*!$*!#3"3)!!J!!,US !N!F$!!![5!#3#-8'!: SHAR_EOF if test -f 'macplot.c' then echo shar: over-writing existing file "'macplot.c'" fi cat << \SHAR_EOF > 'macplot.c' /* * macplot - plot unix "plot(5)" format files on mac screen * * Brad Parker * General Computer 10/86 * harvard!brad@gcc-milo */ #include <stdio.h> #include <qd.h> #include <event.h> #include <menu.h> #include <win.h> #include <pack.h> typedef int word; int x0, y0, x1, y1; float scalex(), scaley(); int debug = 0; int plot = 1; int doneflag = 0; plotfile(name) char *name; { FILE *f; char c; int x, y, xf, yf, xt, yt, xe, ye, r; char label[80]; if (name == (char *)0) return 0; setsize(); /* scale size to window */ f = fopen(name, "r"); /* open plotfile file */ if (f == (FILE *)0) return 0; if (Button()) /* for debug */ { SysBeep(3); debug = 1; plot = 0; } TextFont(4); /* use monoco */ TextSize(9); /* 9 point */ while (c = fgetc(f)) /* loop through plotfile commands */ switch (c) { case 'e': /* erase */ if (debug) printf("erase\n"); break; case 's': /* space */ x0 = getword(f); y0 = getword(f); x1 = getword(f); y1 = getword(f); if (debug) printf("space %d %d %d %d\n", x0, y0, x1, y1); /* cross((x0+x1)/2, (y0+y1)/2); */ break; case 'm': /* move */ x = scalex( getword(f) ); y = scaley( getword(f) ); if (plot) MoveTo(x, y); if (debug) printf("move %d %d\n", x, y); break; case 'p': /* point */ x = scalex( getword(f) ); y = scaley( getword(f) ); if (plot) { MoveTo(x,y); Line(0, 0); } if (debug) printf("point %d %d\n", x, y); break; case 'n': xt = scalex( getword(f) ); yt = scaley( getword(f) ); if (plot) LineTo(xt, yt); if (debug) printf("line to %d %d\n", xt, yt); break; case 'l': xf = scalex( getword(f) ); yf = scaley( getword(f) ); x = scalex( getword(f) ); y = scaley( getword(f) ); if (plot) { MoveTo(xf, yf); LineTo(x, y); } if (debug) printf("line from %d %d to %d %d\n", xf, yf, x, y); break; case 'c': xf = getword(f); yf = getword(f); r = getword(f); if (debug) printf("circle from %d %d radius %d\n", xf, yf, r); break; case 'a': xf = getword(f); yf = getword(f); xt = getword(f); yt = getword(f); xe = getword(f); ye = getword(f); if (debug) printf("ccw arc center %d %d from %d %d to %d %d\n", xf, yf, xt, yt, xe, ye); break; case 't': fgets(label, sizeof(label), f); if (label[strlen(label)-1] < ' ') label[strlen(label)-1] = 0; if (plot) DrawString(label); if (debug) printf("label %s\n", label); break; case 'f': fgets(label, sizeof(label), f); if (label[strlen(label)-1] < ' ') label[strlen(label)-1] = 0; if (debug) printf("line mode %s\n", label); break; default: if (debug) printf("huh? %c\n", c); } SysBeep(2); fclose(f); return 1; } getword(f) FILE *f; { int w; return (word)((fgetc(f) & 0xff) | (fgetc(f) << 8)); } /* max area you want for picture */ float XSIZE, YSIZE; float xratio, yratio; setsize() { GrafPtr port; GetPort(&port); XSIZE = port->portRect.right - port->portRect.left; YSIZE = port->portRect.bottom - port->portRect.top; xratio = 1.0; yratio = 0.9; } float scalex(xx) int xx; { if (debug) printf("x %d\n", xx); return xratio * XSIZE * (xx - x0) / (float)(x1 - x0); } /* note: y is inverted */ float scaley(yy) int yy; { if (debug) printf("y %d\n", yy); return YSIZE - ( yratio * YSIZE * (yy - y0) / (float)(y1 - y0) ); } cross(x, y) int x, y; { x = scalex(x); y = scaley(y); MoveTo(x-5, y); Line(10,0); MoveTo(x, y-5); Line(0, 10); } /* init mac environment */ i_mac(pport) GrafPtr *pport; { InitGraf(pport); InitFonts(); FlushEvents(everyEvent, 0); InitWindows(); setupmenus(); TEInit(); InitDialogs(0L); InitCursor(); } #define applemenu 1 #define filemenu 2 MenuHandle a_menu, f_menu; doabout() { WindowPtr AWindPtr; Rect windowrect; SetRect(&windowrect, 50, 50, 200, 100); AWindPtr = NewWindow((WindowPtr *)0, &windowrect, "About...", 1, 0, (long)-1, 0, (long)0); SetPort(AWindPtr); MoveTo(30,20); DrawString("Macplot v1.0"); MoveTo(30,40); DrawString("Brad Parker"); MoveTo(30,60); DrawString("General Computer Corp. 10/86"); while (!Button()); DisposeWindow(AWindPtr); } /* Using SFGetFile, get name of plot file */ /* return pointer to file name */ SFReply reply; char *getfilename() { Point point; point.h = point.v = 100; SFGetFile(&point, "Plotfile", (ProcPtr)0, 1, "TEXT", 0L, &reply); if (reply.good) return reply.fName; return (char *)0; } setupmenus() { char appletitle[2]; InitMenus(); appletitle[0] = appleMark; appletitle[1] = 0; a_menu = NewMenu(applemenu, appletitle); AppendMenu(a_menu, "About Macplot...;(-"); AddResMenu(a_menu, "DRVR"); InsertMenu(a_menu); f_menu = NewMenu(filemenu, "File"); AppendMenu(f_menu, "plot file;(-;Quit"); InsertMenu(f_menu); DrawMenuBar(); } docommand(themenu, theitem) int themenu, theitem; /* nice hack - arg is passed as a long */ { char name[256]; int refnum; switch (themenu) { case applemenu: if (theitem == 1) doabout(); else { GetItem(a_menu, theitem, name); refnum = OpenDeskAcc(name); } break; case filemenu: switch (theitem) { case 1: plotfile( getfilename() ); break; case 3: doneflag = 1; break; } break; } HiliteMenu(0); } /* init mac environment */ main() { GrafPtr port; Rect windowrect; WindowPtr mywindow; EventRecord myevent; WindowPtr whichwindow; i_mac(&thePort); /* init mac Environ. */ GetPort(&port); windowrect = port->portRect; /* copy graf port's rect */ InsetRect(&windowrect, 10, 20); /* shrink a bit */ doneflag = 0; mywindow = NewWindow((WindowPtr *)0, &windowrect, "Macplot", 1, 0, (long)-1, 0, (long)0); SetPort(mywindow); do { SystemTask(); GetNextEvent(everyEvent, &myevent); switch (myevent.what) { case mouseDown: switch (FindWindow(&myevent.where, &whichwindow)) { case inMenuBar: docommand(MenuSelect(&myevent.where)); break; case inSysWindow: SystemClick(&myevent, whichwindow); break; } break; case updateEvt: whichwindow = (WindowPtr)myevent.message; BeginUpdate(whichwindow); if (whichwindow == mywindow) { SetPort(mywindow); /* update log window */ } EndUpdate(whichwindow); break; } } while (doneflag == 0); } SHAR_EOF if test -f 'macplot.rc' then echo shar: over-writing existing file "'macplot.rc'" fi cat << \SHAR_EOF > 'macplot.rc' macplot.rsrc Type CODE macplot.out,0 SHAR_EOF if test -f 'README' then echo shar: over-writing existing file "'README'" fi cat << \SHAR_EOF > 'README' The enclosed files are a crude little hack that extract geographical data from the UUCP map '#L' lines and draw a map, in plot(3) form, on the standard output. Only small modifications are required to map other parts of the world. This is very quick and dirty (if it was any good, I'd post it to mod.sources instead of net.sources). No allowance is made for the curvature of the earth, so the larger the area you plot, the worse it gets in terms of accuracy. The names and locations of cities that are plotted as reference points are wired in to the code. And the method for scanning the '#L' lines is very crude (it does, however, work for almost all the bizarre formats I've seen in the map). Oh -- color() is a VENIX-specific routine that sets the color for the output display. You can probably just remove the calls to it if you don't have one. Feel free to hack this -- I would appreciate receiving copies of improved versions. It makes a nifty little demo when you're trying to explain the net to someone. -- Larry Campbell The Boston Software Works, Inc. ARPA: campbell%maynard.uucp@harvard.ARPA 120 Fulton Street, Boston MA 02109 UUCP: {alliant,wjh12}!maynard!campbell (617) 367-6846 SHAR_EOF if test -f 'Makefile' then echo shar: over-writing existing file "'Makefile'" fi cat << \SHAR_EOF > 'Makefile' # # Makefile for compiling uplot with generic plot(5) output # #CFLAGS = -z -i #LDFLAGS= -ltrb LDFLAGS= -lplot SHARFILES = README uplot.c uplot.sed uplot.sh Makefile uplot: uplot.c cc -o uplot $(CFLAGS) uplot.c $(LDFLAGS) uplot.shar: $(SHARFILES) shar $(SHARFILES) >uplot.shar macplot: macplot.rsrc macput -r macplot.rsrc -n macplot macplot.rsrc: macplot.out mmaker macplot.rc macplot.out: macplot.o mmlink -o macplot.out macplot.o macplot.o: macplot.c mmcc -c -DMAC macplot.c SHAR_EOF if test -f 'uplot.c' then echo shar: over-writing existing file "'uplot.c'" fi cat << \SHAR_EOF > 'uplot.c' /* * uplot.c * * Crude hack for drawing a map of the UUCP net - reads on standard * input a highly massaged version of the '#L' lines from the UUCP map, * processed by uplot.sed and sorted, and writes plot(3) instructions * on standard output. * * Released to the public domain August, 1986. * Larry Campbell (maynard!campbell) * The Boston Software Works, Inc. * 120 Fulton Street, Boston, MA 02109 */ #include <stdio.h> /* These defines set the bounds of the rectangle being drawn */ #define MINLAT 25 #define MAXLAT 50 #define MINLON (-125) #define MAXLON (-60) struct { int deg; int min; } lat, lon; int n, x, y, lastx, lasty, weight, col, maxweight, goodpoints, badpoints, outpoints, uniques, debug; char buf[256]; main(argc, argv) char *argv[]; { if (argc > 1) debug++; openpl(); erase(); /* space(MINLON*60, MINLAT*60, (MAXLON-30)*60, MAXLAT*60); */ space(MINLON*60, MINLAT*60, MAXLON*60, MAXLAT*60); if (debug) fprintf(stderr, "space (%d, %d, %d, %d)\n", MINLON*60, MINLAT*60, MAXLON*60, MAXLAT*60); city("Boston", 42, -71); city("Chicago", 42, -88); city("Dallas", 33, -97); city("DC", 39, -77); city("Denver", 40, -105); city("Houston", 30, -95); city("LA", 34, -118); city("Miami", 26, -80); city("NYC", 41, -74); city("SF", 38, -122); city("Seattle", 47, -123); city("Toronto", 43, -79); city("Vancouver", 49, -124); lastx = lasty = 0; while (gets(buf) != NULL) { n = sscanf(buf, "%d %d N / %d %d W", &lat.deg, &lat.min, &lon.deg, &lon.min); if (n != 4) n = sscanf(buf, "%d %d %*d N / %d %d %*d W", &lat.deg, &lat.min, &lon.deg, &lon.min); if (n != 4) n = sscanf(buf, "%d %d N %d %d W", &lat.deg, &lat.min, &lon.deg, &lon.min); if (n != 4) n = sscanf(buf, "%d %d %*d N %d %d %*d W", &lat.deg, &lat.min, &lon.deg, &lon.min); if (n != 4) n = sscanf(buf, "%d %d %*d %*d N / %d %d %*d %*d W", &lat.deg, &lat.min, &lon.deg, &lon.min); if (n != 4) n = sscanf(buf, "%d %d W / %d %d N", &lon.deg, &lon.min, &lat.deg, &lat.min); if (n != 4) n = sscanf(buf, "%d %d %*d W / %d %d %*d N", &lon.deg, &lon.min, &lat.deg, &lat.min); if (n != 4) n = sscanf(buf, "%d %d W %d %d N", &lon.deg, &lon.min, &lat.deg, &lat.min); if (n != 4) n = sscanf(buf, "%d %d %*d W %d %d %*d N", &lon.deg, &lon.min, &lat.deg, &lat.min); if (n != 4) n = sscanf(buf, "%d %d %*d %*d W / %d %d %*d %*d N", &lon.deg, &lon.min, &lat.deg, &lat.min); if (n != 4) { n = sscanf(buf, "%d N / %d W", &lat.deg, &lon.deg) + 2; lat.min = lon.min = 0; } if (n != 4) { n = sscanf(buf, "%d W / %d N", &lon.deg, &lat.deg) + 2; lat.min = lon.min = 0; } if (n != 4) { badpoints++; if (debug) fprintf(stderr, "bad: %s\n", buf); } else { goodpoints++; lon.deg = -lon.deg; lon.min = -lon.min; if (lat.deg >= MAXLAT || lat.deg < MINLAT || lon.deg >= MAXLON || lon.deg < MINLON) { outpoints++; continue; } x = lon.deg * 60 + lon.min; y = lat.deg * 60 + lat.min; if (x == lastx && y == lasty) weight++; else { uniques++; if (weight > maxweight) maxweight = weight; switch (weight) { case 0: col = 1; break; case 1: col = 2; break; default: col = 3; break; } if (debug) fprintf(stderr, "lastx = %d, lasty = %d, weight = %d, color = %d\n", lastx, lasty, weight, col); if (lastx && lasty) { color(col); point(lastx, lasty); } weight = 0; lastx = x; lasty = y; } } } fprintf(stderr, "Good: %d, bad: %d, out of range: %d, max: %d, uniques: %d\n", goodpoints, badpoints, outpoints, maxweight, uniques); closepl(); } city(s, lat, lon) char *s; int lat, lon; { char buf[80]; if (lat < MINLAT || lat >= MAXLAT) return; if (lon < MINLON || lon >= MAXLON) return; color(2); move(lon*60, lat*60); if (debug) fprintf(stderr, "city %s at %d, %d\n", s, lon*60, lat*60); sprintf(buf, ".%s", s); label(buf); } color() { } SHAR_EOF if test -f 'uplot.sed' then echo shar: over-writing existing file "'uplot.sed'" fi cat << \SHAR_EOF > 'uplot.sed' s/^.*:#L// s/ / /g s/[Ll]at./ /g s/[Ll]at/ /g s/[Ll]ong./ /g s/[Ll]ong/ /g s/[Ll]on./ /g s/[Ll]on/ /g s/[Dd]eg./ /g s/[Dd]eg/ /g s/'/ /g s/"/ /g s/:/ /g s/\./ /g s/ / /g s/ / /g s/ / /g s/ / /g s/^ //g s/ $//g s/[Cc]ity$// s/(.*)$// s/West/W/ s/East/E/ s/North/N/ s/South/S/ s/o //g s| x | / | s|,|/| s|N/|N /| s/ / /g s/ / /g /^$/d SHAR_EOF if test -f 'uplot.sh' then echo shar: over-writing existing file "'uplot.sh'" fi cat << \SHAR_EOF > 'uplot.sh' : plot uucp map on graphics gizmo MAPDIR=/usr/spool/uucpmap grep '^#L' $MAPDIR/u.usa.* | sed -f uplot.sed | sort | uplot SHAR_EOF chmod +x 'uplot.sh' # End of shell archive exit 0 -- J Bradford Parker General Computer (HyperDrive Beach, 3rd Cabana) harvard!gcc-milo!brad Good Sex is easier than a good slow roll. ("Left Stick! Right Rudder!...")