From 9b259565bb2516398a9cacb836cd11dc5451c119 Mon Sep 17 00:00:00 2001 From: "R. Tyler Ballance" Date: Thu, 8 Feb 2007 21:43:32 +0000 Subject: [PATCH] - Import PmpMyApp source for bonjour-dev git-svn-id: svn://svn.geekisp.com/bleep/trunk/PmpMyApp@48 a256dd88-e320-0410-9161-d397f098afaa --- English.lproj/InfoPlist.strings | Bin 0 -> 188 bytes English.lproj/MainMenu.nib/classes.nib | 4 + English.lproj/MainMenu.nib/info.nib | 22 + English.lproj/MainMenu.nib/keyedobjects.nib | Bin 0 -> 13477 bytes Info.plist | 28 + PmpMyApp.xcodeproj/project.pbxproj | 369 +++++ PmpMyApp.xcodeproj/tyler.mode1 | 1392 +++++++++++++++++++ PmpMyApp.xcodeproj/tyler.pbxuser | 452 ++++++ PmpMyApp_Prefix.pch | 7 + main.m | 14 + source/pmpmapper.c | 158 +++ source/pmpmapper.h | 51 + source/route.c | 126 ++ source/route.h | 31 + 14 files changed, 2654 insertions(+) create mode 100644 English.lproj/InfoPlist.strings create mode 100644 English.lproj/MainMenu.nib/classes.nib create mode 100644 English.lproj/MainMenu.nib/info.nib create mode 100644 English.lproj/MainMenu.nib/keyedobjects.nib create mode 100644 Info.plist create mode 100644 PmpMyApp.xcodeproj/project.pbxproj create mode 100644 PmpMyApp.xcodeproj/tyler.mode1 create mode 100644 PmpMyApp.xcodeproj/tyler.pbxuser create mode 100644 PmpMyApp_Prefix.pch create mode 100644 main.m create mode 100644 source/pmpmapper.c create mode 100644 source/pmpmapper.h create mode 100644 source/route.c create mode 100644 source/route.h diff --git a/English.lproj/InfoPlist.strings b/English.lproj/InfoPlist.strings new file mode 100644 index 0000000000000000000000000000000000000000..589515c4f5ec0dd5b4fa32af490eae6e3eeeca74 GIT binary patch literal 188 zcmXAh!4APt5Jk`0S2UK5v|?i+R^5;^7JNa`B50cy34i1#aq?u6xifdp-0vqPCL*U{ zN5O>?FG}`$54EG$X{gmmt?Wy;$~mD8e9ukyEd2~rOv=Dov0=fTtGP96?}fPqTfa&& h6Iwqy^A8+D#@w7CZ~LDqB@(yX${0CK7+X`R89y-dAb9`) literal 0 HcmV?d00001 diff --git a/English.lproj/MainMenu.nib/classes.nib b/English.lproj/MainMenu.nib/classes.nib new file mode 100644 index 0000000..b9b4b09 --- /dev/null +++ b/English.lproj/MainMenu.nib/classes.nib @@ -0,0 +1,4 @@ +{ + IBClasses = ({CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }); + IBVersion = 1; +} \ No newline at end of file diff --git a/English.lproj/MainMenu.nib/info.nib b/English.lproj/MainMenu.nib/info.nib new file mode 100644 index 0000000..9b09eac --- /dev/null +++ b/English.lproj/MainMenu.nib/info.nib @@ -0,0 +1,22 @@ + + + + + IBDocumentLocation + 135 107 356 240 0 0 1680 1028 + IBEditorPositions + + 29 + 131 352 306 44 0 0 1680 1028 + + IBFramework Version + 446.1 + IBOpenObjects + + 21 + 29 + + IBSystem Version + 8L2127 + + diff --git a/English.lproj/MainMenu.nib/keyedobjects.nib b/English.lproj/MainMenu.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..28d30f22e67e86dd5daa7d1de1e7de333ae1367b GIT binary patch literal 13477 zcmch7d3+Pa8~4m+cbha#vbmb8NjB+rm-{M5!2=736roUBZUIAyrP7P0g>n>T0g?L_ z5dooypmM4ps2qZTTp}WZD5xMJmk1)LT<^1+wpNkf=Y9WqjikG?GvDv?Jo7xyJhPL5 zMR~cAl17cbL>N&>gJ{Gc7R8|0-a@E2dvNZsaB(jIz9PAW1zAE#VNoxkaNzUd?2^a; z&Xk_{ba+H~P-zCH1LA2YTP)Ug3b!NN(=}{bNjGCdA=n2#owMS2* zY%~ak(Q_yl6`~?kf=baaG#rgYW6%=xI(iR%h(1DF(N44reS$tk2hkz)IXa4tqi@g| zbQb-H&ZA4{I=YE&p+C@VbRV-g25Ye%n{YgKV-HTiew>Kw;D)#nPR1?q6ZlEo9zTUU z;x4!c?uq;00XPQ_#<}=;T!@Fk)o@&f%kc#K0-lJc;Mw>kJRiS|7vd#&1%3ms#BbrX zcq86~-^U-|ZFo1{gZJY7_%nPAe}#|ZllU|~hkwH7@kRU#{vH2`|H8NNJ&K}qR4k>Z zjFg3PQEtjZ`6-c-s9IEQsy@|}YDP7uT2ZM~8>%h!6xEf=qPkN(sGd|`Y9N&jSA(d* zR1q~4u8OH))EH_kToGylHIVNXi*y6JA>EiRrB~3$=&$G#=rH{a{Vjcp{+>RIR?t7u z7wC)hCHgY7U!{MAC%@4*;Ql6B0WG)aKj_=^UHU$Q7!AX~UmbmuiDeARQ^v@c7>=k{D)TFI zjk(VJ#@t|jXKpgLm_L|5nZKCZ%pK+~bC0>tA{Mh0t6^!DVOchY)v`J^mesRytbsMM zCYEE(tcA6*HrCF@vkunDx>z^sVG~#{>tp>a&j#2ao5%`m5-YM2TZ^sD)?w?i_1OAs z1GXXCh;7U^VUyXWY%{hw+k$PyKE^)LT_`Bc%lnSAAOkWY6XK8=S&$XkkR8P%2XZ18 zaw88)KwjiSe#D~y3Zg_Lpd=(B3DrWiQ5{ql)kF1B1Jn>TQUkV2GkVB$7KYH!rtjMBBoG0toKH;%Ioc%?m{$;YhT1pY+Twxq~7Q@{zvjndzbYuzKAu zJ+rc#^5j8CWlR*{nJ7RNH^iU?1^ z(+;R3%w}bZjx0lIL`!VnqE4tYN=IE#SCoOep-hy8xmdS-O)GD}9}g*%5LLsapjZEZr?L%;}Nj?TFSnYkmwV2|poyr`PlBEC> z`Y3uH4FO9uK>4UZ)lhMvZsAB#VZoqqaZhkC#n}iVMq(Pk*+z|OT#s-0PmbuE4MoMv zQ89|3*5G{#I0#>jGk}X9H40>Eq>OCbToJEvqb4ck<$XpqX`BoMT^&QUPO?L#-Z_O0(t>WL@%OAXfm3DrlM(RI+}rIqFHD*nuF$|dFUlHAH9qg zpjXgB^eS3J;)y_NlZK=zX+>I-CrKJfCz+%t=|={V9Fj+dl3`>tk;w~W3YkIXkOgEh zsUR!KYO>)ddJSy76fHv)XgS!nQ)pl~PYHs;(&Fqe36ezOH~~5T4YU%iLT{qC(A&^| zHClt#qIGCJ+JN3c?}B+dhYL!<-}6iUJ?9IA^b zVyaqZmQ=gQXXtPRI*eL_EvmGL2E`F2uUL!1#m^NM=PT-jN=l1CqgGYf?MrlQIXZ^E zQpB=@DRKuwGA}7E%&T5nK-*|*bfu}9?h`QGCrK@s-K2-j?kSkv@08gkP9nktNXi5Z z;4E#FWXq@Kl&5zoFc6$R9qY?$O)$vsED$1XM@*-&flyx4YysSFZ z6`;JTQr0E)fU>?qc@*YcnepFXzJDiQ!qgsn4w7au6tV@Vgcmc4qV#{FlpaMOTS*Ph zJHUC5Bm-xohj3zy)?-a2XJg=OqHqoYf)L7qdYOmJ99FC4BA|+DighTZe{pF+SMc9X zp%I0pH7Ic$s=!9l5-6KJK#4g;O>72At4i6Nv;fMK8fsz(+Jar=9;kUA<~}_waB7+NuD{X(PjCtS>lE;Dnkq7w&l|QL^W*;SwRn2U5XyLlJ9>~yu zd`Er&DZcO1HZL41<`vJ35;s=n*`BSm!jcg#C}~%iU78PnBOu0?xM^iZX@r}DC@GK> z+Jz$}xdqW>nIi2#v?m@Et(7X;BVd}xRMVuAHXvGC#Wa75mWtbeXzj=+<)lM%deC@@AUP2LsAG8D3YDp{3fyDL=xKpqLmqXD@GAZI-cd29_^cCWH!uT1b+ zC4GPfr3DHwT>nFZ%7lSm1dhq%8DQx3Aj4GEU8aHTGgR4olRm)Ew`L^G0auwvE`p<6 zf|{))qbxda3!u`-{zu5Z3Pg)Z2#ESWjA$tkRa6oU0HS9VqV8Qok&sPYu^XN02YpF*@m)K+M$L2&>m4v`|D$bT5c=RomAB}D;H z6sn?khwVki$SC*;5WN)cYv6tZxTi=d;1)j&_j|xSQ;8b^+!7VHZDG-fjO-}x&w!f^ z_cd@Y0qzwt3UG%%hZ4KMy|2 zB9jA|zg3j@j=IJvY4<7E(nYGmyvk+oqY4TW0z#BOLnXNUh%q3&7I{ZBGJ6ybXp zmhxF6ioydpUrAw3PF`3kBXSE$3riy^wK@U>YgMTzl>qEMG8xz>KERID#heO&qKT@a zb;*msK1orud)vIiNH}A7zsjOUy{$&A1E}@LbU>Z@04i1^o@!XFQ*Sb@N~a#}z=2D` zJqM|Os^MAyTuU+=;ATDm7cF6_N2}qSWL6biR-eMc{AVg9RIaNL+W}&G@-iUK{rcZU zG1Y-eQ{0T|2#R-76sNjCm7f*LA@j&ffIVL^0Ea6bj>3*0{^QDe{ThpS9Vkx zIaQMx2D}`y4Dgmb9PfF+%Tu)~1iaS(Z>g$}rk{$~wKzO17u+S|sVdY6pq7$10CoAp zQOf{zq>5S&sILR+3Kca5R)_A9FdxlVpga#HFt0FWgsTW-AQ(^H27*-&OmF2>Oa%Bz z3Os*AA6?$5g1VN5FPP{j2UDsb$pJbzCYoQfc@QwE}OYR^r9fn^a5c zZ7K(krq)vHsPz;^1MnI=mD)&c!jo~3+CqImeTY-2t<*MZJ2jj7nA%B|;sRz6PZZr zkoM$j8Ec}M6ZRrminmn0gQ0##i&s$XLEIdw6r5%*3|j(ZtH_3^rGG^$Dj=X+pNvK| zb^Y(nF7=yI7(!fcp>9@X3+guPU^7bxLe*Oeo8@SHg1}qI`!L^Xo+X=mWrmA~<-+^E z{*h?U$}p}jXQ}%dgtllX@&Wk>(!hsN(P4?Hlv=~0#Y@Qs*i;Qr-WEi`lsf#srHqzD zS2b}}Qfka#?J}~hTBPm0sumK}aWpoxcsWcWhJ|D}OwTy7;XjdK?v-szE1X)59DvzK zg)+QK+1=GjX%aO8C?(1m$(SM=WsG}O)sa!w+Gz3H;4W*a52<6+3Tizr!2Q8Zcj6S7 z!oA=U2f&36f+KVU*Es|Zvf+XJp=lAF6WE|uZc;Um!$u=5k{K=v6^G!JDo7_)NvC@- zP}LdLfIgbGNJ$T=WFPe2uLNqIy17(NO2V+o3`1JZhVKZZ=6e5Ea{Pn&|Hp`Dz&n%z zI;^1ln-X;&vD0tYA88Bp4<&cvwgm1;1Rve&Mm1jYx5gD{@iH8QbOv!64>R$vEwM5u|KS8t+M4bQr2oTV zD~$r11x<9bP?!7&0-jSe%*qT63uioQE+#D`N&ji5r3gK;;ETs_NXC z|L;;pZLtqh?URFYORAFAL9}=^K7`j$yJ4L<1uM~PsvfLKTdDojN?0ATA;0&64Bj6y z{!~~gu0WRG`rje0CbWOpsCNw;{fE5K8u6hc{?h>}>&i5Z^72W2-=(<@X>%UATI~S8 z{^!8TtT<3gmI6bXx^#)KOLb8Ui~T zYO6C~m@+WTVDO6aY8Bp4RiIbWtLQiBx9GR&)$|&AExnFjPj8^#q2Hz7qc_r<==bT( z^cMO9`a}97dMmw+-cIkJKc;umyXa5gdk?)AzIW35=>zmZ`VjpYeVG27J_0RAWelf? zS{dtP94lkJjN@c%kg-w5CK+=wHp|!|W2=m9GKQnZco{on?3A%f#%>vVWSk&luZ(>% z_RE-;aX`jF87InEP%n~X3{?%Z!2h*mTwBI!G_KLFNwnW-c-TxyrAp5q;HGia&5tOhTjNGmcjw_z6GGPj zXkO#GWsU3PDApAi(2~%~Aqxbka#GT`^2s%n@{F>WOA)@y@PcqLp|cvpf7K%VgQaOr zfJ&L+&3lHLsFbtNvwtfJGX7(16q3Qvy*Z(epm+ujgC(^9XILg?ITOQZ)w8;EIE(KI zM=HwSntYW2dH`qv$Vvv`qsgphuSPYLPf_y;W2Vk7t#U)gR`bT8_~ZaJk0^VX6L9`E zSqU#R01B7&kO$^M#+`wtQaNZ5oV>jP`C|)u0Z&E~@n~h2h1Z}7)M+@adkMmEE1C&G z=!28H)ev4SmAx1iU@sL!vmgVmRd;Cp@hP;B`WVjdWXR{R*Md@MCAAJ8f-}97N@hcF z%13R7J=S;#;Qde>ryv5mx9QXw^eS}>rJ)6IA~*$&gTj3`Y-VOtN>;h1?tjj}8DP2^ z!UhQ6gOEdH2+$nT6GC=1oc=9_5Z(f3guURDFiYK`Wy6`_PjF&51w#G`oD_Zqfu9DU z{0giv%0BK<2;)cK{O|@8=F0A_BLsK_q=`9j;^!Hi@^F{7DsW(+fy zA&kt7W5zQRm=~Cd%!|wE{naWIKrZY2`nanI^HZzBr%gke5V&*e1GYgnkn1#%% z%pztnvxIq#S;{P9DwyTW>&yz~4Q3^?ig}ZHi+P(_&8%V8GV7T2%m(Hi=3VAJW+StS zd7s(LY+*iNK4d;(wldq8?aU75V`e9_i}{4v&Fo?JGM_U0nElKF<{)#3`HVTte9jzU zzF>|rUoyv-ubAV^2^lw&adR2Bka3EPTgteVj31HlqcVO>#*fRmwTz#TajJ~l$hfVH z+sXJz8Ml}5Q!?%#<1`s}l=0It?j+;RGESFq7a4bzafXb$$v9KSSu*Y};~p~ZDdS!; z?k(d!GVUwmXJp(@#{FeHK*rC?I3(kNGR~IqAQ^{c{G5z)WIR~LxiWrU#zSPBC*yn> z7s$9!#zit7D&t}qM`R4Y&nT7gFc}Y*ahZ%q$atiTN6C1!j3JGWk?~j=6B)}g9w+1R zGM*sg7i2t9#xKfvl8h(Ic#4dt%6OWLr^|STjAzPtmW*f1c#e$c!c22-a?81Nt`*mX z>&Y$P7IHFI#LeO|xE&B&Vb2ulrlH1LV=T>v&+!k&Ow~@1QpKyiTYus#ZF}I(4n%m1soP*2ZwsWJo z&0Hq8gxkY0TuaW&eZ+0!I&#l*uX3+*tGJ2WBrb{D%DuyN;0|yzIXm|$x1M{2>%o1< zE#j7O2f3HjM8c-1JM!rDBQ^2}`*_t26f9h1T`Zhx` z45MZA@Z&2pV`ChQn@M2&On?y>k*UqpW$H5xnZ`^jrajYv>BwX<{g@$4J~Ir$XbObM za&Y>M;MBXoVZUL1fuCXh2|uxlfge}t*+_9e;9m!5&Ut%lR)$A5_7kijJ!X9Oh zvB%l3*>BiW?04)B>`&~^?8O)+CN9PvVo1!i zm=!VWV-Cf974uEZFEO`b?rHT}v(~NcsqL-ptL>*9pbcrWwP9_JHdi}Do3Aa@4%J4q zrP|@z5!zAOa_v~HtR1g?LHnY1vUaL=x^|{^wsx*|sdkligZ5qRM(z9B6WZ^zS9DmX z(^+*sU0q#$T@zgkT}#~~y2o^_b*Z{;y5735E=QNE8=}kC4bzqBUeL|c&DSl^E!0)$ z-qUT>eWE+AyQKR=_m}RD?p~}p)*b7QtrMFZn-=?YY*uXF*huWS*qO1jW9P=c6uT*Q zbL1jQy*XnEQ>+0+48|oYDll9H?ZS?K*?e!h> z-Ss{7&+2pZx%y%HGW|&XX#HaSYx-sS<@y!+mHIdJJM=sC2lOZP-|8>uFX^x7uf}n4 zmN;8ne4I1R9hVSSJFaeA{kVp4PsTkJ*EOzB+%s{xaYN$r;|k+u#m$ME7dJm{LEOT) zMR9B5*2QgzdpB-l+>W??aX-YJjk{r>477nYXbrK3x`z6OhK9z5WJ5DU3quD(M?)t= zx}mF~zu{R!uA#&*%4q5V@u;B#>b3l#;1*gjHSlm#u3I*#&Y8l<5FXV@pa=H##P3*jGK+y zjE9X!j7N>fjK__C82>WfG2SyF6J?@J29sz?HZ?P~Fts%GF+F4IZ+g}=&@{;OoGD@| zH4Qh7FqNCenkJd1n`W98nU)ZxN zJR7<9xf9$;?py9O_dR!p`;oiAUE*$Ve{pxrIQ_R!MGt9HhbIkM1%goEoE6gj+ADBNf?=~Mde{KHB{ImI@ z`Le}eFv39_y#p{nmrlYt~!VKdrZ|cdhqr*ru^DHjB+> zi?=y#iMAwLYg;E-z zZAWZJZO3e9ZRc#)Z8vN;ZGYIkcE3GfPqZi5C3|gqU3)uwdwZt6yS=Bqw|%62w0(@7 z*vHu?*eBW-+85bBvhTAWuphD?w*P9sZogr_Y5&9im;Fw>Ej~WJPJD8FtN66|jQBqB z-^KqBe>VPH{Q39`@t5MS#9xiS7XMrP@A0?d|BSyKe>eWV13NSh#u4MtIrI*L!{jhK ztPZ=w;cz)T4zI)S2sjcQNe;3GEPn4`5L)zQ}Rq~j?^ zn&W9lXGa%Dh9lF_-O zI)^()I7d0lonxJ{bBc4WbD?vQbBS}Qv%-16dB}O#dBl0tdCYm-`L**K=Vj+r=XK`| z=Peg<>0G=k=n`C_tCp*dtDdWYtC6dTtEsEGE5+5%HN=(gDs&BXMO>w>;jS{*E3Q{v zi(Rj|mbsR@R=BpgcDT;D&buzSF1fC_uDY(duDcy>m)qm^y8Z5eJJBt;)7($HJG;BM zGu)Z(?(QD$Y&UU_b5C$jbWd_maZhv4b${gE=HB7n>HfsM$Ni~$zx$y3i2J1bTlYEl z9rryC@=zYy!+NxySWleC=;1sTkImD})56oz^N8m$Pis%A=Sj~~p242yJ$ar2Pm!nC zQ{oxz8RJ>$dDHW@XN_l_XM^Wm&qmMto?V`Up3gkTJtsZidQN+8B_t&H68MB*f{-94 z)JmwG&@rJ?LV7~igl-902|W_}CiF`flRy&2B}_<|m@p|}O2VrNixYMxe3Gyy;nRfu z2?rBCOE{cxBH>iRcL_gxu~*||yfI##SMN1=Oa}|vUYFP7eZt$u+s@nG+rit> z+sWJ6TkI|I4)d0IM|wwl$9TtjS9#y^uJ*3=uJ^vWlFWJ}3_qgvVUz+b}UuRzzUxsg(ugo{nH`+JGM||Ua z<9%~{ANscXw);Nz?egvR?e*>R9q@hb``Y)d@3ilG-v!@w-(BB*KlW?+<#ahJ0f_nQzXw<`?lx_@#UW|2qE$zlwj0U(K)O*Yof2 z@9~@X&HM-aNBlN^2fvg5gx|w|%J1h7@}Kda^Iz~^@?Y^M_>=s%{AvDs{tW*k{}cZ+ zf04h;|HA*uU*~V|H~BvURA4}0U?3bA92gQP2n-FB1cnDj2Fe2@Fg`FbFgY+SFf%YG z@KRtw;MKsAz_P&Wft7)`0&4>61Mdbl1-1k}3TzMT4D1ek8aNR6EN~?7W#D+=WZ+cb z`@q@2Pk{@8-vjr8D5wkSgNC3v=naa&TERNOA|kSZo&S+=Yzw7 zV}o*Vd~jCqmEaq}RlzmEO~K8PGTf+bYgiTNt~QGC2@M5 zM93Ekg`q-3C>4eaBZN^xxiD6ch4I1*!i&OWVX81)m?_K_<_a$fFAJ{-uL_HW*Mw!l za$$wAQg~B%TUaBk6E+C%3LAy@g)PE|!d79s@UgH<*e&c8_6Y}sL&9Oa7nl#TotYfzX`t!w}d~1+rnMpeiBa7Br!=bNxCF`k|D{I zWKOas*^`_}fuu7@=aPO-x|H-w(zT=;Nw<>zO1di|Q6sXVPK*;xqD8cePSGR!#DFM> zl2}KqFE$dB#pYs5@lmn0*hYL(>>xfZri&S3me^D5BlZ)Y6|=?X#9T2?EEJ2yQn5@N zC5{ngaf0}wI7OT;&JyQ}^Tk)hMdE8>g}6doCB7}L6*q|QiSLUah+D-S;x2KIxKBJN z9u~h4kBKM5Z^YB$58{vFdGVrnMf_F#O}r`oDc%w9OO!-QtfZAU+eNySo$G)yX!MoOclF%pr+NfV@r(j;k$ zG)Ziq!uoD*Bgg8~t1LE#3b=!OYZ< literal 0 HcmV?d00001 diff --git a/Info.plist b/Info.plist new file mode 100644 index 0000000..f40cc2d --- /dev/null +++ b/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.bleepsoft.PmpMyApp + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/PmpMyApp.xcodeproj/project.pbxproj b/PmpMyApp.xcodeproj/project.pbxproj new file mode 100644 index 0000000..93c361d --- /dev/null +++ b/PmpMyApp.xcodeproj/project.pbxproj @@ -0,0 +1,369 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 42; + objects = { + +/* Begin PBXBuildFile section */ + 2F5A48720B75598F0052B0C1 /* pmpmapper.c in Sources */ = {isa = PBXBuildFile; fileRef = 2F5A48710B75598F0052B0C1 /* pmpmapper.c */; }; + 2F5A48900B75658F0052B0C1 /* pmpmapper.c in Sources */ = {isa = PBXBuildFile; fileRef = 2F5A48710B75598F0052B0C1 /* pmpmapper.c */; }; + 2F901ED00B7AEDB5004FF42C /* route.c in Sources */ = {isa = PBXBuildFile; fileRef = 2F901ECF0B7AEDB5004FF42C /* route.c */; }; + 2F901ED30B7AEDBA004FF42C /* route.c in Sources */ = {isa = PBXBuildFile; fileRef = 2F901ECF0B7AEDB5004FF42C /* route.c */; }; + 8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 29B97318FDCFA39411CA2CEA /* MainMenu.nib */; }; + 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; + 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; + 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; + 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 29B97319FDCFA39411CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = ""; }; + 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; + 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + 2F5A48700B75598F0052B0C1 /* pmpmapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pmpmapper.h; path = source/pmpmapper.h; sourceTree = ""; }; + 2F5A48710B75598F0052B0C1 /* pmpmapper.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pmpmapper.c; path = source/pmpmapper.c; sourceTree = ""; }; + 2F5A488A0B7565810052B0C1 /* PMPMapper */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = PMPMapper; sourceTree = BUILT_PRODUCTS_DIR; }; + 2F901ECE0B7AEDB5004FF42C /* route.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = route.h; path = source/route.h; sourceTree = ""; }; + 2F901ECF0B7AEDB5004FF42C /* route.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = route.c; path = source/route.c; sourceTree = ""; }; + 32CA4F630368D1EE00C91783 /* PmpMyApp_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PmpMyApp_Prefix.pch; sourceTree = ""; }; + 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 8D1107320486CEB800E47090 /* PmpMyApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PmpMyApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 2F5A48880B7565810052B0C1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8D11072E0486CEB800E47090 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 080E96DDFE201D6D7F000001 /* Classes */ = { + isa = PBXGroup; + children = ( + 2F5A486C0B7559600052B0C1 /* NAT-PMP */, + ); + name = Classes; + sourceTree = ""; + }; + 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, + ); + name = "Linked Frameworks"; + sourceTree = ""; + }; + 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 29B97324FDCFA39411CA2CEA /* AppKit.framework */, + 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */, + 29B97325FDCFA39411CA2CEA /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 19C28FACFE9D520D11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 8D1107320486CEB800E47090 /* PmpMyApp.app */, + 2F5A488A0B7565810052B0C1 /* PMPMapper */, + ); + name = Products; + sourceTree = ""; + }; + 29B97314FDCFA39411CA2CEA /* PmpMyApp */ = { + isa = PBXGroup; + children = ( + 080E96DDFE201D6D7F000001 /* Classes */, + 29B97315FDCFA39411CA2CEA /* Other Sources */, + 29B97317FDCFA39411CA2CEA /* Resources */, + 29B97323FDCFA39411CA2CEA /* Frameworks */, + 19C28FACFE9D520D11CA2CBB /* Products */, + ); + name = PmpMyApp; + sourceTree = ""; + }; + 29B97315FDCFA39411CA2CEA /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32CA4F630368D1EE00C91783 /* PmpMyApp_Prefix.pch */, + 29B97316FDCFA39411CA2CEA /* main.m */, + ); + name = "Other Sources"; + sourceTree = ""; + }; + 29B97317FDCFA39411CA2CEA /* Resources */ = { + isa = PBXGroup; + children = ( + 8D1107310486CEB800E47090 /* Info.plist */, + 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, + 29B97318FDCFA39411CA2CEA /* MainMenu.nib */, + ); + name = Resources; + sourceTree = ""; + }; + 29B97323FDCFA39411CA2CEA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, + 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + 2F5A486C0B7559600052B0C1 /* NAT-PMP */ = { + isa = PBXGroup; + children = ( + 2F5A48700B75598F0052B0C1 /* pmpmapper.h */, + 2F5A48710B75598F0052B0C1 /* pmpmapper.c */, + 2F901ECE0B7AEDB5004FF42C /* route.h */, + 2F901ECF0B7AEDB5004FF42C /* route.c */, + ); + name = "NAT-PMP"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 2F5A48890B7565810052B0C1 /* PMPMapper */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2F5A48A90B7565AE0052B0C1 /* Build configuration list for PBXNativeTarget "PMPMapper" */; + buildPhases = ( + 2F5A48870B7565810052B0C1 /* Sources */, + 2F5A48880B7565810052B0C1 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PMPMapper; + productName = PMPMapper; + productReference = 2F5A488A0B7565810052B0C1 /* PMPMapper */; + productType = "com.apple.product-type.tool"; + }; + 8D1107260486CEB800E47090 /* PmpMyApp */ = { + isa = PBXNativeTarget; + buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "PmpMyApp" */; + buildPhases = ( + 8D1107290486CEB800E47090 /* Resources */, + 8D11072C0486CEB800E47090 /* Sources */, + 8D11072E0486CEB800E47090 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PmpMyApp; + productInstallPath = "$(HOME)/Applications"; + productName = PmpMyApp; + productReference = 8D1107320486CEB800E47090 /* PmpMyApp.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 29B97313FDCFA39411CA2CEA /* Project object */ = { + isa = PBXProject; + buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "PmpMyApp" */; + hasScannedForEncodings = 1; + mainGroup = 29B97314FDCFA39411CA2CEA /* PmpMyApp */; + projectDirPath = ""; + targets = ( + 8D1107260486CEB800E47090 /* PmpMyApp */, + 2F5A48890B7565810052B0C1 /* PMPMapper */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 8D1107290486CEB800E47090 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */, + 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 2F5A48870B7565810052B0C1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2F5A48900B75658F0052B0C1 /* pmpmapper.c in Sources */, + 2F901ED30B7AEDBA004FF42C /* route.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8D11072C0486CEB800E47090 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D11072D0486CEB800E47090 /* main.m in Sources */, + 2F5A48720B75598F0052B0C1 /* pmpmapper.c in Sources */, + 2F901ED00B7AEDB5004FF42C /* route.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 089C165DFE840E0CC02AAC07 /* English */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 29B97318FDCFA39411CA2CEA /* MainMenu.nib */ = { + isa = PBXVariantGroup; + children = ( + 29B97319FDCFA39411CA2CEA /* English */, + ); + name = MainMenu.nib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 2F5A48AA0B7565AE0052B0C1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INSTALL_PATH = "$(HOME)/bin"; + PREBINDING = NO; + PRODUCT_NAME = PMPMapper; + ZERO_LINK = YES; + }; + name = Debug; + }; + 2F5A48AB0B7565AE0052B0C1 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + COPY_PHASE_STRIP = YES; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = "$(HOME)/bin"; + PREBINDING = NO; + PRODUCT_NAME = PMPMapper; + ZERO_LINK = NO; + }; + name = Release; + }; + C01FCF4B08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Applications"; + PRODUCT_NAME = PmpMyApp; + WRAPPER_EXTENSION = app; + ZERO_LINK = YES; + }; + name = Debug; + }; + C01FCF4C08A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = ( + ppc, + i386, + ); + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_MODEL_TUNING = G5; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(HOME)/Applications"; + PRODUCT_NAME = PmpMyApp; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; + C01FCF4F08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Debug; + }; + C01FCF5008A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2F5A48A90B7565AE0052B0C1 /* Build configuration list for PBXNativeTarget "PMPMapper" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2F5A48AA0B7565AE0052B0C1 /* Debug */, + 2F5A48AB0B7565AE0052B0C1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "PmpMyApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4B08A954540054247B /* Debug */, + C01FCF4C08A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C01FCF4E08A954540054247B /* Build configuration list for PBXProject "PmpMyApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4F08A954540054247B /* Debug */, + C01FCF5008A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; +} diff --git a/PmpMyApp.xcodeproj/tyler.mode1 b/PmpMyApp.xcodeproj/tyler.mode1 new file mode 100644 index 0000000..aba4310 --- /dev/null +++ b/PmpMyApp.xcodeproj/tyler.mode1 @@ -0,0 +1,1392 @@ + + + + + ActivePerspectiveName + Project + AllowedModules + + + BundleLoadPath + + MaxInstances + n + Module + PBXSmartGroupTreeModule + Name + Groups and Files Outline View + + + BundleLoadPath + + MaxInstances + n + Module + PBXNavigatorGroup + Name + Editor + + + BundleLoadPath + + MaxInstances + n + Module + XCTaskListModule + Name + Task List + + + BundleLoadPath + + MaxInstances + n + Module + XCDetailModule + Name + File and Smart Group Detail Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXBuildResultsModule + Name + Detailed Build Results Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXProjectFindModule + Name + Project Batch Find Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXRunSessionModule + Name + Run Log + + + BundleLoadPath + + MaxInstances + n + Module + PBXBookmarksModule + Name + Bookmarks Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXClassBrowserModule + Name + Class Browser + + + BundleLoadPath + + MaxInstances + n + Module + PBXCVSModule + Name + Source Code Control Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXDebugBreakpointsModule + Name + Debug Breakpoints Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCDockableInspector + Name + Inspector + + + BundleLoadPath + + MaxInstances + n + Module + PBXOpenQuicklyModule + Name + Open Quickly Tool + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugSessionModule + Name + Debugger + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugCLIModule + Name + Debug Console + + + Description + DefaultDescriptionKey + DockingSystemVisible + + Extension + mode1 + FavBarConfig + + PBXProjectModuleGUID + 2F5A48580B75586F0052B0C1 + XCBarModuleItemNames + + XCBarModuleItems + + + FirstTimeWindowDisplayed + + Identifier + com.apple.perspectives.project.mode1 + MajorVersion + 31 + MinorVersion + 1 + Name + Default + Notifications + + OpenEditors + + PerspectiveWidths + + -1 + -1 + + Perspectives + + + ChosenToolbarItems + + active-target-popup + action + NSToolbarFlexibleSpaceItem + buildOrClean + build-and-runOrDebug + com.apple.ide.PBXToolbarStopButton + get-info + toggle-editor + NSToolbarFlexibleSpaceItem + com.apple.pbx.toolbar.searchfield + + ControllerClassBaseName + + IconName + WindowOfProjectWithEditor + Identifier + perspective.project + IsVertical + + Layout + + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 080E96DDFE201D6D7F000001 + 2F5A486C0B7559600052B0C1 + 29B97315FDCFA39411CA2CEA + 29B97317FDCFA39411CA2CEA + 1C37FBAC04509CD000000102 + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 4 + 2 + 1 + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 865}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 883}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 4 104 1072 924 0 0 1680 1028 + + Module + PBXSmartGroupTreeModule + Proportion + 203pt + + + Dock + + + BecomeActive + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20306471E060097A5F4 + PBXProjectModuleLabel + pmpmapper.c + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CE0B20406471E060097A5F4 + PBXProjectModuleLabel + pmpmapper.c + _historyCapacity + 0 + bookmark + 2F9021410B7BD05A004FF42C + history + + 2F5A489C0B7565AE0052B0C1 + 2F5A489D0B7565AE0052B0C1 + 2F901EC10B7AED84004FF42C + 2F901EF70B7AEED5004FF42C + 2F9021260B7BCD94004FF42C + 2F90213A0B7BCF9E004FF42C + 2F90213B0B7BCF9E004FF42C + + prevStack + + 2F5A48A00B7565AE0052B0C1 + 2F5A48A10B7565AE0052B0C1 + 2F5A48A20B7565AE0052B0C1 + 2F5A49370B7575010052B0C1 + 2F901EC50B7AED84004FF42C + 2F901ED80B7AEDBC004FF42C + 2F901EE10B7AEE09004FF42C + 2F9020F40B7BC77F004FF42C + 2F9020F50B7BC77F004FF42C + 2F9020F60B7BC77F004FF42C + 2F9021280B7BCD94004FF42C + 2F9021290B7BCD94004FF42C + 2F90213C0B7BCF9E004FF42C + 2F90213D0B7BCF9E004FF42C + + + SplitCount + 1 + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {864, 878}} + RubberWindowFrame + 4 104 1072 924 0 0 1680 1028 + + Module + PBXNavigatorGroup + Proportion + 878pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20506471E060097A5F4 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{0, 883}, {864, 0}} + RubberWindowFrame + 4 104 1072 924 0 0 1680 1028 + + Module + XCDetailModule + Proportion + 0pt + + + Proportion + 864pt + + + Name + Project + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + XCModuleDock + PBXNavigatorGroup + XCDetailModule + + TableOfContents + + 2F9020F80B7BC77F004FF42C + 1CE0B1FE06471DED0097A5F4 + 2F9020F90B7BC77F004FF42C + 1CE0B20306471E060097A5F4 + 1CE0B20506471E060097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default + + + ControllerClassBaseName + + IconName + WindowOfProject + Identifier + perspective.morph + IsVertical + 0 + Layout + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 11E0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 337}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 1 + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 355}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 373 269 690 397 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 100% + + + Name + Morph + PreferredWidth + 300 + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + + TableOfContents + + 11E0B1FE06471DED0097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default.short + + + PerspectivesBarVisible + + ShelfIsVisible + + SourceDescription + file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecificationMode1.xcperspec' + StatusbarIsVisible + + TimeStamp + 0.0 + ToolbarDisplayMode + 1 + ToolbarIsVisible + + ToolbarSizeMode + 1 + Type + Perspectives + UpdateMessage + The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? + WindowJustification + 5 + WindowOrderList + + 2F9020FA0B7BC77F004FF42C + 2F9020FB0B7BC77F004FF42C + 2F5A48CE0B756D650052B0C1 + 1CD10A99069EF8BA00B06720 + 2F9020DB0B7BBFD1004FF42C + 2F5A48970B7565A60052B0C1 + 1C0AD2B3069F1EA900FABCE6 + /Software/Subversion/trunk/PmpMyApp/PmpMyApp.xcodeproj + + WindowString + 4 104 1072 924 0 0 1680 1028 + WindowTools + + + FirstTimeWindowDisplayed + + Identifier + windowTool.build + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528F0623707200166675 + PBXProjectModuleLabel + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {620, 0}} + RubberWindowFrame + 1053 109 620 516 0 0 1680 1028 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + + ContentConfiguration + + PBXBuildLogShowsTranscriptDefaultKey + {{0, 189}, {620, 281}} + PBXProjectModuleGUID + XCMainBuildResultsModuleGUID + PBXProjectModuleLabel + Build + XCBuildResultsTrigger_Collapse + 1021 + XCBuildResultsTrigger_Open + 1011 + + GeometryConfiguration + + Frame + {{0, 5}, {620, 470}} + RubberWindowFrame + 1053 109 620 516 0 0 1680 1028 + + Module + PBXBuildResultsModule + Proportion + 470pt + + + Proportion + 475pt + + + Name + Build Results + ServiceClasses + + PBXBuildResultsModule + + StatusbarIsVisible + + TableOfContents + + 2F5A48970B7565A60052B0C1 + 2F9020D40B7BBFD1004FF42C + 1CD0528F0623707200166675 + XCMainBuildResultsModuleGUID + + ToolbarConfiguration + xcode.toolbar.config.build + WindowString + 1053 109 620 516 0 0 1680 1028 + WindowToolGUID + 2F5A48970B7565A60052B0C1 + WindowToolIsVisible + + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debugger + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + Debugger + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {459, 270}} + {{459, 0}, {580, 270}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {1039, 270}} + {{0, 270}, {1039, 258}} + + + + LauncherConfigVersion + 8 + PBXProjectModuleGUID + 1C162984064C10D400B95A72 + PBXProjectModuleLabel + Debug - GLUTExamples (Underwater) + + GeometryConfiguration + + DebugConsoleDrawerSize + {100, 120} + DebugConsoleVisible + None + DebugConsoleWindowFrame + {{200, 200}, {500, 300}} + DebugSTDIOWindowFrame + {{200, 200}, {500, 300}} + Frame + {{0, 0}, {1039, 528}} + RubberWindowFrame + 1807 189 1039 569 1680 26 1280 1024 + + Module + PBXDebugSessionModule + Proportion + 528pt + + + Proportion + 528pt + + + Name + Debugger + ServiceClasses + + PBXDebugSessionModule + + StatusbarIsVisible + + TableOfContents + + 1CD10A99069EF8BA00B06720 + 2F9020D50B7BBFD1004FF42C + 1C162984064C10D400B95A72 + 2F9020D60B7BBFD1004FF42C + 2F9020D70B7BBFD1004FF42C + 2F9020D80B7BBFD1004FF42C + 2F9020D90B7BBFD1004FF42C + 2F9020DA0B7BBFD1004FF42C + 2F9020DB0B7BBFD1004FF42C + + ToolbarConfiguration + xcode.toolbar.config.debug + WindowString + 1807 189 1039 569 1680 26 1280 1024 + WindowToolGUID + 1CD10A99069EF8BA00B06720 + WindowToolIsVisible + + + + Identifier + windowTool.find + Layout + + + Dock + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CDD528C0622207200134675 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CD0528D0623707200166675 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {781, 167}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXNavigatorGroup + Proportion + 781pt + + + Proportion + 50% + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528E0623707200166675 + PBXProjectModuleLabel + Project Find + + GeometryConfiguration + + Frame + {{8, 0}, {773, 254}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXProjectFindModule + Proportion + 50% + + + Proportion + 428pt + + + Name + Project Find + ServiceClasses + + PBXProjectFindModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C530D57069F1CE1000CFCEE + 1C530D58069F1CE1000CFCEE + 1C530D59069F1CE1000CFCEE + 1CDD528C0622207200134675 + 1C530D5A069F1CE1000CFCEE + 1CE0B1FE06471DED0097A5F4 + 1CD0528E0623707200166675 + + WindowString + 62 385 781 470 0 0 1440 878 + WindowToolGUID + 1C530D57069F1CE1000CFCEE + WindowToolIsVisible + 0 + + + Identifier + MENUSEPARATOR + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debuggerConsole + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAAC065D492600B07095 + PBXProjectModuleLabel + Debugger Console + + GeometryConfiguration + + Frame + {{0, 0}, {793, 640}} + RubberWindowFrame + 880 347 793 681 0 0 1680 1028 + + Module + PBXDebugCLIModule + Proportion + 640pt + + + Proportion + 640pt + + + Name + Debugger Console + ServiceClasses + + PBXDebugCLIModule + + StatusbarIsVisible + + TableOfContents + + 2F5A48CE0B756D650052B0C1 + 2F9020DC0B7BBFD1004FF42C + 1C78EAAC065D492600B07095 + + WindowString + 880 347 793 681 0 0 1680 1028 + WindowToolGUID + 2F5A48CE0B756D650052B0C1 + WindowToolIsVisible + + + + FirstTimeWindowDisplayed + + Identifier + windowTool.run + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + LauncherConfigVersion + 3 + PBXProjectModuleGUID + 1CD0528B0623707200166675 + PBXProjectModuleLabel + Run + Runner + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {493, 167}} + {{0, 176}, {493, 267}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {405, 443}} + {{414, 0}, {514, 443}} + + + + + GeometryConfiguration + + Frame + {{0, 0}, {685, 376}} + RubberWindowFrame + 992 611 685 417 0 0 1680 1028 + + Module + PBXRunSessionModule + Proportion + 376pt + + + Proportion + 376pt + + + Name + Run Log + ServiceClasses + + PBXRunSessionModule + + StatusbarIsVisible + + TableOfContents + + 1C0AD2B3069F1EA900FABCE6 + 2F9020DD0B7BBFD1004FF42C + 1CD0528B0623707200166675 + 2F9020DE0B7BBFD1004FF42C + + ToolbarConfiguration + xcode.toolbar.config.run + WindowString + 992 611 685 417 0 0 1680 1028 + WindowToolGUID + 1C0AD2B3069F1EA900FABCE6 + WindowToolIsVisible + + + + Identifier + windowTool.scm + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAB2065D492600B07095 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1C78EAB3065D492600B07095 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {452, 0}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD052920623707200166675 + PBXProjectModuleLabel + SCM + + GeometryConfiguration + + ConsoleFrame + {{0, 259}, {452, 0}} + Frame + {{0, 7}, {452, 259}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + TableConfiguration + + Status + 30 + FileName + 199 + Path + 197.09500122070312 + + TableFrame + {{0, 0}, {452, 250}} + + Module + PBXCVSModule + Proportion + 262pt + + + Proportion + 266pt + + + Name + SCM + ServiceClasses + + PBXCVSModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAB4065D492600B07095 + 1C78EAB5065D492600B07095 + 1C78EAB2065D492600B07095 + 1CD052920623707200166675 + + ToolbarConfiguration + xcode.toolbar.config.scm + WindowString + 743 379 452 308 0 0 1280 1002 + + + Identifier + windowTool.breakpoints + IsVertical + 0 + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C77FABC04509CD000000102 + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + no + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 168 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 1C77FABC04509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {168, 350}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 0 + + GeometryConfiguration + + Frame + {{0, 0}, {185, 368}} + GroupTreeTableConfiguration + + MainColumn + 168 + + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 185pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CA1AED706398EBD00589147 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{190, 0}, {554, 368}} + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + XCDetailModule + Proportion + 554pt + + + Proportion + 368pt + + + MajorVersion + 2 + MinorVersion + 0 + Name + Breakpoints + ServiceClasses + + PBXSmartGroupTreeModule + XCDetailModule + + StatusbarIsVisible + 1 + TableOfContents + + 1CDDB66807F98D9800BB5817 + 1CDDB66907F98D9800BB5817 + 1CE0B1FE06471DED0097A5F4 + 1CA1AED706398EBD00589147 + + ToolbarConfiguration + xcode.toolbar.config.breakpoints + WindowString + 315 424 744 409 0 0 1440 878 + WindowToolGUID + 1CDDB66807F98D9800BB5817 + WindowToolIsVisible + 1 + + + Identifier + windowTool.debugAnimator + Layout + + + Dock + + + Module + PBXNavigatorGroup + Proportion + 100% + + + Proportion + 100% + + + Name + Debug Visualizer + ServiceClasses + + PBXNavigatorGroup + + StatusbarIsVisible + 1 + ToolbarConfiguration + xcode.toolbar.config.debugAnimator + WindowString + 100 100 700 500 0 0 1280 1002 + + + Identifier + windowTool.bookmarks + Layout + + + Dock + + + Module + PBXBookmarksModule + Proportion + 100% + + + Proportion + 100% + + + Name + Bookmarks + ServiceClasses + + PBXBookmarksModule + + StatusbarIsVisible + 0 + WindowString + 538 42 401 187 0 0 1280 1002 + + + Identifier + windowTool.classBrowser + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + OptionsSetName + Hierarchy, all classes + PBXProjectModuleGUID + 1CA6456E063B45B4001379D8 + PBXProjectModuleLabel + Class Browser - NSObject + + GeometryConfiguration + + ClassesFrame + {{0, 0}, {374, 96}} + ClassesTreeTableConfiguration + + PBXClassNameColumnIdentifier + 208 + PBXClassBookColumnIdentifier + 22 + + Frame + {{0, 0}, {630, 331}} + MembersFrame + {{0, 105}, {374, 395}} + MembersTreeTableConfiguration + + PBXMemberTypeIconColumnIdentifier + 22 + PBXMemberNameColumnIdentifier + 216 + PBXMemberTypeColumnIdentifier + 97 + PBXMemberBookColumnIdentifier + 22 + + PBXModuleWindowStatusBarHidden2 + 1 + RubberWindowFrame + 385 179 630 352 0 0 1440 878 + + Module + PBXClassBrowserModule + Proportion + 332pt + + + Proportion + 332pt + + + Name + Class Browser + ServiceClasses + + PBXClassBrowserModule + + StatusbarIsVisible + 0 + TableOfContents + + 1C0AD2AF069F1E9B00FABCE6 + 1C0AD2B0069F1E9B00FABCE6 + 1CA6456E063B45B4001379D8 + + ToolbarConfiguration + xcode.toolbar.config.classbrowser + WindowString + 385 179 630 352 0 0 1440 878 + WindowToolGUID + 1C0AD2AF069F1E9B00FABCE6 + WindowToolIsVisible + 0 + + + + diff --git a/PmpMyApp.xcodeproj/tyler.pbxuser b/PmpMyApp.xcodeproj/tyler.pbxuser new file mode 100644 index 0000000..942326c --- /dev/null +++ b/PmpMyApp.xcodeproj/tyler.pbxuser @@ -0,0 +1,452 @@ +// !$*UTF8*$! +{ + 089C165DFE840E0CC02AAC07 /* English */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {915, 843}}"; + sepNavSelRange = "{93, 0}"; + sepNavVisRect = "{{0, 0}, {915, 843}}"; + }; + }; + 29B97313FDCFA39411CA2CEA /* Project object */ = { + activeBuildConfigurationName = Debug; + activeExecutable = 2F5A488B0B7565810052B0C1 /* PMPMapper */; + activeTarget = 2F5A48890B7565810052B0C1 /* PMPMapper */; + addToTargets = ( + 8D1107260486CEB800E47090 /* PmpMyApp */, + ); + breakpoints = ( + ); + breakpointsGroup = 2F5A48AC0B7565AE0052B0C1 /* XCBreakpointsBucket */; + codeSenseManager = 2F5A485A0B75586F0052B0C1 /* Code sense */; + executables = ( + 2F5A484B0B7558670052B0C1 /* PmpMyApp */, + 2F5A488B0B7565810052B0C1 /* PMPMapper */, + ); + perUserDictionary = { + PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 625, + 20, + 48, + 43, + 43, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + PBXFileDataSource_Target_ColumnID, + ); + }; + PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 200, + 350, + 20, + 48.1626, + 43, + 43, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXTargetDataSource_PrimaryAttribute, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + ); + }; + PBXPerProjectTemplateStateSaveDate = 192659396; + PBXWorkspaceStateSaveDate = 192659396; + }; + perUserProjectItems = { + 2F5A489C0B7565AE0052B0C1 /* PBXTextBookmark */ = 2F5A489C0B7565AE0052B0C1 /* PBXTextBookmark */; + 2F5A489D0B7565AE0052B0C1 /* PBXTextBookmark */ = 2F5A489D0B7565AE0052B0C1 /* PBXTextBookmark */; + 2F5A48A00B7565AE0052B0C1 /* PBXTextBookmark */ = 2F5A48A00B7565AE0052B0C1 /* PBXTextBookmark */; + 2F5A48A10B7565AE0052B0C1 /* PBXTextBookmark */ = 2F5A48A10B7565AE0052B0C1 /* PBXTextBookmark */; + 2F5A48A20B7565AE0052B0C1 /* PBXTextBookmark */ = 2F5A48A20B7565AE0052B0C1 /* PBXTextBookmark */; + 2F5A49370B7575010052B0C1 /* PBXTextBookmark */ = 2F5A49370B7575010052B0C1 /* PBXTextBookmark */; + 2F901EC10B7AED84004FF42C /* PBXTextBookmark */ = 2F901EC10B7AED84004FF42C /* PBXTextBookmark */; + 2F901EC50B7AED84004FF42C /* PBXTextBookmark */ = 2F901EC50B7AED84004FF42C /* PBXTextBookmark */; + 2F901ED80B7AEDBC004FF42C /* PBXTextBookmark */ = 2F901ED80B7AEDBC004FF42C /* PBXTextBookmark */; + 2F901EE10B7AEE09004FF42C /* PBXTextBookmark */ = 2F901EE10B7AEE09004FF42C /* PBXTextBookmark */; + 2F901EF70B7AEED5004FF42C /* PBXTextBookmark */ = 2F901EF70B7AEED5004FF42C /* PBXTextBookmark */; + 2F9020F40B7BC77F004FF42C /* PBXTextBookmark */ = 2F9020F40B7BC77F004FF42C /* PBXTextBookmark */; + 2F9020F50B7BC77F004FF42C /* PBXTextBookmark */ = 2F9020F50B7BC77F004FF42C /* PBXTextBookmark */; + 2F9020F60B7BC77F004FF42C /* PBXTextBookmark */ = 2F9020F60B7BC77F004FF42C /* PBXTextBookmark */; + 2F9021260B7BCD94004FF42C /* PBXTextBookmark */ = 2F9021260B7BCD94004FF42C /* PBXTextBookmark */; + 2F9021280B7BCD94004FF42C /* PBXTextBookmark */ = 2F9021280B7BCD94004FF42C /* PBXTextBookmark */; + 2F9021290B7BCD94004FF42C /* PBXTextBookmark */ = 2F9021290B7BCD94004FF42C /* PBXTextBookmark */; + 2F90213A0B7BCF9E004FF42C /* PBXTextBookmark */ = 2F90213A0B7BCF9E004FF42C /* PBXTextBookmark */; + 2F90213B0B7BCF9E004FF42C /* PBXTextBookmark */ = 2F90213B0B7BCF9E004FF42C /* PBXTextBookmark */; + 2F90213C0B7BCF9E004FF42C /* PBXTextBookmark */ = 2F90213C0B7BCF9E004FF42C /* PBXTextBookmark */; + 2F90213D0B7BCF9E004FF42C /* PBXTextBookmark */ = 2F90213D0B7BCF9E004FF42C /* PBXTextBookmark */; + 2F9021410B7BD05A004FF42C /* PBXTextBookmark */ = 2F9021410B7BD05A004FF42C /* PBXTextBookmark */; + }; + sourceControlManager = 2F5A48590B75586F0052B0C1 /* Source Control */; + userBuildSettings = { + }; + }; + 2F5A484B0B7558670052B0C1 /* PmpMyApp */ = { + isa = PBXExecutable; + activeArgIndex = 2147483647; + activeArgIndices = ( + ); + argumentStrings = ( + ); + autoAttachOnCrash = 1; + configStateDict = { + }; + customDataFormattersEnabled = 1; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + enableDebugStr = 1; + environmentEntries = ( + ); + executableSystemSymbolLevel = 0; + executableUserSymbolLevel = 0; + libgmallocEnabled = 0; + name = PmpMyApp; + sourceDirectories = ( + ); + }; + 2F5A48590B75586F0052B0C1 /* Source Control */ = { + isa = PBXSourceControlManager; + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + scmConfiguration = { + }; + scmType = ""; + }; + 2F5A485A0B75586F0052B0C1 /* Code sense */ = { + isa = PBXCodeSenseManager; + indexTemplatePath = ""; + }; + 2F5A48700B75598F0052B0C1 /* pmpmapper.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {817, 846}}"; + sepNavSelRange = "{529, 0}"; + sepNavVisRect = "{{0, 0}, {817, 846}}"; + sepNavWindowFrame = "{{1954, -14}, {939, 979}}"; + }; + }; + 2F5A48710B75598F0052B0C1 /* pmpmapper.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {817, 2212}}"; + sepNavSelRange = "{4316, 0}"; + sepNavVisRect = "{{0, 0}, {817, 846}}"; + }; + }; + 2F5A48890B7565810052B0C1 /* PMPMapper */ = { + activeExec = 0; + executables = ( + 2F5A488B0B7565810052B0C1 /* PMPMapper */, + ); + }; + 2F5A488B0B7565810052B0C1 /* PMPMapper */ = { + isa = PBXExecutable; + activeArgIndex = 2147483647; + activeArgIndices = ( + ); + argumentStrings = ( + ); + autoAttachOnCrash = 1; + configStateDict = { + }; + customDataFormattersEnabled = 1; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + dylibVariantSuffix = ""; + enableDebugStr = 1; + environmentEntries = ( + ); + executableSystemSymbolLevel = 0; + executableUserSymbolLevel = 0; + libgmallocEnabled = 0; + name = PMPMapper; + savedGlobals = { + }; + sourceDirectories = ( + ); + variableFormatDictionary = { + }; + }; + 2F5A489C0B7565AE0052B0C1 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C165DFE840E0CC02AAC07 /* English */; + name = "English: 3"; + rLen = 0; + rLoc = 93; + rType = 0; + vrLen = 93; + vrLoc = 0; + }; + 2F5A489D0B7565AE0052B0C1 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8D1107310486CEB800E47090 /* Info.plist */; + name = "Info.plist: 23"; + rLen = 0; + rLoc = 738; + rType = 0; + vrLen = 844; + vrLoc = 0; + }; + 2F5A48A00B7565AE0052B0C1 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 089C165DFE840E0CC02AAC07 /* English */; + name = "English: 3"; + rLen = 0; + rLoc = 93; + rType = 0; + vrLen = 93; + vrLoc = 0; + }; + 2F5A48A10B7565AE0052B0C1 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 8D1107310486CEB800E47090 /* Info.plist */; + name = "Info.plist: 23"; + rLen = 0; + rLoc = 738; + rType = 0; + vrLen = 844; + vrLoc = 0; + }; + 2F5A48A20B7565AE0052B0C1 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2F5A48700B75598F0052B0C1 /* pmpmapper.h */; + name = "PMPMapper.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 139; + vrLoc = 0; + }; + 2F5A48AC0B7565AE0052B0C1 /* XCBreakpointsBucket */ = { + isa = XCBreakpointsBucket; + name = "Project Breakpoints"; + objects = ( + ); + }; + 2F5A49370B7575010052B0C1 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2F5A48710B75598F0052B0C1 /* pmpmapper.c */; + name = "PMPMapper.c: 29"; + rLen = 0; + rLoc = 4002; + rType = 0; + vrLen = 951; + vrLoc = 0; + }; + 2F901EC10B7AED84004FF42C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2F901EC20B7AED84004FF42C /* defroute.c */; + name = "(null): 12"; + rLen = 0; + rLoc = 201; + rType = 0; + vrLen = 1280; + vrLoc = 0; + }; + 2F901EC20B7AED84004FF42C /* defroute.c */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; + name = defroute.c; + path = "/Users/tyler/Library/Mail Downloads/defroute.c"; + sourceTree = ""; + }; + 2F901EC50B7AED84004FF42C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2F901EC60B7AED84004FF42C /* defroute.c */; + name = "(null): 12"; + rLen = 0; + rLoc = 201; + rType = 0; + vrLen = 1280; + vrLoc = 0; + }; + 2F901EC60B7AED84004FF42C /* defroute.c */ = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.c; + name = defroute.c; + path = "/Users/tyler/Library/Mail Downloads/defroute.c"; + sourceTree = ""; + }; + 2F901ECE0B7AEDB5004FF42C /* route.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {722, 844}}"; + sepNavSelRange = "{408, 0}"; + sepNavVisRect = "{{0, 0}, {722, 844}}"; + }; + }; + 2F901ECF0B7AEDB5004FF42C /* route.c */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {817, 1764}}"; + sepNavSelRange = "{157, 0}"; + sepNavVisRect = "{{0, 918}, {817, 846}}"; + }; + }; + 2F901ED80B7AEDBC004FF42C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2F901ECE0B7AEDB5004FF42C /* route.h */; + name = "route.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 135; + vrLoc = 0; + }; + 2F901EE10B7AEE09004FF42C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2F901ECF0B7AEDB5004FF42C /* route.c */; + name = "struct sockaddr_in *default_gw()"; + rLen = 32; + rLoc = 1055; + rType = 0; + vrLen = 1288; + vrLoc = 0; + }; + 2F901EF70B7AEED5004FF42C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2F901ECE0B7AEDB5004FF42C /* route.h */; + name = "route.h: 26"; + rLen = 0; + rLoc = 408; + rType = 0; + vrLen = 452; + vrLoc = 0; + }; + 2F9020F40B7BC77F004FF42C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2F901ECF0B7AEDB5004FF42C /* route.c */; + name = "route.c: 12"; + rLen = 0; + rLoc = 157; + rType = 0; + vrLen = 1279; + vrLoc = 1019; + }; + 2F9020F50B7BC77F004FF42C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2F5A48710B75598F0052B0C1 /* pmpmapper.c */; + name = "pmpmapper.c: 35"; + rLen = 0; + rLoc = 1382; + rType = 0; + vrLen = 1851; + vrLoc = 0; + }; + 2F9020F60B7BC77F004FF42C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2F5A48700B75598F0052B0C1 /* pmpmapper.h */; + name = "pmpmapper.h: 30"; + rLen = 0; + rLoc = 529; + rType = 0; + vrLen = 867; + vrLoc = 0; + }; + 2F9021260B7BCD94004FF42C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2F5A48700B75598F0052B0C1 /* pmpmapper.h */; + name = "pmpmapper.h: PMP_TIMEOUT"; + rLen = 0; + rLoc = 529; + rType = 0; + vrLen = 867; + vrLoc = 0; + }; + 2F9021280B7BCD94004FF42C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2F5A48710B75598F0052B0C1 /* pmpmapper.c */; + name = "pmpmapper.c: 53"; + rLen = 0; + rLoc = 1477; + rType = 0; + vrLen = 2132; + vrLoc = 929; + }; + 2F9021290B7BCD94004FF42C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2F5A48700B75598F0052B0C1 /* pmpmapper.h */; + name = "pmpmapper.h: PMP_TIMEOUT"; + rLen = 0; + rLoc = 529; + rType = 0; + vrLen = 867; + vrLoc = 0; + }; + 2F90213A0B7BCF9E004FF42C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2F901ECF0B7AEDB5004FF42C /* route.c */; + name = "route.c: 12"; + rLen = 0; + rLoc = 157; + rType = 0; + vrLen = 1228; + vrLoc = 1272; + }; + 2F90213B0B7BCF9E004FF42C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2F5A48710B75598F0052B0C1 /* pmpmapper.c */; + name = "pmpmapper.c: 50"; + rLen = 0; + rLoc = 1384; + rType = 0; + vrLen = 1337; + vrLoc = 3052; + }; + 2F90213C0B7BCF9E004FF42C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2F5A48710B75598F0052B0C1 /* pmpmapper.c */; + name = "pmpmapper.c: 50"; + rLen = 0; + rLoc = 1384; + rType = 0; + vrLen = 1337; + vrLoc = 3052; + }; + 2F90213D0B7BCF9E004FF42C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2F901ECF0B7AEDB5004FF42C /* route.c */; + name = "route.c: 12"; + rLen = 0; + rLoc = 157; + rType = 0; + vrLen = 1228; + vrLoc = 1272; + }; + 2F9021410B7BD05A004FF42C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 2F5A48710B75598F0052B0C1 /* pmpmapper.c */; + name = "pmpmapper.c: printf"; + rLen = 0; + rLoc = 4316; + rType = 0; + vrLen = 1766; + vrLoc = 0; + }; + 8D1107260486CEB800E47090 /* PmpMyApp */ = { + activeExec = 0; + executables = ( + 2F5A484B0B7558670052B0C1 /* PmpMyApp */, + ); + }; + 8D1107310486CEB800E47090 /* Info.plist */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {915, 843}}"; + sepNavSelRange = "{413, 0}"; + sepNavVisRect = "{{0, 0}, {915, 843}}"; + }; + }; +} diff --git a/PmpMyApp_Prefix.pch b/PmpMyApp_Prefix.pch new file mode 100644 index 0000000..c4e3dde --- /dev/null +++ b/PmpMyApp_Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'PmpMyApp' target in the 'PmpMyApp' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/main.m b/main.m new file mode 100644 index 0000000..5062060 --- /dev/null +++ b/main.m @@ -0,0 +1,14 @@ +// +// main.m +// PmpMyApp +// +// Created by R. Tyler Ballance on 2/3/07. +// Copyright bleep. LLC 2007. All rights reserved. +// + +#import + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **) argv); +} diff --git a/source/pmpmapper.c b/source/pmpmapper.c new file mode 100644 index 0000000..28b3cb2 --- /dev/null +++ b/source/pmpmapper.c @@ -0,0 +1,158 @@ +/* + * PMPMapper.c + * PmpMyApp + * + * Created by R. Tyler Ballance on 2/3/07. + * Copyright 2007 bleep. LLC. All rights reserved. + * + */ + +#include "pmpmapper.h" + +//! double_timeout(struct timeval *) will handle doubling a timeout for backoffs required by NAT-PMP +static void double_timeout(struct timeval *to) +{ + int second = 1000000; // number of useconds + + to->tv_sec = (to->tv_sec * 2); + to->tv_usec = (to->tv_usec * 2); + + // Overflow useconds if necessary + if (to->tv_usec >= second) + { + int overflow = (to->tv_usec / second); + to->tv_usec = (to->tv_usec - (overflow * second)); + to->tv_sec = (to->tv_sec + overflow); + } +} + +/*! + * pmp_get_public(struct sockaddr_in *) will return a sockaddr_in + * structure representing the publicly facing IP address of the + * default NAT gateway. The function will return NULL if: + * - The gateway doesn't support NAT-PMP + * - The gateway errors in some other spectacular fashion + */ +struct sockaddr_in *pmp_get_public(struct sockaddr_in *gateway) +{ + int recvfd, sendfd; + int req_attempts = 1; + struct timeval req_timeout; + pmp_ip_request_t req; + pmp_ip_response_t resp; + struct sockaddr_in *recvsockaddr = (struct sockaddr_in *)(malloc(sizeof(struct sockaddr))); + struct sockaddr_in *publicsockaddr = NULL; + + req_timeout.tv_sec = 0; + req_timeout.tv_usec = PMP_TIMEOUT; + + recvsockaddr->sin_family = AF_INET; + recvsockaddr->sin_port = PMP_PORT; + recvsockaddr->sin_addr.s_addr = htonl(INADDR_ANY); + + gateway->sin_port = PMP_PORT; // Default port for NAT-PMP is 5351 + + sendfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + recvfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + + // Clean out both req and resp structures + bzero(&req, sizeof(pmp_ip_request_t)); + bzero(&resp, sizeof(pmp_ip_response_t)); + req.version = 0; + req.opcode = 0; + + + if (bind(recvfd, (struct sockaddr *)(recvsockaddr), sizeof(struct sockaddr_in)) < 0) + { + fprintf(stderr, "Failed to bind properly to UDP:%d (%s)\n", PMP_PORT, strerror(errno)); + return NULL; + } + + // Attempt to contact NAT-PMP device 9 times as per: draft-cheshire-nat-pmp-02.txt + while (req_attempts < 10) + { +#ifdef PMP_DEBUG + fprintf(stderr, "Attempting to retrieve the public ip address for the NAT device at: %s\n", inet_ntoa(gateway->sin_addr)); + fprintf(stderr, "\tTimeout: %ds %dus, Request #: %d\n", req_timeout.tv_sec, req_timeout.tv_usec, req_attempts); +#endif + struct sockaddr_in addr; + socklen_t len = sizeof(struct sockaddr_in); + + if (sendto(sendfd, &req, sizeof(req), 0, (struct sockaddr *)(gateway), sizeof(struct sockaddr)) < 0) + { + fprintf(stderr, "There was an error sending the NAT-PMP public IP request! (%s)\n", strerror(errno)); + return NULL; + } + + if (setsockopt(recvfd, SOL_SOCKET, SO_RCVTIMEO, &req_timeout, sizeof(req_timeout)) < 0) + { + fprintf(stderr, "There was an error setting the socket's options! (%s)\n", strerror(errno)); + return NULL; + } + + if (recvfrom(recvfd, &resp, sizeof(pmp_ip_response_t), 0, (struct sockaddr *)(&addr), &len) < 0) + { + if ( (errno != EAGAIN) || (req_attempts == 9) ) + { + fprintf(stderr, "There was an error receiving the response from the NAT-PMP device! (%s)\n", strerror(errno)); + return NULL; + } + else + { + goto iterate; + } + } + + if (addr.sin_addr.s_addr != gateway->sin_addr.s_addr) + { + fprintf(stderr, "Response was not received from our gateway! Instead from: %s\n", inet_ntoa(addr.sin_addr)); + } + else + { + break; + } + +iterate: + ++req_attempts; + double_timeout(&req_timeout); + } + + if (publicsockaddr == NULL) + return NULL; + +#ifdef PMP_DEBUG + fprintf(stderr, "Response received from NAT-PMP device:\n"); + fprintf(stderr, "version: %d\n", resp.version); + fprintf(stderr, "opcode: %d\n", resp.opcode); + fprintf(stderr, "resultcode: %d\n", resp.resultcode); + fprintf(stderr, "epoch: %d\n", resp.epoch); + struct in_addr in; + in.s_addr = resp.address; + fprintf(stderr, "address: %s\n", inet_ntoa(in)); +#endif + + publicsockaddr->sin_addr.s_addr = resp.address; + + return publicsockaddr; +} + +#ifdef PMP_DEBUG +int main(int argc, char **argv) +{ + struct sockaddr_in *gw = NULL; + struct sockaddr_in *pub = NULL; + + printf("Acquiring the default gateway: "); + if ((gw = default_gw()) == NULL) + { + printf("Failed to acquire the default gateway address!\n"); + return EXIT_FAILURE; + } + + printf("%s\n", inet_ntoa(gw->sin_addr)); + pub = pmp_get_public(gw); + + + return EXIT_SUCCESS; +} +#endif \ No newline at end of file diff --git a/source/pmpmapper.h b/source/pmpmapper.h new file mode 100644 index 0000000..3c3a40b --- /dev/null +++ b/source/pmpmapper.h @@ -0,0 +1,51 @@ +/* + * PMPMapper.h + * PmpMyApp + * + * Created by R. Tyler Ballance on 2/3/07. + * Copyright 2007 bleep. LLC. All rights reserved. + * + */ + +#ifndef _PMPMAPPER_H +#define _PMPMAPPER_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "route.h" + +// Comment out to disable building main() +#define PMP_DEBUG + +#define PMP_VERSION 0 +#define PMP_PORT 5351 +#define PMP_TIMEOUT 250000 + +/* + * uint8_t: version, opcodes + * uint16_t: resultcode + * unint32_t: epoch (seconds since mappings reset) + */ + +typedef struct { + uint8_t version; + uint8_t opcode; +} pmp_ip_request_t; + +typedef struct { + uint8_t version; + uint8_t opcode; // 128 + n + uint16_t resultcode; + uint32_t epoch; + uint32_t address; +} pmp_ip_response_t; + +#endif \ No newline at end of file diff --git a/source/route.c b/source/route.c new file mode 100644 index 0000000..a0f3ac8 --- /dev/null +++ b/source/route.c @@ -0,0 +1,126 @@ +/* + * route.c + * PmpMyApp + * + * Created by R. Tyler Ballance on 2/7/07. + * Copyright 2007 bleep. LLC. All rights reserved. + * + */ + +#include "route.h" + +/* + * Thanks to R. Matthew Emerson for the fixes on this + */ + +/* alignment constraint for routing socket */ +#define ROUNDUP(a) \ +((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long)) +#define ADVANCE(x, n) (x += ROUNDUP((n)->sa_len)) + +void get_rtaddrs(int bitmask, struct sockaddr *sa, struct sockaddr *addrs[]) +{ + int i; + + for (i = 0; i < RTAX_MAX; i++) + { + if (bitmask & (1 << i)) + { + addrs[i] = sa; + sa = (struct sockaddr *)(ROUNDUP(sa->sa_len) + (char *)sa); + } + else + { + addrs[i] = NULL; + } + } +} + +int is_default_route (struct sockaddr *sa, struct sockaddr *mask) +{ + struct sockaddr_in *sin; + + if (sa->sa_family != AF_INET) + return 0; + + sin = (struct sockaddr_in *)sa; + if ((sin->sin_addr.s_addr == INADDR_ANY) && + mask && + (ntohl(((struct sockaddr_in *)mask)->sin_addr.s_addr) == 0L || + mask->sa_len == 0)) + return 1; + else + return 0; +} + +struct sockaddr_in *default_gw() +{ + int mib[6]; + size_t needed; + char *buf, *next, *lim; + struct rt_msghdr2 *rtm; + struct sockaddr *sa; + struct sockaddr *rti_info[RTAX_MAX]; + struct sockaddr_in *sin; + + mib[0] = CTL_NET; + mib[1] = PF_ROUTE; + mib[2] = 0; + mib[3] = 0; + mib[4] = NET_RT_DUMP2; + mib[5] = 0; + + if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0) + { + err(1, "sysctl: net.route.0.0.dump estimate"); + } + + buf = malloc(needed); + + if (buf == 0) + { + err(2, "malloc"); + } + + if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0) + { + err(1, "sysctl: net.route.0.0.dump"); + } + + lim = buf + needed; + + for (next = buf; next < lim; next += rtm->rtm_msglen) + { + rtm = (struct rt_msghdr2 *)next; + sa = (struct sockaddr *)(rtm + 1); + + if (sa->sa_family == AF_INET) + { + sin = (struct sockaddr_in *)sa; + struct sockaddr addr, mask; + + get_rtaddrs(rtm->rtm_addrs, sa, rti_info); + bzero(&addr, sizeof(addr)); + + if (rtm->rtm_addrs & RTA_DST) + bcopy(rti_info[RTAX_DST], &addr, rti_info[RTAX_DST]->sa_len); + + bzero(&mask, sizeof(mask)); + + if (rtm->rtm_addrs & RTA_NETMASK) + bcopy(rti_info[RTAX_NETMASK], &mask, rti_info[RTAX_NETMASK]->sa_len); + + if (is_default_route(&addr, &mask)) + { + sin = (struct sockaddr_in *)rti_info[RTAX_GATEWAY]; + break; + } + } + + rtm = (struct rt_msghdr2 *)next; + } + + free(buf); + + return sin; +} \ No newline at end of file diff --git a/source/route.h b/source/route.h new file mode 100644 index 0000000..5d67022 --- /dev/null +++ b/source/route.h @@ -0,0 +1,31 @@ +/* + * route.h + * PmpMyApp + * + * Created by R. Tyler Ballance on 2/7/07. + * Copyright 2007 bleep. LLC. All rights reserved. + * + */ + +#ifndef _ROUTE_H +#define _ROUTE_H + +#include +#include +#include + +#include +#include + +#include + +#include +#include +#include +#include +#include + + +struct sockaddr_in *default_gw(); + +#endif \ No newline at end of file