Xformers/AddCore.frm0000755000000000000000000002266211346367211011577 0ustar VERSION 5.00 Begin VB.Form AddCore BorderStyle = 1 'Fixed Single Caption = "Core data" ClientHeight = 2895 ClientLeft = 1050 ClientTop = 1335 ClientWidth = 3045 ControlBox = 0 'False LinkTopic = "Form2" MaxButton = 0 'False MinButton = 0 'False ScaleHeight = 193 ScaleMode = 3 'Pixel ScaleWidth = 203 Begin VB.CommandButton BtSave Caption = "Save" Height = 255 Left = 2040 TabIndex = 22 Top = 2400 Width = 855 End Begin VB.CommandButton BtClose Caption = "Close" Height = 255 Left = 1080 TabIndex = 9 Top = 2400 Width = 855 End Begin VB.CommandButton BtRemove Caption = "Delete" Height = 255 Left = 120 TabIndex = 1 Top = 2400 Width = 855 End Begin VB.TextBox TxName Height = 285 Left = 1440 TabIndex = 2 Top = 120 Width = 975 End Begin VB.TextBox TxCuMLen Height = 285 Left = 1440 TabIndex = 8 Top = 1800 Width = 975 End Begin VB.TextBox TxCuW Height = 285 Left = 1440 TabIndex = 7 Top = 1560 Width = 975 End Begin VB.TextBox TxCuH Height = 285 Left = 1440 TabIndex = 6 Top = 1320 Width = 975 End Begin VB.TextBox TxFeLen Height = 285 Left = 1440 TabIndex = 5 Top = 1080 Width = 975 End Begin VB.TextBox TxFeKg Height = 285 Left = 1440 TabIndex = 4 Top = 840 Width = 975 End Begin VB.TextBox TxSectFer Height = 285 Left = 1440 TabIndex = 3 Top = 600 Width = 975 End Begin VB.Label Label2 BackStyle = 0 'Transparent Caption = "cm" Height = 255 Index = 5 Left = 2520 TabIndex = 21 Top = 1800 Width = 495 End Begin VB.Label Label2 BackStyle = 0 'Transparent Caption = "mm" Height = 255 Index = 4 Left = 2520 TabIndex = 20 Top = 1560 Width = 495 End Begin VB.Label Label2 BackStyle = 0 'Transparent Caption = "mm" Height = 255 Index = 3 Left = 2520 TabIndex = 19 Top = 1320 Width = 495 End Begin VB.Label Label2 BackStyle = 0 'Transparent Caption = "cm" Height = 255 Index = 2 Left = 2520 TabIndex = 18 Top = 1080 Width = 495 End Begin VB.Label Label2 BackStyle = 0 'Transparent Caption = "Kg" Height = 255 Index = 1 Left = 2520 TabIndex = 17 Top = 840 Width = 495 End Begin VB.Label Label2 BackStyle = 0 'Transparent Caption = "cm" Height = 255 Index = 0 Left = 2520 TabIndex = 16 Top = 600 Width = 495 End Begin VB.Label Label1 AutoSize = -1 'True Caption = "Mean turn length" Height = 195 Index = 8 Left = 120 TabIndex = 15 Top = 1800 Width = 1200 End Begin VB.Label Label1 AutoSize = -1 'True Caption = "Bobbin width" Height = 195 Index = 7 Left = 120 TabIndex = 14 Top = 1560 Width = 915 End Begin VB.Label Label1 AutoSize = -1 'True Caption = "Bobbin deepth" Height = 195 Index = 6 Left = 120 TabIndex = 13 Top = 1320 Width = 1035 End Begin VB.Label Label1 AutoSize = -1 'True Caption = "MPL" Height = 195 Index = 4 Left = 120 TabIndex = 12 Top = 1080 Width = 330 End Begin VB.Label Label1 AutoSize = -1 'True Caption = "mFe" Height = 195 Index = 3 Left = 120 TabIndex = 11 Top = 840 Width = 300 End Begin VB.Label Label1 AutoSize = -1 'True Caption = "AFe" Height = 195 Index = 2 Left = 120 TabIndex = 10 Top = 600 Width = 285 End Begin VB.Label Label1 AutoSize = -1 'True Caption = "Name" Height = 195 Index = 0 Left = 240 TabIndex = 0 Top = 120 Width = 420 End End Attribute VB_Name = "AddCore" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit Dim CoreName As String Dim Changed As Boolean Private Sub SaveCore() WriteIniString App.Path & "\Core.tbx", "EI", TxName.Text, TxSectFer.Text & "," & TxFeKg.Text & "," & TxFeLen.Text & "," & TxCuH.Text _ & "," & TxCuW.Text & "," & TxCuMLen.Text CoreChanged = False End Sub Private Sub Clear() TxName.Text = "" TxSectFer.Text = "" TxFeKg.Text = "" TxFeLen.Text = "" TxCuH.Text = "" TxCuW.Text = "" TxCuMLen.Text = "" TxName.SetFocus CoreChanged = False End Sub Private Sub FillFields(S As String) TxName.Text = Substring(S, 1, ",") TxSectFer.Text = Substring(S, 2, ",") TxFeKg.Text = Substring(S, 3, ",") TxFeLen.Text = Substring(S, 4, ",") TxCuH.Text = Substring(S, 5, ",") TxCuW.Text = Substring(S, 6, ",") TxCuMLen = Substring(S, 7, ",") CoreChanged = False End Sub Private Sub RefreshForm(Core As String) Dim S As String S = Core & "," & GetIniString(App.Path & "\Core.tbx", "EI", Core) FillFields S End Sub Private Sub BtClose_Click() Me.Hide End Sub Private Sub BtRemove_Click() Dim S As String Dim T As String If Len(TxName.Text) Then RefreshForm TxName.Text If MsgBox("Confirm deletion of this core" & vbCrLf & "Make sure no project uses it" _ , vbCritical + vbYesNo, TxName.Text) = vbYes Then S = GetKeysInSection(App.Path & "\Core.tbx", "EI") GetNextInList " ", " " T = GetNextInList(S, ",") Do While Len(T) If TxName.Text <> T Then WriteIniString App.Path & "\temp.tbx", "EI", T, GetIniString(App.Path & "\core.tbx", "EI", T) End If T = GetNextInList(S, ",") Loop Delete App.Path & "\core.tbx", 10 Rename App.Path & "\temp.tbx", App.Path & "\core.tbx", 10, True Clear End If End If End Sub Private Sub BtSave_Click() Enregistrer End Sub Private Sub Form_Activate() ' Changed = False ' RefreshForm Form1!LstCore.Text End Sub Private Sub Form_Deactivate() If Changed Then If MsgBox("Save changes", vbYesNo + vbQuestion, TxName.Text) = vbYes Then Enregistrer End If End If End Sub Private Sub Form_Load() ' CenterForm Me End Sub Private Sub TxCuH_KeyPress(KeyAscii As Integer) Changed = True End Sub Private Sub TxCuMLen_KeyPress(KeyAscii As Integer) Changed = True End Sub Private Sub TxCuW_KeyPress(KeyAscii As Integer) Changed = True End Sub Private Sub TxFeKg_KeyPress(KeyAscii As Integer) Changed = True End Sub Private Sub TxFeLen_KeyPress(KeyAscii As Integer) Changed = True End Sub Private Sub TxName_KeyPress(KeyAscii As Integer) Changed = True End Sub Private Sub TxName_Validate(Cancel As Boolean) If Len(TxName.Text) Then RefreshForm TxName.Text End Sub Private Sub TxSectFer_KeyPress(KeyAscii As Integer) Changed = True End Sub Xformers/DA127.pdf0000755000000000000000000023354211346367214011005 0ustar %PDF-1.4 9 0 obj <> endobj xref 9 8 0000000016 00000 n 0000000548 00000 n 0000000748 00000 n 0000000924 00000 n 0000001038 00000 n 0000063682 00000 n 0000063704 00000 n 0000000610 00000 n trailer<] >> startxref 0 %%EOF 10 0 obj<> endobj 16 0 obj<

>stream xc```e``Jb   , {@,$ b@ճbc``bY endstream endobj 11 0 obj<>>>/Contents 12 0 R/CropBox[0 0 485 560]/Rotate 0>> endobj 12 0 obj<>stream x+2032W0BS3=cK CL'r{*sr endstream endobj 13 0 obj<>stream JFIFC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]Y  }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?(((((((((((((((((((((((((((((((((((((((((((((((+2NK;+Ky|RVy?#ptyij;Z ?Qk_s?ֿOTyij;Z ?Qk_s?ֿOTyij;Z ?Qk_s?ֿOTyij;Z ?T7ecqw.bc6޾HQuh((((((((((((+2oC袊((((((ȵלn&Xy2q'Tmn2x' ҮEQEQEQEQEQEQEQEQEQEQEQEQEoZtVnւorIdܲ.x9Cf쪮ѳ;99@Ǿ1 wxb#ӶNr΍ڲ1B:Li"fl[wkgcZK(InAG32<ЬFy^JV$YT3[n(((wwN%^zoonV sc]kW`c,|8Ak] IiMo1NG Y7JȻPx#.IR2wFpr:FG?L=s,2(96}v"(((((((+2oC誩gTwiV3!N댞 ֟sk0,0ۜW> *  `OB, u# $#Ϛ<gg$mF1+vOGu-Bm?SEKq [ D(H1UO%{XE*d`N;5'W|gݻvs{Բl`J ۅ'G'RZ@wqN=4MkK<9PSiqֆf6K,12z 8)b"'YYA6 6NkHoJ{~(h[Ho{1*X!XAv~}YO21-!ۄFsRKa2JQ[:{gEVkJ#`|ʆ<84=2K;K2d3 tC홵8JQXL>ΪqACh?#Od zhLy]3S4ߕ ?4ߕ ?4ߕ ?4ߕ ?4ߕ ?4ߕ ?4ߕ ?4ߕ ?4ߕ kTY0놁25JdMXo`2NJaP3ou][Ymn+ѮUZv@G^G~kSO =.[_&ev@!p;vhWt 'almnlȣʐ$D3~;HnIf5^Im9A2a6g8 JR۴vb" t=*&ebe7A)F`v+SNFe6`Hrp1:U((((((((?e;jӢ((((((VՆTI [=[RYJ*HǨrJqkdKabs6<;K׶:tEDYe?!V'$H=nBjܪ5\D :utP/7}<)z!vrO@:TԼ臔I)edx-49I$\J1 g5$1"8´+9H(spx5aH0H+ʩfbEyGv_HSOaRŪG%WL $8)>I}|if\ gyc֢Rxn6ưb1(-uX2ˤp7 10øǭ{+C I.%I!{t5<:jȕ)^3Ux|B@Ws !''8 ==iKe$I8áֈu;[b%qǯ3(m:HKI- zuEI5s}qa"lxVxlHGPA?abi' ۴q$ -wbN)$kF5U O#I%P,71dm,0A(,a^r|ArX dQKR,7dm rI<G>tuHd@@tpq#:+d2LOuI'sRQe0gHcS($yo\lgT?e a5ʊT}$VDXVho2<3r9[S%^Gxї,sO;p*zymeO&LTQAfysRCum4sBe88zxKpٚ4YpxV,[>#kU9M8|Cyk%䜖%`ZQEQEQEQEQEQEQEQEQEQEQEQEQEfA#-ysVQEQEQEQEQEV}ͭw{bay5Hfʆ Xgi?+gq֤NJq'#"l\Uu'Fi-LcX.ܹl0I:o-B6ʒt'hۺw|րn o [˷8dfM>sW|y!)'w|Q)'w|Q)'w|Q)'w|Q)'w|Sm< y.d(LAW袊((((((((((+2oC袊((((((ȵל:((QjХQEQEQEQEQEQEQEQEQEQEQE-xI1kEm$yr2p~a֦۴Z ???疡"Onyj/(۴Z ???疡"Onyj/(۴Z ???疡"Onyj/(۴Z ???疡"Onyj/(۴Z ???疡"Onyj/(۴Z ???疡"Onyj/(۴Z ???疡"kz7ZoMm$h`eJzAEQEJ/ ]׼?v((((*\= qa6C46Ojey ~!6O#CNB=7d|gi?70yV(~S-SSyK& IV ݁uTɻ`*TXG'"t%\D?388<iM7>YOA:R2N'J}J+Wō2'gơUxF8'u k|45PjK4_),' zkr\i22B-eb?R)ڭ 46Z{#g_dpAAF 6}CVNT} O93ֿOU 4Ebpv*q I%ζ;c#($"6[f 3"o}Ce6@Aa y`g5kyaYtIN'_hn0\9 k|45PjK4_),' zkr\i22B-eb?R)ڭ 46Z{#g_dpAAF 6}CVNT} O93ֿOU 4Ebpv*q I%ζ;c#($"6[f 3"o}Ce6@Aa y`g5kyaYtIN'_hn0\9 k|45PjK4_),' zkr\i22B-eb?R)ڭ 46Z{#g_dpAAF 6}CVNT} O93ֿOUJmkSi456HK[yP ?u>AEQEJ/ ]׼?v((((*%E']cicw{t#EVlpr;p:ק 7fW,0rrxn-$o?ys˳?J#|̒{6~?0j{HZYL?j@2b*`w(jT1TQr׷NM>;Ixy~LS<-17rzt煵n*|c`?'Oot{H.N@#y,m6a]T `HI wyn$HQ6+sxn#}J;I_)o֋kI"I H~Ÿ-M=SQW+T#(S8_=1$Rip#9+f@9>;I_)o֠6 YyJTg1y8C3K3N=#鄥̎12`;GAf+; HvnOOoOsjHoj1ʊ񽕺`^|;G6W.̌ds댔-%pr1^Z}ds|qg# `Fwhŏ6,A؃Th2]q{Fn'#UKI\21EK2PwnMyiFMYqp2= Y|r's<سgb Cw\ dfF?Qu Ӓb s̞̎~DU-${KerG9.BaW,C56I71gʗz;`AgwȞMXbqpp}8 oip/mF%/NJaP-Yo2{2:ET. ˳#Y% wq\ Dזh$oş*\g#7"y71c͋9z{ 7qFdc \`8^09+!@og=GARG6W.̌ds댔-%pr1^Z}ds|qg# `Fwhŏ6,A؃Th2]q{Fn'#UKI\21EK2PwnV]MB\K ]88(w)SG@#f(*_x)jQEQEQEQEQEQEQEQEQEQEQEg5]uk#Ʊ0FC,GF=* kA09A#"ͻޡ|[Y)Y<سr?2IwACU:,yV(̌ǩ'Ԛ.4Y`hfuF DyG 6zoƪ7fxmgPb W9q 5VӭdUMR@$}?*EF?#Od ?2?G_i G#/4OFc(Kӄ~̙l ޕ'#/4O'UeӼ:Av $;٪3'f|?ӧ8rzim鈋H8KXg=I]  &a hIdEЧB6֊pFG^K%ƚE!#nFAV?2?G_i MCPϤ ԐoR)WAXdiHC'Q@?(EF?#Od ?2?³Iiv)"ZnpA-U8,ۙ'N QEU(5u^R(((((((W*<`fhP3#=Bҳ.Gxh60:x֤R0QFI&V9,呂GĻQ'$ƒX[Ԥӏ-CJbtI"T`Ib?{iQ`\0/,Fs|fi委BqS]V}HbZBد?c0iV-!wHe&CCU(E!BEQEQEQEQEQEQEA6V {՟,ry^z2ICep=GzbI`c8' B+öFGC5žDE(nX7;L` TZޘؘEٔ_s6&əf30K~#t }4FQbC.Ҹ&9n2xmƐđĊ @)QEKY-{EfA#-ysTmH#`ڡfPB/z hZxG!Y!x (7* }1ЍQ$jXEQEQEQEQEU;)AqehCcpH;GP}F5-6V ua,3X$I$O4ɬ-=VN3tى>ꖽP{\xkOm,µQjХQERCW_-]((((((((((k?y?Wj֡ok O5܍a v$(83aULjndӮQݷI 8/6!:v'Z?__ )صwt6;].؉s1u8zZQ$CpRPy袩]VȉH*P n{όYFc2ڽHS6oFd ,B8Xtɦ ݤn$v;,@RN98<݁"y 8HI3|;.28 ~XB3y+0rԗgs*K)WI@EȖJ71bE=O'zK>dR\y329mC=@RA:@V̌41}g=Cja;rЭܳ3Bc <yN۾V3G׷R)E|K!6:iZʷDn>lMU 2k2v{IsUVBVEG$++Nb}]y xV GC !;Y$j"(I$@U"b@T~#zRk\@'T7F܎ʜБI %{c.qp1l<Ҭg1B<9',6}rz*5ӡ[w4^m_ՕVtT#$FdTVuvqr3#(6v*w+`8r1֧m +([@WOkv(QjХQEQEQEQEQEQEQEQEQEQEU-g@'j-xI1kEm$yr2p~a֦۴Z ???疡"Onyj/(۴Z ???疡"Onyj/(۴Z ???疡"Onyj/(۴Z ???疡"Onyj/(۴Z ???疡"Onyj/(۴Z ???疡"Onyj/(۴Z ???疡"kz7ZoMm$h`eJzAERCW_-]*_x)jQEQEQEQEQEQEQEQEQEQEKY-{Ec_VD\3*ܝ7φƪ5 Zif:%\aT@Km"w]2FPHEl@gE6UfOdl쀂 ÐA Ϩj²*OaI'8r@3yijPզhRXNN8?Q $'u,de[{ ~Sm[hlF 9 lo,+.b)$k +s秩ՈۙQq:ޫ[ %秩ҝA?t I |"Tp0O\㎽2{]B,]7̸(Hu947B%Ws_SCa(\K&DFA,S=sEvY2f5 HfŽtu8rj0u82A'Ҝ_̑OF=y7Fd%6T 8T:}R7HdWFTbGBiYIM F9Q^7VV ϐGqRHّ,r]quX"kOl7nbϕ.3wS<Ŝ==pA^#21JK0/w^[ݷddu# i#\+fF?9uJ ג9b->ѲHɹ>T3NG# ;oDnbǛs SAn{K{l*4.pazrW# Bo7v{yّԏȂ*ipl]%([7^Jb&F#&,R8PGu8,Ѿ9ɹlY3ЃN!.3#dq\1 9OfGR?"=vdc#\dn0y+!$K=Ad{0@ FO&,yg8Bu88>@7̌ңA %r0(swm,緙=H"ZHّ,r]quX"kOl7nbϕ.3wS<Ŝ==pA^#21JK0/w^[ݷddu# i#\+fF?9uJ ג9b+I?KIa>qlT{KWh ZEQEQEQEQEV[yf4g@$$`}Rn,˵cED%rxNDl2rap$ryϧ{=w1Ntgք>\7No*[h|nݗw1?ZVkXݠ nB8nz+i?,aP6f`sp8ɒt&PaFo͹g'<'7}Ln}S ΁~sHeu8 FG@ᷙ$y6©+ I=2y9Fusɷw9Z,?ϗ;Ӯ~J fIwu-0_˨ >xÔPLf5+V)%I]Jdzv=g|nwoT6ZbdFbL'*Vcǁ:E쉗|I}ű ry= aN}2'K a`qbaP[ ]P@"01;+VϹk滆Gba XzT,043k:#c`r"<#FEIwACUI<3!l*FȏҵQjХQERCW_-]((((((((((k?y?Wh9t+e:%}y: @?(EF?#Od ?2?G_i G#/4O'Q@?(EF?#Od ?2?G_i G#/4O'Q@?(EF?#Od ?2?G_i G#/4O'Q@?(EFzL>KIVV[tHC85T{KWh ZEQEQEQEQEQEQEQEQEQEQER ^&Y}^vէEU(V )RRI~|Uk3U$*6iXe/ۆ'~΄sAaMkd*1c:ڛ5ͥ+mbprÿqǽZ Ѵd c#$U1FѴ  nc9 ȩZdh&XHrN׌ߧ4^-1~21FGUIIc;2uC5ח/C0Mh9#OJxH(\yI (px$v?OE b.9ێ9=~aSQEQY#kU9MJG; "(QBY@ y'rH5T{KWh ZEQEQEQEQEQEQEQEQEQEQER ^&Y}^vէEciѼB%OH P`gᶌ'ߓVHc!FB9{ȶ]m]p; vVoM\̯Y?/͌7oQ5%w$2Dgܮs; >eT0% A\yhYNTb[8 ԄˁdgoCe"k dN 0$p;* :7YDiQB   6ѕj݄Ξ_/v{3$ڄȒ$U)? ~8ílVXi 7"!bN1 Ȫ/݊fy!6) ~86b7!8D;7mgy5,T,жd'<Ǚvt9zZe+I1qcsvTa8&bAg8UԔ clu@=BMlEd,M__.."$>Dq9~ 99tEَ2-&+0qBA߯5]6q: % Fu8910x渏F9eW#^Iuc2}69B&rE",6&9~f>n-f{;R!v ruERCW_-]((((((((((k?y?Wh?e;jӢ((EC1A۵>Np(¢P#8}QEQEU;6Q$lm`2דdr}M6Iw}$;.gz7O85S] ^5a%Ŭ'#*8끚٢E!B-g@'jJ/ ]׼?v((((((((((M] 9NM|4l Nrrx Kq8Sij",pOr@O'@uqS'bwۻ}zQ;>m`j{aIJ30wmLgj3(W nqw=75 #Ddr0'XH;Un.e0m' \ѲHɹ>T3NG#3aZK.f噲~F<:ORGP ծqm<2\w:!|g<pwnMn&gD4Os4N"b#8#XJaUy;I((((((((k?y?Wh?e;jӢ((((((LiY5B2)b>7?9Lͻޡ|[?n7jۿ ſ6zoƨͻޡ|[?n7jۿ ſ6zoƨͻޡ|[?n7jۿ ſ6zoƨͻޡ|[?n7jۿ ſ6zoƨͻޡ|[?n7jۿ ſ6zoƨͻޡ|[?n7jۿ ſ6zoƨͻޡ|[?n7jf}gPxfCTkT{KWj [A5v ZEQET7Ph7mQv3f7): }~ ZQIrA0 ,csn'H ۀnjʰa2ynM1Xu8袚쨌UFI' r+c86BG3ۧG,Q;$^큓TQE2YYE,BH*kqE>p'* [A5v &Gķ2og6ʜ|deMM'B(v6c A UCt^ItrYЛrzqr%m&+ BARFҠm/4=X :2;:cLhkut>*_iWQ]N#{XFԌuB AhzN+.b.K35nORN9@w^z$[T敧|3rGBGp^xgL}zpn\V㎜0eK4 "ˣأ$okhۺA5VMIey%^ffBmI1xoD' *}UK}JuҴvϓ?c`pp0H@K 鏲[]3OYːqӆ }]DYt{u;dc wR1א} Aɡ:l$]ع,M=I8?߹zO bRVSϡ oiPNVg,`Ly1Kki4Y5r[:pdQ/t+.blanF:H Y4='MK{% ''/IX6lB*Jy dqU-m* J>Le p9##Y/<3>mt=f8F_.@zqN 2NueQ74mH^A =?M59"^VV[u2[S2S?~aERCW_-]ZoO*_x)jQEQEQEQEFX-({ a"%~"2Y|rz+-6C)O@qOzuvN|a:}Qjtow"L1D7F=s\ʽ[)B,@(OZ bB2oԟz y9v vmO)95=nvt#>E ұhf<:l㊱q&p22Ÿ0FEw $8_.2x.#)(upBd=ԗjb $?Un[(Ǯqw3en+ >00Eұ{a!#bG'zUgv8sD * ywpeLl DUtoxjۆKI (o ##Av6YS(q,b}ӻ!;-[gft VR?vފ=Opj1DI4d_n2`cJr6cx@]'ins0nY-{EcKt^ hnr[I(%^\u.5H`vǝ'`22 `+wnyj/* ضv'9CuSO=ޥcuVRGS9O4mفג=$A"My"V*Ol CdƩ ݝLFS nm-CER!aP{ۜt'({x)'Ԭn HwG"i󆍻0;:G$Qi#DVeCi6dz`!vt` `8ЁحOV630[bڿ`saO?$zAZ=INM>pѷfg^H A-5h[_,vM>}̀}C0L0Nvv;c΃0Lz0{i<JTu }A[;Wnq|:|R+G#6 E[kɧ϶Oِr2F T Pgly}p&c#)pBb?疡"[ΰo=gjpm:=U<V7Qh$u;4Fݘy#ЂA(ב+um|Y42=FH0\j;] :N de0@THn=B }AH~8  ZT׼ U(5u^R((((((((((* [A5v]_ZYl]͐&u~_^igeio/ J5GoΏ;Z ?Qk_s?ֿOTyij;Z ?Qk_s?ֿOTyij;Z ?Qk_s?ֿOTyij;Z ?Qk_sPլn.ӬLpFҰ[ 2qV u.1\=#NQjХKY-{ERCW_-]((((((((((٢EdD `71S=MhUKAD^L6 ݏe=I&O /kڣJ(™c8_Ԗi9---:q$v {YX{,V:ů1y%vn9hH^70==>*̓%墩Q V%F?_ls<-+[she9@vAVDz݋y O-2A2NȵnsbF`dCZKY-{ERCW_-]((((((((((l>y._)2qCxaA8KtpmB66=?Xo %(0H'9'?t~ h!( 23fru8o-pDв$E٤Vy|&Bx={նdHXb=N 8<*-~w0 m$moMtk۹'Sn:m,s~^k)V)2RJ%v9({%*31alx3N{[֐wc55~Fo}=0G "8ѪQjХKY-{ERCW_-](55IJ6$uU#AlQǷ9*KV+˯>w5մdD.H Bo^5/uSVP:E{kUO!b@z 5oԿj_iMrj$[Z"C` cZj_iM5/t]OdֿOU w4éHvsڬP'>f x-#mm286u`cj-O{,ř`c`#,3ʌk&h/57;Y٢n d" ^()M/׏ZҗwP+fVUwd`Ƹ'2x" -׆8G܍''gHl`c,Œ2@PIsZ(((((((( 9v%01+FLX֢]/OYflmDYXB7 q=֬CG*F*EQEQEQEQEż7P4704-"SAj'G.vrD= g4Ok,Z@c呓pjEKY-{ERCW_-])FDʊ*!+%AnXu^(F Kvrw s`Fq%Ahl˩YY?2+&y؎&F|eJvNTgnsV``BIf,SM[x#x: qa#"s,GAMXo.6R }8Y(((((((+>LiY5B2)b>7?9Lͻޡ|[?n7jۿ ſ6zoƨͻޡ|[?n7jۿ ſ6zoƨͻޡ|[?n7jۿ ſ6zoƨͻޡ|[?n7jۿ ſ6zoƨͻޡ|[?n7jۿ ſ6zoƨͻޡ|[?n7jۿ ſ6zoƨͻޡ|[?n7jf}gPxfCTkEKY-{ERCW_-]((((86,KtTBN:s)Le p9##Y/<3>mt=f8F_.@zqN 2NueQ74mH^A &鲼v/b3[6$~<7KMWIXO> *A:^iZ{;gɟ챁088$t dw %t-gUn8}FTIЮ,=:F>A Ud6W].\fkt&ܞsܽ'IbxI +Ё}TѴ'[K+Ogl30&g䎄 dΘ%4,|8`2ʗi:EGGSH0ѷu#yЂ$k#_7HKx YYmnN8L(QT׼ U(5u^R((((*Ա[3QyR.8%=?DKF$Ed#WS[kmFS䟔 |륒u|6EYnbn0:zGzc{3$RMXQOS䞵'/%Y2|e+ߩ>$r+=q \R/ds `e'Leq`΋IIep\es10][ͨG,S$QA'B2{t?.E勅Hɏ:?ȷ+-Q C\Ag[a4|9,WAcR}l`am%b2C6F01O>.&)N6p<T- :+:˦3\olշ 7sq P.FG|8m>PYŊ w(w~?Bv[Kݳʶ36~{ b&h9f, #d/.mBNa鷎{E-xI1kEm$yr2p~a֠!vt` `8ЁحOV630[bڿ`saO?$zAZ=INM>pѷfg^H A-5h[_,vM>}̀}C0L0Nvv;c΃0Lz0{i<JTu }A[;Wnq|:|R+G#6 E[kɧ϶Oِr2F T Pgly}p&c#)pBb?疡"[ΰo=gjpm:=U<V7Qh$u;4Fݘy#ЂA(ב+um|Y42=FH0\j;] :N de0@Vݧ?_qU+}R-l_N Ar꧁{J tr&8h۳$zH E4EnT;K&>?f@>& R'k;}AA ==۴Z ?oCc:- 8>NPT>SOwXDԑD v`vuB H^Fյʇid'@l9#qCwgo3<>81p8S[! x-ki#E,T2Sֺ (k?y?WhQjХQEQEQEQEQEQEQEQEQEQEQEq}{%T)+< g:?ֿOTyij;Z ?Qk_s?ֿOTyij;Z ?Qk_s?ֿOTyij;Z ?Qk_s^{uaڟcjpomH,^WH }z-EKY-{ERCW_-]=2zz֣)e=5FPBA95,@D"+#(!ݤp)iy-RSuۏ ix-^Qvݟ?K+RH.ϫ1cC4?%D;pqîjIl#RITYJ+`\`3@OlV袲X^4v UlS 9PǓv]yg\[{iqأQ6,saw}6i^*2BѼɕ!N0r(zG_i OMI>^bJF@OGF@OU5m/OHtWX,*;O#>Q>Tֻo ;@Ǯ*z+3-j7k7i?mb2FW' ;umu2rZ\"I9!WezSEƳR5y$s},e1hA$K {W6qgo,=m3+:OFeiְC 4cMJ},mVxmJ?f`* '0s0OhBqm̒A*YR99RE> ,Ȃ饕;,II,ppTyc02gk+Frpp88 HbXƑax;@OZd60As%‰g$A9!CT4H)lr@>'4ۈ"$˹CdX2j+/v;^)Z7qZX[Y<{63r{n<慰O+lxy<;ztE["Bύ,#: I8oǿ/qKEQEQEQEQEQEQEQY}^vէY7ezdKl[d`#VPpy'5n,neIe*X #*᭑.)r,XO^]Ck H]d?X# ~ӛrq,2ʠg8cҖMBXS#|}<@30P==RRRE$_(m1L{uޫ\lFv$q(3p1ԓPĈ ЬI F*s#<Ն"#@g*r=9j!A('a!Lg%=AKy_3` 3 +|z%\ 9,K}AE)u]69$ #aOo::$2 :c88~U Ɲ2&Ex$9 CJʁ3Ƥ3p8[Ho{1)p

+",mw+4@7 ߂-wRH/#h˖9 '=U'&vF^G]c!<rNKrIZ(ZoO(ZynWL2-˸`VtG[9%Y5:F<x!#)I&]26HűUK[fԝybkEK8U<`DKE8Ԯi%A orI([k+-3ImbL`*[9f;EQEs^ ?Zh((((((+2oC袊(((((mnk RC6T0Rp;O[8&hwU{<bj$0<25In/cwGa rH֛yo_ɶTE]ۡ;GLnӾ{p$i|R]Hϕ'5*i+ڽtOA;/"OA;/"6$ G"a!FVQEfxEW 7@bQe\eA?R*[kۯ-0$m,f*9U{tHV:+@9#FjI:ZFeFi2HAhs=]^+!&1򲍠uϞݺ./5kffXC,ی g:(+oǿ/qKEQEQEQEQEQEQEQY}^vէEQEQEQEQEQEQEfxEW iEQEQY#kU9P-p {4Y.WOC7F,mqTJK { q7.Go$(d)E  tdcܵf^DbNY1]e3m!q݂)すIψ[i- Ug=Ztu3-y$3,R ccq |o$0`VQEx7ck(((((((inRM ю[XZ+i%ˑS7ݧ?_qQi<m-CEvP}Gݧ?_qQi<m-CEvP}Gݧ?_qQi<m-CEvP}Gݧ?_qQi<m-CEvP}Gݧ?_qQi<m-CEvP}Gݧ?_qQi<m-CEvP}Gݧ?_qQi<K[! x-ki#E,T2Sֺ ((+3-j7it%uH&fc 'vw^&7$4nvcjA{woai-ܫ  Nxh$l'j JQsFz㡫1ȓDD !A)QEx7ck(((((((ˋ9,-IYh8k_s?ֿOTyij;Z ?Qk_s?ֿOTyij;Z ?Qk_s?ֿOTyij;Z ?Qk_so?QYzwqkC,$QB(,@$E<Ȋho_Ep#Y`q‚Kc8ַwڏg ̍Y|O '# 1Ζw2gR]3߭Z(k]-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVgZot/]16k(uW3\P#" IUXv7!ފ | zE-[\`G2276?09as] FH&Rq\׷N&mb,.wt^4:'rrh[AV.aA.I2}Z(1 EQEQEQEQEQEQEQU >XHɺGگmOwg4V$eTVi9p0xW纔jvDGIF!AW֋;ʲd,k!Pͅq54?`3]?q=e3mL #.C'\GڂFfh e fNyxҝmh2ۄv#j$I#qI.Г u(?ĻBΈx"daU ki~:H3՗#Io+1RQP9?U}Mq,؇W*㓐88ϦCdopL%q{񌎸lҾ +UP9t8I,FJx 659&̵Q1xw9p9k_e9E.l[X\Bm|ɒP \ؖr;6O4y#>וtR"d,niPEU3yO+ p1q89dEʡf\ 9^㎴ksJ˹ïGh((+鐛VYeXyCtocHyW&-aڤYo- Y@hC`=8\Z5*6I9Ǧ^=e$ifM'}8GQ!;\3kבݕ@3ޜp&~uxq,5ȓKD́IR$`n C89E*B1cpXw}2uҫ,k5c t4M<"BœbpW9sQog}7go>wWLi$wߵ[mzm 7uk:ٜ\l5ko>e OnVna n8`*r)VTq+^XaIѬ cY;Jw<¥`xZ'#b|dr9oZK?9o3j"c+1L6`*Cs6Ԍ(=tǭL{|g˝v? 6p򗌖/O(((ȵלV{;{H'%->Ӵ!&ҿ.&"_9)S؃n㩭TFѢ 21ZuKKٯi5;YXR鈵m45vVbcʳܤ>0; )<2MONM]4u#x#ؘUpwL9aLO68Q$}ŷ0P ժ(1 EQEQEQEQEQEQEU[pF?:M@ r?ҋ7rHO&MH*0?Ң7RqzaeTA|z/s Ɇ幹H.!+R5;jQλl6ypxtQ9eFm8Gp9㊞q:Ѻ6FTĎz_ \Hߔw~1zڂ"HC4a#iWpu^ ppy\H@l8*sP[K^~2x+:*H,PEY'|t0# +|`$ 2=΄l I#Aq;E$2 89UOΟOOm]vzg8_n*Hpۤtw,r{vRGz]ʓx#UT!;(c'`HKpl68UP-f@+xYQ9eFm8Gp9f W,n:cq rȊ#C1@̸ry#jIH<[((,pG##=IviG! ~P:^8۟M(5` j- (2 ¦8ʅ K??=3ߥgPݔIj ia07ēLHthPhUc,s12N>G?{EQEQE2Hh9Q^7YXd0=Ag?#Od ?2?G_i G#/4O'Q@?(EF?#Od ?2?G_i W-,l1Co;ā>=QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQX~1<1yye'qͯ62КOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOԾSPTַ |L=(((((kzы] oD2`i ,e;UIH@M6)c5Hۣ!?GqwmhEcdp>]Z\E <~G T /Ji+PC).-lZucep]BiwopWjQEQET,ح 1IJzu4[\lUpx* ЊI$Hf8̵xM<0m=j`7A-^ёnnD,}zcK,q vǮȱǪػ I'4_Ls(N&"c$pI>5QY" XT,7:=9%)ayQM, guQEQEQEQEx7ck((((?%F-g|U$xfFn]CL𵼚s,p d:'8PL6Geyf 5ZZ o'|d;xA HR}23zэY#Ѵ+95_xP:"#?SǯrelTiL!*ѯnAX 5j>6]+N0٦9N;+8BS~'_hx%!&c#gE'}4{ȯ+12;OY u} m!Gּge^LY0 ~aZZ̓Og41B՗}ַ'IpDݏ`:)ig%nn\G ۯMI-;ZOƱsQuW؟_HMsj8dZ> Ӊ$F|[c\jEԖy3{s=@r^ k[Ztv9$\=4Ks嵴ʵ5a}mYwg( Ud<618m.ڔڬLҹ u08ǷҶr{ M:ISb.TEsZ|>7d|1d}׎g.c}WqڭxsZb т)\A3m5 Hw_SbgSk>}sl gP\sF㈬gNն#Zzl4H50$;~i j5iO:M͌tlMpC@v[>>ftnb}H;X[~VUT!aG`\>+I}>Qn2$mݫҨ((((k]-QEQEQEQE|A/P1jĻ+DI;Gr!vGQuh]sc 0sqz❮\>Ҽ;gxtrϦI3T[h[:\s]ڲH ^Ft|6EuxoNb Xc9;OzRiwUݠV"yT' ӵb\OxQ.|7y}lBVn}Mvns}=eͬҌ3;gO|7F;]`GnI?nX]Y[̓3IFcazEegss H#* ʻ /exz{%HJBSÑW:ĂgZ@sY*R:HN Ap]4Ö7p\Y_ih*'w<[:|▥w-+lkAjKk#6y9p =pT{Vυu&%҅H=HcuZh;u9,.mGCqZ:x{[Bվqn` exSӓL.mˇr]3S/ A4dL|A`}zՁJuZMiaI^D #緯ݪz6 [MI.# &\9=LmΙWYdi|3z'Үf[Lg v\Wj-ڎ= 翩Y ?"H v.Z)RMii'ڕrFq=x9[u ye!D'}/iȬ++ B +}-sl\ӇRq)/4#KojR6MѦ88x~uA{/c6I(EMPvz=j~)n[KK<)X1UUKK> xktT\HXlM/^Ma6mDs[돡vx{S&->eTdd7sުYjVkks@o1LZ((((+oǿ/qKEQEQEQEQEs_K?Zh((((((((((((((+oǿ/qKEQEQEQEQEs_K?Z]ngF}D$ 5++e!A6yIu(Գ3zҼkڇحec2&'[M/d)2X OQ):\})oMyv!d@=Kis70LD$c - h3\Zia?3u*2 NŪA.>0VcA#[\H2p*H'խWU( 8ck/D񎓭ݛ[g9ؓ.w'R*4 #ݦqK<+GMmu[$̅`V]vKI$Ɋ{?:xMו1gAk(U'Vm ̈́lAz((((((k]-QEQEQEQE|A/P1k=t^ծM*ЕHUZ ʼng3oۓ:Ai,BUx#EkkWw:4Z|1t]fUވѥ6Fpo=Oi:Gvb,z-jfΜ]kWt6I1y0X.ܞMZtY#dq`Ax3hjT\ qc]{[\^LIqqmHVV_ɮvK)Cq"+dH0z\?{e$" \2':*ֻk!:㷞i!f^7r9FxzΣfnq0f7qi%|?eegF=b 3qӽj/Fnƾ|dv#zsWMEQEQEQEQEW5^e(((( ȗ?{eqk)"9hp6Aa;8grI?QEQEQEQEvڭu;ȯa/S9EjEQEQEQEQEQEQEQEQEQEx7ck((((?%F-ty3mWup䲆?/bR}9Ğ!t*.+.U=qԞ7׶2ySWÞWĶT ÁTtcWM䲖3[m= ~ D$HZ:oK]#ĸHdL?lMte:]ۙ`>=0oQETwGmo$0HRǰ&9Ϭi)}<+yZ $9$7[֧KK5:D9_1 A~zoiݾb8O`=Otw*HG_Oj!͞oleIl(pQEQXnCjI\֩;ס4{D53)S냟jߊ[E{H#uޮNxϵV'Gm#YRx S]mBlO#*B>Ók^ݥkxtT.rREQEQEQEQEQEx7ck((((?%F-I FK X\kkp'Z#=nvüAOO<ֿe"W\14hB]8xÇc-t#zucBt qmrԗvz@.kx±ؑgw< θ?yʏY$Oկۓ5ԉHKA\޷\-LiL }HEeЮG[}ƫa`cی`9^s^\fR囕.\ Oo v 5:8K-%Ib^ϗ BMqiah-51$Qw#'-z^aq k?:%au@>eχPl_8N`*/nv (Y$}I}QT7a5ywĞ ]4< O kKj:ڄ-AHUFdjV-Eu u6O9|;G4^Uw/!\%yqJV9/}ci,C}ܤCnFuΑEn}fI9/!s>կ^Y#TPtZI,`׊5y7b8&Awj"] t`;ZaVPxItf f2 _^k/ƥ6z8p;?L FPB3du;ZGӮ<#. us 7 xh>75YN"o0gֵEiKmy37}qE`H*FA s:—[LJ*:0 3\o$ rxUdecܗnN@z(?ޛgAQu~*\i<3fFGW4jzƁiSoծ=aq܁hU_ vD33IԚڱKSK,ʹ:>|uH:] RФP}ASȏhkaTL7`6@+t-I;\[8$`ң?_vZ³'8@#<<<j)Z_[ rr?Euz&ww-TWdK~?>9t+FQonlI5˰dᶀ gn|Z: a# $Q>TOek^=FsH ?UojmēC4byE@W umepT8Yޫ j$6Ix"ɕz75c.>o_m*튖g?6q+X&la8E7þ*׸iX}lN"8; Զ,ЮoF'*' r$/.5kOsyP=_8c*C4`jw&΂irI=sһ*hc4P[w7]6kkWW%[mćlpzU;ο bn \j5è#)\̇~OP hYB>o+eeRrs3筲 Nb}O\׃=a{Z((((+"^lbޥ{pqqҼ\C K jr]g98[Ro|Ne0Ip1~-KUlKq`$Xc8=YiQ*QRvbqu]\ύ/5(47E[#GrFہbYo̰C}f!nF3}޳ũj3խn,~,g}/_ iwŋ\ęx1\>9*q^=ơtQ%9ʖ{+]7↑[@lزơCq/'נU.ct=:ͷ.6~ʧWU ( 1Uu?쿲#iݳ5[I$6}~s;پ^Gp? y{|߸wn?{jzmV-b۬(EL`{ǵlo'P ֓ L|\{,-'Km!xꞣ׊Kyv%g9|p'ՏV?& `O88?@YhKib/#NdRg<ۿ!W#xi.٧9m?^|SܪvJ9z],, v VҺ"m' cs\tgW{\1Ĭ$rpqU4yt;Vt5w_^(Q6>kk1Ib #|5?>g.t'QypHO՞aipJ+m* 1opysVak{㼎)01Öbz_W-X0`pz Yjk^ H[ۛcRP$*YTsGU-'LuM^N|o o1zSZa{\ 65Vɡ[<^nf-8w{ҵލy.ki-XyeÐFI`vv_ xɴ5cSJ!Y ՜xl,rcw-H]@H& ޝȌ`i؎?w'*Kt,q_$CMbW"oǿ/qKEQEQEQEQEs_K?ZUԫea"7O)F;{|*Ƨj d#w~r*K]:vm `ps>ٖ?`$?cι泯%7{ydt@RJi:5A qdI&U{{;kW'Q@.ާ O[Ո8oFsZTwEsαG|6#Mz!٫U T`)hwZ^{ iaV?4yE <4 qY|K$pnG8*k چ Ĝ6FpxkkogkpD5 *jjqbAo4)XEK{v&85OKm>8\$UGM- t%p[yYMm5ݺM%=*b4)'g 2JAЛOkh4uRASM*+UC[UZq銡kG.>gasd,W>'kt 5 mGOmuKLR2\u?9[آѴTd`|gIiekbv[#0^*|-rR:E^ɼ9m(aZDYchP)Տ{]`[+#2>R;NhSZ wIz.(qN@f`=Ri&DžP1,X5bQ6$v>zfc[td2rB}ӣӬԥd(?AAUu/:O}cҮ0qkF"!4$TA#lԥd(?AJ-4;+ktk35=]xm A|9 Q0HP8P8k]-QEQEQEQE|A/P1kfTf :dSjvrmٮX\~[y?1<]r2=) ЊB)ayQE%C˺[+pJ$$dSE<+420ʺ0*G4` AE e$A#JG8uRj8}$EoyR(Vv i 42x+PTB))$ pzS(((((((((k]-QEQEQEQE|A/P1k;2xnث?lNWim7oZmlf(_wO/^k|=5ŷ-&ܤV|(v>v9o4p%x) >|IX9YK]P(l&K6I$dboncMk3w-nh^cxk};N>4ӡȫfůnˡ|'z%]4wVҬ1RQ<bfPT7F\csҙo5\E!nUcT8=8wTQEQEQEQEQEQEQEQEQEW5^e(((( ȗ?C2Kᘌh#W| ]21Sx/ FI]Wh U_GtXy"^WYjw:.ϛs F}?OZ-@XH+𧋣|=o&]\ۗD g9Z2Gw{BԚxb6$O|?0븪j2]X1@f$L? |~6ydTas} kWPIm; bBb%GԜQk?4k}wo%\o$q> ?zDowNCm*~u/<57%4>[bl ߇HkV<),ol۠úBhD6Cԟ_Y[}FEb@$+Gv#x[QY\!Ss.;WWg0eєؼKzGJ )2w!f|m?1W97i.Do} O.H’eg֟EQEQEx7ck((((?%F-KmU M mB!Oq'ed&.OC#=~sk7Εskmo*+6jnp;˻PFTsZumfEץKL#x v\xN&Dy~>oeިOz& 2EqpEl#5[" <1>cRh or;yNi({b]7 >qr;!k8i%nUr,c՛ǧ\}<5rhRqD3({gܝYtD%.1aQ}0#YZ_.-5Tssl*2` q~ ʼng3oۓqUi/Z0guxps57 %¥d,wp&Z$=AO>HԎL?(((k]-QEQEQEQE|A/P1j犴QhنU!ftGX2Z8/-"ah0dNHviwfR` N M[Iץ`kz4O Z[yR_4ǧhzFy%|AC "9דOs׵fxLVcEN\5k~^Դ-J9nXO<ºEi)ʄAjX5Ó-BtΫ"j ]nl p'99W{\I6'ʋi1pGgxw6~V50?'|?^sDoEi]VF1#ʧjm IEo p0CNI'zi jZ6In!Jxxw7zWi"hV)rj^`.;ۛĈC:JPkIo6ZH+ޝEUӼ'K-%,L]f4Qm+yʎ&2WnO;]}qoh͵ŸF~` ιojV Ko;;u$QPд^_VG1Ob{VFon.)׎k1jzgm:.nHaq#]O )ү ڸu`pOyl.ⰰle9.u-tņgx%D%#sۯ^)! H^YeXϛ{er~d>#)mCZ<$$gçZ|Yṵ_i bT9TeNdX$0*IEc[{ PGx#'cb~z#xwzMvZd\''$ǟֶӭz~<Óz!QxKBmG4,29gRH,x<h((1 EQEQEQEQ\gZ(WCoE{ |ž <*+Vcѭ#eǘnDw6U@Nt((((*cc5c +Bf}fd,0%3袊(* dma LFҠ39$(((((1 EQEQEQEQTu2gKHf۸@a A+#/|A hKocG"_0?L> ƏDa4%S?7/|A hKocG"_0?L> ƏDa4%S?7/|A hKocG"_0?L> ƏDa4%S?7/|A hKocG"_0?L> ƏDa4%S?7/|A hKocG"_0?L> ƏDa4%S?7/|A hKocG"_0?L> ƏDa4%S?7/|A hKocG"_0?L> ƏDa4%S?7/|A hKocG"_0?֖C[M \OLӻ8g,@iEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW endstream endobj 14 0 obj 62455 endobj 15 0 obj<>stream x  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ endstream endobj 1 0 obj<>>>/Contents 5 0 R/CropBox[0 0 659 487]/Parent 8 0 R/Rotate 0>> endobj 2 0 obj<>stream xƑ׆0a84i0a80 7s{.=a0u=s*usqsyz /i\4¶Fܖx[^礑R \ >stream x{ܶ8OҤV3~'iu6M&c[׮4dˑ"r,K~@ x@o!`G!9cAyx oO A?7'A ȟx oO A?ĸ ×[x~_uBނ+^[oA-)03[bU[ox D + Bx)J޲S" 'x L b o -pdxc\,= :ϳȳ {e'Mo,oZ[hx+c V[dI$1a!(ySߚ& mrD2+gΦo(⟼O\ y $F :x Z2g7@?o6|[4i5:fioft6fAgsʛF6x_(7o4&7'A7oUBXxSׁ7A?7$pT+7AuxƤyC&M]{fٟ쏭 }"oMobM]G7$qTǓ4&7yC&M]G!k-x To:"Y U.4 hL;1 A?uǛ;!SQlobM]G7+7@? 7: Anox7@?o7&uxcn*o8waL壕 }-o+&/Mq~Zkl*Ū77Ǔ e\ښg#obu7n 4fAgzP/S7:ㅪސAPAr\O8JB^ '.^V?q BKO! AIA B^ '.^V?q BK!F/AxAc7KEO\7/ꥭ0~/oq AIYB^ '.^V?q7x Tox1IV}o4&7@?o:7uxK|o xCT}o4&7yC&M]6s[7u]KbMouc+of7@տyCPLZxx(*_xY5⑷)7@?oV_ޒM,PZ7:ㅪ7HB=x~.z! TCkՉM^ kobƟN)nob! GYS][iVW s›GB766ḿiݿ5勦M򫯾?_.,ObV꼱yƤLε5x451&0i,yc}῏?%w~5ϲ{7R4ye ۯ:{kM?|T~O|O?U^_X.WAe8^Fzv~d7'7iȻ}]<T?9orϗ>]66]ak>?e:7|_ɓ@o4;*c]&UZ?fY d͗N4Y x)kq;]]#{7{܋7::!]Y͖W= ]g(`߼y~}}8}(nnJuVio#e?UxN/xާ7V]se #m씏FǏMUW]f;8QF?@3k~ Rg9Hpe[k]KMz MG;Sy:gQB޿qTu !똷ޛ{6L?zE3o mxuL!/U6~7WU/?p'DF")%\?gLJ3HG7C14پRUSo޺c '?-;kcߺ->%[(L?EjE oz oնgiK8mR xk&w$]>۫4 ^fpxst@ݟUՁ=I2]M+׃_NQ[۳W'BCt[3?|u#ߢ4]$yD 6ooJ~~%4 %G_Gț|[4i5:'4' BgQ-y6^uBW4"L MgLl{+4" :7PtsAM!39~zfG#;87U%:y?6 %GUۃ}x3[t9tG&hR>`2oOW MKhR=57Υ?{q+y$V]ٞ|J/!3چEt'"ǖ?[~?U0ϛ4?U"s47&7PgzSf ml=•bGk&(Ń!Q &sɳboF۠({! ǖ5-/Ovol7x_l?ۀ7m~V㻟moPE/Z%pw?{_5 7s<Ry&7oY^W>[3Orȱo+R5 o&enmh|6ߑ ϗИ[aKz]}f h<oxhv~olxGM.&{޿(V o!R:lb5/'O{nHT[,o|%[w^QIGRUTNH [ldyw{rVe!kf~I}j/o nɓ]:DVʚً_[3x"%?0`Ri6~I5Ӷ뙷g*`O_[BU#Ba7o6,~\^t 6-:? ʱoOv5ofxܔ%d46vyY p쟶5yg*7/;O;$Dv}g)hN+~EdWg*\O o5]G )kLo;N,mmn?"xluNDcpLݿxk0x_A6&y;}=nB&&ByCt1}As2c -?X7&&v0J:aooڛIepLݿx] 1-o=V~pLݿx;U9GuAg*oٓ'1׹я~G|e+ Cz7Qjڈ|^Ƿ>z h@\oKmRg*ʤPګl:&b(K[5~uq{zm \gM?/*U㙺v&]7~׻>lz҆@(Lݿx"2ovtyE PT*o;{y1KzX˟De$?SH0[8?i%LXcj>u'ngǛ<"MSum_^2G7`RM,miIƊ+j,[,0y;'@4"_.7?tO&"c 4"POx8TvvK"Cv5ܾy:[j{B^ڪT m:꼥 xx \ oKζ2oD:ŋX.ZE/*9SAc*/m:*-zi~OxYMU oof<~´୪n2 \]}gnQ8gP*s#tJv·7o 7}:of ."/xK$@|LEp?۔uyKT\5? M'F+yj $LHۇ( Q0"/oe.M8f/^jT:Ɛ}ٜLo׷jm5uTxT[3sNo&VSGr\[3s7 3}v@7yz=BO+#`zMh+=' Vx\`j]y|ϳ=j=]F'e/3{jRhv BO~Ex}zRkoϿpy㟩@7Ǔ>\aJ N6?T,XW,[ݓo梠*!)N ?._=o/^PE0Loc[aofp?"7&*4u୙ۜ痵6Mxkfv7-A f4vD~˒ 3n? m2V$]#[q\+5?~Ff?RGbʟꚷLD5d:WN޲凛՛Y*#1~3F[6B8R>SwG𶇛Bm긟#ޮO߭FȞ|uoZ\QgofM-\ +]sl[6}xkf뜷D??-];G6}xkf[8fh_-5D-*]#}7s U$+^}Z z c-9U5?~Ff߄8~Ŵc?j XRybEV3x3+(ޤ9~ŴR={+ S?979Qs#j4NP7x{/WD`MԿAfV`(Et5~Ŵ#bvU7sEF!6Flg*jm:F7:gwD>fS"O8m?2,/.4~40u˟0r&u7sEl4/2-mKt\ޚ٨VWnm:Fxw?"'4޸sXm_W &pLZsĄe44n*VMxFY ].x= Te6"!XԀ7㚛"o6Rs8~ٴ77dތ{6ۣǏ=7Xl/v0o)Z <6{X>q_x+ϛߝecI[֐?lwlrw/}yk\FH:"]'7ȣҟ7U\%O5oUz=__K]qBWު/yxx3k,%T/oH [9$vqx*vAKx+7@?¼ 7wuݣ297:x3Y'ׄ7n+o[77h'[ ]ak_fdfovNA7mk6~.x7:ۊF7~?f)^ڊ^:o_e BByW~ޠAQH]+? 7ob7Vi_x  TX}on? x«NTERfʫTx [g]Q+ Isܩ۵mޠd:v&4A&7ݞ x>ܼxxLק|G7r+@}yhn^ ,yc?ԛm7u*KNLyC&7]l^x )"xoxxL,zu?*Ast۹#Zsp:pgO AÓoW}Doސ .[b^lb7~^ofeoft6K_X^fyX]^L rZlo}dNwZڿk~DEov k"K*je1/bbw%oIM_w9O~.'I`VyW]Mqbm`7u)?OĭvkǛβv/JB9 [aYXg{7[H̞MI{Eep|vkE?09=ቼU+ooo eF%A^\s.?ޓx6DMܧq Q%WUE6m+ߞ2$!Fh{i!|JaCB<].wZ~.b2丕J[P32"߆lUl}}cHl#|o >Cм~y,_Y)9X5W^^pJ|"&04[˷يb^XL6|my͵kg|O?aPԥMLEI>0bmOA+[t:ɿ%uqw^Ѝ\o"/rʞ޿te/C?]nIc'6ŒFC7rx =V)4vjmZ5rA ?p۴kW፱*o ֣Vf;ƒ7[v 9xoٝϓHuRn_#C4nlիFq7YVyĂJDZe&I]A=[t6E1䥭HrIsOaob-zƿy˯8 )MWE|*׻-mw7ȳL"A-~.y)鴋B<7@տo6ݝ/Ѵkhobm,󦲁7@տvVP<jldyneȫzoAa,-›Uo1i.6r՛˷#!3y?6n]V%0ΗP♺|6xSXpy^Oq/%Y kbC6x/}P6y( ޠKәvΆ{AyYsŻk=~M/ -vt&7Ty&,抷 AJ{Fo^V-DB='AJlzھby=l>l}'v1K:x32~/aϛI&7hN3g}hcV ϳx Z:oц[P7bx)]ͷħM{6ƺ AJ5";7@տAoBr_Z  䊷6ix zfeoft~/7V6V'oPEQw"kޠ =v6xnP 7obibm󝿁7fciW?W bmoi\jS}W]?hޠUg[WnΗ8:Ғ7QPm^M Q& Xy< SRVy[m[M4pZLXF[Sl&oW5_7h\ D "E7xnu:pśN}M,Po0[mGMq~7&oVxw1~Mp"!oG7/e<;~4JUCr' zśkjy/7@տAo")4UoM.0y4筮7 x +#;! gY5x77h<I[ 7+5~dK[-Aorp Z OYGa<=7:x3WcQur_&x (( owoxŰ>'!Pw,cJ7;7:[wƟ0liuoob- ӫκ)x8ˑS5 8^*ޠsE1\9h>@l^(jp߼! T~ S5[fxx TouWPX[m)oGncbE߼Am]um͚] YU+uޠQWvo c*6.qD\Ix;)xчt8'Q Nsv =| 4;~]vMylM,PoL[iĕo୲6Wo+ }`yN̑Tx bbe^mܮxF2t_oC;D\~Z(ʻЛ;F ڐ}(/X劷-?xep ,mEgofkl'XHys_ o,xks< U~fqyVlMhgٟӐ>5Z| qEօ㍚s*ިE-oLXrG߿jÅs$}Z`焰c|S`7^ ] 9EHX|Eq-wR5vѼJLc]#cղ[}PQNh-'ԱLE-o4|d/qfj>*xu!o$BX⢎7">AB9AUņǓ4HwVZB)Ǔraīy,"pPݵd.Jk)X{sƋ=( ]{h!hLoO A?7'A ȟxS+ZmZ^W%k=dk؍=7XebV[[klv1wC]6 ,b=KY.ﭳ'?ݮv cV<.;_ǯ.+|I, n<|xca8i!Ö_;I㨎 ƅ-/2f-E+)zʗ\LQrc}d Jb5xS+i\E_Fd]~~iG1ckwkqExK˸˾)-+f޳Ew&޲gFݐ[_k:xQپ! 5E2oyVt+!co"Ltdv~*olX-xYe\6vd9Yi|cHVG.ZGOŻMuwYu7\cø K1ɼ݋sɕ|3E|âl4cn%<+H8dmGމKo9.$nGɟto{ ,ILߺPyĻIɕ|3EBül,Kr{lW5O݉5؍{B^M4 e-s^|^֤(`L g~ oˠ^Oܑ\6eül.qXtTK?[Q-5' NOO e%w.#uAvfABE/ay^[[\ܑϗEޕr3ט5,V%Ycld.n|wX|a^q/I''ﲻRlpmwRo̴&]X_̻Rn3 [AɾlƲ淓"}ⷳ"P݈ Z嶇_I<;6e\v7f|-.KflnHrL;߰(ן/Inv& lRZumN'gIuoO HL>| A ȟx oO A?7'A ȟA P7A^ b endstream endobj 5 0 obj<>stream x+233PA s=3s CD'r{*sr endstream endobj 6 0 obj<> endobj 7 0 obj<> endobj 8 0 obj<> endobj xref 0 9 0000000000 65535 f 0000064040 00000 n 0000064213 00000 n 0000064514 00000 n 0000064535 00000 n 0000078975 00000 n 0000079085 00000 n 0000079291 00000 n 0000079349 00000 n trailer<]>> startxref 173 %%EOF Xformers/GLOBAL.BAS0000755000000000000000000001321011346367214011047 0ustar Attribute VB_Name = "Global" Option Explicit Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Public Const SW_SHOWNORMAL = 1 Type MuVsB Mu As Single B As Single End Type Dim TbMu() As MuVsB Type section Ratio As Integer Wires As Integer End Type Dim Sections() As section Type Winding Id As Integer Name As String Volts As Integer Amps As Integer Sections() As section ' Wires As Integer End Type Dim Windings() As Winding Global NbWinding As Integer Type Bobin Id As Integer Name As String W As Integer H As Integer End Type Dim Bobins() As Bobin Global Fichier As String Global Changed As Boolean Global T As Single Global Tmax As Single Global SPVolt As Single Global CoreTbl() Global CoreData As String 'Le nom du fichier Global CoreChanged As Boolean Public Sub FillTbMu() Dim S As String Dim T As String Dim I As Integer Dim J As Integer Tmax = Val(GetIniString(CoreData, "GENERAL", "MaxB")) If Tmax = 0 Then Tmax = 1.25 S = GetKeysInSection(CoreData, "PERM") I = 1 T = Substring(S, I, ",") Do While Len(T) ReDim Preserve TbMu(J + 1) TbMu(J).B = Val(T) TbMu(J).Mu = Val(GetIniString(CoreData, "PERM", T)) I = I + 1 J = J + 1 T = Substring(S, I, ",") Loop End Sub Public Function Extrapol(X As Single) As Single Dim I As Integer Dim NX As Single Dim PX As Single Dim NY As Single Dim PY As Single For I = LBound(TbMu) To UBound(TbMu) If TbMu(I).B >= X Then 'Trouv ou trop loin NX = TbMu(I).B PX = NX NY = TbMu(I).Mu PY = NY If I > LBound(TbMu) Then 'Il y a un prcdent PX = TbMu(I - 1).B PY = TbMu(I - 1).Mu End If Extrapol = PY + ((NY - PY) / ((NX - PX) / (X - PX))) Exit Function 'Ca baigne ! End If Next I Extrapol = TbMu(I - 2).Mu 'X trop grand,on renvoie le plafond ! End Function Public Function SpawnObject(Fichier As String) Dim X As Long If FileExists(Fichier) Then X = ShellExecute(0, "Open", Fichier, "", App.Path, SW_SHOWNORMAL) DoEvents End If End Function Function AskForSave() As Boolean If Len(Fichier) = 0 Then AskForSave = True Exit Function End If If Changed Then Select Case MsgBox("Save current project ?", vbYesNoCancel + vbDefaultButton1 + vbQuestion, Fichier) Case vbYes Enregistrer Fichier = "" AskForSave = True Case vbNo Changed = False AskForSave = True Fichier = "" Case Else AskForSave = False End Select Else AskForSave = True Fichier = "" End If End Function Public Sub Enregistrer() Dim I As Integer Dim S As String WUnlock If Len(Fichier) = 0 Then S = GetIniString(INIFILE, "GLOBAL", "Mru") Fichier = GetFileSpecs(CmDlg, GetPath(S), "New.mox", "Save as ...", "Save") If Len(Fichier) = 0 Then ShowCaption Exit Sub End If End If If FileExists(Fichier) Then If MsgBox("Overwrite " & Fichier, vbYesNo + vbQuestion) = vbNo Then S = GetIniString(INIFILE, "GLOBAL", "Mru") Fichier = GetFileSpecs(CmDlg, GetPath(S), "New.mox", "Save as ...", "Save") If Len(Fichier) = 0 Then ShowCaption Exit Sub Else Exit Sub End If End If End If Changed = False ShowCaption WriteIniString INIFILE, "GLOBAL", "Mru", Fichier Save (Fichier) End Sub Function GetCoreData(Min) As Single 'Retourne section rlle du noyau trouv Dim S As String Dim I As Integer Dim X WriteIniString INIFILE, "GLOBAL", "DataBase", Database LbFeSect.Caption = "?" LbFeMasse.Caption = "?" LbSectCuMax = "?" LbTrueFeLoss.Caption = "?" Hcu = 0 Lcu = 0 If CoreFixed And Len(LbNoyau.Caption) <> 0 Then S = GetIniString(App.Path & "\core.tbx", "EI", LbNoyau.Caption) Else TrieTableau CoreTbl, 2, 2 'Selon le poids du fer For I = 1 To UBound(CoreTbl, 1) X = CoreTbl(I, 1) LbNoyau.Caption = CoreTbl(I, 0) If X >= Min Then Exit For End If Next I S = GetIniString(App.Path & "\core.tbx", "EI", LbNoyau.Caption) End If Hcu = Substring(S, 4, ",") Lcu = Substring(S, 5, ",") LbFeSect.Caption = Substring(S, 1, ",") FeSect = Substring(S, 1, ",") GetCoreData = FeSect LbFeMasse.Caption = Substring(S, 2, ",") LbSectCuMax = Hcu LSpMoy = Substring(S, 6, ",") FeLen = Substring(S, 3, ",") LbMPL.Caption = FeLen FillTbMu End Function Sub Ouvrir(Check As Boolean) Dim I As Integer Dim S As String Dim Last As String WUnlock Last = GetIniString(INIFILE, "GLOBAL", "Mru") If Check Then If Not AskForSave Then Exit Sub End If If Len(Fichier) = 0 Then Fichier = GetFileSpecs(CmDlg, GetPath(Last), GetFname(Last), "Open project", "Open") If Len(Fichier) = 0 Then Fichier = Last ShowCaption Exit Sub End If End If AllowCompute = False WriteIniString INIFILE, "GLOBAL", "Mru", Fichier ShowCaption Restore Fichier End Sub Sub Compute() End Sub Xformers/M6x.dat0000755000000000000000000000040011346367215010722 0ustar ; Core data for M6x [GENERAL] ; Max allowed induction (in Tesla) MaxB=1.6 [PERM] ; B=MU ;0=2000 0=300 0.05=8000 0.2=20000 0.8=26000 1.5=4000 1.8=1900 2=500 ;S = "2000,0,8000,.05,20000,.2,26000,.8,4000,1.5,1900,1.8,500,2" 'From Sample1 Xformers/Main.frm0000755000000000000000000012136611346367216011170 0ustar VERSION 5.00 Begin VB.Form Main BackColor = &H00004000& BorderStyle = 1 'Fixed Single ClientHeight = 8100 ClientLeft = 150 ClientTop = 720 ClientWidth = 11250 LinkTopic = "Form1" MaxButton = 0 'False ScaleHeight = 8100 ScaleWidth = 11250 StartUpPosition = 3 'Windows Default Begin VB.TextBox Text2 Height = 285 Left = 1440 TabIndex = 60 Text = "Text2" Top = 2400 Width = 735 End Begin VB.CommandButton BtAddWinding Caption = "Add Winding" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 255 Left = 1080 TabIndex = 36 Top = 1920 Width = 1335 End Begin VB.Frame FrmWinding BackColor = &H000080FF& BorderStyle = 0 'None Caption = "Primary" Height = 495 Index = 0 Left = 3480 TabIndex = 35 Top = 600 Width = 7695 Begin VB.TextBox TxDia Alignment = 1 'Right Justify BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 285 Index = 0 Left = 1560 TabIndex = 52 Text = "9999" Top = 120 Width = 615 End Begin VB.TextBox TxTurns Alignment = 1 'Right Justify BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 285 Index = 0 Left = 2280 TabIndex = 46 Text = "9999" Top = 120 Width = 615 End Begin VB.TextBox TxAmps Alignment = 1 'Right Justify BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 285 Index = 0 Left = 840 TabIndex = 45 Text = "9999" Top = 120 Width = 615 End Begin VB.TextBox TxVolts Alignment = 1 'Right Justify BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 285 Index = 0 Left = 120 TabIndex = 42 Text = "9999" Top = 120 Width = 615 End Begin VB.Label LbHeight Alignment = 1 'Right Justify BackStyle = 0 'Transparent Caption = "9999" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 255 Index = 0 Left = 6600 TabIndex = 59 Top = 165 Width = 495 End Begin VB.Label LbLayers Alignment = 1 'Right Justify BackStyle = 0 'Transparent Caption = "9999" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 255 Index = 0 Left = 5760 TabIndex = 56 Top = 165 Width = 495 End Begin VB.Label LbLenght Alignment = 1 'Right Justify BackStyle = 0 'Transparent Caption = "9999" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 255 Index = 0 Left = 4680 TabIndex = 55 Top = 160 Width = 495 End Begin VB.Label LbRealV Alignment = 1 'Right Justify BackStyle = 0 'Transparent Caption = "9999" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 255 Index = 0 Left = 3840 TabIndex = 54 Top = 165 Width = 495 End Begin VB.Label LbOhms Alignment = 1 'Right Justify BackStyle = 0 'Transparent Caption = "9999" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 255 Index = 0 Left = 3120 TabIndex = 53 Top = 160 Width = 495 End End Begin VB.Frame FrmCore BackColor = &H00808080& Caption = "Core" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 4095 Left = 120 TabIndex = 10 Top = 3840 Width = 2775 Begin VB.ComboBox CbSteel BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 315 Left = 1200 TabIndex = 40 Text = "Steel" Top = 2400 Width = 1215 End Begin VB.TextBox Text1 Alignment = 2 'Center BackColor = &H00FFFFFF& BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 285 Left = 1680 TabIndex = 38 Top = 3720 Width = 555 End Begin VB.ComboBox CbCore BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 315 Left = 1200 TabIndex = 33 Text = "Cores" Top = 240 Width = 1215 End Begin VB.TextBox TxSectFer Alignment = 2 'Center BackColor = &H00E0E0E0& Enabled = 0 'False BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 285 Left = 1560 TabIndex = 19 Top = 720 Width = 800 End Begin VB.TextBox TxFeKg Alignment = 2 'Center BackColor = &H00E0E0E0& Enabled = 0 'False BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 285 Left = 1560 TabIndex = 18 Top = 960 Width = 800 End Begin VB.TextBox TxFeLen Alignment = 2 'Center BackColor = &H00E0E0E0& Enabled = 0 'False BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 285 Left = 1560 TabIndex = 17 Top = 1200 Width = 800 End Begin VB.TextBox TxCuH Alignment = 2 'Center BackColor = &H00E0E0E0& Enabled = 0 'False BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 285 Left = 1560 TabIndex = 16 Top = 1440 Width = 800 End Begin VB.TextBox TxCuW Alignment = 2 'Center BackColor = &H00E0E0E0& Enabled = 0 'False BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 285 Left = 1560 TabIndex = 15 Top = 1680 Width = 800 End Begin VB.TextBox TxCuMLen Alignment = 2 'Center BackColor = &H00E0E0E0& Enabled = 0 'False BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 285 Left = 1560 TabIndex = 14 Top = 1920 Width = 800 End Begin VB.CommandButton BtNewCore Caption = "Create" Height = 255 Left = 120 TabIndex = 13 Top = 3000 Width = 800 End Begin VB.CommandButton BtEditCore Caption = "Edit" Height = 255 Left = 120 TabIndex = 12 Top = 3360 Width = 800 End Begin VB.CommandButton BtDeleteCore Caption = "Delete" Height = 255 Left = 120 TabIndex = 11 Top = 3720 Width = 800 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Steel Grade" Height = 195 Index = 11 Left = 240 TabIndex = 41 Top = 2450 Width = 840 End Begin VB.Label Label2 BackStyle = 0 'Transparent Caption = "mm" Height = 255 Index = 6 Left = 2280 TabIndex = 39 Top = 3810 Width = 495 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Gap" Height = 195 Index = 10 Left = 1320 TabIndex = 37 Top = 3810 Width = 300 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Type / Name" Height = 195 Index = 9 Left = 240 TabIndex = 32 Top = 330 Width = 945 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "AFe" Height = 195 Index = 5 Left = 240 TabIndex = 31 Top = 720 Width = 285 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "mFe" Height = 195 Index = 3 Left = 240 TabIndex = 30 Top = 960 Width = 300 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "MPL" Height = 195 Index = 4 Left = 240 TabIndex = 29 Top = 1200 Width = 330 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Bobbin height" Height = 195 Index = 6 Left = 240 TabIndex = 28 Top = 1440 Width = 975 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Bobbin width" Height = 195 Index = 7 Left = 240 TabIndex = 27 Top = 1680 Width = 915 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Mean turn length" Height = 195 Index = 8 Left = 240 TabIndex = 26 Top = 1920 Width = 1200 End Begin VB.Label Label2 BackStyle = 0 'Transparent Caption = "cm" Height = 255 Index = 0 Left = 2400 TabIndex = 25 Top = 720 Width = 495 End Begin VB.Label Label2 BackStyle = 0 'Transparent Caption = "Kg" Height = 255 Index = 1 Left = 2400 TabIndex = 24 Top = 960 Width = 495 End Begin VB.Label Label2 BackStyle = 0 'Transparent Caption = "cm" Height = 255 Index = 2 Left = 2400 TabIndex = 23 Top = 1200 Width = 495 End Begin VB.Label Label2 BackStyle = 0 'Transparent Caption = "mm" Height = 255 Index = 3 Left = 2400 TabIndex = 22 Top = 1440 Width = 495 End Begin VB.Label Label2 BackStyle = 0 'Transparent Caption = "mm" Height = 255 Index = 4 Left = 2400 TabIndex = 21 Top = 1680 Width = 495 End Begin VB.Label Label2 BackStyle = 0 'Transparent Caption = "cm" Height = 255 Index = 5 Left = 2400 TabIndex = 20 Top = 1920 Width = 495 End End Begin VB.Frame FrmGlobal BackColor = &H00008000& Caption = "Global Specs" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 1575 Left = 120 TabIndex = 0 Top = 120 Width = 2775 Begin VB.TextBox TPowerG Alignment = 2 'Center BackColor = &H00C0FFC0& BeginProperty Font Name = "Microsoft Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 285 Left = 1800 TabIndex = 6 Text = "20" Top = 1080 Width = 735 End Begin VB.TextBox TIndG Alignment = 2 'Center BackColor = &H00C0FFC0& BeginProperty Font Name = "Microsoft Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 285 Left = 1800 TabIndex = 5 Text = "1.2" Top = 720 Width = 735 End Begin VB.TextBox TFreqG Alignment = 2 'Center BackColor = &H00C0FFC0& BeginProperty Font Name = "Microsoft Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 285 Left = 1800 TabIndex = 4 Text = "50" Top = 360 Width = 735 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Power (Watt)" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 195 Index = 2 Left = 120 TabIndex = 3 Top = 1080 Width = 1125 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Frequency (Hz)" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 195 Index = 1 Left = 120 TabIndex = 2 Top = 360 Width = 1305 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Induction (Tesla)" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 195 Index = 0 Left = 120 TabIndex = 1 Top = 720 Width = 1455 End End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Height" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 195 Index = 20 Left = 10080 TabIndex = 58 Top = 240 Width = 570 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Layers" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 195 Index = 19 Left = 9120 TabIndex = 57 Top = 240 Width = 570 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Lenght" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 195 Index = 18 Left = 8160 TabIndex = 51 Top = 240 Width = 600 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Real V" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 195 Index = 17 Left = 7320 TabIndex = 50 Top = 240 Width = 585 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Ohms" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 195 Index = 16 Left = 6600 TabIndex = 49 Top = 240 Width = 480 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Dia" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 195 Index = 15 Left = 5160 TabIndex = 48 Top = 240 Width = 300 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Turns" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 195 Index = 14 Left = 5760 TabIndex = 47 Top = 240 Width = 495 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Amps" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 195 Index = 13 Left = 4320 TabIndex = 44 Top = 240 Width = 465 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Volts" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 195 Index = 12 Left = 3600 TabIndex = 43 Top = 240 Width = 435 End Begin VB.Label Label3 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Bobin" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 195 Left = 240 TabIndex = 34 Top = 1800 Width = 495 End Begin VB.Label LbWinding BackColor = &H000080FF& Height = 735 Index = 0 Left = 240 TabIndex = 9 Top = 2880 Width = 2535 End Begin VB.Label LbBobH AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "H (mm)" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 195 Left = 2520 TabIndex = 8 Top = 1920 Width = 600 End Begin VB.Label LbBobW AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "W (mm)" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 195 Left = 240 TabIndex = 7 Top = 2040 Width = 645 End Begin VB.Line Lbobin BorderColor = &H00FFFFFF& BorderWidth = 3 Index = 2 X1 = 2880 X2 = 120 Y1 = 3720 Y2 = 3720 End Begin VB.Line Lbobin BorderColor = &H00FFFFFF& BorderWidth = 3 Index = 1 X1 = 2880 X2 = 2880 Y1 = 2280 Y2 = 3720 End Begin VB.Line Lbobin BorderColor = &H00FFFFFF& BorderWidth = 3 Index = 0 X1 = 120 X2 = 120 Y1 = 2280 Y2 = 3720 End Begin VB.Menu MnuProject Caption = "Project" Begin VB.Menu MnuNew Caption = "New" Begin VB.Menu MnuPower Caption = "Power" End Begin VB.Menu MnuOutput Caption = "Output" End End Begin VB.Menu MnuOpen Caption = "Open" End Begin VB.Menu MnuSaveAs Caption = "Save as ..." End Begin VB.Menu MnuSave Caption = "Save" End End End Attribute VB_Name = "Main" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit Sub FillCbSteel() Dim S As String Dim T As String Dim I As Integer S = GetFileListe(App.Path & "\*.dat") CbSteel.Clear I = 1 T = Substring(S, I, ",") Do While Len(T) CbSteel.AddItem Substring(T, 1, ".") I = I + 1 T = Substring(S, I, ",") Loop CbSteel.ListIndex = 0 End Sub Private Function FillCoreTbl() Dim S As String Dim T As String Dim L As Integer Dim C As Integer Dim I As Integer Dim J As Integer S = GetKeysInSection(App.Path & "\core.tbx", "EI") L = CountStrings(S, ",") 'Compte les entres T = GetIniString(App.Path & "\Core.tbx", "EI", Substring(S, 1, ",")) 'Lit la premire entre C = 1 + CountStrings(T, ",") 'Compte les lments ReDim CoreTbl(L, C) 'Dimensionne le tableau For I = 1 To L 'Rempli le tableau J = 0 CoreTbl(I, J) = Substring(S, I, ",") T = GetIniString(App.Path & "\Core.tbx", "EI", Substring(S, I, ",")) For J = 1 To C CoreTbl(I, J) = Val(Substring(T, J, ",")) Next J Next I End Function Private Sub FillLstCore(Order As Boolean) Dim Col As Integer Dim I As Integer Dim TC As Boolean TC = Changed If Order Then TrieTableau CoreTbl, 1, 2 Else TrieTableau CoreTbl, 0, 1 End If CbCore.Clear For I = 1 To UBound(CoreTbl, 1) CbCore.AddItem CoreTbl(I, 0) Next I CbCore.ListIndex = 0 Changed = TC End Sub Private Sub SaveCore() WriteIniString App.Path & "\Core.tbx", "EI", TxName.Text, TxSectFer.Text & "," & TxFeKg.Text & "," & TxFeLen.Text & "," & TxCuH.Text _ & "," & TxCuW.Text & "," & TxCuMLen.Text CoreChanged = False End Sub Private Sub ClearCore() ' TxName.Text = "" TxSectFer.Text = "" TxFeKg.Text = "" TxFeLen.Text = "" TxCuH.Text = "" TxCuW.Text = "" TxCuMLen.Text = "" TxName.SetFocus CoreChanged = False End Sub Private Sub FillCore(CoreName As String) Dim S As String S = CoreName & "," & GetIniString(App.Path & "\Core.tbx", "EI", CoreName) ' TxName.Text = Substring(S, 1, ",") TxSectFer.Text = Substring(S, 2, ",") TxFeKg.Text = Substring(S, 3, ",") TxFeLen.Text = Substring(S, 4, ",") TxCuH.Text = Substring(S, 5, ",") LbBobH.Caption = TxCuH.Text & " mm" TxCuW.Text = Substring(S, 6, ",") LbBobW.Caption = TxCuW.Text & " mm" TxCuMLen = Substring(S, 7, ",") CoreChanged = False End Sub 'Private Sub Refresh(Core As String) 'Dim S As String ' ' S = Core & "," & GetIniString(App.Path & "\Core.tbx", "EI", Core) ' FillCore S 'End Sub Private Sub BtCore_Click() AddCore.Show AddCore.Top = Me.Top + BtCore.Top AddCore.Left = Me.Left + BtCore.Left End Sub Private Sub BtAddWinding_Click() NewWinding End Sub Private Sub CbCore_Click() FillCore CbCore.Text End Sub Private Sub CbSteel_Click() CoreData = App.Path & "\" & CbSteel.Text & ".dat" End Sub Private Sub Form_Load() FillCoreTbl FillLstCore (True) FillCbSteel End Sub Private Sub MnuOutput_Click() NewOutput End Sub Private Sub MnuPower_Click() NewPower End Sub Sub NewPower() AskForSave FrmGlobal.Visible = True TPowerG.Text = "0" FrmGlobal.Height = 100 Caption = "New Power" Tmax = 1.5 ShowBobin True End Sub Sub NewOutput() AskForSave FrmGlobal.Visible = True TPowerG.Text = "0" FrmGlobal.Height = 100 Caption = "New Output" ShowBobin True End Sub Sub ShowBobin(Show As Boolean) Dim I As Integer For I = 0 To 2 Lbobin(I).Visible = Show Next I LbBobH.Visible = Show LbBobW.Visible = Show End Sub Private Sub TFreqG_KeyPress(KeyAscii As Integer) Dim CC As Control Set CC = TFreqG IncDec CC, KeyAscii, 5, "###0" End Sub Sub IncDec(CControl As Control, key As Integer, Step As Single, Sf As String) Dim Value As Single Value = Val(CControl.Text) CControl.Tag = CControl.Text Select Case Chr(key) Case "+" Value = Value + Step CControl.Text = Format(Value, Sf) key = 0 Case "-" If Value >= Step Then Value = Value - Step CControl.Text = Format(Value, Sf) key = 0 End Select End Sub Private Sub TIndG_Change() Dim Value As Single Value = Val(TIndG.Text) If Value > 0 And Value <= Tmax Then TIndG.ForeColor = vbBlack Compute Else Beep TIndG.Text = TIndG.Tag ' If Value > Tmax Then TIndG.Text = Format(Tmax, "0.00") TIndG.ForeColor = vbRed End If End Sub Private Sub TIndG_KeyPress(KeyAscii As Integer) Dim CC As Control Set CC = TIndG IncDec CC, KeyAscii, 0.01, "0.00" End Sub Private Sub TPowerG_KeyPress(KeyAscii As Integer) Dim CC As Control Set CC = TPowerG IncDec CC, KeyAscii, 1, "##0" End Sub Private Sub NewWinding() If NbWinding <= 8 Then NbWinding = NbWinding + 1 Load FrmWinding(NbWinding) With FrmWinding(NbWinding) .Top = FrmWinding(NbWinding - 1).Top + FrmWinding(NbWinding - 1).Height If (NbWinding Mod 2) And 1 = 1 Then 'Odd .BackColor = &H80C0FF End If .Visible = True End With Load TxVolts(NbWinding) TxVolts(NbWinding).Top = 2000 'TxVolts(NbWinding - 1).Top + FrmWinding(0).Height ' TxVolts(NbWinding).Container = FrmWinding(NbWinding) TxVolts(NbWinding).Visible = True TxVolts(NbWinding).ZOrder Load TxAmps(NbWinding) Load TxDia(NbWinding) Load TxTurns(NbWinding) Load LbOhms(NbWinding) Load LbRealV(NbWinding) Load LbLenght(NbWinding) Load LbLayers(NbWinding) Load LbHeight(NbWinding) End If End Sub Xformers/Std.dat0000755000000000000000000000030211346367217011005 0ustar ; Core data for standard lamination [GENERAL] ; Max allowed induction (in Tesla) MaxB=1.2 [PERM] ; B=MU 0=500 0.27=3600 0.55=5100 0.82=5400 1.1=4600 1.37=3500 1.5=1000 2=100 Xformers/TOOLS.BAS0000755000000000000000000011373611346367220011022 0ustar Attribute VB_Name = "TOOLS" 'History ' 16/08/00 Y.M. Added PlaySound Option Explicit Dim Rstring As String * 1024 Global Manquants As String Global GereManque As Boolean Global DureeMsg As Integer Global NivTrace As Integer Global FicTrace As String Global F_INI As String Global INIFILE As String Public Const HFILE_ERROR = -1 Dim S As String Dim Chronos(10) As Long Global Pass As Boolean Private Type LUID UsedPart As Long IgnoredForNowHigh32BitPart As Long End Type Private Type TOKEN_PRIVILEGES PrivilegeCount As Long TheLuid As LUID Attributes As Long End Type Private Const EWX_SHUTDOWN As Long = 1 Private Const EWX_FORCE As Long = 4 Private Const EWX_REBOOT = 2 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Declare Function ExitWindowsEx Lib "User32" ( _ ByVal dwOptions As Long, ByVal dwReserved As Long) As Long Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long Declare Function GetHandleInformation Lib "kernel32" (ByVal hObject As Long, lpdwFlags As Long) As Boolean Declare Function GetTickCount Lib "kernel32" () As Long Declare Function GetActiveWindow Lib "kernel32" () As Integer Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal SName As String, KName As Any, SString As Any, ByVal FName As String) As Integer Declare Function GetProfileString Lib "kernel32" (ByVal lpAppName As String, lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer) As Integer Declare Function lopen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long Declare Function lread Lib "kernel32" Alias "_lread" (ByVal hFile As Long, lpBuffer As Any, ByVal wBytes As Long) As Long Declare Function lclose Lib "kernel32" Alias "_lclose" (ByVal hFile As Long) As Long Declare Function hread Lib "kernel32" Alias "_hread" (ByVal hFile As Long, lpBuffer As Any, ByVal lBytes As Long) As Long Declare Function LocalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal wBytes As Long) As Long Declare Function LocalFree Lib "kernel32" (ByVal hMem As Long) As Long Declare Function GetProcessVersion Lib "kernel32" (ByVal hModule As Long) As Long Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As Single) As Long Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Declare Function PostMessage Lib "User32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParams As Long, ByVal lParam As Long) As Long Declare Function IsWindow Lib "User32" (ByVal hWnd As Long) As Long Declare Function GetCurrentProcess Lib "kernel32" () As Long Declare Function OpenProcessToken Lib "advapi32" ( _ ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, _ TokenHandle As Long) As Long Declare Function LookupPrivilegeValue Lib "advapi32" _ Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, _ ByVal lpName As String, lpLuid As LUID) As Long Declare Function AdjustTokenPrivileges Lib "advapi32" ( _ ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, _ NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, _ PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long Public Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long Public Const SND_ASYNC = &H1 ' play asynchronously Type RingBuffer B As String * 32000 Nb As Long Wp As Long Rp As Long End Type Sub ForceLignes(Fichier As String, MaxLignes As Integer, NbLignes As Integer) ' Si plus de MaxLignes, ne garde que les Nblignes dernires lignes du fichier texte Dim Fs As Integer Dim Fo As Integer Dim L As String Dim I As Integer Dim Temp As String If Not FileExists(Fichier) Then Exit Sub If MaxLignes <= NbLignes Then MaxLignes = NbLignes * 2 Fs = FreeFile Open Fichier For Input As Fs Do While Not EOF(Fs) Line Input #Fs, L I = I + 1 'Compte les lignes Loop If I > MaxLignes Then Seek #Fs, 1 'Rewind I = I - NbLignes 'Nombre de lignes supprimer For NbLignes = 1 To I Line Input #Fs, L Next NbLignes Fo = FreeFile Temp = App.Path & "\" & Format(Now, "ddhhmmss") & "." & Format(Fo, "000") Open Temp For Output As Fo Do While Not EOF(Fs) Line Input #Fs, L Print #Fo, L Loop Close Fs Close Fo Kill Fichier Name Temp As Fichier Else Close Fs End If End Sub Function WriteRb(RB As RingBuffer, C As String) As Long ' Ecrit un caractre dans buffer. ' Retourne le nombre de caractres en attente ou 0 si buffer plein With RB If .Nb < 32000 Then .Nb = .Nb + 1 If .Wp > 32000 Then .Wp = 0 .Wp = .Wp + 1 Mid(.B, .Wp, 1) = C WriteRb = .Nb End If End With End Function Function ReadRb(RB As RingBuffer, N As Integer) As String 'Retourne les N caractres suivants du buffer Dim NN As Integer With RB If N > .Nb Then N = .Nb If .Nb Then .Nb = .Nb - N If .Rp + N > 32000 Then 'On va wrapper avant NN = 32000 - .Rp ReadRb = Mid(.B, .Rp, NN) .Rp = 1 End If N = N - NN ReadRb = ReadRb & Mid(.B, .Rp, N) .Rp = .Rp + N End If End With End Function Function ShowRb(RB As RingBuffer, N As Integer) As String 'Montre les N caractres suivants du buffer sans les retirer Dim Tp As Long 'Pointeur temporaire With RB If N > .Nb Then N = .Nb If .Nb Then Tp = .Rp Do While N > 0 If Tp > 32000 Then Tp = 0 Tp = Tp + 1 ShowRb = ShowRb & Mid(.B, Tp, 1) N = N - 1 Loop End If End With End Function Sub ClearRb(RB As RingBuffer) 'Rinitialse le buffer With RB .Nb = 0 .Wp = 1 .Rp = 1 End With End Sub Sub OpenSection(section As String) S = "[" & UCase(Trim$(section)) & "]" & Chr$(13) & Chr$(10) End Sub Sub AddKey(key As String, Value As String) S = S & Trim$(key) & "=" & Trim$(Value) & Chr$(13) & Chr$(10) End Sub Sub CloseSection(FicNum As Integer) Print #FicNum, S End Sub Function GetFname(FullPath As String) As String 'Retourne le nom du fichier sans le chemin Dim I As Integer Dim J As Integer Dim Sep As String Sep = "\" 'Assume Windows style If InStr(FullPath, "/") Then Sep = "/" 'Set Unix style Do J = InStr(I + 1, FullPath, Sep) If J = 0 Then Exit Do I = J Loop GetFname = Right$(FullPath, Len(FullPath) - I) End Function Function GetParams(section As String, Cle As String) As String Dim S As String Dim Substitute As String S = GetIniString(F_INI, section, Cle) If Len(S) Then GetParams = S Substitute = GetIniString(F_INI, "DEFINE", S) If Len(Substitute) Then GetParams = Substitute Else GetParams = GetIniString(F_INI, "DEFAUT", Cle) End If End Function Function Get_Start_Params() As String Dim S As String Dim P As String S = LCase$(Command$) If Len(S) = 0 Then S = InputBox$("Entrer les parametres", "Pas de parametres") If Len(S) = 0 Then End End If INIFILE = Substring(S, 1, " ") P = GetPath(INIFILE) If InStr(P, ".") = 1 Then INIFILE = App.Path & Mid$(INIFILE, 2) If Len(P) = 0 Then INIFILE = App.Path & "\" & INIFILE Get_Start_Params = S End Function Sub Set_StartParams() Dim S As String S = Command$ If Len(S) Then INIFILE = Substring(S, 1, " ") Exit Sub 'utilise 1er paramtre ligne commande End If INIFILE = App.Path & "\" & App.EXEName & ".INI" 'utilise fichier par dfaut End Sub Function GetIniString(Fichier As String, section As String, Cle As String) As String Dim S As String Dim X As Integer If Not FileExists(Fichier) Then Exit Function X = GetPrivateProfileString(ByVal section, ByVal Cle, ByVal "", ByVal Rstring, ByVal Len(Rstring), ByVal Fichier) S = Left$(Rstring, X) If InStr(S, "'") = 1 Then S = Right$(S, Len(S) - 1) GetIniString = S End Function Function GetSystemString(SName As String, section As String, Cle As String) As String Dim Rstring As String Dim X As Integer Rstring = String$(256, 0) X = GetPrivateProfileString(ByVal section, ByVal Cle, ByVal "", ByVal Rstring, ByVal Len(Rstring), ByVal SName) GetSystemString = Left$(Rstring, X) End Function Sub SetTrace() NivTrace = 0 FicTrace = GetIniString(INIFILE, "DEBUG", "Trace") If Len(FicTrace) Then If GetPath(FicTrace) = "." Or Len(GetPath(FicTrace)) = 0 Then FicTrace = App.Path & "\" & GetFname(FicTrace) End If NivTrace = Val(GetIniString(INIFILE, "DEBUG", "Niveau")) End If End Sub Function GetPath(FullPath As String) As String 'Retourne le chemin sans le nom du fichier Dim I As Integer Dim J As Integer Dim Sep As String GetPath = "" If Len(FullPath) Then If InStr(FullPath, "/") Then Sep = "/" 'Set Unix style ElseIf InStr(FullPath, "\") Then Sep = "\" 'May be Windows style Else Exit Function 'None, nothing to return End If Do J = InStr(I + 1, FullPath, Sep) If J = 0 Then Exit Do I = J Loop GetPath = Left$(FullPath, I - 1) End If End Function Function GetExtension(Fichier As String) As String 'Retourne l'extension de fichier (sans le point !) GetExtension = Substring(GetFname(Fichier), 2, ".") End Function Function Substring(Texte As String, Item As Integer, Separateur As String) As String Dim D As Integer Dim F As Integer Dim I As Integer D = 1 I = 1 Do F = InStr(D, Texte, Separateur) If F = 0 Then F = Len(Texte) + 1 If I = Item Then Exit Do I = I + 1 D = F + Len(Separateur) If D > Len(Texte) Then Substring = "" Exit Function End If Loop Substring = Mid$(Texte, D, F - D) ' If Len(Substring) = 0 Then Substring = " " End Function Function SubStringVal(Texte As String, Item As Integer, Separateur As String) As Integer SubStringVal = Val(Substring(Texte, Item, Separateur)) End Function Sub Trace(Niveau As Integer, Message As String) Dim I As Integer Dim F As Integer Dim C As String Dim S As String If (Niveau And NivTrace) = 0 Then Exit Sub Do While Niveau Niveau = Niveau \ 2 Message = " " & Message Loop S = Format(Now, "dd/mm/yyyy hh:mm:ss") & " " & Message F = FreeFile On Error Resume Next Open FicTrace For Append As F If Err Then Exit Sub Print #F, S Close #F End Sub Sub WriteIniString(Fichier As String, section As String, Cle As String, Texte As String) Dim X As Integer ' Debug.Print Texte X = WritePrivateProfileString(ByVal section, ByVal Cle, ByVal Texte, ByVal Fichier) End Sub Function FileCopyDiff(Source As String, Destin As String) As Boolean 'Copie source dans destination seulement si contenus differents Dim Fs As Integer Dim FD As Integer If Not FileExists(Source) Then Exit Function If FileExists(Destin) Then If FileLen(Destin) <> FileLen(Source) Then Copy Source, Destin, 1, True FileCopyDiff = True Else Fs = FreeFile Open Source For Input As Fs FD = FreeFile Open Destin For Input As FD If Input(LOF(Fs), Fs) <> Input(LOF(FD), FD) Then Close Fs Close FD Copy Source, Destin, 1, True FileCopyDiff = True Else Close Fs Close FD End If End If Else Copy Source, Destin, 1, True FileCopyDiff = True End If End Function Sub MarkActivity(MarkFile As String) Dim F As Integer F = FreeFile Open MarkFile For Output As F Print #F, Format(Now, "ddmmyyyyhhmmss") Close F End Sub Function PathExists(ThisPath As String) As Boolean Dim Temp As String PathExists = True Temp = CurDir On Error Resume Next ChDir ThisPath If Err Then PathExists = False End If On Error GoTo 0 ChDir Temp End Function Function GetFileListe(Masque) As String 'Retourne la liste de tous les fichiers correspondants au masque sous ' la forme de chaines spares par des virgules. Dim S As String On Error Resume Next S = Dir$(Masque, vbHidden + vbSystem + vbReadOnly) Do While Len(S) GetFileListe = GetFileListe & S & "," S = Dir$ Loop End Function Function GetDirListe(Masque As String) As String 'Retourne la liste de tous les sous rpertoires correspondant au masque ' sous la forme de chaines spares par des virgules. Dim S As String S = Dir$(Masque, vbDirectory + vbHidden + vbSystem + vbReadOnly) Do While Len(S) If PathExists(Masque & S) Then GetDirListe = GetDirListe & S & "," S = Dir$ Loop ' #If Win32 Then If Len(Masque) > 3 Then ' GetDirListe = Mid$(GetDirListe, 6) 'Enlve '.' et '..' ' #End If End If End Function Function IsTimeValid(T As String) As Boolean IsTimeValid = False If IsDate(T) Then T = Format$(CDate(T), "hh:mm") IsTimeValid = True End If End Function Function ReplaceString(Source As String, Match As String, Replace As String, NoWhite As Boolean) As Integer 'Remplace dans la chaine source les occurences de 'Match' par 'Replace' et retourne ' le nombre de remplacements effectus. 'Si le flag NoWhite est spcifi, les codes contrles ( < 31 dcimal) sont 'limins de la chaine de sortie AVANT l'insertion de 'Replace'. ' Ex: X = ReplaceString(S, Chr$(10), Chr$(10), True) retourne le nombre de lignes ' non vides de S, et remplace les cr/lf par lf. Dim I As Integer Dim J As Integer Dim S As String Dim T As String J = 1 ' Debug.Print Source ' Debug.Print "-------------------" S = Substring(Source, J, Match) Do While Len(S) If NoWhite Then S = TTrim(S) If Len(S) Then T = T & S & Replace I = I + 1 End If Else T = T & S & Replace I = I + 1 End If J = J + 1 S = Substring(Source, J, Match) Loop ReplaceString = I Source = T ' Debug.Print Source End Function Function TTrim(S As String) As String 'Total Trim: Elimine tous les caractres non imprimables ( 0 32 dcimal) 'Conserve les espaces entre les mots Dim I As Integer Dim C As String S = Trim$(S) 'Supprime espaces de dbut et de fin For I = 1 To Len(S) C = Mid$(S, I, 1) If C > Chr$(31) Then TTrim = TTrim & C Next I End Function Sub ShowError(ErrDescription As String, Message As String) ' MsgBox "(" & ErrDescription & ")" & vbCrLf & Message MsgBox ErrDescription, , Message End Sub Function IsSameFile(F1 As String, F2 As String) As Boolean 'Compare nom et date de deux fichiers avec chemins '** Rajouter comparaison de la taille ? IsSameFile = False If FileExists(F1) And FileExists(F2) Then If GetFname(F1) = GetFname(F2) And FileDateTime(F1) = FileDateTime(F2) Then IsSameFile = True End If End If End Function Function GetNextInList(List As String, Sep As String) As String ' Retourne la sous chaine suivante de la liste de chaines 'List' spares par 'Sep' ' Rinitialis si appel avec un nom de liste diffrent ou de longueur nulle ' Retourne une chaine vide quand liste puise ' Non rentrant !!! Static I As Integer Static LastList As String If List <> LastList Then LastList = List I = 0 End If I = I + 1 GetNextInList = Substring(List, I, Sep) End Function Sub MakeDirTree(Tree As String) ' format de Tree: "x:\a\b\c.." ou ".\a\b\c.." ou "a\b\c.." ou "\a\b\c.." ' Cre tout l'arbre avec les sous rpertoires i.e. md a, md a\b, md a\b\c, etc... Dim I As Integer Dim S As String Dim T As String I = 1 S = Substring(Tree, I, "\") If InStr(S, ":") Or InStr(S, ".") Or _ (Len(S) = 0 And Len(Tree) > 0) Then 'Rcupre le premier chemin complet: "x:\a" I = I + 1 S = S & "\" & Substring(Tree, I, "\") End If T = S On Error Resume Next Do While Len(T) MkDir S If Err = 0 Or Err = 75 Then 'Reussi ou dja cr I = I + 1 T = Substring(Tree, I, "\") S = S & "\" & T Err.Clear Else MsgBox "MakeDirTree " & Tree & " " & S & vbCrLf & _ "Erreur " & Err, vbCritical, App.EXEName End If Loop ' On Error GoTo 0 End Sub Function GetKeysInSection(Fichier As String, section As String) As String 'Retourne la liste des cls trouves dans la section spcifie. ' Ignore les entres commenant par ';' Dim F As Integer Dim Ligne As String Dim InSection As Boolean If FileExists(Fichier) Then F = FreeFile Open Fichier For Input As F Do While Not EOF(F) Line Input #F, Ligne If InSection Then If InStr(Trim(Ligne), "[") = 1 Then Close F Exit Function End If ' S = UCase(Trim$(Substring(Ligne, 1, "="))) S = Trim$(Substring(Ligne, 1, "=")) If Len(S) And InStr(S, ";") = 0 Then GetKeysInSection = GetKeysInSection & S & "," Else If InStr(Ligne, "[" & UCase(section) & "]") = 1 Then InSection = True End If End If Loop Close F End If End Function Function GetSections(Fichier As String) As String 'Retourne la liste des sections trouves dans le fichier spcifi ' Ignore les entres commeant par ';' Dim F As Integer Dim Ligne As String F = IsOpen(Fichier, "Input", 1000) If F Then Do While Not EOF(F) Line Input #F, Ligne If InStr(Trim(Ligne), "[") = 1 Then Ligne = Mid$(Ligne, 2, InStr(Ligne, "]") - 2) GetSections = GetSections & Ligne & "," End If Loop Close F End If End Function Sub Wait(ByVal Millisecs As Double) ' Ne retourne qu'aprs 'Millisecs' en millisecondes ou si Unsign(GetTickCount) wrappe (le 49 me jour) Dim Day49 As Double Dim M As Double Day49 = Unsign(GetTickCount) M = Day49 + Millisecs 'Unsign(GetTickCount) + Millisecs Do DoEvents Loop While Unsign(GetTickCount) < M Or Unsign(GetTickCount) < Day49 ' bug du 49 me jour, tant pis ! End Sub Function WaitFor(Something As Boolean, Delai As Long) As Boolean ' Wait for 'something' be true while 'Delai' milliseconds' ' Returns the value of 'Something' as soon it becomes true or ' False if Delai elapsed Dim Day49 As Double Dim D As Double 'Ne pas modifier le parametre ! Day49 = Unsign(GetTickCount) D = Day49 + Delai 'Unsign(GetTickCount) + Millisecs Do DoEvents If Something Then WaitFor = Something Exit Function End If Loop While Unsign(GetTickCount) < D Or Unsign(GetTickCount) < Day49 ' bug du 49 me jour, tant pis ! End Function Sub ShowMsg(Message As String, Titre As String) ' Affiche une boite de message pendant 'Duree' x millisecondes Trace 128, Titre & Chr$(9) & Message #If ShowMsg Then If MyMsg.Visible Or DureeMsg = 0 Then Exit Sub MyMsg.LblDelai.Caption = Str$(DureeMsg) MyMsg.Caption = Titre MyMsg.LblMsg.Caption = Message MyMsg.Show 0 #End If End Sub Function Copy(Org As String, Dest As String, Delai As Integer, TouchDate As Boolean) As Boolean 'Recopie Org sous un nouveau nom (duplique) Dim W As Double Dim Day49 As Double Copy = False Day49 = Unsign(GetTickCount) W = Day49 + Delai On Error Resume Next Do Err.Clear FileCopy Org, Dest If Err = 0 Then If TouchDate Then Touch Dest, 0 Copy = True Exit Function End If DoEvents Loop While Unsign(GetTickCount) < W Or Unsign(GetTickCount) < Day49 ShowMsg "Can't copy " & Org & " in " & Dest, "Copy Error N" & Str(Err) & " " & Err.Description End Function Function IsOpen(File As String, Mode As String, Delai As Integer) As Integer ' Retourne un numro de fichier si ouverture possible dans les delais, sinon 0 Dim W As Double Dim Day49 As Double Day49 = Unsign(GetTickCount) W = Day49 + Delai On Error Resume Next Select Case UCase(Mode) Case "INPUT", "READ", "R" Do If Not FileExists(File) Then Exit Function Err.Clear IsOpen = FreeFile Open File For Input Access Read As IsOpen If Err = 0 Then Exit Do DoEvents Loop While Unsign(GetTickCount) < W Or Unsign(GetTickCount) < Day49 Case "OUTPUT", "WRITE", "W" Do Err.Clear IsOpen = FreeFile Open File For Output Access Write As IsOpen If Err = 0 Then Exit Do DoEvents Loop While Unsign(GetTickCount) < W Or Unsign(GetTickCount) < Day49 Case "APPEND", "A" Do Err.Clear IsOpen = FreeFile Open File For Append Access Write As IsOpen If Err = 0 Then Exit Do DoEvents Loop While Unsign(GetTickCount) < W Or Unsign(GetTickCount) < Day49 Case "BINARY", "B" Do Err.Clear IsOpen = FreeFile Open File For Binary Access Read Write As IsOpen If Err = 0 Then Exit Do DoEvents Loop While Unsign(GetTickCount) < W Or Unsign(GetTickCount) < Day49 Case "READBINARY", "RB" If Not FileExists(File) Then Exit Function Do Err.Clear IsOpen = FreeFile Open File For Binary Access Read As IsOpen If Err = 0 Then Exit Do DoEvents Loop While Unsign(GetTickCount) < W Or Unsign(GetTickCount) < Day49 Case "WRITEBINARY", "WB" Do Err.Clear IsOpen = FreeFile Open File For Binary Access Write As IsOpen If Err = 0 Then Exit Do DoEvents Loop While Unsign(GetTickCount) < W Or Unsign(GetTickCount) < Day49 Case Else Mode = "Unknow mode" Error 55 End Select If Err Then ShowMsg "Can't open " & File & " for " & Mode, "IsOpen Error N" & Str(Err) & _ " " & Err.Description IsOpen = 0 End If Err.Clear End Function Function Delete(File As String, Delai As Integer) As Boolean ' Dtruit le fichier si possible sinon renvoie 'False' Dim W As Double Dim Day49 As Double Day49 = Unsign(GetTickCount) W = Day49 + Delai Delete = False On Error Resume Next Do Err.Clear Kill File If Err = 0 Or Err = 53 Then 'Accepter sans rler si fichier inexistant Delete = True Exit Function End If DoEvents Loop While Unsign(GetTickCount) < W Or Unsign(GetTickCount) < Day49 ShowMsg "Can't delete " & File, "Delete Error N" & Str(Err) & _ " " & Err.Description End Function Function DelTree(Path As String) As Boolean 'Vide et dtruit le rpertoire spcifi. Dim RList As String Dim Flist As String Dim R As String Dim F As String Dim I As Integer If Not PathExists(Path) Then Exit Function Flist = GetFileListe(Path & "\*.*") 'Obtiend la liste des fichiers I = 1 F = Substring(Flist, I, ",") Do While Len(F) Delete Path & "\" & F, 1 'Efface tous les fichiers I = I + 1 F = Substring(Flist, I, ",") Loop RList = GetDirListe(Path & "\") 'Obtiend la liste des sous rpertoires I = 1 R = Substring(RList, I, ",") Do While Len(R) 'pour chaque sous rpertroire DelTree Path & "\" & R 'Rcursif I = I + 1 R = Substring(RList, I, ",") Loop RmDir Path End Function Function ExecOnTree(Path As String, Action As Long) As Boolean End Function Function Rename(OldName As String, NewName As String, Delai As Integer, TouchDate As Boolean) As Boolean 'Renomme le fichier si possible 'Si 'TouchDate', met NewName la date courante 'Remplace 'NewName' si existe dj 'Si lecteurs diffrents, copie puis dtruit ancien If Copy(OldName, NewName, Delai, TouchDate) Then Rename = Delete(OldName, 0) End If End Function Function CheckIfFiles(Liste As String, Path As String, Sep As String) As String 'Retourne 'Liste' sans les fichiers introuvables dans 'Path' Dim I As Integer Dim S As String Dim T As String If Len(Liste) Then I = 1 T = Substring(Liste, I, Sep) Do While Len(T) If FileExists(Path & "\" & T) Then S = S & T & Sep I = I + 1 T = Substring(Liste, I, Sep) Loop CheckIfFiles = S End If End Function Function FileExists(File As String) As Boolean ' Indique si le fichier existe If Len(File) = 0 Then Exit Function On Error Resume Next FileDateTime (File) If Err Then If GereManque Then Manque File Else FileExists = True End If End Function Sub Manque(S As String) If Len(Manquants) < 32000 Then If InStr(Manquants, S) = 0 Then Manquants = Manquants & S & "," 'Sans dupliquer ! End If End Sub Function Touch(File As String, Delai As Integer) As Boolean ' Change la date du fichier par la date courante Dim F As Integer Dim X As String * 1 Touch = False F = IsOpen(File, "Binary", Delai) If F Then If LOF(F) Then Get #F, 1, X Put #F, 1, X Touch = True Else ShowMsg "Can't change date if file is empty " & File, "Touch Error N" & Str(Err) & _ " " & Err.Description End If Close F End If End Function Function XClose(FileNum As Integer, Delai As Integer) As Boolean Dim W As Double Dim Day49 As Double Day49 = Unsign(GetTickCount) W = Day49 + Delai XClose = False On Error Resume Next Do Err.Clear Close FileNum If Err = 0 Then XClose = True Exit Function End If DoEvents Loop While Unsign(GetTickCount) < W Or Unsign(GetTickCount) < Day49 ShowMsg "Can't close" & Str(FileNum), "Close Error N" & Str(Err) & _ " " & Err.Description End Function Function CountFileLines(Fichier As String) As Integer 'Retourne le nombre de lignes non vides de 'Fichier' '0 si fichier inaccessible Dim L As String Dim F As Integer F = IsOpen(Fichier, "Input", 1000) If F Then While Not EOF(F) Line Input #F, L If Len(L) Then CountFileLines = CountFileLines + 1 Wend XClose F, 1000 End If End Function Function CountStringLines(S As String) As Integer 'Retourne le nombre de lignes non vides de S ' *** (Voir CountStrings dans ce mme module) End Function Function TrieListeChaine(Liste As String, Mode As Integer, Sens As Integer) As String ' Retourne la liste trie dans le sens spcifi (1 = Croissant, 0 = Dcroissant) ' selon Mode (1= Texte(Alphabtique), 0 = Binaire) Dim S As String Dim S1 As String Dim S2 As String Dim I As Integer Dim J As Integer Dim T() As String I = 1 S = Trim$(Substring(Liste, I, ",")) While Len(S) 'On rempli le tableau I = I + 1 ReDim Preserve T(I) T(I - 1) = S 'L'indice 0 n'est pas utilis ! S = Substring(Liste, I, ",") Wend If I > 2 Then 'Il y a qqchose trier I = I - 1 J = 1 While J < I If StrComp(T(J + 1), T(J), Mode) = -Sens Then 'Permuter S1 = T(J + 1) T(J + 1) = T(J) T(J) = S1 If J > 1 Then J = J - 1 'Retester le prcdent Else J = J + 1 End If Wend For J = 1 To I 'Cre la chaine en sortie TrieListeChaine = TrieListeChaine & T(J) & "," Next J Else TrieListeChaine = Liste End If End Function Function TrieTableau(T(), Col As Integer, Mode As Integer) As Integer ' Ordonne les lignes d'un tableau 2 dimension selon le contenu de la colonne spcifie ' Mode = 0: Binaire, 1: Alphabtique, 2: Numrique ' Sens = Toujours croissant ' Retourne <> 0 si anomalie. Dim L As Integer Dim C As Integer Dim I As Integer Dim J As Integer Dim Swaped As Boolean L = UBound(T, 1) C = UBound(T, 2) ReDim TT(1, C) If L > 1 Then 'S'il y a au moins 2 lignes If C >= Col Then 'et si la colonne spcifie existe I = 1 While I < UBound(T, 1) Swaped = False If Mode = 2 Then If T(I + 1, Col) < T(I, Col) Then Swaped = True For J = 0 To C TT(0, J) = T(I + 1, J) 'Permuter T(I + 1, J) = T(I, J) T(I, J) = TT(0, J) Next If I > 0 Then I = I - 1 'Retester le prcdent End If Else If StrComp(T(I + 1, Col), T(I, Col), Mode) = -1 Then Swaped = True For J = 0 To C TT(0, J) = T(I + 1, J) 'Permuter T(I + 1, J) = T(I, J) T(I, J) = TT(0, J) Next If I > 0 Then I = I - 1 'Retester le prcdent End If End If If Not Swaped Then I = I + 1 End If Wend Else TrieTableau = -1 End If Else TrieTableau = -2 End If End Function Sub StartChrono(Chrono As Integer) ' Lance un chrono On Error Resume Next Chronos(Chrono) = Unsign(GetTickCount) End Sub Sub ShowChrono(Chrono As Integer) 'Affiche un chrono Dim TT As Long On Error Resume Next TT = Unsign(GetTickCount) MsgBox Format$((TT - Chronos(Chrono)) / 1000, "0.000") & " secondes", 0, "Chrono" & Str$(Chrono) ' ShowMsg Str$(TT - Chronos(Chrono)) & " Millisecondes", "Chrono" & Str$(Chrono) End Sub Function UnsignedTovbInteger(ByVal Unsigned As Long) As Integer 'Convertit un long reprsentant entier non sign (retourn par un appel un API par exemple) en 'entier non sign passer une fonction externe If (Unsigned And &H8000&) = 0 Then UnsignedTovbInteger = Unsigned And &HFFFF& Else UnsignedTovbInteger = &H8000 Or (Unsigned And &H7FFF&) End If End Function Function CountStrings(S As String, SubS As String) As Integer 'Retourne le nombre de 'SubS'contenues dans 'S'. Dim D As Long Dim F As Long D = 1 Do F = InStr(D + 1, S, SubS) If F Then CountStrings = CountStrings + 1 D = F Loop While D End Function Public Function GetFileSpecs(Objet, DefPath As String, DefFichier As String, Titre As String, Mode As String) As String ' Interface pour CommonDialog 'Ouvrir / Enregistrer sous' 'DefPath ne doit pas inclure le "\" terminal Dim S As String Dim E As String With Objet .CancelError = True .Filter = "Tous fichiers (*.*)|*.*" .FilterIndex = 1 E = GetExtension(DefFichier) If Len(E) Then .Filter = .Filter & "|Fichiers " & App.EXEName & " (*." & E & ")|*." & E .FilterIndex = 2 End If .Flags = &H804 .DialogTitle = Titre .InitDir = DefPath .FileName = DefFichier On Error Resume Next If Mode Like "Open" Then .ShowOpen If Mode Like "Save" Then .ShowSave S = .FileName If (Len(S) <> 0) And Err = 0 Then GetFileSpecs = S End If End With End Function Public Function GetFileDate(Fichier As String) As Date GetFileDate = "00:00" On Error Resume Next GetFileDate = FileDateTime(Fichier) End Function Public Function HexDump(S As String, Bloc As Long) As String ' Retourne un dump Hexadcimal de 256 octets de S. Dim Debut As Integer Dim Ligne As Integer Dim Colonne As Integer Dim C(1 To 16) As String Dim H As String For Ligne = 1 To 16 H = Hex((16 * (Ligne - 1)) + (256 * Bloc)) If Len(H) < 8 Then H = String(8 - Len(H), "0") & H HexDump = HexDump & H & ": " For Colonne = 1 To 16 ' les valeurs hexadciamales C(Colonne) = Mid$(S, Debut + 1, 1) If Len(C(Colonne)) Then H = Hex(Asc(C(Colonne))) If Len(H) < 2 Then H = "0" & H Else H = ".." End If Debut = Debut + 1 HexDump = HexDump & H & " " Next Colonne HexDump = HexDump & " " For Colonne = 1 To 16 'les caractres ascii imprimables If C(Colonne) < " " Then C(Colonne) = " " HexDump = HexDump & C(Colonne) Next Colonne HexDump = HexDump & vbCrLf Next Ligne HexDump = HexDump & vbCrLf End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Public Function Unsign(X As Long) As Double ' Retourne un single reprsentant un entier non sign. ' Utile pour traiter les valeurs retournes par des DLL qui renvoient un ULong 'Dim XX As Double ' XX = X ' If XX < 0 Then ' Unsign = 2147483647 + XX ' Unsign = Unsign + 2147483648# ' Else ' If XX = 0 Then ' Unsign = XX + 1 ' End If ' Unsign = XX ' End If 'End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function Unsign(X As Long) As Long 'Retourne X sans le signe Unsign = X And &H7FFFFFFF End Function Public Sub CenterForm(F As Form) F.Top = (Screen.Height - F.Height) / 2 F.Left = (Screen.Width - F.Width) / 2 End Sub Public Function Crc(S As String, Debut As Integer) As String 'Retourne le CRC (Xor) de S Dim I As Integer Dim X As Integer For I = Debut To Len(S) X = X Xor Asc(Mid$(S, I, 1)) Next I Crc = Chr$(X) End Function Public Function FormatTexte(S As String, C As Integer, Tableau() As String) As Integer ' Rempli le tableau avec des lignes de longueur 'C' extraites de S et centres ' *** S ne doit pas contenir de caractres de contrle *** ' Retourne le nombre de lignes (Taille du tableau) Dim Lignes As Integer Dim Debut As Integer Dim T As String Dim U As String Dim L As Integer Debut = 1 S = Trim$(S) T = Substring(S, Debut, " ") Do While Len(T) T = Trim$(T) Do While Len(T) < C 'Il reste de la place U = Trim$(Substring(S, Debut + 1, " ")) 'Essaie le suivant Debut = Debut + 1 If Len(U) + Len(T) < C Then 'C'est bon T = T & " " & U Else Exit Do End If Loop T = Trim$(T) L = Len(T) If L = C Then Debut = Debut + 1 L = C - L If L > 1 Then 'Centrer L = L \ 2 T = String(L, " ") & T & String(L, " ") End If Lignes = Lignes + 1 ReDim Preserve Tableau(Lignes) Tableau(Lignes - 1) = T T = Substring(S, Debut, " ") Loop FormatTexte = Lignes End Function Public Sub AdjustToken() Const TOKEN_ADJUST_PRIVILEGES = &H20 Const TOKEN_QUERY = &H8 Const SE_PRIVILEGE_ENABLED = &H2 Dim hdlProcessHandle As Long Dim hdlTokenHandle As Long Dim tmpLuid As LUID Dim tkp As TOKEN_PRIVILEGES Dim tkpNewButIgnored As TOKEN_PRIVILEGES Dim lBufferNeeded As Long hdlProcessHandle = GetCurrentProcess() OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or _ TOKEN_QUERY), hdlTokenHandle ' Get the LUID for shutdown privilege. LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid tkp.PrivilegeCount = 1 ' One privilege to set tkp.TheLuid = tmpLuid tkp.Attributes = SE_PRIVILEGE_ENABLED ' Enable the shutdown privilege in the access token of this ' process. AdjustTokenPrivileges hdlTokenHandle, False, tkp, _ Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded End Sub Public Sub SystemRestart() #If NT Then AdjustToken #End If ExitWindowsEx (EWX_SHUTDOWN Or EWX_FORCE Or EWX_REBOOT), &HFFFF End Sub Public Sub ShowTrace(T As String, F As Form) 'Montre T dans l'objet texte 'Voir' de la feuille F si elle est visible If F.WindowState <> 1 Then If Len(F.Voir.Text) > 16000 Then 'Void overflow F.Voir.Text = "" End If F.Voir.SelText = T & vbCrLf End If Trace 1, T End Sub Public Sub ClearTrace(F As Form) F.Voir.Text = "" End Sub Public Sub PlaySound(Wavefile As String) If Len(Wavefile) > 0 And FileExists(Wavefile) Then sndPlaySound Wavefile, SND_ASYNC End If End Sub Public Function AdjustText(V As Variant, Lenght As Integer) 'Retourne une chaine de longueur 'Lenght' contenant V et padde avec des espaces Dim S As String Dim L As Integer S = Format$(V) 'Regle le pb du NULL L = Len(S) If L < Lenght Then 'Trop court AdjustText = S & String$(Lenght - L, " ") Else AdjustText = Mid$(S, 1, Lenght) 'Trop long End If End Function Public Function ForceDp(V As String) As String 'Remplace la virgule par le point dans un variant reprsentant un nombre Dim VPos As Integer VPos = InStr(V, ",") If VPos Then 'Y'en a ForceDp = Substring(V, 1, ",") & "." & Substring(V, 2, ",") Else ForceDp = V End If End Function Xformers/Xformers.vbp0000755000000000000000000000136411346367221012103 0ustar Type=Exe Form=Main.frm Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\WINNT\system32\stdole2.tlb#OLE Automation Module=TOOLS; TOOLS.BAS Module=Global; GLOBAL.BAS Form=AddCore.frm IconForm="Main" Startup="Main" HelpFile="" Title="Xformers" Command32="" Name="Xformers" HelpContextID="0" CompatibleMode="0" MajorVer=1 MinorVer=0 RevisionVer=0 AutoIncrementVer=1 ServerSupportFiles=0 VersionCompanyName="YM" CompilationType=0 OptimizationType=0 FavorPentiumPro(tm)=0 CodeViewDebugInfo=0 NoAliasing=0 BoundsCheck=0 OverflowCheck=0 FlPointCheck=0 FDIVCheck=0 UnroundedFP=0 StartMode=0 Unattended=0 Retained=0 ThreadPerObject=0 MaxNumberOfThreads=1 DebugStartupOption=0 [MS Transaction Server] AutoRefresh=1 Xformers/Xformers.vbw0000755000000000000000000000024211346367221012104 0ustar Main = 154, 154, 702, 602, , -13, 16, 535, 629, C TOOLS = 0, 0, 0, 0, C Global = 132, 132, 680, 580, C AddCore = 176, 176, 768, 543, C, 407, 131, 955, 579, C Xformers/Xformers.zip0000755000000000000000000004763611346367222012133 0ustar PK+u5Y5v Xformers.vbwMSU045сF: f BGA(j`jl 4Qp 1A {N~Rb,cf0af2;8f@&@[uL A u,M֙CPK֎25HS% AddCore.frmZmo8^TU /]nOZhkТNLb`tY vHqdAHx38r>?m_^t{ݧt|GC./](tٷq}x|b2ÔCX&{ Z69D3 8v&tYwu]s}H'vc;I iХiQn{qKPQMwX &E"u57>\( 1ΎIu gHhΩg4ɴZmnNG|-MNmة-om~G|3^@R Tnς -iѢޢrXkFIц4oRA<~~ *Mk~_~o="rJ-#yބ`rJoޔwݯ>:q4}ha(뾋}!VVf?CɉXU\L!Τ8z;(LՁ*[jD fo?tC| ,[, k@ \UãewYj2K-EC࡫\gHQ*Vt*Ĵ*ZsM̴Z;hFUuT0AD):R*54y [+`iu\0E(9Bщ _">' iFG  uL%Aļ@(9Jw$1eɲ, _+*^i%%\12mToPa#Fp@]KBp:7!6ԀPKV2 LOn GLOBAL.BASn6=@"랖cb7ve3VY(qxC2uBxx<7$҄CfX:=ECFӓӓq7f Fi8 ޖ-{Ċ 2;w4 Y$호<|l D *y4~c*lp\= '+]z4GnrqB&?&_FvvYӓs ;' "@@2H`$AkM HCqn8NG&2 l 2I$,.}49 2^GUgǩSԹY ʮ𻬚UTNJP)ij}0El0?!akOx5]. FrMӅ32%:䟤YԪ 3M!]8g"tori? hBy {mׂvFC]>' uA#9vB&qv`5*NR+LI8ݴkNf+,H. eh ˲%Nl:iT.7ɴa ہntS<p~obaeeq2 }.nF5ȔCS̳@!gS )IHu 4x6 AZ}9c(P$/% "dS(++*qK8e𶝇L]3[b`;nq3\nԧ?م ԥģcț){ȶ qoC~̋yvc&,pH(8BXKID‘'RUy9LXew3 {sH0mBWEش5ɪY1 ?^=V>Q*ԎAvLr=֫\m]6wv "eEYG=rp1ƥ÷%,R7@ts <,į̂* j[?3#kqU.:[TtM^&W80-|D{%<a$&< BL(CўsGڄZu7~zN-),D1ۏt #u}8Ge3AT`-.dNsm_>ׄrjjēisy M>կ&?8q_˜s6ą~u:(%59{W6pQ=ayRJ)<~2V*· N5 e U40`qDﲪm`q4?eU9kh% &Wꔂ(_[|3&4N^^$M9,Jv>9`!WqMhm?kѢsK?b{|K'vwB=#uٲJ06q[c}L7#00PK͋X2M6x.dat- 0 CB(]u2rp28'P܄\eNm$V2H>qv^8K00mkuMWCc;4gk">?Qqr)II)94 !dL*jRIH4hIQOZPbРP$(4z:zNjuoP#ξPK}29Main.frm]r8TlՄd9H $ lؽ)J⋱9cf}{۷8}r d1l⽱vV%S[Ͱ 5+][Tz7G&BcNz_\f62Uzۘ vm ;9P]ŋ󣒪M6rL[3!W9HYSDX-K}7%pj8\kV7=ŵ|ASDrf%:w9aq[@.PQP #@= #L3O00J%E.KBDP0:ߙ3usәwٌBB"5 2DP (*Ɣ^{{3깎/tʜc.rDCYw% =~ېnWjM }0%bcE? (3϶$M[7Ip{#Zu mB0d(~޺_{!L%A1 ` ?yF& [\P(ܖ򇇆#a-Tt^33k:7[(MP:cU9ڐN*CMg7شo 6`s6`eyi s2f]K 9~kzX0&n_:JbRE!v**#@:. =1#zZ{(UA5+f"QOT%N`NlZ]rT62MP*I{N3ǜx&vHWct ?PRխ_;0=}ӂx x:NAԂu؊yӂxݣlht\i&ByzYLURUxm0XnTU#U7A8Y~*`PaP6ZYǩPࢯCU֫ ^;W^_.vTՏt}$;ߩ3-#jOXLCCzԢHz 4suf|[:yK~2:SP4upso)F ܶaf(iJQ#?kTkQτG)]` njXK֊oK.c lXtdN`fr vǝLHeîOCRnOؿo:t12RREz-QĦ ;@5#j DLѡjtnI9%l^Hf t=)k-U>wvNw]è!+E^ہ%^D]s}ՂRLo.sV $mv~c(lwbFOt^0fhD T xLy{ٶ[=7݆~-V[}tl-H6$)QzF S?2 7o$ w ]i_8v5ܥK*v}]߶iwU3`(ihV# zO Z鈪D-ڿ5`<6}7#SaᥦsJe]խOhL^}yiO'vϨ|[A9'nUO|:WFyOZ^fA9>D!uz|:}caMT?ԋ[#D$SDSO*6[F8!Zp6לlWqH'=O(ZP6ߔvRE6xW@9,}(-(o ;lQ) sDYς&خS^4- E,G=̂HU D^ 曱bNؖ^1XA|Vl A,=aϑ7cŎu+q []v܉ c5Ox)6$Qxf(˴?[~ZNpn(q/ɱeA2L&i̔& ̤4%.) I&5&3Y,*&PLE*]'8"I͖P {)LNy[d6xTP4->\w!מ۵cjhv ǵg}5I7V?@&hNwNE|}b =SR?y*&EIr|^%"|Ah%";^F}GJ;"ҕK9rDm=OB:NHQTAn00ir ;KC 6@;NJe صwdl낳 D8tHma maջ)ukei\l!]s=7|hSKRgPNv\ 'D 2 'A3JM880;ċ=` Yx*l;cZIR8mr.4WssVJ )#ƾ2^36,7Ю}س|,؆6z{v %f8(l#Fzfwuo}^Pr2T@0D0`:Kc v0ͯ&DmۢͱRݐLt|yɇ&bQE!3| LTw_Ǡ.dQ\}]* 6dAWXSZb%ta>vYwooM[ j1cRyx!bo{AGJ!+ѐ܈anM!_a}cNy~ct?| /[rarbGQ'ك.H=)4WXznb0s4)H!#o,\oeH9p^4X"T`Wݗ2 a4ΉAwTnh5x0sQ`m>4G0&M:{W+/ۼ ܬ= /2bg2d+P>hX4ܡ{cX`Wדb_H$^.rjY֡ʜҮK%iq;S<%P%?Q@jPzϠ&$gbtlLmĵ_H&)=(Ƒp{jHV.u%1Z^-Ko>YTI912m^3 r}Y9?rϋ1džkY1 D|O_<\N,쌨YdskѶ1:4+?0r&yk5UspTBybRȫM̅V"U&a*WÚׅ[Ԇ+JOYD~H4g~'okgiatu 1Нc?SIYܶt>_I\3TgXN)yWi5:1pfΉD`Usk(H艝!S"`R3 m$bDP%L3-{1'W, Hdz TYn~jIs`BAһ j)[ѷ75If`a4ฑEq-&#q3-QIBˆZeAf}->Xȅ 3g6R:PKEX2jZyStd.dat%1 0=p.I{U(7X).VDtTڊ|ӆޯ}z0<1`zlRHq?;>s|s+ڏRĢ!8f|B2ahIdgcCoIZm:K%.,?̢4n(9{;x2^YnMf48{ݬFo 9%goj0qQ 61[ѳ" y%}lv\z=}vֿ@ËIo` ~dpzq11Gb9i1'Ә 9f 5Ht8ޝGq1HP6EJWQwlQ@Nf 0;cBa- jU_< 0e,N(`Quы7 -,(eb]x 9i5 x`' j.e2K 7& (KixnUI5} 8MмӒ5V#iOZx3>WYM2 8O >%-?9SͿr?N7V׼2W~&49Gw:`tiTȈV9-K(vw|Υq׵/ jB?P7Bg"O8]Ԉk?b|!Ku#4eA{G3Ø G,hB@2` . 1F6JΚnbꌯF1rV!%>ׄ;LY~\ nkߠJw2v iy>1C3]#XlD'(p^bخkD^Z >ؔbCҜPПc\q砄wVl6YVYJFQ ;Q6 ?&St1&'ߒD5N:zX]B7(]"?g\b^jf >;0o=cXOCVi6b%k Ѳ)pz1u+-=N XƌuHhe,d)H"E &Hy]?D$ZxFACtBIZ"9l(_Eɩ.Ο-- <ߛS.1Kko8&\ހQvԨ CzSMX} +R;ddKmm״ f٦&+[~B &y.б O1Pi3#4$%6>͋. 6o;uUfY? WP FhL#qI-qc6C*hq־5l"|J>ig{10TABmDu4L4zf *B11-Ɗ$K$YI'g%@g%G:óԒlI[@-ޏybda$5(0h"PBw$]9nDk)j1*S m)i^hk^򿰷ʞǃve0|Ctk";`b=—:n&>{)TˍfkX@jLrj>.ˎnjŊ7_*-SN9 csyAXUw ӻ`YCƳiNiN&G{n "~XexRXXA c_W=h>U-d}[oa،TźW2 "Q^1B kHmfUZmDa.:Uwl_ GARgK;Ni8YY͎q y}_KWe(,80+r<[m!ՋЩBA)޳,Ȅe=Nu&~}PKo*~E郴ԗ>7]vf?k@~_8拏m?Z.[Sp >eydKG]ڄ%LLF! J_-b @ZY sD*Rn%[Z6*HǠR~~\4#[Qg˳(,6j㹧V#u CrՅwZg<㴱Zhٛ$->U+ǐ={Ok]]:p;ʷ-2Ykh7dB)ݠfɾh]mP~+AT*bT{jE C8Y]+~$w$ "jOb@s^U:KU-WM⹙~/h]GaM^P kQI_!_s`hz~DX!ghm݀fڠO%r;!Qix-{[)2:,'I6iȱ[S̪ELvT/IG~C<arb6 rٖ`)$\g( o{>*??N&J^bŦvY!? i-%nujAl?c,Zc=ifuXLsmSևH5+˙zrY;G.쇽eB712xyAX r4NAVDP+ѯfX1k1 BUj. /}|&\-'G\CKF(Gყ_5xb6hw>i&yH$1 nÖUYK>Qr7lp ,xFf00|Ecv q}qnB5\"&'`6BAPƩ'1͞KNxUVd#GqHx,vIiy:?Tn%~rR\̲hLӼbA%I'X9?V{ " ~qEI; J~`ps4DŽƼY>*B)Xu_X&P>\qV꒫ua E@9Πx`UJϮ,-KiO90Pؑ[MCs9bkpG5Bl- "6s Ag99M?F lJ÷vΖ#9ӝ!3ʗ 4X5qD6#F\ NFC*"ã?eciIxG$7o.b PF6bMp6dt{F:qiKnۃw{1~ƶ@ZXX6~fiXm1 9 l_3yI+,6qlB'*JZ\/ppV̫b]%NO r\dsTH'U+)*1Ԕ<|SzH ^4s`"1YUH*9?6xH_v獨Z4,U^:Gq$)Yj#[O’d&4Ekr}m'?&wR-a1GB6mދv|ŔxS>2G(Nyh S^*԰VqZN lU8(i n@n v2YSYq=!!?J -#p[٩iC|\WK dpҸJ# w.*LN3+|ќԟdS^靜=7tf`nuR9"J0AڍwR~9ó楃rj,o6GelPݰ&iT; Ϧ1} Ӭ)M7 ztQR!co [X'kN#te oˠbOr'zyf9ѳ*|-n%@B͚&GEdY5؉N!*Vwagj 4"#1Y}8k;Fb=,NIHȵͻfέe||LZ7ݚ'z:2smv.Y|Y`NY[F;8^1͉`.dUQaYk&C:t U.^"jSvd]Ǵ΀5 bi{R&ڜˡ]~[ d֘hJ aD!>C\7w^:r߯5Oɺn^ C<,%Ӡ:ge#ρ*k{QJ(d%CrxGV盩|L ЭلDSwf% \{07i {9$B>nm[&; TYi@x!N=״Z[$L,=Í_3AyQwdU%3sˌc1ye&9;Q%Tv6b[SӢ~!ׇi^E+L@z@@= z;zF&< tYCx׿c1Y̛;QlL4T^6w#F"&n>bHm;NTѦGxtm/Wњtmf٪zXr{wەKm^߀+eu5. gq/㝐ta}*ts 7A<5q ^pn j` Bao$٢xo\AOY?<S 7ߕޚJc@d6ͯ_k#ZtzCtAkW PPG9K!!s ϝfQj 'TE4P(QDX| }Wu };>2/Ue- ;W& -!mJ*|WOKJ_hMëlHz%j/C$EΤ' B@À.`MF[`^ Ы2/aw2{L#^.]b`|e༘V|MDP%%BO@_z7%h4OQYҍFOt {@U޻~<;|JG7d@]?MHK$D F/ 9&N^uLw+rPm3q&7}nC ߢ;M `86o8|s;Nko)~$3q:T h~索Yi,Ovxqmn>6B0u68{+۽--8-i Dtc5,%k@Q ؜#Rtւe%=%uc~9;sZ˲?@[Ն㟤ãex"rgVO(F&c[_ WSifL_ i /ՓIwʉܺ}Ʊ PtTz6lðcq[x4ԭp#+>㾾dmcZM=s,$(Cy`}'6¢d^R4;L3 )#l7]HTg& ҆ccv۪Tt3GS{jG2?54=h,3n6V' #!ڿXs /uOS MUfrr*z'䠤c|ڦ'kIœWC󎇲㧴Ht*6?֚55!ߋcvp#6 V 9ҍ- }H@~{~2:N{/]\7k;xIYTr WÝ~wk".rGbN%WU ֓^-P3쮏\ٻղGw(2l괻ɕNΧ*O]IBt:uRC(}͘7\ yJT 8\^d?:X-wHc0!߮ͧS*"fC]~d=BQx!-&! QҷE Ao%'XGSBBtc3?|!jqAE0M6_7f8HghVflSNH׽*kH֟^`wKp^ŻЯ^g'tytw0=*p) ߻#Msos<ҾhjId1AGDي}:("!TÐ0^L؎i F"qGE1m({v/;!s:"2'wD E,OE/h`Tt"K5No2' @5ό[1{6bTE52'}N0)=3qR2*AētP|J!Ł 4F@2lxEIwC _)|@bI~Ukߊ$|J6vS/PL;~ 픃b6>M&qo!81c;]PK}2^O Xformers.vbpURM0G QvŁUm)"('l#n C̼7cyApQHţP1kq; yx`x"ܽ3i8?]yWm/Gm`>3ۇ7ClzQ~>ղ&+ǛmZn=.& ڴ¡`2 C[XP{&%5}mm(mXrND;~GKc) \L&+<'w6!zyN;8~*j PgPEuRҒW/[6N ڼ3_/[hJ25±U|𼆪LE+%DSJ p+e$l/0uz%vh=n%cIqyR@=z ˮ畅ZjSK{VKE&5coPK +u5Y5v  Xformers.vbwPK ֎25HS%  AddCore.frmPK G`N2<r core.tbxPK V2 LOn  GLOBAL.BASPK ͋X2 M6x.datPK }29 Main.frmPK qu5͌  MSSCCPRJ.SCCPK EX2jZy !Std.datPK oE2j\V(ߜ  h"TOOLS.BASPK }2^O  gKXformers.vbpPK ,\MXformers/core.tbx0000755000000000000000000000142611346367211011232 0ustar [EI] EI150NC=42.1,9.7,30,20.4,68.7,37.1 EI54=2.94,0.243,10.8,7.1,24.3,10.5 EI60=3.7,0.34,12,8,26,11.7 EI66A=4.46,0.45,13.2,9,28.7,12.8 EI78=6.4,0.76,15.6,11,34.5,15.1 EI66B=6.8,0.69,13.2,9,28.7,15.1 EI84A=7.2,0.93,16.8,11.7,37.7,16.2 EI42=1.74,0.112,8.4,5.5,19,8.2 EI96A=10.1,1.48,19.2,13.5,44,18.8 EI84B=10.9,1.4,16.8,11.7,37.7,19 EI96B=13.1,1.92,19.2,13.5,44,20.8 EI120A=14.8,2.72,24,16.3,54.6,22.9 EI108-50=15,2.75,21.6,14.5,49,24.6 M102B=16.5,3,23.8,15,65,23.2 EI96C=17.2,2.52,19.2,13,44,23.6 EI120B=19.3,3.54,24,16.3,54.6,25.3 EI126-50=20.2,3.76,25.4,17,58,23.8 EI150NA=22.2,5.1,30,20.4,68.7,28.5 EI120Cn=24.7,4.9,24,16.3,57,30 EI120C=26.7,4.9,24,16.3,54.6,29.3 EI150NB=30.1,6.9,30,20.4,68.7,31.9 EI48=2.3,0.17,9.6,6.3,21.7,9.3 LLsim=10.1,1.48,19.2,13,47,24.13