mtink-1.0.16/0000755000076400001540000000000010665176047011065 5ustar jjfusemtink-1.0.16/LICENCE0000777000076400001540000000000010665176047014000 2html/LICENCEustar jjfusemtink-1.0.16/utils/0000755000076400001540000000000010665016555012222 5ustar jjfusemtink-1.0.16/utils/rdPrtDesc.txt0000644000076400001540000001400010376041214014635 0ustar jjfuserdPrtDesc: ---------- This utilities allow the extraction of the printer description datas need by ttink/mtink and print them in an human readable form. If you provide your own description, the description file will be read and you can produce a new d files with all datas which are relevants. Syntax: rdPrtDesc -p|-c -p rdPrtDes create the human readable file which will include all known printers. -c rdPrtDes read the file printer.desc which must reside into the actual directory and generate a new c file which can be used for ttink/mtink. The known printer data and those from the description file are merged. FILE printer.desc: ------------------ This file contain blocks which describe the printer capability. A block look like this: .PRINTER .name: Stylus C20SX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: OLD D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .alignFunctionName: - .END The word .PRINTER declare that a new description begins. The following words up to the .END word, but not including it, describe the capabilities for the printer. Please don't begin a line with a dot '.', this character tell the ttink/mtink as well as the help program rdPrtDesc that a description line begins. The .name: word must contain the name of the printer as returned by the printer name query. The .colorsNb: tell ttink/mtink how many inks are used. The designer ending with Prot: tell the programs which protocol is to be used. Newer printers know a new protocol which is named the D4 protocol. This new protocol allows to communicate with the printer via independant channels. This allows for example to query the remaining ink quantity or the printer status while printing. The D4 protocol includes also a set of commands, so that most of the old commands has a replacement. Unfortunately not all printers offer the full set of D4 commands. Due to this, and also for compatibility to drivers which don't know the D4 protocol, it is possible to tell the printer that the D4 protocol must be disabled. According to this the following combinations values are possible: - OLD The printer don' know anythings about D4. - OLD D4 Use non D4 command, but send this via the D4 protocol - OLD EXD4 Use the normal commands and set the printer into the compatibility mode. - D4 The printer know a special D4 command, use this. The word .mainProt: declare the default mode. The word .resetProt: declare the protocol type top use for the reset command. D4 printers may all know this command but not perform the operation as needed (e.g. Stylus Color 980 or the Stylus Scan ...) The word .alignProt: This command seem not to have a D4 counterpart and the classic command will alltime be used. Here you may declare only D4 (OLD is implied). The word ending with Flg: tell if the printer has a particular capability. The assigned value may be True or False. The word .stateFlg: Tell if the printer is able to return if it is busy, working,... The word .cleanSeparateFlg: a few printers allow to clean separately the nozzle. For those printers declare True. The word .idFlg: The Stylus Scan 2500 and probably the Stylus Scan 2000 don't return an identification. For such model this flag must be set to False. The word .exchangeFlg: A few printers (Stylus Color 480/580) don't allows to do this via button on the printer. This must be done by software. For such printers set the value to True. The word .exchangeSeparateFlg: Both above mentionned printers need a selection of the cartridge which is to be exchanged. Set the value to True. Some printers as the Stylus Photo 890 allow also to exchange the ink cartridge via software. If you want to use this possibility set the flag .exchangeFlg to True and .exchangeSeparateFlg to False. The remaining designer ending with Nb: - .passesNb: - .ChoicesNb: - .colorPassesNb: - .colorChoicesNb: are for the aligment procedure. The first two entries tell how many passes are needed, and how many choices are allowed. These values can be seen from the windows or Mac OS driver delivered by EPSON. If the printer don't allow an adjustement for the color head, set the value for .colorChoicesNb to 0. The last keyword .alignFunctionName was introduced specially for the Stylus Photo 820. This printer don't have a buildin code which print the desired pattern. The pattern must be supplied by ttink/mtink. For the Stylus Photo 820, enter Pattern820, for others set the value to "-". Istalling a printer.desc file: ------------------------------ Ttink/Mtink expect to find the printer.desc file in one of the following directories: - /usr/lib/mtink - /usr/local/lib/mtink - /opt/mtink If the printer.desc file is found, the remaining directories are not scanned. If you want to modify the description for one of the given printers, extract the data with rdPrtDesc and modify the value for the wanted file, then copy the resulting printer.desc file to one of the above directory. The description find into the printer.desc file prevail. Compiling a new printer into ttink/mtink: ----------------------------------------- generate your printer.desc file under the directory .../mtink/utils and call rdPrtDesc -c > ../model.c The file for actual printers and the new one is then automatically generated. return then to the mtink directory and call make and make install. mtink-1.0.16/utils/Ttink.hu0000644000076400001540000001250510376041214013641 0ustar jjfuse!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Magyar forrs fjl a ttink-hez. ! Ez a fordtnak szl. ! ! Ez a fjl norml X-forrs fjlknt van felptve ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! ez egy megjegyzs karakter ha egy sor elejn tallhat. ! ! ! .syntax1: ez egy kulcssz. ! .De.syntax: kulcs a szveg helynek meghatrozshoz. ! mindkt karaktere - ebben az esetben a De - a LANG, LC_ALL ! krnyezeti vltozbl kaphat. Az els betje ! nagybet, a msodik kisbets marad. ! Ha fordtja ezt a fjlt, krem helyettestse az .En.-t a ! helyes rtkre (jelen esetben .Hu.). ! ! \ egy sor vgnl (space s tabultor nincs ! engedlyezve) mutatja, hogy az aktulis sor befejezdtt. ! ! \ text szveg azonostshoz. Ez csak a kulcsz utn ! kvetelmny. Ha csak a \ karakter van jelen, a szkz ! el van tvoltva. ! ! \n Ez egy sor elejre llts. Az utna kvetkez szveg ! kirdik a kvetkez sorban. ! ! Krem figyeljen, hogy a szkzket s a sorvgeket ne ! tvoltsa el. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .Hu.syntax1:\ Arguments for .Hu.syntax2:\ Ktelez:\n\ -d eszkz_fjl --device eszkz_fjl\n\ Tetszleges:\n\ -m name --modell neve vagy szma\n\ enlkl a nyomtat automatikusan detektldik\n\ Parancsok (csak egy parancsot lehet kiadni):\n\ -r --megszakts\n\ -c --trls\n\ -n --fvka ellenrzs\n\ -s --llapot (alapeset)\n\ -a --fejigazts\n\ -e --tinta csere (nem minden nyomtat)\n\ -i --azonosts nyomtat azonosts kirsa\n\ Info:\n\ -v --verzi nyomtats verzi\n\ -l --nyomtat lista ismert nyomtatk listja\n .Hu.syntaxM:\ Parancsok (csak egy parancsot lehet kiadni):\n\ -r --megszakts\n\ -c --trls\n\ -n --fvka ellenrzs\n\ -s --llapot (alapeset)\n\ -a --fejigazts\n\ -e --tinta csere (nem minden nyomtat)\n\ -i --azonosts nyomtat azonosts kirsa\n\ Info:\n\ -v --verzi nyomtats verzi\n\ -l --nyomtat lista ismert nyomtatk listja\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages .Hu.noAccess:\ Nincs hozzfrs az eszkzfjlhoz, vagy nincs csatlakoztatott nyomtat. .Hu.noDetected:\ Nem tudom detektlni a nyomtat modellt. .Hu.unknownModel:\ Sajnlom, ismeretlen modell. .Hu.noOPen:\ Sajnlom, nem tudom megnyitni az eszkzfjlt. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on .Hu.continue:\ Folytats (igen/nem) [nem] ? : .Hu.yesorno: in .Hu.saveCancel: mv .Hu.blackQ: fekete .Hu.colorQ: sznes !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status .Hu.black: Fekete .Hu.cyan: Cin .Hu.magenta: Bbor .Hu.yellow: Srga .Hu.lcyan: Fnyl cin .Hu.lmagenta: Fnyl bbor .Hu.lblack: Fnyl fekete .Hu.printerState: nyomtat llapot .Hu.unknown: ismeretlen .Hu.selfTest: nteszt .Hu.busy: foglalt .Hu.printing: nyomtats .Hu.cleaning: tisztts .ok: Ok .Hu.error: Hiba .Hu.interfaceNotSelected: Interfsz nincs kivlasztva .Hu.paperJamError: Papr akads hiba .Hu.inkOutError: Tintakifogys hiba .Hu.paperOutError: Nincs papr hiba !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment .Hu.alignWarning:\ Figyelem !\nEz megronglhatja a nyomtatt. .Hu.alignBlackOrColor:\ Fekete vagy sznes fej igaztsa? .Hu*firstHeadAlign:\ Krem helyezzen egy lapot a nyomtatba a\n\ fejigazts mvelete eltt. .Hu.nextHeadAlign:\ Krem ismt helyezzen egy lapot a nyomtatba\n\ a fejigazts folytatshoz. .Hu.lastHeadAlign:\ Krem vizsglja meg az utols mintt nagyon figyelmesen s gondoskodjon\n\ nyomtatja helyes belltsrl.\n\n\ Most lehet: Ment-eni az eredmnyeket a nyomtatba, vagy\n\ Visszavon-ni az eredmnyek mentse nlkl\n(ment/visszavon) [visszavon] : .Hu.choosePattern:\ Krem vizsglja meg a nyomtatst, s vlassza a legjobb sorprt\n\ az utoljra nyomtatott mintkbl.\n\ Helyezzen lapot a nyomtatba. .Hu.chooseCPattern:\ Vizsglja meg az igaztsi lapot, s hatrozza meg,\n\ melyik minta a legegyenletesebb.\n\ Ez a minta fog a legkevsb szemcszettnek ltszani.\n\ Ha tud egyenletes mintt tallni, krem\n\ vlassza a legjobb minta szmt, s\n\ ismtelje meg a folyamatot.\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge .Hu.functionNA:\ Ez a funkci nem elrhet a nyomtatjhoz. .Hu.askDoExchange:\ Valban tintapatront akar cserlni (Igen/Nem) [Nem] ? : .Hu.adviseMoveCartridge:\ A tintapatron most cserepozciba fog mozogni. .Hu.adviseExchangeCartridge:\ Krem cserlje ki a tintapatront most. .Hu.askExDone:\ Csere rendben (igen/nem) [nem] ? : .Hu.adviseFillCartridge:\ A tintafeltlts most indul. .Hu.adviseExchangeDone:\ Tintapatron csere rendben. .Hu.communicationError:\ rsi vagy olvassi hiba a nyomtatbl/nyomtatba ! .Hu.exchangeError:\ A nyomtat egy hibt ad vissza, amikor a tintapatron cserje ktelez ! mtink-1.0.16/utils/rdPrtDesc.Hu.txt0000644000076400001540000001375010376041214015223 0ustar jjfuserdPrtDesc: ---------- Ez a segdprogram teszi lehetv az mtink/ttink-hez szksges nyomtatler adatok bvtst s rja azt egy olvashat formtumba. Ha sajt lerst szolgltat, a ler fjl olvasdik s kszt egy j d fjlt minden adattal, amelyik a trgyhoz tartozik. Syntax: rdPrtDesc -p|-c -p rdPrtDes alkotja az olvashat fjlt, amelyik tartalmazni fog minden ismert nyomtatt. -c rdPrtDes olvassa a printer.desc fjlt, aminek az aktulis knyvtrban kell tartzkodnia, s generl egy j c fjlt amit a ttink/mtinkhez tud hasznlni. Az j s az eddigi ler fjl adatai ssze vannak olvasztva. FILE printer.desc: ------------------ Ez a fjl blokkokat tartalmazm amelyek lerjk a nyomtat adottsgait. gy nz ki egy blokk: .PRINTER .name: Stylus C20SX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: OLD D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .alignFunctionName: - .END A .PRINTER sz jelenti, hogy egy j lers kvetkezik. A kvetkez szavakkal egszen az .END szig, de nem tartalmazva azt, vannak lerva a nyomtat tulajdonsgai. Krem ne kezdjen sort ponttal '.', ez a karakter jelzs a ttink/mtink valamint a rdPrtDesc segtsg programnak, hogy egy ler sor kvetkezik. A .name: sz tartalmazza a nyomtat nevt, ahogy visszatr a nyomtat nv krsnl. A .colorsNb: jelzi az ttink/mtink-nek, hogy hnyfle tinta van hasznlatban. A vgn Prot-tal szerkesztve: jelzi, hogy a programok melyik protokollt hasznljk. Az jabb nyomtatk ismernek egy j protokollt, amit D4-nek neveznek. Ez az j protokoll engedi kommuniklni a nyomtatt fggetlen csatornkon. Ez engedi pldul a maradvny tinta mennyisgnek, vagy a nyomtat llapotnak lekrdezst nyomtats kzben. A D4 protokoll szintn tartalmaz egy parancskszletet, gy hogy a legtbb rgi parancs ki lett cserlve. Sajnos nem minden nyomtat knlja a D4 parancsok teljes kszlett. Ennek ksznheten s a kompatibilitsnak a meghajtkhoz, amelyek nem ismreik a D4 protokollt, a legjobb jelezni a nyomtatnak, hog a D4 protokoll nincs engedlyezve. Ennek megfelelen a kvetkez kombincis rtkek lehetsgesek: - OLD A nyomtat nem tud semmit a D4-rl. - OLD D4 Nem D4 parancsot hasznl, de ezt a D4 protokollon t kldi. - OLD EXD4 Hasznljon szablyos parancsokat s lltsa a nyomtatt a kompatibilis mdba. - D4 A nyomtat ismeri a specilis D4 parancsot, hasznlja ezt. A .mainProt sz: meghatrozza az alaprtelemezett mdot. A .resetProt sz: A protokoll tpus megatrozsa a reset parancs legjobb hasznlathoz. D4 nyomtatk mind ismerhetik ezt a parancsot, de nem hajtjk vgre a mveletet megfelelen (pldul: Stylus Color 980 vagy a Stylus Scan ...). A .alignProt sz: Ez a parancs ltszik, hogy nem egy D4 msolat s mindig a klasszikus parancs lesz hasznlatban. Itt csak D4-et (OLD belertve) lehet meghatroznia. A sz a vgn Flg-vel: jelzi, ha a nyomtat egyni tulajdonsg. A kijellt rtk lehet True vagy False. A .stateFlg sz: Jelzi, ha a nyomtat vissza tud trni, ha az foglalt, mkdik... A .cleanSeparateFlg sz: nhny nyomtat kln-kln engedi a fvkkat tiszttani. Ezen nyomtatk meghatrozsa True. A .idFlg sz: A Stylus Scan 2500 s taln a Stylus Scan 2000 nem fog azonostst visszaadni. Ilyen modellhez ezt False-ra kell lltani. A .exchangeFlg sz: Nhny nyomtatn (Stylus Color 480/580) nem alkalmaztak kezelgombokat. Ezek a mveleteket szoftveres ton vgzik. Ilyen nyomtatkhoz az rtk True. A .exchangeSeparateFlg sz: az elbb emltett kt nyomtatnak szksge van egy nyomtatpatron kivlasztsra, ami a cserhez kell. Az rtket True-ra kell belltani. Tbb nyomtat, mint a Stylus Photo 890 szoftveres ton is engedi a tintapatron cserjt. Ha ezt a lehetsget akarod hasznlni, lltsd be a flag .exchangeFlg-et True-ra s a .exchangeSeparateFlg-et False-ra. A maradk szavak, vgkn Nb-vel: - .passesNb: - .ChoicesNb: - .colorPassesNb: - .colorChoicesNb: a fejllts folyamathoz vannak. Az els kt bejegyzs jelzi, mennyi engedlyre van szksged, s mennyi vlaszts van engedlyezve. Ezeket az rtkek az EPSON ltal szolgltatott Windows vagy MacOs meghajtkban lthatk. Ha a nyomtat nem enged egy belltst a sznes fejhez, lltsd az .colorChoicesNb rtkt 0-ra. Az utols kulcssz, az .alignFunctionName specilisan a Stylus Photo 820 miatt kerlt bevezetsre. Ez a nyomtat nem kapott egy szerkezeti kdot, amelyik nyomtat egy mintt. A minta szksges a ttink/mtink szmra. A Stylus Photo 820-hoz rja be Pattern820, a tbbi rtk belltsa "- ". Egy printer.desc fjl teleptse: ------------------------------ Ttink/Mtink a printer.desc fjl megtallsra egyik kvetkez knyvtrban szmt: - /usr/lib/mtink - /usr/local/lib/mtink - /opt/mtink Ha a printer.desc fjlt megtallta, a maradk knyvtrak nincsenek tovbb kutatva. Ha mdostani akarja egy adott nyomtat lerst ,vegyeki az adatot rdPrtDesc-vel s mdostsa az rtket a keresett fjlhoz, azutn msolja az eredmny printer.desc fjlt egy fent emltett knyvtrhoz. A lers felismers a printer.desc fjlban rvnyesl. Egy j nyomtat beszerkesztse a ttink/mtink-be: ----------------------------------------- Hozza ltre a sajt printer.desc fjlt a .../mtink/utils knyvtr alatt s hvja a rdPrtDesc -c > ../model.c -t A fjl a jelenlegi s az j nyomtathoz ekkor automatikusan generldik. Ezutn trjen vissza az mtink knyvtrhoz s hvja a make-t s a make install-t. mtink-1.0.16/utils/Ttink.fr0000644000076400001540000001551510664052660013647 0ustar jjfuse!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! French resource file for ttink. ! Ce fichier est destine aux traducteurs. ! ! Ce fichier a le meme format qu'un fichier X-resources. ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! dbute un commmentaire s'il apparait au dbut d'une ! ligne. ! ! .syntax1: est un mot clef. ! .Fr.syntax: est le mot clef pour la version francaise. ! Les lettres F et r sont gnres a partir des variables ! d'environement LANG, LC_ALL et LC_MESSAGE. La premiere ! lettre est transforme en majuscule, la seconde n'est pas ! modifie. ! Si vous traduisez ce texte,remplacer .Fr. par ! la chaine de charactere correspondant votre langue. ! ! \ En fin de ligne (les espaces et tabulateurs ne sont pas ! admis) \ signifie que le texte continue sur la ligne ! suivante. ! ! \ texte permet d'inserer des espaces en dbut du texte. ! ! \n Ceci signifie retour chariot, le texte est continu ! sur la ligne suivante. ! ! \t reprsente un tabulateur. ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .Fr.syntax1:\ Arguments pour .Fr.syntax2:\ Obligatoire:\n\ -d device_file --device fichier_interface\n\ En option:\n\ -m name--model nom ou numro\n\ L'imprimante est autodtecte si cette\n\ option n'est pas prsente\n\ -D --D4 force l'utilisation exclusive du protocolle D4\n\ Commandes (une seule commande est admise):\n\ -r --reset remise a zro\n\ -c --clean nettoyage des buses\n\ -n --nozzle-check test des buses\n\ -s --status (commande par defaut)\n\ -a --align-head alignement des ttes\n\ -e --exchange-ink remplacemrnt des cartouches (seulement\n\ quelques imprimantes)\n\ -i --identity retourne l'identit de l'imprimante\n\ Informations:\n\ -v --version affiche la version\n\ -l --list-printer liste des imprimantes connues\n\ Divers:\n\ -L Impression du protocol D4 sur stderr\n\ -u Impression des textes avec UTF-8\n .Fr.syntaxM:\ En option:\n\ -D --D4 force l'utilisation exclusive du protocolle D4\n\ Commandes (une seule commande est admise):\n\ -r --reset remise a zro\n\ -c --clean nettoyage des buses\n\ -n --nozzle-check test des buses\n\ -s --status (commande par defaut)\n\ -a --align-head alignement des ttes\n\ -e --exchange-ink remplacemrnt des cartouches (seulement\n\ quelques imprimantes)\n\ -i --identity retourne l'identit de l'imprimante\n\ Informations:\n\ -v --version affiche la version\n\ -l --list-printer liste des imprimantes connues\n\ Divers:\n\ -L Impresson du protocol D4 sur stderr\n\ -u Impression des textes avec UTF-8\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages .Fr.noAccess:\ Pas d'accs au fichier d'interface ou imprimante teinte. .Fr.noDetected:\ L'imprimante n'a pas t dtecte.. .Fr.unknownModel:\ modele inconnus .Fr.noOPen:\ Erreur l'ouverture du fichier d'interface. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on .Fr.continue:\ Continuer (oui/non) [non] ? : .Fr.yesorno: on .Fr.saveCancel: ea .Fr.blackQ: noir .Fr.colorQ: couleur .Fr.followingPrintersFound:\ Imprimantes detectes: .Fr.ChoosePrinter:\ Choississez l'imprimante !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status .Fr.black: noir .Fr.cyan: cyan .Fr.magenta: magenta .Fr.yellow: jaune .Fr.lcyan: cyan clair .Fr.lmagenta: magenta clair .Fr.lblack: noir photo/matte .Fr.blue: bleu .Fr.red: rouge .Fr.dyellow: jaune fonc .Fr.gloss: optimisation du glaage .Fr.grey: gris .Fr.llblack: gris .Fr.Lblack: gris clair .Fr.printerState: status imprimante .Fr.unknown: inconnu .Fr.selfTest: Test .Fr.busy: occupe .Fr.printing: impression .Fr.cleaning: nettoyage .Fr.ok: Ok .Fr.error: Erreur .Fr.interfaceNotSelected: Interface non slctionne .Fr.paperJamError: Erreur papier .Fr.inkOutError: Encre puise .Fr.paperOutError: Manque de papier !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment .Fr.alignWarning:\ Attention !\nCeci peut endommager l'imprimante. .Fr.alignBlackOrColor:\ Alignement tte noir ou couleur ? *firstHeadAlign:\ Inserez une feuille vierge dans l'imprimante, avant de commencer l'alignement des ttes. .Fr.nextHeadAlign:\ Reinserez la feuille de papier\n\ pour continuer la procdure d'alignement. .Fr.lastHeadAlign:\ Inspectez le rsultat soigneusement afin d'tre sur\n\ que les ttes de l'imprimante sont alignes correctement.\n\n\ Vous pouvez maintenant: enregistrer les rsultats dans l'imprimante\n\ ou annuler les modifications\n(engregistrer/annuler) [annuler] : .Fr.choosePattern:\ Inpectez les lignes imprimes et choisissez la meilleure paire\n\ de lignes.\n\ Reinserez la feuille dans l'imprimante.. .Fr.sampleNo:\ chantillon # .Fr.choosePattern2:\ Inpectez les lignes imprimes et choisissez la meilleure paire\n\ de lignes\n .Fr.chooseCPattern:\ Inspectez la feuille d'alignement et determinez l'chantillon\n\ le plus "lisse".\n\ Cet chantillon est celui qui semble tre le moins "granuleux".\n\ Si vous ne trouvez pas d'chantillon "lisse" choisissez le meilleur\n\ chantillon et rptez la procdure d'ajustage.\n\ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge .Fr.functionNA:\ Cette fonction n'est pas disponible pour votre imprimante. .Fr.askDoExchange:\ Voulez vous vraiment remplacer une cartouche (oui/non) [non] ? : .exchangeBlackOrColor: Choisissez la cartouche: .Fr.adviseMoveCartridge:\ La cartouche est amene en position de remplacement. .Fr.adviseExchangeCartridge:\ Remplacez la cartouche maintenant. .Fr.askExDone:\ Echange effectu (oui/non) [non] ? : .Fr.adviseFillCartridge:\ Le remplissage est enclench. .Fr.adviseExchangeDone:\ Remplacement cartouche termin. .Fr.communicationError:\ Erreur pour lecture ou criture sur l'imprimante ! .Fr.exchangeError:\ L'imprimante a retourn une erreur pour la fonction de remplacement ! mtink-1.0.16/utils/bldRes.De.txt0000644000076400001540000000037110376041214014513 0ustar jjfusebldRes: Dieses Programm liest die angegebene Ressourcen-Dateien und erzeugt eine .c-Datei. Die Ausgabe erfolgt auf der Konsole. Syntax: bldRes resource_datei_1 ..... Beispiel: bldRes ../Ttink.en ../Ttink.de | sed 's/^\.En//' > ../mainSrc/tres.c mtink-1.0.16/utils/bldRes.txt0000644000076400001540000000073010376041214014163 0ustar jjfusebldRes: This program read the given resource files and create a c-file which can be included in the main program. if the file name contain utf8, the resource name will be modified from '.De.*' to .De8.*' Syntax: bldRes resource_file_1 ..... The output is done on the console. If you whish to create the resource file, rtedirect the output to the wanted file. example: #bldRes Ttink.en Ttink.de > ../mainSrc/tres.c bldRes Ttink.?? Ttink.??.utf8 > ../mainSrc/tres.c mtink-1.0.16/utils/C42.align0000644000076400001540000001460710376041214013563 0ustar jjfuse1b 40 1b 40 1b 28 52 08 00 00 52 45 4d 4f 54 45 31 54 49 08 00 00 07 d5 0b 17 0f 03 18 1b 00 00 00 1b 28 52 08 00 00 52 45 4d 4f 54 45 31 4c 43 02 00 00 01 53 4e 03 00 00 00 00 1b 00 00 00 1b 28 76 02 00 a0 00 1b 55 01 1b 6c 19 23 31 0d 0a 1b 40 1b 28 47 01 00 01 1b 2b 00 1b 28 55 05 00 04 04 01 a0 05 1b 28 65 02 00 00 13 1b 28 4b 02 00 00 01 1b 55 01 1b 28 44 04 00 a0 05 0c 04 1b 28 24 04 00 80 0f 00 00 1b 69 00 01 02 f0 00 30 00 [720] 00 c0 f2 00 0d 1b 28 76 02 00 31 00 1b 06 1b 55 03 1b 28 24 04 00 87 1d 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 86 1c 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 85 1b 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 84 1a 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 83 19 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 82 18 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 81 17 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 80 16 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 7f 15 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 7e 14 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 7d 13 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 7c 12 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 7b 11 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 7a 10 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 79 0f 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 76 02 00 90 00 1b 40 1b 55 01 1b 24 a0 00 31 1b 24 ab 00 32 1b 24 b6 00 33 1b 24 c1 00 34 1b 24 cc 00 35 1b 24 d7 00 36 1b 24 e2 00 37 1b 24 ed 00 38 1b 24 f8 00 39 1b 24 03 01 31 1b 24 0e 01 31 1b 24 19 01 31 1b 24 24 01 31 1b 24 2f 01 31 1b 24 3a 01 31 0d 0a 1b 24 03 01 30 1b 24 0e 01 31 1b 24 19 01 32 1b 24 24 01 33 1b 24 2f 01 34 1b 24 3a 01 35 0d 0a 0d 0a 1b 55 01 1b 6c 19 23 32 0d 0a 1b 40 1b 28 47 01 00 01 1b 2b 00 1b 28 55 05 00 04 04 01 a0 05 1b 28 65 02 00 00 10 1b 28 4b 02 00 00 01 1b 55 01 1b 28 44 04 00 a0 05 0c 04 1b 28 24 04 00 80 0f 00 00 1b 69 00 01 02 f0 00 30 00 [720] 00 c0 f2 00 0d 1b 28 76 02 00 31 00 1b 06 1b 55 03 1b 28 24 04 00 87 1d 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 86 1c 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 85 1b 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 84 1a 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 83 19 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 82 18 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 81 17 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 80 16 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 7f 15 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 7e 14 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 7d 13 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 7c 12 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 7b 11 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 7a 10 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 24 04 00 79 0f 00 00 1b 69 00 01 02 10 00 30 00 [48] 00 c0 f2 00 0d 1b 28 76 02 00 90 00 1b 40 1b 55 01 1b 24 a0 00 31 1b 24 ab 00 32 1b 24 b6 00 33 1b 24 c1 00 34 1b 24 cc 00 35 1b 24 d7 00 36 1b 24 e2 00 37 1b 24 ed 00 38 1b 24 f8 00 39 1b 24 03 01 31 1b 24 0e 01 31 1b 24 19 01 31 1b 24 24 01 31 1b 24 2f 01 31 1b 24 3a 01 31 0d 0a 1b 24 03 01 30 1b 24 0e 01 31 1b 24 19 01 32 1b 24 24 01 33 1b 24 2f 01 34 1b 24 3a 01 35 0d 0a 0d 0a 1b 55 01 1b 6c 19 23 33 0d 0a 1b 40 1b 28 47 01 00 01 1b 2b 00 1b 28 55 05 00 04 04 01 a0 05 1b 28 65 02 00 00 12 1b 28 4b 02 00 00 01 1b 55 01 1b 28 44 04 00 a0 05 0c 03 1b 28 24 04 00 48 0f 00 00 1b 69 00 01 02 4a 01 30 00 [720] 00 c0 ec 00 0d 1b 28 76 02 00 31 00 1b 06 1b 55 03 1b 28 24 04 00 bf 1d 00 00 1b 69 00 01 02 16 00 30 00 [48] 00 c0 ec 00 0d 1b 28 24 04 00 b6 1c 00 00 1b 69 00 01 02 16 00 30 00 [48] 00 c0 ec 00 0d 1b 28 24 04 00 ad 1b 00 00 1b 69 00 01 02 16 00 30 00 [48] 00 c0 ec 00 0d 1b 28 24 04 00 a4 1a 00 00 1b 69 00 01 02 16 00 30 00 [26] 00 c0 ec 00 [1] 00 40 40 0a [1] 1c 00 01 c0 [21] ec 00 00 c0 [1] ec 00 0d 1b 0d 1b 28 24 04 00 9b 19 00 00 1b 69 00 01 02 16 00 30 00 [48] 00 c0 ec 00 0d 1b 28 24 04 00 92 18 00 00 1b 69 00 01 02 16 00 30 00 [48] 00 c0 ec 00 0d 1b 28 24 04 00 89 17 00 00 1b 69 00 01 02 16 00 30 00 [48] 00 c0 ec 00 0d 1b 28 24 04 00 80 16 00 00 1b 69 00 01 02 16 00 30 00 [48] 00 c0 ec 00 0d 1b 28 24 04 00 77 15 00 00 1b 69 00 01 02 16 00 30 00 [48] 00 c0 ec 00 0d 1b 28 24 04 00 6e 14 00 00 1b 69 00 01 02 16 00 30 00 [48] 00 c0 ec 00 0d 1b 28 24 04 00 65 13 00 00 1b 69 00 01 02 16 00 30 00 [48] 00 c0 ec 00 0d 1b 28 24 04 00 5c 12 00 00 1b 69 00 01 02 16 00 30 00 [48] 00 c0 ec 00 0d 1b 28 24 04 00 53 11 00 00 1b 69 00 01 02 16 00 30 00 [48] 00 c0 ec 00 0d 1b 28 24 04 00 4a 10 00 00 1b 69 00 01 02 16 00 30 00 [48] 00 c0 ec 00 0d 1b 28 24 04 00 41 0f 00 00 1b 69 00 01 02 16 00 30 00 [48] 00 c0 ec 00 0d 1b 28 76 02 00 90 00 1b 40 1b 55 01 1b 24 a0 00 31 1b 24 ab 00 32 1b 24 b6 00 33 1b 24 c1 00 34 1b 24 cc 00 35 1b 24 d7 00 36 1b 24 e2 00 37 1b 24 ed 00 38 1b 24 f8 00 39 1b 24 03 01 31 1b 24 0e 01 31 1b 24 19 01 31 1b 24 24 01 31 1b 24 2f 01 31 1b 24 3a 01 31 0d 0a 1b 24 03 01 30 1b 24 0e 01 31 1b 24 19 01 32 1b 24 24 01 33 1b 24 2f 01 34 1b 24 3a 01 35 0d 0a 0d 0a 0c 1b 28 52 08 00 00 52 45 4d 4f 54 45 31 4c 43 02 00 00 00 1b 00 00 00 1b 40 1b 40 1b 28 52 08 00 00 52 45 4d 4f 54 45 31 4a 45 01 00 00 1b 00 00 00 1b 40 1b 40 1b 28 52 08 00 00 52 45 4d 4f 54 45 31 44 41 04 00 00 00 00 01 44 41 04 00 00 01 00 01 44 41 04 00 00 02 00 06 1b 00 00 00 1b 40 1b 40 1b 28 52 08 00 00 52 45 4d 4f 54 45 31 4a 45 01 00 00 1b 00 00 00 1b 40 1b 40 1b 28 52 08 00 00 52 45 4d 4f 54 45 31 53 56 00 00 1b 00 00 00 1b 40 1b 40 1b 28 52 08 00 00 52 45 4d 4f 54 45 31 4a 45 01 00 00 1b 00 00 00 mtink-1.0.16/utils/Ttink.hu.utf80000644000076400001540000001311710664610365014537 0ustar jjfuse!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Magyar forrás fájl a ttink-hez. ! Ez a fordítónak szól. ! ! Ez a fájl normál X-forrás fájlként van felépítve ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! ez egy megjegyzés karakter ha egy sor elején található. ! ! ! .syntax1: ez egy kulcsszó. ! .De.syntax: kulcs a szöveg helyének meghatározásához. ! mindkét karaktere - ebben az esetben a De - a LANG, LC_ALL ! környezeti változóból kapható. Az elsõ betûje ! nagybetû, a második kisbetûs marad. ! Ha fordítja ezt a fájlt, kérem helyettesítse az .En.-t a ! helyes értékre (jelen esetben .Hu.). ! ! \ egy sor végénél (space és tabulátor nincs ! engedélyezve) mutatja, hogy az aktuális sor befejezõdött. ! ! \ text szöveg azonosításához. Ez csak a kulcszó után ! követelmény. Ha csak a \ karakter van jelen, a szóköz ! el van távolítva. ! ! \n Ez egy sor elejére állítás. Az utána következõ szöveg ! kiíródik a következõ sorban. ! ! Kérem figyeljen, hogy a szóközöket és a sorvégeket ne ! távolítsa el. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .Hu.syntax1:\ Arguments for .Hu.syntax2:\ Kötelezõ:\n\ -d eszköz_fájl --device eszköz_fájl\n\ Tetszõleges:\n\ -m name --modell neve vagy száma\n\ enélkül a nyomtató automatikusan detektálódik\n\ Parancsok (csak egy parancsot lehet kiadni):\n\ -r --megszakítás\n\ -c --törlés\n\ -n --fúvóka ellenõrzés\n\ -s --állapot (alapeset)\n\ -a --fejigazítás\n\ -e --tinta csere (nem minden nyomtató)\n\ -i --azonosítás nyomtató azonosítás kiírása\n\ Info:\n\ -v --verzió nyomtatás verzió\n\ -l --nyomtató lista ismert nyomtatók listája\n .Hu.syntaxM:\ Parancsok (csak egy parancsot lehet kiadni):\n\ -r --megszakítás\n\ -c --törlés\n\ -n --fúvóka ellenõrzés\n\ -s --állapot (alapeset)\n\ -a --fejigazítás\n\ -e --tinta csere (nem minden nyomtató)\n\ -i --azonosítás nyomtató azonosítás kiírása\n\ Info:\n\ -v --verzió nyomtatás verzió\n\ -l --nyomtató lista ismert nyomtatók listája\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages .Hu.noAccess:\ Nincs hozzáférés az eszközfájlhoz, vagy nincs csatlakoztatott nyomtató. .Hu.noDetected:\ Nem tudom detektálni a nyomtató modellt. .Hu.unknownModel:\ Sajnálom, ismeretlen modell. .Hu.noOPen:\ Sajnálom, nem tudom megnyitni az eszközfájlt. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on .Hu.continue:\ Folytatás (igen/nem) [nem] ? : .Hu.yesorno: in .Hu.saveCancel: mv .Hu.blackQ: fekete .Hu.colorQ: színes !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status .Hu.black: Fekete .Hu.cyan: Cián .Hu.magenta: Bíbor .Hu.yellow: Sárga .Hu.lcyan: Fénylõ cián .Hu.lmagenta: Fénylõ bíbor .Hu.lblack: Fénylõ fekete .Hu.printerState: nyomtató állapot .Hu.unknown: ismeretlen .Hu.selfTest: önteszt .Hu.busy: foglalt .Hu.printing: nyomtatás .Hu.cleaning: tisztítás .ok: Ok .Hu.error: Hiba .Hu.interfaceNotSelected: Interfész nincs kiválasztva .Hu.paperJamError: Papír akadás hiba .Hu.inkOutError: Tintakifogyás hiba .Hu.paperOutError: Nincs papír hiba !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment .Hu.alignWarning:\ Figyelem !\nEz megrongálhatja a nyomtatót. .Hu.alignBlackOrColor:\ Fekete vagy színes fej igazítása? .Hu*firstHeadAlign:\ Kérem helyezzen egy lapot a nyomtatóba a\n\ fejigazítás mûvelete elõtt. .Hu.nextHeadAlign:\ Kérem ismét helyezzen egy lapot a nyomtatóba\n\ a fejigazítás folytatásához. .Hu.lastHeadAlign:\ Kérem vizsgálja meg az utolsó mintát nagyon figyelmesen és gondoskodjon\n\ nyomtatója helyes beállításáról.\n\n\ Most lehet: Ment-eni az eredményeket a nyomtatóba, vagy\n\ Visszavon-ni az eredmények mentése nélkül\n(ment/visszavon) [visszavon] : .Hu.choosePattern:\ Kérem vizsgálja meg a nyomtatást, és válassza a legjobb sorpárt\n\ az utoljára nyomtatott mintákból.\n\ Helyezzen lapot a nyomtatóba. .Hu.chooseCPattern:\ Vizsgálja meg az igazítási lapot, és határozza meg,\n\ melyik minta a legegyenletesebb.\n\ Ez a minta fog a legkevésbé szemcsézettnek látszani.\n\ Ha tud egyenletes mintát találni, kérem\n\ válassza a legjobb minta számát, és\n\ ismételje meg a folyamatot.\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge .Hu.functionNA:\ Ez a funkció nem elérhetõ a nyomtatójához. .Hu.askDoExchange:\ Valóban tintapatront akar cserélni (Igen/Nem) [Nem] ? : .Hu.adviseMoveCartridge:\ A tintapatron most cserepozícióba fog mozogni. .Hu.adviseExchangeCartridge:\ Kérem cserélje ki a tintapatront most. .Hu.askExDone:\ Csere rendben (igen/nem) [nem] ? : .Hu.adviseFillCartridge:\ A tintafeltöltés most indul. .Hu.adviseExchangeDone:\ Tintapatron csere rendben. .Hu.communicationError:\ Írási vagy olvasási hiba a nyomtatóból/nyomtatóba ! .Hu.exchangeError:\ A nyomtató egy hibát ad vissza, amikor a tintapatron cseréje kötelezõ ! mtink-1.0.16/utils/Ttink.sv0000644000076400001540000001376210376041214013663 0ustar jjfuse!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Svensk resursfil fr ttink. ! Swedish recourse file for ttink. ! This is for translators. ! ! This file is built like a normal X-resources file ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! is a commment character if it appears at the begin of a ! line. ! ! .syntax1: is ein key word. ! .En.syntax1: is the key for a localized text. ! both characters (in this case En) are taken from the ! environment variablea LANG, LC_ALL. The first letter ! will be set to upper case and the second remain normal. ! If you translate this file, please replace .En. with ! the correct value. ! ! \ At the end of a line (following spaces and tabulators are ! not allowed) show that the actual line will be continued. ! ! \ text allow to indent the text. This will only be required after ! the key word. If no \ is present, spaces are removed. ! ! \n This is a carriage return. Following text will be ! printed in the next line. ! ! Please note that spaces at the end of a line will not ! be removed. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .Sv.syntax1:\ Argumenter fr .Sv.syntax2:\ Obligatorisk:\n\ -d apparatfil --device apparatfil\n\ Optional:\n\ -m namn --model namn eller nummer\n\ utan detta upptckas skrivaren automatiskt\n\ -D --D4 Anvnd alltid D4-protokollet\n\ Uppdrag (bara ett uppdrag kan ges):\n\ -r --reset Stt tillbaka skrivaren\n\ -c --clean Rengr munstycken\n\ -n --nozzle-check Testa munstycken\n\ -s --status (standarduppdrag)\n\ -a --align-head rt upp huvudet\n\ -e --exchange-ink utbyt patronen (inte alla skrivaren)\n\ -i --identity skriv ut skrivarens identitet\n\ Information:\n\ -v --version skriv ut versionsnummer\n\ -l --list-printer skriv ut lista av knda skrivaren\n\ Andra:\n\ -L debug ouput fr D4-protokollet p stderr\n\ -u utskrift med UTF-8-kod\n .Sv.syntaxM:\ Optional:\n\ -D --D4 Anvnd alltid D4-protokollet\n\ Uppdrag (bara ett uppdrag kan ges):\n\ -r --reset Stt tillbaka skrivaren\n\ -c --clean Rengr munstycken\n\ -n --nozzle-check Testa munstycken\n\ -s --status (standarduppdrag)\n\ -a --align-head rt upp huvudet\n\ -e --exchange-ink utbyt patronen (inte alla skrivaren)\n\ -i --identity skriv ut skrivarens identitet\n\ Information:\n\ -v --version skriv ut versionsnummer\n\ -l --list-printer skriv ut lista av knda skrivaren\n\ Andra:\n\ -L debug ouput fr D4-protokollet p stderr\n\ -u utskrift med UTF-8-kod\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages .Sv.noAccess:\ Ingen tillgng till apparatfilen eller ingen skrivare r ansluten. .Sv.noDetected:\ Kan inte bestmma skrivarens modell. .Sv.unknownModel:\ Oknd skrivare .Sv.noOPen:\ Kan inte ppna apparatfilen. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on .Sv.continue:\ Fortstta (ja/nej) [nej] ? : .Sv.yesorno: jn .Sv.saveCancel: sa .Sv.blackQ: svart .Sv.colorQ: frg .Sv.followingPrintersFound:\ Hittade fljande skrivare: .Sv.ChoosePrinter:\ Vlj skrivaren !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status .Sv.black: Svart .Sv.cyan: Cyan .Sv.magenta: Magenta .Sv.yellow: Gul .Sv.lcyan: Ljuscyan .Sv.lmagenta: Ljusmagenta .Sv.lblack: Foto/matt svart .Sv.blue: Bl .Sv.red: Rd .Sv.dyellow: Mrkgul .Sv.gloss: Glansoptimerare .Sv.printerState: skrivarens status .Sv.unknown: oknd .Sv.selfTest: sjlvtest .Sv.busy: upptagen .Sv.printing: skriver ut .Sv.cleaning: reningen pgr .Sv.ok: Ok .Sv.error: Fel .Sv.interfaceNotSelected: Grnssnittet r inte valt .Sv.paperJamError: Pappersstockningsfel .Sv.inkOutError: Blcket r slut .Sv.paperOutError: Pappret r slut !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment .Sv.alignWarning:\ Varning !\nDetta kunde frstra skrivaren. .Sv.alignBlackOrColor:\ Rta upp det svarta eller det frgade huvudet? .Sv*firstHeadAlign:\ Vnligen stt in en pappersark i din skrivare. .Sv.nextHeadAlign:\ Vnligen stt in igen arken i skrivaren fr att forstta processen. .Sv.lastHeadAlign:\ Vnligen granska den sista utskriften mycket noggrant fr\n\ att tillfrskra dig att skrivaren r instlld bra.\n\n\ Du kan nu: spara resultatet i skrivaren eller\n\ avbryta utan att spara resultatet\n(spara/avbryta) [avbryta] : .Sv.choosePattern:\ Vnligen granska utskriften och vlj paret med\n\ dom rakaste linjer frn det sista mnstret.\n\ Stt arken i skrivaren igen. .Sv.chooseCPattern:\ Granska arken med mnstren och faststll\n\ mnstret som r jmnast.\n\ Om du inte kan hitta ett jmnt mnster\n\ vlj nummret av det bsta mnstret,\n\ och repetera processen.\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge .Sv.functionNA:\ Denna funktion r inte tillgnglig fr din skrivare. .Sv.askDoExchange:\ Vill du utbyta en patron (ja/nej) [nej] ? : .Sv.exchangeBlackOrColor: Vlj patronen: .Sv.adviseMoveCartridge:\ Skrivhuvudet flyttas nu till utbytespositionen. .Sv.adviseExchangeCartridge:\ Du kan nu byta patronen. .Sv.askExDone:\ Utbyte klart (ja/nej) [nej] ? : .Sv.adviseFillCartridge:\ Pfyllning av blcket startas nu. .Sv.adviseExchangeDone:\ Utbyte av patronen r klar. .Sv.communicationError:\ Ls-/skrivfel p skrivaren! .Sv.exchangeError:\ Skrivaren svarar med fel vid begran av patronbyte! mtink-1.0.16/utils/Mtink.Tr0000644000076400001540000001333210376041214013602 0ustar jjfuse! File Mink.Tr, turkisch resources EpsonUtil.Tr*title_LB.fontList: *-helvetica-*-r-normal--14-*-*-*-*-*-iso8859-9 EpsonUtil.Tr*fontList: *-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-9 *Tr.tooltip_label.fontList: *-*-*-r-normal--14-*-*-*-*-*-iso8859-9 EpsonUtil.Tr*title_LB.labelString: EPSON UTILITIES V 0.9.12 EpsonUtil.Tr*legend_LB.labelString: Boya miktar EpsonUtil.Tr*ok_PB.labelString: k EpsonUtil.Tr*pref_PB.labelString: Ayarlamak EpsonUtil.Tr*about_PB.labelString: Bilgiler EpsonUtil.Tr*help_PB.labelString: Yardm EpsonUtil.Tr*check_PB.labelString: fle\nkontrol EpsonUtil.Tr*clean_PB.labelString: fle\ntemizlii EpsonUtil.Tr*align_PB.labelString: Balar\nAyarlamak EpsonUtil.Tr*reset_PB.labelString: Yeniden\nyerletir EpsonUtil.Tr*cartridge_PB.labelString: Boya\ndeiecek EpsonUtil.Tr*addPrinterTxt: Baka Yazc EpsonUtil.Tr*printerState_LB.labelString: Status: EpsonUtil.Tr*state_LB.labelString: - EpsonUtil.Tr*noPrinter*messageString: Balantproblemi !\nLtfen Yazcy hatatalra ynelik konrl ediniz:\n"Kathatas", "Boyadurumu",\n"Yazc ak deil".\n\nDikkat baz Yazclarda\naldktan bir ka saniye sonra\nbalant kesilebilir. EpsonUtil.Tr*noPrinter*dialogTitle: Yanl EpsonUtil.Tr*cfg1_LB.labelString: Yazc seimi: EpsonUtil.Tr*cfg2Printer_PB.labelString: Yazc seimi: EpsonUtil.Tr*cfg2Device_PB.labelString: Port seimi: EpsonUtil.Tr*next_PB.labelString: Devam EpsonUtil.Tr*next: Devam EpsonUtil.Tr*previous_PB.labelString: Geri EpsonUtil.Tr*previous: Geri EpsonUtil.Tr*save: Hafzaya al EpsonUtil.Tr*cancel: Bitir EpsonUtil.Tr*ok: OK EpsonUtil.Tr*about:\ EPSON Utilities\n\ \nVersion V 0.9.12\n\ \n\ Copyright: Jean-Jacques Sarton 2001\n\ \n\ Email: jj.sarton@t-online.de\n\ \n\ URL: http://xwtools.automatix.de\n\ \n\ Baz kod blmleri gimp-print projesinden alnmtr\n\ Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\n\ \n\ Tercuman: Hikmet Salar (Salar@gmx.de)\n\ Licence: GPL\n\ \n\ Teekkrler:\n\ Keith Amidon\n\ camalot@picnicpark.org\n\ Ronny Budzinske\n\ Nicola Fabiano\n\ ivololeribar@yahoo.it\n\ Tokai Ferenc\n\ Karlheinz Guenster\n\ Gene Heskett\n\ gene_heskett@iolinc.net\n\ Mogens Jger\n\ mogensjaeger@get2net.dk\n\ Till Kamppeter\n\ (leader Foomatic/www.linuxprinting.org project)\n\ http://www.linuxprinting.org/till\n\ Stefan Kraus\n\ sjk@weserbergland.de\n\ http://xwgui.automatix.de\n\ Rainer Krienke\n\ krienke@uni-koblenz.de\n\ Sylvain Le-Gall\n\ sylvain.le-gall@polytechnique.org\n\ Steven J. Mackenzie\n\ Raul Morales\n\ raul.mh@telefonica.net\n\ http://www.telefonica.net/web/ruten\n\ Simon Morlat\n\ Marc Riese\n\ Marc-Riese@gmx.de\n\ Hikmet Salar\n\ Salar@gmx.de\n\ Glen Stewart\n\ Daniel Tamm\n\ daniel@tamm-tamm.de\n\ http:/www.tamm-tamm.de\n http:/www.expedit.org\n\ Robert Wachinger\n\ nospam@robert-wachinger.de\n\ Klaus Wnschel\n\ klaus.wuenschel@knittelsheim-computer.de\n\ http:/www.knilse.de\n\ Alberto Zanoni. EpsonUtil.Tr*ctTxt0: Balk ayar:\n\nLtfen Yazcya bir bo kat koyunuz ve [devam] tuuna basnz. EpsonUtil.Tr*ctTxtC0: Balik ayar:\n\nLtfen Yazcya bir bo kat koyunuz, Ltfen Balk seiniz, sisah veya renkli ve sonra [Devam] ilemi yrtmek iin veya [Bitir]. EpsonUtil.Tr*ctTxt1: Ltfen, az nce Yazcdan kan rnei deerlendiriniz ve eniyi izgi elerini seiniz.\nKat tekrar Yazcya yerletiriniz ve [Devam] tuuna basnz. EpsonUtil.Tr*ctTxt1C: Yazcdan kan kata dikkatle baknz. En uygun rnei belirlemek iin nce rnee bakarak aaya (vertikal) yndeki en dzgn cizgiyi tesbit ediniz. Her izginin kendine ayit bir says olmak zere 1 ile 8 veya 15 saylar verilmistir. Saylar yerdarlndan, asaya doru sralanmakta. Ltfen O sayy tulaynz.\n\nLtfen, kat tekrar yazcya yerletiriniz ve [Devanm] tuuna basnz. EpsonUtil.Tr*ctTxtP: Kagt yazcdan kana kadar bekleyiniz ve sonra [Devam] tuuna basarak tasdikleyiniz. EpsonUtil.Tr*ctTxt5: Ltfen, datm grnts ile ilgili sonular iyi deerlendiriniz, ok zen gstererek ve Kagt tekrar Yazcya yerletiriniz.\n\nVe su seeneklerden birine karar veriniz:\n\n Yazcnn ayarn [Hafzaya al] veya\n ayarn hafzaya almadan [Bitir]. EpsonUtil.Tr*exTxt0: Boya deisilecek:\n\ntastikleyiniz :\n\n [Devam] ilemi devam ettirmek iin veya\n [Bitir] EpsonUtil.Tr*exTxt00: Boya deisilecek:\n\nLtfen siyah veya renkli seeneklerden birine karar veriniz ve tasdikleyiniz:\n\n [Devam] ilemi yrtmek iin veya\n [Bitir] EpsonUtil.Tr*exTxt1: Boya degisilecek:\n\nBoya deitirme pozisyonu ayarlanyor EpsonUtil.Tr*exTxt2: Boya deiilecek:\n\nYeni Boya yerletiriniz ve\n\n [Devam] tuuna basnz EpsonUtil.Tr*exTxt3: Boya deiecek:\n\n Boya doldurma ilemi yryor. EpsonUtil.Tr*colors_RC*four_TB.labelString: 4 Renkler EpsonUtil.Tr*colors_RC*six_TB.labelString: 6 Renkler EpsonUtil.Tr*head_RC*col_TB.labelString: Renkli EpsonUtil.Tr*head_RC*bw_TB.labelString:Siyah EpsonUtil.Tr*noAccess*dialogTitle: Yanl EpsonUtil.Tr*noAccess*messageString: Giri hakknz yok\nbalantbilgileri EpsonUtil.Tr*fsb*dialogTitle: Mtink EpsonUtil.Tr*fsb*CancelLabelString: Bitir EpsonUtil.Tr*fsb*okLabelString: OK EpsonUtil.Tr*fsb*applyLabelString: Filitre EpsonUtil.Tr*fsb*filterLabelString: Filitre EpsonUtil.Tr*fsb*fileListLabelString: Dosya EpsonUtil.Tr*fsb*dirListLabelString: Rehber EpsonUtil.Tr*browser_LB.labelString: Browser seiniz EpsonUtil.Tr*browser_PB.labelString: \ ...\ EpsonUtil.Tr*autodetect_TB.labelString: Otomatikmen bulmaya izin vermek EpsonUtil.Tr*save_PB.labelString: Hafzaya al EpsonUtil.Tr*cancel_PB.labelString: Bitir ! Printer state EpsonUtil.Tr*error:\ Error EpsonUtil.Tr*printing:\ Printing EpsonUtil.Tr*selfTest:\ Self Test EpsonUtil.De*busy:\ Busy EpsonUtil.Tr*ok:\ OK EpsonUtil.Tr*cleaning:\ Cleaning EpsonUtil.Tr*unknown:\ Unknown mtink-1.0.16/utils/bldMtinkResFile.sh0000755000076400001540000000017210376041214015564 0ustar jjfuse#!/bin/sh # create the file tres.c in the mainSrc directory LANG=C ./bldRes Mtink.gen Mtink.?? > ../mainSrc/resource.c mtink-1.0.16/utils/Mtink.Pf0000644000076400001540000002250310376041214013562 0ustar jjfuse! File Mtink.Pf, Pflzer ressources ! Datei Mtink.Pf, Plzer Ressourcen. ! ! Notiz fr bersetzer. Dies ist eine X-Ressource-Datei. ! Nachstehende Zeichensequenzen haben eine spezielle Bedeutung: ! \ Am Ende einer Zeile (Leerzeichen und Tabulatoren drfen nicht ! vorhanden sein) bedeutet, dass die Ressource in der nchste Zeile ! fortgesetzt werden. ! \n Dies steht fr eine Zeilenschaltung. ! \ (\ und Leerzeichen) Das Leerzeichen ist Teil der Zeichenkette. ! Leerzeichen am Anfang eine Zeichenkette werden normalerweise ! eliminiert. ! \t Steht fr ein Tabulatorzeichen. ! ! am Anfang einer Zeile (Leerzeichen drfen vorgesetzt sein) leitet ! ein Kommentar ein. ! ! Wenn Sie eine bersetzung vornehmen, ist die Sprachkennung innerhalb ! des Bezeichners einzutragen. ! Beispiel: ! Die default Ressource EpsonUtil*unknown ist auf Deutsch zu bersetzen ! ! EpsonUtil*unknown: unknown ! EpsonUtil.De*unknown: Unbekannt ! EpsonUtil ist der Klassennamen, .De muss nach den Klassennamen ! eingefgt werden. Soll von Deutsch nach Franzsisch bersetzt werden ! ist jeweils De durch Fr zu ersetzen. ! ! Die Sprachkennung besteht aus zwei Zeichen, welche aus der Umgebungsvariable ! LANG, LC_ALL und LC_MESSAGE entnommen werden. Der erste Buchstabe wird ! als Kapitlchen umgewandelt. ! ! Der bersichtlichkeit halber habe ich jede Ressource auf mehrere Zeilen ! umgebrochen. Dies sollte vor allem bei mehrzeiligen Texten die bersicht ! bezglich Formatierung verbessern. EpsonUtil.Pf*unknown: unbekannt ! Die Version wird beim Erstellen der C-Datei ersetzt. EpsonUtil.Pf*title_LB.labelString:\ EPSON UTILITIES V 0.9.12 EpsonUtil.Pf*legend_LB.labelString:\ Dindemeng EpsonUtil.Pf*ok_PB.labelString:\ Ferdich EpsonUtil.Pf.mainWindow.ok_PB.tooltip:\ Status-Monitor\n\ verlosse EpsonUtil.Pf*pref_PB.labelString:\ Eistellunge EpsonUtil.Pf*pref_PB.tooltip:\ - Agucker - Klnni Hilf,\n\ - Druggeranschluss\n\ - Drugger raussuche\n\ - Betriebsart EpsonUtil.Pf*about_PB.labelString: Iwwer EpsonUtil.Pf*about_PB.tooltip:\ Lizenz und\n\ Die hnn mitgemacht EpsonUtil.Pf*help_PB.labelString:\ Hilf EpsonUtil.Pf*help_PB.tooltip:\ Hilf in m Agucker azeiche EpsonUtil.Pf*check_PB.labelString:\ Dise \n\ prife EpsonUtil.Pf*check_PB.tooltip:\ Wann de Ausdruck strfe hot,\n\ kannscht kontrolliere ob\n\ die Dise dreggich sind. EpsonUtil.Pf*clean_PB.labelString:\ Dise \n\ sauwer mache EpsonUtil.Pf*clean_PB.tooltip: \ Wann de Ausdruck stfe hot, \ n\ un die Dise verstobbt sinn,\n\ kannschtse dodemit \n\ sauwer mache. EpsonUtil.Pf*align_PB.labelString:\ Kepp \n\ ausrichte EpsonUtil.Pf*align_PB.tooltip:\ Bass uff ! \n\ Des kennt de Drugger kabutt mache ! EpsonUtil.Pf*reset_PB.labelString:\ Drugger\n\ ricksetze EpsonUtil.Pf*reset_PB.tooltip:\ Des Ricksetze vum Drugger\n\ geht nid bei alle Sourde \n\ EpsonUtil.Pf*cartridge_PB.labelString:\ Badrone\n\ wechsle EpsonUtil.Pf*cartridge_PB.tooltip:\ Drugger uhne Schalder\n\ brauchen des. EpsonUtil.Pf*addPrinterTxt:\ Anre Drugger EpsonUtil.Pf*printerState_LB.labelString:\ Stadus: EpsonUtil.Pf*state_LB.labelString:\ - EpsonUtil.Pf*noPrinter*messageString:\ Kommunikationsproblem!\n\ Guggemol noch folgende Fehler:\n\ Babier orrer Dinde all, orrer,\n\ de Drugger esch nid eigschalde".\n\ \n\ S'kann sei, dass mansche Drugger fer\n\ paar Sekunde nochem Eischalde\n\ nid asprechbar sinn. EpsonUtil.Pf*noPrinter*dialogTitle:\ Fehler EpsonUtil.Pf*cfg1_LB.labelString:\ Drugger raussuche EpsonUtil.Pf*cfg2Printer_PB.labelString:\ Drugger raussuche EpsonUtil.Pf*cfg2Printer_PB.tooltip:\ Mit dere Lischt, kannscht der n Drugger raussuche. EpsonUtil.Pf*cfg2Device_PB.labelString:\ Aschluss raussuche: EpsonUtil.Pf*cfg2Device_PB.tooltip:\ Wenn de Mtink narre \n\ selwer bstimme \n\ kinnt ! EpsonUtil.Pf*next_PB.labelString:\ Weirer EpsonUtil.Pf*next:\ Weirer EpsonUtil.Pf*previous_PB.labelString:\ Redour EpsonUtil.Pf*previous:\ Redour EpsonUtil.Pf*save:\ Sichre EpsonUtil.Pf*cancel:\ Abbreche EpsonUtil.Pf*ok:\ Alles Klor EpsonUtil.Pf*about:\ EPSON Utilities\n\ \n\ Version V 0.9.12\n\ \n\ Copyright: Jean-Jacques Sarton 2001 \n\ \n\ Email: jj.sarton@t-online.de\n\ \n\ URL: http://xwtools.automatix.de\n\ \n\ Dle vum Code stammen vum Gimp-Print Projekt\n\ Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\n\ \n\ Lizenz: GPL\n\ \nDank an:\n\ Keith Amidon\n\ camalot@picnicpark.org\n\ Ronny Budzinske\n\ Nicola Fabiano\n\ ivololeribar@yahoo.it\n\ Tokai Ferenc\n\ Karlheinz Guenster\n\ Gene Heskett\n\ gene_heskett@iolinc.net\n\ Mogens Jger\n\ mogensjaeger@get2net.dk\n\ Till Kamppeter \n\ (leader Foomatic/www.linuxprinting.org project)\n\ http://www.linuxprinting.org/till\n\ Stefan Kraus\n\ sjk@weserbergland.de\n\ http://xwgui.automatix.de\n\ Rainer Krienke\n\ krienke@uni-koblenz.de\n\ Sylvain Le-Gall\n\ sylvain.le-gall@polytechnique.org\n\ Steven J. Mackenzie\n\ Raul Morales\n\ raul.mh@telefonica.net\n\ http://www.telefonica.net/web/ruten\n\ Simon Morlat\n\ Marc Riese\n\ Marc-Riese@gmx.de\n\ Hikmet Salar\n\ Salar@gmx.de\n\ Glen Stewart\n\ Daniel Tamm\n\ daniel@tamm-tamm.de\n\ http:/www.tamm-tamm.de\n http:/www.expedit.org\n\ Robert Wachinger\n\ nospam@robert-wachinger.de\n\ Klaus Wnschel\n\ klaus.wuenschel@knittelsheim-computer.de\n\ http:/www.knilse.de\n\ Alberto Zanoni. EpsonUtil.Pf*ctTxt0:\ Koppausrichte:\n\ \n\ Jetz emol leeres Blatt Babier in de Drugger leche un uff [Weirer] drigge. EpsonUtil.Pf*ctTxtC0:\ Koppausrichte:\n\ \n\ Jetz emol leeres Blatt Babier in de Drugger leche, de schwarze orrer de \ farwiche Druggkopp auswhle\nun dann [Weirer] fer weirermache orrer [Abbreche]. EpsonUtil.Pf*ctTxt1:\ Gugg der mol des grad gedruggde Muschder a, un such der die Beschde \ Linienpaare raus.\nnoch Blatt eileche und uff [Weirer] drigge. EpsonUtil.Pf*ctTxt1:\ Gugg der des gedruggde Blatt mol ganz genau a. Finn des Muschter raus, \ des de gradschde senkrechte Strich gwwe hot. Jeder Strich hot Zahl vun \ 1 bis 8, orrer ach bis 15, debei. Die Zahle stin aus Platzgrind \ unnernanner. Die Zahl glickschd a.\n\ \n\ Lech neies Blatt in de Drugger un drigg [Weirer]. EpsonUtil.Pf*ctTxtP:\ Ward bisses Blatt rauskummt un drigg dann [Weirer]. EpsonUtil.Pf*ctTxt5:\ Gugg der s'Ergebnis weche de Ausrichdung arch sourchfldich a. \ \n\nJetz kannschd: \n\n die Eistellung im Drugger [Sichre] \ orrer\n\ [Abbreche], uhne die Eistellunge zu iwwernemme. EpsonUtil.Pf*exTxt0:\ Batrone Wechsle: \n\ \n\ Drigg jetz: \n\ \n\ [Weirer] zum weirermache orrer\n\ [Abbruch]. EpsonUtil.Pf*exTxt00:\ Badrone Wechsle: \n\ \n\ Farb orrer Schwarz raussuche und drigg: \n\ \n\ [Weirer] zum weirermache orrer\n\ [Abbruch]. EpsonUtil.Pf*exTxt1:\ Badrone wechsle: \n\ \n\ De Wache fahrt in d' Wechselstellung. EpsonUtil.Pf*exTxt2:\ Badrone Wechsle: \n\ \n\ Neii Badron einsetze un:\n\ \n\ [Weirer] drigge. EpsonUtil.Pf*exTxt3:\ Badrone Wechsle: \n\ \n\ Dinde werd nochgfillt. EpsonUtil.Pf*capabilities_LB.labelString:\ Drugger Konfiguration: EpsonUtil.Pf*capabilities_RC*id_TB.labelString:\ Drugger gibt sei Identifikation zurick. EpsonUtil.Pf*capabilities_RC*reset_TB.labelString:\ Software-Reset kammer jetzt mache. EpsonUtil.Pf*capabilities_RC*state_TB.labelString:\ Drugger lifert Stadus Informatione. EpsonUtil.Pf*capabilities_RC*ex_TB.labelString:\ Dindewechsel per Software esch noudwennich. EpsonUtil.Pf*colors_RC*four_TB.labelString:\ 4 Farwe EpsonUtil.Pf*colors_RC*six_TB.labelString:\ 6 Farwe EpsonUtil.Pf*head_RC*col_TB.labelString:\ Farb EpsonUtil.Pf*head_RC*bw_TB.labelString:\ Schwarz EpsonUtil.Pf*noAccess*dialogTitle:\ Fehler EpsonUtil.Pf.scrTxt_MW.head_RC.bw_TB.tooltip:\ Operation mit de schwarze \n\ Dindebadrone ausfihre. EpsonUtil.Pf.scrTxt_MW.head_RC.col_TB.tooltip:\ Operation mit de farwiche \n\ Dindebadrone ausfihre. EpsonUtil.Pf*noAccess*messageString:\ K Zugriffsberechtichung uff die \n\ Schnittstelledateie.\n\ Stell sicher, dass mtink genung Zugriffsrechte\n\ griecht\n\ Gugg do devor in de Dokumentation noch. EpsonUtil.Pf*fsb*dialogTitle:\ Mtink EpsonUtil.Pf*fsb*CancelLabelString:\ Abbruch EpsonUtil.Pf*fsb*okLabelString:\ Alles Klor EpsonUtil.Pf*fsb*applyLabelString:\ Filder EpsonUtil.Pf*fsb*filterLabelString:\ Filder EpsonUtil.Pf*fsb*fileListLabelString:\ Dateie EpsonUtil.Pf*fsb*dirListLabelString:\ Ordner EpsonUtil.Pf*browser_LB.labelString:\ Agugger aussuche ! Achdung ' ' folcht des '\' Zeiche. EpsonUtil.Pf*browser_PB.labelString:\ ...\ EpsonUtil.Pf*browser_PB.tooltip:\ Agugger aussuche EpsonUtil.Pf*tooltip_TB.labelString:\ Klnnie Hilf EpsonUtil.Pf*tooltip_TB.tooltip:\ Die lschdich kl Hilfe\n\ kannschd dodemit \n\ ei und ausschalde. EpsonUtil.Pf*autodetect_TB.labelString:\ Automadische Erkennung erlauwe. EpsonUtil.Pf*autodetect_TB.tooltip:\ Mtink werd beim Start versuche, de\n\ Drugger selwer zu bestimme. \n\ Des funktioniert nid bei alle Drugger. EpsonUtil.Pf*save_PB.labelString: Sichre EpsonUtil.Pf*save_PB.tooltip: nrunge iwwernemme. EpsonUtil.Pf.ConfigureForm.cancel_PB.tooltip:\ nrunge nid iwwernemme,\n\ Maske verlosse. EpsonUtil.Pf*cancel_PB.labelString:\ Abbruch ! Drugger Stadus EpsonUtil.Pf*error:\ Fehler EpsonUtil.Pf*printing:\ Druggd EpsonUtil.Pf*selfTest:\ Selbscht Tescht EpsonUtil.Pf*busy:\ Beschftichd EpsonUtil.Pf*ok:\ Alles Klor EpsonUtil.Pf*cleaning:\ Sauwer mache EpsonUtil.Pf*unknown:\ Ubekannt mtink-1.0.16/utils/Mtink.Hu0000644000076400001540000002217310376041214013574 0ustar jjfuse! Mtink.Hu fjl, hungarian resource ! ! Megjegyzs fordtknak. Ez egy X-Resource fjl. A kvetkez ! a kvetkez karaktersorozatnak egy specilis jelentse van: ! \ egy sor vgn (nincs szkoz a \ jel utn): ! forrsfolytats a kvetkez sornl. ! \n Ez egy soremels. ! \ (\ s szkz) a szkz karakter engedlyezi a forrs ! sort. Rendes krlmnyek kztt a szkz a forrs elejn s ! vgn ki van zrva. ! \t Ez egy tabultorkarakterhez van. ! ! Ha ezt fordtja, a megfelel nyelvi megjellst kell alkalmaznia a ! kulcsbl. ! Pldul: ! A forrs alaprtelmezst EpsonUtil*unknown nmetre kell lefordtani: ! ! EpsonUtil*unknown: unknown ! EpsonUtil.De*unknown: Unbekannt ! EpsonUtil a programosztly neve, .De-t kell ezutn beszrni. ! ! A nyelvi megjells els kt karaktert rendes krlmnyek kztt ! a LANG s/vagy! LC_ALL, LC_MESSAGE krnyezeti vltozk tartalmazzk. ! Az els bett a fentiek szerint kell rni. EpsonUtil.Hu*unknown: ismeretlen ! A verzi szma a c-forrs fjlban van belltva! EpsonUtil.Hu*title_LB.labelString: EPSON Segdprogramok V 0.9.12 EpsonUtil.Hu*legend_LB.labelString: Tintamennyisg EpsonUtil.Hu*ok_PB.labelString: Kilps EpsonUtil.Hu*mainWindow.ok_PB.tooltip: Az llapotmonitor\nelhagysa. EpsonUtil.Hu*pref_PB.labelString: Belltsok EpsonUtil.Hu*pref_PB.tooltip:\ - Bngsz,\n\ - Mini segtsg,\n\ - Port vlaszts\n\ - Nyomtat kivlasztsa\n\ - Mkdsi md EpsonUtil.Hu*about_PB.labelString: Ksztk EpsonUtil.Hu*about_PB.tooltip:\ Engedly s\n\ kzremkdk EpsonUtil.Hu*help_PB.labelString: Segtsg EpsonUtil.Hu*help_PB.tooltip: Segtsg megjelentse egy bngszben. EpsonUtil.Hu*check_PB.labelString: Fvka\nellenrzs EpsonUtil.Hu*check_PB.tooltip:\ Egy tesztminta nyomtatsa\n\ fvkaduguls ellenrzshez.\n\ Eldugult fvkk res svokat\n\ okoznak a nyomtatson. EpsonUtil.Hu*clean_PB.labelString: Fvka\ntisztts EpsonUtil.Hu*clean_PB.tooltip:\ Ha a fvka nem OK,\n\ meg tudod tiszttani a fvkt\n\ ezzel EpsonUtil.Hu*align_PB.labelString: Fej\npozicionls EpsonUtil.Hu*align_PB.tooltip:\ Figyelem!\n\ Ez megronglhatja a nyomtatt. EpsonUtil.Hu*reset_PB.labelString: Nyomtat\nreset EpsonUtil.Hu*reset_PB.tooltip: Ez nem mkdik minden modellel. EpsonUtil.Hu*cartridge_PB.labelString: Tintapatron\ncsere EpsonUtil.Hu*cartridge_PB.tooltip:\ Ha a nyomtat nem\n\ ad kapcsolatot,\n\ erre lehet szksged. EpsonUtil.Hu*addPrinterTxt: Ms nyomtat EpsonUtil.Hu*printerState_LB.labelString: llapot: EpsonUtil.Hu*state_LB.labelString: - EpsonUtil.Hu*noPrinter*messageString:\ Problma a nyomtatkommunikcival,\n\ A hibk miatt krem ellenrizze a nyomtatt:\n\ "Kifogyott a papr", "Nincs tinta", "A nyomtat nincs bekapcsolva"\n\ \n\ Figyelmeztets, hogy nmely nyomtat lell nhny msodpercre \n\ a bekapcsols utn. EpsonUtil.Hu*noPrinter*dialogTitle: Hiba EpsonUtil.Hu*cfg1_LB.labelString: Nyomtat kivlasztsa: EpsonUtil.Hu*cfg2Printer_PB.labelString: Nyomtat kivlasztsa: EpsonUtil.Hu*cfg2Printer_PB.tooltip:\ A nyomtatk listjt ajnlom.\n\ Ott kivlaszthatja a modelljt. EpsonUtil.Hu*cfg2Device_PB.labelString: Port vlaszts: EpsonUtil.Hu*cfg2Device_PB.tooltip:\ A legjobb,\n\ ha az mtink\nhajtja vgre! EpsonUtil.Hu*next_PB.labelString: Kvetkez EpsonUtil.Hu*next: Kvetkez EpsonUtil.Hu*previous_PB.labelString: Elz EpsonUtil.Hu*previous: Elz EpsonUtil.Hu*save: Ments EpsonUtil.Hu*cancel: Visszavon EpsonUtil.Hu*ok: OK EpsonUtil.Hu*about:\ EPSON Segdprogramok\n\ \n\ Version V 0.9.12\n\ \n\ Szerzi jog: Jean-Jacques Sarton 2001\n\ \nEmail: jj.sarton@t-online.de\n\ \n\ URL: http://xwtools.automatix.de\n\ \n\ Kdkioszts a gimp-print projectbl kszlt\n\ Szerzi jog 2000 Robert Krawitz (rlk@alum.mit.edu)\n\ \n\ Engedly: GPL\n\ \n\ Ksznet:\n\ Keith Amidon,\n\ camalot@picnicpark.org\n\ Ronny Budzinske\n\ Nicola Fabiano\n\ ivololeribar@yahoo.it\n\ Tokai Ferenc\n\ Karlheinz Guenster\n\ Gene Heskett,\n\ gene_heskett@iolinc.net\n\ Till Kamppeter\n\ (vezet Foomatic/www.linuxprinting.org project)\n\ http://www.linuxprinting.org/till\n\ Stefan Kraus\n\ sjk@weserbergland.de\n\ http://xwgui.automatix.de\n\ Rainer Krienke\n\ krienke@uni-koblenz.de\n\ Sylvain Le-Gall\n\ sylvain.le-gall@polytechnique.org\n\ Steven J. Mackenzie\n\ Raul Morales\n\ raul.mh@telefonica.net\n\ http://www.telefonica.net/web/ruten\n\ Simon Morlat\n\ Marc Riese Marc-Riese@gmx.de\n\ Hikmet Salar\n\ Salar@gmx.de\n\ Glen Stewart\n\ Daniel Tamm\n\ daniel@tamm-tamm.de\n\ http:/www.tamm-tamm.de\n http:/www.expedit.org\n\ Robert Wachinger\n\ nospam@robert-wachinger.de\n\ Klaus Wnschel\n\ klaus.wuenschel@knittelsheim-computer.de\n\ http:/www.knilse.de\n\ Alberto Zanoni. EpsonUtil.Hu*ctTxt0:\ Krem helyezzen egy lapot a nyomtatba a fejigazts folyamata eltt.\n\ Nyomjon [Kvetkez]-t a folytatshoz\n\ vagy [Visszavon]-t a kilpshez. EpsonUtil*ctTxtC0:\ Krem helyezzen egy lapot a nyomtatba a fejigazts folyamata eltt.\n\ Vlasszon a Fekete vagy Sznes fej kztt s\n\ Nyomjon [Kvetkez]-t a kezdshez vagy [Visszavon]-t a kilpshez. EpsonUtil.Hu*ctTxt1:\ Krem vizsglja meg a nyomtatst, s vlassza az utols nyomtatsi minta legjobb sorprjt, azutn helyezzen paprt az adagolba\ns nyomja meg a [Kvetkez]-t a folytatshoz. EpsonUtil.Hu*ctTxt1C:\ Vizsglja meg az igaztsi lapot, s dntse el melyik minta a legegyenletesebb.\n\ Ez a minta fog a legkisebb szemcszetnek ltszani.\n\ Ha nen tudja kivlasztani az egyenletes mintt, krjk vlassza a legjobb\n\ minta szmt, s ismtelje meg az eljrst.\n\ Helyezzen lapot a nyomtatba s nyomja meg a [Kvetkez]-t a folytatshoz. EpsonUtil.Hu*ctTxtP:\ Krem vrja meg, amg a nyomtat lapot dob s nyomja meg a [Kvekez]-t a folytatshoz. EpsonUtil.Hu*ctTxt5:\ Krem vizsglja meg az utols nyomatot nagyon figyelmesen, hogy a nyomtat helyesen legyen belltva.\n\ \n\ Most lehet:\n\ \n\ az eredmnyek [Ments]-e a nyomtatba vagy\n\ [Visszavon]-s az eredmnyek mentse nlkl EpsonUtil.Hu*exTxt0:\ Tintapatron csere:\n\ \n\ Krem nyomjon :\n\ \n\ [Kvetkez]-t \a folytatshoz, vagy\n\ [Visszavon]-t EpsonUtil.Hu*exTxt00:\ Tintapatron csere:\n\ \n\ Krem vlasszon: fekete vagy sznes\n\ Nyomjon:\n\ \n\ [Kvetkez]-t a folytatshoz, vagy\n\ [Visszavon]-t EpsonUtil.Hu*exTxt1:\ Tintapatron csere:\n\ \n\ A fejilleszt a cserepozciba fog mozogni. EpsonUtil.Hu*exTxt2:\ Tintapatron csere:\n\ \n\ Illessze be az j patront s:\n\ \n\ nyomjon [Kvetkez]-t EpsonUtil.Hu*exTxt3:\ Tintapatron csere:\n\ \n\ "tintafeltlts" folyamat. EpsonUtil.Hu*colors_RC*four_TB.labelString: 4 szn EpsonUtil.Hu*colors_RC*six_TB.labelString: 6 szn EpsonUtil.Hu*head_RC*col_TB.labelString: sznes EpsonUtil.Hu*head_RC*bw_TB.labelString: fekete EpsonUtil.Hu*noAccess*dialogTitle: Hiba EpsonUtil.Hu*scrTxt_MW.head_RC.bw_TB.tooltip:\ Alkalmazza a parancsot\n\ a tintapatronra\n\ fekete tintval. EpsonUtil.Hu*scrTxt_MW.head_RC.col_TB.tooltip:\ Alkalmazza a parancsot\n\ a tintapatronra\n\ sznes tintval. EpsonUtil.Hu*noAccess*messageString:\ Nincs hozzfrs a nyomtat eszkzfjlhoz.\n\ \n\ Krem gyzdjn meg arrl, hogy az mtink elegend\n\ jogosultsggal rendelkezik az eszkzfjl elrshez.\n\ \n\ Hivatkozs szintn a dokumentcira. EpsonUtil.Hu*fsb*dialogTitle: Mtink EpsonUtil.Hu*fsb*CancelLabelString: Visszavon EpsonUtil.Hu*fsb*okLabelString: OK EpsonUtil.Hu*fsb*applyLabelString: Szr EpsonUtil.Hu*fsb*filterLabelString: Szr EpsonUtil.Hu*fsb*fileListLabelString: Fjlok EpsonUtil.Hu*fsb*dirListLabelString: Knyvtrak EpsonUtil.Hu*browser_LB.labelString: Vlasszon bngszt EpsonUtil.Hu*browser_PB.labelString: \ ...\ EpsonUtil.Hu*browser_PB.tooltip: Bngsz kivlasztsa EpsonUtil.Hu*tooltip_TB.labelString: Mini segtsg EpsonUtil.Hu*tooltip_TB.tooltip:\ Letilthatja\n\ a mini segtsget\n\ itt. EpsonUtil.Hu*autodetect_TB.labelString: Automatikus felismers engedlyezse. EpsonUtil.Hu*autodetect_TB.tooltip:\ Mtink az indtsnl fog prblkozni\n\ a csatlakoztatott nyomtatmodell megkeressvel.\n\ Ez nem mkdik minden nyomtatmodellel. EpsonUtil.Hu*save_PB.labelString: Ments EpsonUtil.Hu*save_PB.tooltip: A vltoztatsok elfogadsa. EpsonUtil.Hu*ConfigureForm.cancel_PB.tooltip:\ Ne alkalmazza a vltoztatsokat,\n\ a kongfigurci elhagysa. EpsonUtil.Hu*cancel_PB.labelString: Viszavon ! Printer state EpsonUtil.Hu*error: Hiba EpsonUtil.Hu*printing: Nyomtats EpsonUtil.Hu*selfTest: nteszt EpsonUtil.Hu*busy: Foglalt EpsonUtil.Hu*ok: OK EpsonUtil.Hu*cleaning: Tisztts EpsonUtil.Hu*unknown: Ismeretlen mtink-1.0.16/utils/rdPrtDesc.It.txt0000644000076400001540000001427610376041214015227 0ustar jjfuserdPrtDesc: ---------- Questo programma consente l'estrazione della descrizione dei dati della stampante necessari a ttink/mtink e li stampa in formato leggibile. Se dai la tua descrizione, il file di descrizione verr letto e potrai creare un nuovo file d con tutti i dati rilevanti. Sintassi: rdPrtDesc -p|-c -p rdPrtDes crea il file leggibile che include tutte le stampanti conosciute. -c rdPrtDes legge il file printer.desc nella directory corrente e genera un nuoco file c che pu essere usato da ttink/mtink. I dati relativi alla stampante noti e quelli presi dal file di descrizione vengono messi assieme. FILE printer.desc: ------------------ Questo file contiene blocchi blocchi che descrivono le possibilit della stampante. Un blocco cos fatto: .PRINTER .name: Stylus C20SX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: OLD D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .alignFunctionName: - .END La parola .PRINTER indica che inizia una nuova descrizione. Le parole successive, fino ad .END, essa esclusa, descrivono la possibilit della stampante. Non iniziare una linea con un punto '.': questo carattere indica a ttink/mtink ed al programma di aiuto rdPrtDesc che inizia una linea di descrizione. La parola .name: deve contenere il nome della stampante come risulta dalla richiesta nome stampante. .colorsNb: indica a ttink/mtink quanti inchiostri siano usati. Le indicazioni che terminano Prot: indicano ai programmi quale protocollo dev'essere usato. Le nuove stampanti conoscono un protocollo noto come protocollo D4. Questo nuovo protocollo permette di comunicare con la stampante tramite canali indipendenti. Questo permette per esempio di chiedere la quantit di inchiostro rimasto o lo stato della stampante durante la stampa. Il protocollo D4 include anche un insieme di comandi, di modo che la maggior parte dei vecchi comandi ha un corrispondente. Sfortunatamente, non tutte le stampanti offrono l'intero insieme di comandi D4. Per questo motivo, ed anche per compatibilit con driver che non conoscono il protocollo D4, possibile dire alla stampante che il protocollo D4 dev'essere disabilitato. Sono dunque possibili le seguenti combinazioni di valori: - OLD La stampante nonsa nulla di D4. - OLD D4 Usa comandi non D4 command, ma li invia secondo il protocollo D4 - OLD EXD4 Usa i comandi normali e configura la stampante in modalit compatibile. - D4 La stampante conosce un comando speciale D4, usalo. La parola .mainProt: indica la modalit di default. La parola .resetProt: indica il tipo di protocollo top usato per il comando reset. Le stampanti D4 possono conoscere questo comando ma non eseguire l'operazione come richiesto (es. Stylus Color 980 o Stylus Scan ...) La parola .alignProt: Questo comando non sembra avere un corrispondente D4 e viene usato il comando classico. Qui puoi dichiarare solo D4 (OLD implicito). La parola che termina per Flg: indica se la stampante abbia una capacit particolare. Il valore assunto pu essere True o False. La parola .stateFlg: Indica se la stampante sia in grado di dire se sia occupata, con stampa in corso, ecc... La parola .cleanSeparateFlg: alcune stampanti permettono di pulire gli ugelli separatamente. PEr queste stampanti porre a True. La parola .idFlg: La Stylus Scan 2500 e probabilmente la Stylus Scan 2000 non si identificano. Per questi modelli porre a False. La parola .exchangeFlg: Alcune stampanti (Stylus Color 480/580) non permettono ci tramite pulsanti sulla stampante. Dev'essere fatto tramite software. Per queste stampanti porre il valore a True. La parola .exchangeSeparateFlg: Le sopracitate stampanti hanno bisogno di selezionare la cartuccia da sostituire. Porre il valore a True. Alcune stampanti, come la Stylus Photo 890, permettono anche di sostituire la cartuccia via software. Se vuoi usare questa possibilit porre il flag .exchangeFlg a True e .exchangeSeparateFlg a False. Le rimanenti voci che terminano con Nb: - .passesNb: - .ChoicesNb: - .colorPassesNb: - .colorChoicesNb: sono per la procedura di allineamento. Le prime due indicano quanti passi siano necessari, e quante scselte siano possibilit. Questi valori possono essere visualizzati dal driver Windows o Mac OS forniti da EPSON. Se la stampante non permette la regolazione della testina del colore, porre il valore di .colorChoicesNb a 0. L'ultima parola chiave .alignFunctionName stata introdotta in modo particolare per la Stylus Photo 820. Questa stampante non ha un codice incorporato che stampi lo schema desiderato. Lo schema dev'essere fornito da ttink/mtink. Per la Stylus Photo 820 inserire Pattern820, per le altre porre il valore a "-". Installare in file printer.desc: -------------------------------- Ttink/Mtink si aspettano di trovare il file printer.desc in una delle seguenti directory: - /usr/lib/mtink - /usr/local/lib/mtink - /opt/mtink Se il file printer.desc viene trovato, le directory successive non vengono analizzate. Se volessi modificare la descrizione per una delle stampanti, estrai il dato con rdPrtDesc e modifica il valore per il file desiderato, poi copia il file printer.desc cos ottenuto in una delle directory sopra indicate. La descrizione nel file printer.desc ha la precedenza. Compilare una nuova stampante in ttink/mtink: --------------------------------------------- Genera il tuo file printer.desc nella directory .../mtink/utils e chiama rdPrtDesc -c > ../model.c Il file per le stampani presenti e quella nuova viene generto automaticamente. Torna alla directory mtink e chiama make e make install. mtink-1.0.16/utils/Mtink.En0000644000076400001540000002213210664607742013573 0ustar jjfuse! File Mtink.En, also default resource ! ! Note for translator. This is a X-Resource file. The following ! character sequences have a special meaning: ! \ at the end of a line (no space allowed after the \): ! resource continue at the next line. ! \n This is a linefeed. ! \ (\ and space) the space character is part of the resource ! string. Normally space at the begin and end of a resource are ! elinminated. ! \t This is for a tabulator character. ! ! If you translate this you have to put the language designation ! withinh the key. ! Example: ! The resource default EpsonUtil*unknown must be translated into german ! ! EpsonUtil*unknown: unknown ! EpsonUtil.De*unknown: Unbekannt ! EpsonUtil is the program class name, .De must be inserted after this ! ! The language designator is composed for the first two character ! which are normally stored into the environment variable LANG and/or ! LC_ALL, LC_MESSAGE. The first letter is to be written with upercase. EpsonUtil*unknown: unknown ! The version number will be set into the c-source file ! EpsonUtil*title_LB.labelString: EPSON UTILITIES V 0.9.12 EpsonUtil*legend_LB.labelString: Ink quantity EpsonUtil*ok_PB.labelString: Exit EpsonUtil*mainWindow.ok_PB.tooltip: Abandon the\nStatus Monitor. EpsonUtil*pref_PB.labelString: Preference EpsonUtil*pref_PB.tooltip:\ - Browser,\n\ - Mini help,\n\ - Port choice\n\ - Printer choice\n\ - working mode EpsonUtil*about_PB.labelString: About EpsonUtil*about_PB.tooltip:\ Licence and\n\ cooperators EpsonUtil*help_PB.labelString: Help EpsonUtil*help_PB.tooltip: Display help within a browser. EpsonUtil*check_PB.labelString: Check\nNozzle EpsonUtil*check_PB.tooltip:\ Print a test pattern to check\n\ for blocked nozzles.\n\ Blocked nozzles cause blank\n\ strips on print outs. EpsonUtil*clean_PB.labelString: Clean\nNozzle EpsonUtil*clean_PB.tooltip:\ If the nozzle are not OK,\n\ you can clean the nozzle\n\ herewith EpsonUtil*align_PB.labelString: Align\nHead EpsonUtil*align_PB.tooltip:\ Warning !\n\ This may damage the printer. EpsonUtil*reset_PB.labelString: Reset\nPrinter EpsonUtil*reset_PB.tooltip: This doesn't work for all models. EpsonUtil*cartridge_PB.labelString: Change\nCartridge EpsonUtil*cartridge_PB.tooltip:\ If your printer don't\n\ offer any switch\n\ You need this. EpsonUtil*addPrinterTxt: Other Printer EpsonUtil*printerState_LB.labelString: State: EpsonUtil*state_LB.labelString: - EpsonUtil*noPrinter*messageString:\ Problems with the printer communication,\n\ please check the printer for errors:\n\ "Out of Paper", "No Ink", "printer not powered"\n\ \n\ Note that some printer block for a few seconds after\n\ powering on. EpsonUtil*noPrinter*dialogTitle: Error EpsonUtil*cfg1_LB.labelString: Printer Choice: EpsonUtil*cfg2Printer_PB.labelString: Printer Choice: EpsonUtil*cfg2Printer_PB.tooltip:\ A list of printer will be offered.\n\ You can choose your model there. EpsonUtil*cfg2Device_PB.labelString: Port Choice: EpsonUtil*cfg2Device_PB.tooltip:\ It will be nice\n\ if mtink where able\nto perform this ! EpsonUtil*next_PB.labelString: Next EpsonUtil*next: Next EpsonUtil*previous_PB.labelString: Previous EpsonUtil*previous: Previous EpsonUtil*save: Save EpsonUtil*cancel: Cancel EpsonUtil*ok: OK EpsonUtil*about:\ EPSON Utilities\n\ \n\ Version V 0.9.12\n\ \n\ Copyright: Jean-Jacques Sarton 2001\n\ \nEmail: jj.sarton@t-online.de\n\ \n\ URL: http://xwtools.automatix.de\n\ \n\ Portions of code was taken from the gimp-print project\n\ Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\n\ \n\ Licence: GPL\n\ \n\ Thanks to:\n\ Keith Amidon\n\ camalot@picnicpark.org\n\ Ronny Budzinske\n\ Nicola Fabiano\n\ ivololeribar@yahoo.it\n\ Tokai Ferenc\n\ Karlheinz Guenster\n\ Gene Heskett\n\ gene_heskett@iolinc.net\n\ Mogens Jger\n\ mogensjaeger@get2net.dk\n\ Till Kamppeter\n\ (leader Foomatic/www.linuxprinting.org project)\n\ http://www.linuxprinting.org/till\n\ Stefan Kraus\n\ sjk@weserbergland.de\n\ http://xwgui.automatix.de\n\ Rainer Krienke\n\ krienke@uni-koblenz.de\n\ Sylvain Le-Gall\n\ sylvain.le-gall@polytechnique.org\n\ Steven J. Mackenzie\n\ Raul Morales\n\ raul.mh@telefonica.net\n\ http://www.telefonica.net/web/ruten\n\ Simon Morlat\n\ Marc Riese\n\ Marc-Riese@gmx.de\n\ Hikmet Salar\n\ Salar@gmx.de\n\ Glen Stewart\n\ Daniel Tamm\n\ daniel@tamm-tamm.de\n\ http:/www.tamm-tamm.de\n http:/www.expedit.org\n\ Robert Wachinger\n\ nospam@robert-wachinger.de\n\ Klaus Wnschel\n\ klaus.wuenschel@knittelsheim-computer.de\n\ http:/www.knilse.de\n\ Alberto Zanoni. EpsonUtil*ctTxt0:\ Please place a sheet of paper in your printer to begin the head alignment procedure.\n\ Press [Next] to begin\n\ or [Cancel] to abort. EpsonUtil*ctTxtC0:\ Please place a sheet of paper in your printer to begin the head alignment procedure.\n\ Choose the Black or Color Head and\n\ Press [Next] to begin or [Cancel] to abort. EpsonUtil*ctTxt1:\ Please inspect the print, and choose the best pair of lines the last printed pattern, then reinsert the page in the input tray\nand press [Next] to continue. EpsonUtil*ctTxt1_1:\ Please inspect the print, and choose the best pair of lines the pattern #1,\nthen press [Next] to continue. EpsonUtil*ctTxt1_2:\ Please inspect the print, and choose the best pair of lines the pattern #2,\nthen press [Next] to continue. EpsonUtil*ctTxt1_3:\ Please inspect the print, and choose the best pair of lines the pattern #3,\nthen press [Next] to continue. EpsonUtil*ctTxt1C:\ Inspect the alignment sheet, and determine which pattern is the smoothest.\n\ This pattern will appear to have the least ``grain''.\n\ If you cannot find a smooth pattern, please select the number for the\n\ best pattern, and repeat the procedure.\n\ Insert the sheet into the printer and press [Next] to continue. EpsonUtil*ctTxtP:\ Please wait until sheet is ejected from the printer and press [Next] to continue. EpsonUtil*ctTxt5:\ Please inspect the final output very carefully to ensure that your printer is in proper alignment.\n\ \n\ You may now:\n\ \n\ [Save] the results in the printer or\n\ [Cancel] without saving the results EpsonUtil*exTxt0:\ Cartridge exchange:\n\ \n\ Please press :\n\ \n\ [Next] \to continue or\n\ [Cancel] EpsonUtil*exTxt00:\ Cartridge exchange:\n\ \n\ Please choose black or colour\n\ Press:\n\ \n\ [Next] in order to continue or\n\ [Cancel] EpsonUtil*exTxt1:\ Cartridge exchange:\n\ \n\ The head asembly will be moved to the exchange position. EpsonUtil*exTxt2:\ Cartridge exchange:\n\ \n\ Insert a new cartridge and:\n\ \n\ Press [Next] EpsonUtil*exTxt3:\ Cartridge exchange:\n\ \n\ process "fill ink". EpsonUtil*colors_RC*four_TB.labelString: 4 Colors EpsonUtil*colors_RC*six_TB.labelString: 6 colors EpsonUtil*head_RC*col_TB.labelString: Color EpsonUtil*head_RC*bw_TB.labelString: Black EpsonUtil*noAccess*dialogTitle: Error EpsonUtil*scrTxt_MW.head_RC.bw_TB.tooltip:\ Apply the order\n\ on the cartridge\n\ with the black ink. EpsonUtil*scrTxt_MW.head_RC.col_TB.tooltip:\ Apply the order\n\ on the cartridge\n\ with the colored ink. EpsonUtil*noAccess*messageString:\ No access to printer device file.\n\ \n\ Please make sure that mtink has enough\n\ right for accessing the device files.\n\ \n\ On Debian Based System as Ubuntu you must\n\ be a member of the group lp.\n\ Refer also to the documentation. EpsonUtil*fsb*dialogTitle: Mtink EpsonUtil*fsb*CancelLabelString: Cancel EpsonUtil*fsb*okLabelString: OK EpsonUtil*fsb*applyLabelString: Filter EpsonUtil*fsb*filterLabelString: Filter EpsonUtil*fsb*fileListLabelString: Files EpsonUtil*fsb*dirListLabelString: Directories EpsonUtil*browser_LB.labelString: Choose Browser EpsonUtil*browser_PB.labelString: \ ...\ EpsonUtil*browser_PB.tooltip: Browser Selection EpsonUtil*tooltip_TB.labelString: Mini Help EpsonUtil*tooltip_TB.tooltip:\ You can disable\n\ the mini help\n\ herewith. EpsonUtil*autodetect_TB.labelString: Allow automatic detection EpsonUtil*autodetect_TB.tooltip:\ Mtink will, At Start, try to\n\ find out the attached printermodel.\n\ This don't work with all printers. EpsonUtil*save_PB.labelString: Save EpsonUtil*save_PB.tooltip: Adopt the changes. EpsonUtil*ConfigureForm.cancel_PB.tooltip:\ Don't apply the changes,\n\ quit the configuration. EpsonUtil*cancel_PB.labelString: Cancel ! Printer state EpsonUtil*error: Error EpsonUtil*printing: Printing EpsonUtil*selfTest: Self Test EpsonUtil*busy: Busy EpsonUtil*ok: OK EpsonUtil*cleaning: Cleaning EpsonUtil*unknown: Unknown mtink-1.0.16/utils/Pyink.res0000644000076400001540000000354010376041214014016 0ustar jjfuseBy.check: Düsn\nprüfn By.clean: Düsn\nsaubamacha By.align: Kepf\nausrichtn By.reset: Druckr\nzrucksetzn By.cartridge: Patrona\nwechsln By.printerState: Schtatus: By.pref: Wos eigschtäit is By.cfg2Device: Port zum Auswäin: Da.check: Check\nDyser Da.clean: Rens\nDyser Da.align: Indret\nHoved Da.reset: Reset\nPrinter Da.cartridge: Skift\nPatron Da.printerState: Tilstand: Da.pref: Indstillinger Da.cfg2Device: Port valg: De.check:Düsen\nprüfen De.clean:Düsen\nreinigen De.align:Köpfe\nausrichten De.reset:Drucker\nzurücksetzen De.cartridge:Patrone\nwechseln De.printerState:Status: De.pref:Einstellungen De.cfg2Device:Port Auswahl: En.check: Check\nNozzle En.clean: Clean\nNozzle En.align: Align\nHead En.reset: Reset\nPrinter En.cartridge: Change\nCartridge En.printerState: State: En.pref: Preference En.cfg2Device: Port Choice: Fr.check:Test\nbuses Fr.clean:Nettoyage\nbuses Fr.align:Alignement\n Fr.reset:RAZ\nimprimante Fr.cartridge:Changement\ncartouche Fr.printerState:Status: Fr.cfg2Device:Choix du port: Hu.check: Fúvóka\nellenõrzés Hu.clean: Fúvóka\ntisztítás Hu.align: Fej\npozicionálás Hu.reset: Nyomtató\nreset Hu.cartridge: Tintapatron\ncsere Hu.printerState: Állapot: Hu.pref: Beállítások Hu.cfg2Device: Port választás: It.check: Controllo\nUgelli It.clean: Pulizia\nugelli It.align: Allineamento\nTestina It.reset: Ripristina\nStampante It.cartridge: Cambio\ncartuccia It.printerState: Stato: It.pref: Preferenze It.cfg2Device: Scelta port: Tr.check: Üfleç\nkontrolü Tr.clean: Üfleç\ntemizliği Tr.align: Başları\nAyarlamak Tr.reset: Yeniden\nyerleştir Tr.cartridge: Boya\ndeğişecek Tr.printerState: Status: Tr.pref: Ayarlamak Tr.cfg2Device: Port seçimi: mtink-1.0.16/utils/Mtink.Ru.utf8-ORG0000755000076400001540000002771010437770106015134 0ustar jjfuse! File Mtink.De, German ressources. ! Файл Mtink.Ru, Русские ресурсы. ! ! Notiz fuer Uebersetzer. Это ist eine X-Ressource-Datei. ! Nachstehende Zeichensequenzen haben eine spezielle Bedeutung: ! \ Am Ende einer Zeile (Leerzeichen и Tabulatoren duerfen не ! vorhanden sein) bedeutet, dass die Resource in der naechste Zeile ! fortgesetzt werden. ! \n Это steht fuer eine Zeilenschaltung. ! \ (\ и Leerzeichen) Das Leerzeichen ist Teil der Zeichenkette. ! Leerzeichen am Anfang eine Zeichenkette werden normalerweise ! eliminiert. ! \t Steht fuer ein Tabulatorzeichen. ! ! am Anfang einer Zeile (Leerzeichen duerfen vorgesetzt sein) leitet ! ein Kommentar ein. ! ! Wenn Sie eine Uebersetzung vornehmen, ist die Sprachkennung innerhalb ! des Bezeichners einzutragen. ! Beispiel: ! Die default Ressource EpsonUtil*unknown ist auf Deutsch zu uebersetzen ! ! EpsonUtil*unknown: unknown ! EpsonUtil.Ru*unknown: Unbekannt ! EpsonUtil ist der Klassennamen, .De muss nach den Klassennamen ! eingefuegt werden. Soll von Deutsch nach Franzoesisch uebersetzt werden ! ist jeweils De durch Fr zu ersetzen. ! ! Die Sprachkennung besteht aus zwei Zeichen, welche aus der Umgebungsvariable ! LANG, LC_ALL и LC_MESSAGE entnommen werden. Der erste Buchstabe wird ! als Kapitaelchen umgewandelt. ! ! Der uebersichtlichkeit halber habe ich jede Ressource auf mehrere Zeilen ! umgebrochen. Это sollte vor allem bei mehrzeiligen Texten die uebersicht ! bezueglich Formatierung verbessern. EpsonUtil.Ru*title_LB.fontList: *-urw palladio l-bold-r-normal-*-*-*-*-*-*-*-koi8-ru EpsonUtil.Ru*fontList: *-urw palladio l-*-r-normal-*-*-*-*-*-*-*-koi8-ru *Ru.tooltip_label.fontList: *-urw palladio l-*-r-normal-*-*-*-*-*-*-*-koi8-ru EpsonUtil.Ru*unknown: не известен ! Die Version wird beim Erstellen der C-Datei ersetzt. EpsonUtil.Ru*title_LB.labelString:\ EPSON UTILITIES V 0.9.12 EpsonUtil.Ru*legend_LB.labelString:\ Количество чернил EpsonUtil.Ru*ok_PB.labelString:\ Выход EpsonUtil.Ru.mainWindow.ok_PB.tooltip:\ Покинуть\n\ Статус EpsonUtil.Ru*pref_PB.labelString:\ Установки EpsonUtil.Ru*pref_PB.tooltip:\ - Браузер\n\ - Подсказки\n\ - Интерфейс\n\ - Выбор принтера\n\ - Режим работы EpsonUtil.Ru*about_PB.labelString:\ О программе EpsonUtil.Ru*about_PB.tooltip:\ Лицензия и\n\ помощники EpsonUtil.Ru*help_PB.labelString:\ Помощь EpsonUtil.Ru*help_PB.tooltip:\ Показать помощь в новом окне. EpsonUtil.Ru*check_PB.labelString:\ Проверить\n\ Дюзы\n EpsonUtil.Ru*check_PB.tooltip:\ Если распечатке имеются,\n\ пробелы, непропечатанные полосы\n\ прочистите дюзы печатающей головки EpsonUtil.Ru*clean_PB.labelString:\ Прочистить\n\ дюзы\n EpsonUtil.Ru*clean_PB.tooltip: \ Если на тестовой распечатке имеются\n\ непропечатанные области(полосы),\n\ то прочисте дюзы печатающей головки\n\ (на это расходуются чернила) EpsonUtil.Ru*align_PB.labelString:\ Откалибровать\n\ печатающую\n\ головку EpsonUtil.Ru*align_PB.tooltip:\ Внимание!\n\ Это может повредить принтер! EpsonUtil.Ru*reset_PB.labelString:\ Установить\n\ первоначальные\n\ установки EpsonUtil.Ru*reset_PB.tooltip:\ Установление первоначальных установок\n\ не поддерживается всеми типами\n\ принтеров. EpsonUtil.Ru*cartridge_PB.labelString:\ Сменить\n\ чернильный\n\ картридж EpsonUtil.Ru*cartridge_PB.tooltip:\ Для принтеров не имеющих\n\ кнопки смены\n\ картриджа EpsonUtil.Ru*addPrinterTxt:\ Другой принтер EpsonUtil.Ru*printerState_LB.labelString:\ Статус EpsonUtil.Ru*state_LB.labelString:\ - EpsonUtil.Ru*noPrinter*messageString:\ Ошибка связи!\n\ Проверьте, включен ли принтер,\n\ не закончились ли чернила,\n\ не застряла ли бумага.\n\ \n\ Учтите, что некоторые Принтеры не\n\ реагируют несколько секунд\n\ после включения. EpsonUtil.Ru*noPrinter*dialogTitle:\ Ошибка EpsonUtil.Ru*cfg1_LB.labelString:\ Выбор принтера: EpsonUtil.Ru*cfg2Printer_PB.labelString:\ Выбор принтера: EpsonUtil.Ru*cfg2Printer_PB.tooltip:\ Вы можете выбрать в этом списке ваш тип принтера. EpsonUtil.Ru*cfg2Device_PB.labelString:\ Выбор порта: EpsonUtil.Ru*cfg2Device_PB.tooltip:\ Если бы Mtink мог бы\n\ определить тип сам! EpsonUtil.Ru*next_PB.labelString:\ Дальше EpsonUtil.Ru*next:\ Дальше EpsonUtil.Ru*previous_PB.labelString:\ Назад EpsonUtil.Ru*previous:\ Назад EpsonUtil.Ru*save:\ Сохранить EpsonUtil.Ru*cancel:\ Отменить EpsonUtil.Ru*ok:\ OK EpsonUtil.Ru*about:\ EPSON Utilities\n\ \n\ Версия V 0.9.12\n\ \n\ Copyright: Jean-Jacques Sarton 2001\n\ \n\ Email: jj.sarton@t-online.de\n\ \n\ URL: http://xwtools.automatix.de\n\ \n\ Части кода заимствованы из проекта Gimp-Print\n\ Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\n\ \n\ Лицензия: GPL\n\ \nБлагодарность следующим лицам:\n\ Keith Amidon\n\ camalot@picnicpark.org\n\ Ronny Budzinske\n\ Nicola Fabiano\n\ ivololeribar@yahoo.it\n\ Tokai Ferenc\n\ Karlheinz Guenster\n\ Gene Heskett\n\ gene_heskett@iolinc.net\n\ Mogens Jaeger\n\ mogensjaeger@get2net.dk\n\ Till Kamppeter\n\ (leader Foomatic/www.linuxprinting.org project)\n\ http://www.linuxprinting.org/till\n\ Stefan Kraus\n\ sjk@weserbergland.de\n\ http://xwgui.automatix.de\n\ Rainer Krienke\n\ krienke@uni-koblenz.de\n\ Sylvain Le-Gall\n\ sylvain.le-gall@polytechnique.org\n\ Steven J. Mackenzie\n\ Raul Morales\n\ raul.mh@telefonica.net\n\ http://www.telefonica.net/web/ruten\n\ Simon Morlat\n\ Marc Riese\n\ Marc-Riese@gmx.de\n\ Hikmet Salar\n\ Salar@gmx.de\n\ Glen Stewart\n\ Daniel Tamm\n\ daniel@tamm-tamm.de\n\ http:/www.tamm-tamm.de\n http:/www.expedit.org\n\ Robert Wachinger\n\ nospam@robert-wachinger.de\n\ Klaus Wuenschel\n\ klaus.wuenschel@knittelsheim-computer.de\n\ http:/www.knilse.de\n\ Alberto Zanoni. EpsonUtil.Ru*ctTxt0:\ Калибровка головки:\n\ \n\ Вложите чистый лист бумаги в принтер и нажмите [Дальше]. EpsonUtil.Ru*ctTxtC0:\ Калибровка головки:\n\ \n\ Вложите чистый лист бумаги в принтер, установите чёрную \ или цветную головку\n\ и нажмите [Дальше] или [Прервать]. EpsonUtil.Ru*ctTxt1:\ Выберите наиболее прямолинейную пару линий\n Вложите чистый лист бумаги в принтер, и нажмите [Дальше]. EpsonUtil.Ru*ctTxt1:\ Выберите строку с наиболее прямолинейным штрихом. Напротив каждого штриха находится число от \ 1 до 8, или 15. Выберите курсором одно из этих чисел.\n\ \n\ Вложите лист снова в принтер, и нажмите [Дальше]. EpsonUtil.Ru*ctTxtP:\ Подождите пока лист будет выдан и нажмите [Дальше]. EpsonUtil.Ru*ctTxt5:\ Просмотрите тщательно распечатку.\n\nТеперь вы можете:\n\n[сохранить] теперешнюю установку\ или\n\ [Прервать], без сохранения установки. EpsonUtil.Ru*exTxt0:\ Смена чернильного картриджа:\n\ \n\ нажмите:\n\ \n\ [Дальше] для продолжения или\n\ [Прервать] для отмены. EpsonUtil.Ru*exTxt00:\ Смена чернильного картрижда:\n\ \n\ Выберите цветной или черный и нажмите:\n\ \n\ [Дальше] для продолжения или\n\ [Прервать] для отмены. EpsonUtil.Ru*exTxt1:\ Смена чернильного картриджа:\n\ \n\ Каретка будет двигаться в различных направлениях. EpsonUtil.Ru*exTxt2:\ Смена чернильного картриджа:\n\ \n\ Вставте новый чернильный картридж и:\n\ \n\ нажмите [Дальше]. EpsonUtil.Ru*exTxt3:\ Смена чернильного картриджа:\n\ \n\ Наполнение головки чернилами. EpsonUtil.Ru*capabilities_LB.labelString:\ Конфигурация принтера: EpsonUtil.Ru*capabilities_RC*id_TB.labelString:\ Принтер выдаёт идентификационные данные. EpsonUtil.Ru*capabilities_RC*reset_TB.labelString:\ Програмный сброс возможен. EpsonUtil.Ru*capabilities_RC*state_TB.labelString:\ Принтер выдаёт данные о своём состоянии. EpsonUtil.Ru*capabilities_RC*ex_TB.labelString:\ Необходима смена чернил с помощью программы. EpsonUtil.Ru*colors_RC*four_TB.labelString:\ 4 Цвета EpsonUtil.Ru*colors_RC*six_TB.labelString:\ 6 Цветов EpsonUtil.Ru*head_RC*col_TB.labelString:\ Цвет EpsonUtil.Ru*head_RC*bw_TB.labelString:\ Чёрный EpsonUtil.Ru*noAccess*dialogTitle:\ Ошибка EpsonUtil.Ru.scrTxt_MW.head_RC.bw_TB.tooltip:\ Выполнить операцию \n\ с чёрным чернильным картриждем. EpsonUtil.Ru.scrTxt_MW.head_RC.col_TB.tooltip:\ Выполнить операцию \n\ с цветным чернильным картриджем. EpsonUtil.Ru*noAccess*messageString:\ Доступ к интерфейсу не возможен.\n\ Проверьте, имеет ли mtink достаточно\n\ прав доступа.\n\ Проверьте это в документации. EpsonUtil.Ru*fsb*dialogTitle:\ Mtink EpsonUtil.Ru*fsb*CancelLabelString:\ Отмена EpsonUtil.Ru*fsb*okLabelString:\ OK EpsonUtil.Ru*fsb*applyLabelString:\ Фильтр EpsonUtil.Ru*fsb*filterLabelString:\ Фильтр EpsonUtil.Ru*fsb*fileListLabelString:\ Файлы EpsonUtil.Ru*fsb*dirListLabelString:\ Директория EpsonUtil.Ru*Враузер_LB.labelString:\ Выбрать браузер ! Внимание ein ' ' folgt das '\' Zeichen. EpsonUtil.Ru*Враузер_PB.labelString:\ ...\ EpsonUtil.Ru*Враузер_PB.tooltip:\ Выбрать браузер. EpsonUtil.Ru*tooltip_TB.labelString:\ Подсказка EpsonUtil.Ru*tooltip_TB.tooltip:\ С помощью флажка\n\ можно отключить эти\n\ навязчивые подсказки. EpsonUtil.Ru*autodetect_TB.labelString:\ Автоматическое определение типа принтера. EpsonUtil.Ru*autodetect_TB.tooltip:\ Mtink пытается при старте\n\ определить тип принтера автоматически.\n\ Это невозможно для всех типов принтеров. EpsonUtil.Ru*save_PB.labelString: Сохранить EpsonUtil.Ru*save_PB.tooltip: Сохранить настройки. EpsonUtil.Ru.ConfigureForm.cancel_PB.tooltip:\ Не сохранять настройки,\n\ Выйти. EpsonUtil.Ru*cancel_PB.labelString:\ Отмена ! Принтер Status EpsonUtil.Ru*error:\ Ошибка EpsonUtil.Ru*printing:\ Печать EpsonUtil.Ru*selfTest:\ Тест EpsonUtil.Ru*busy:\ Работает EpsonUtil.Ru*ok:\ OK EpsonUtil.Ru*cleaning:\ Чистка EpsonUtil.Ru*unknown:\ Не известен mtink-1.0.16/utils/Ttink.fr.utf80000644000076400001540000001561210664610365014534 0ustar jjfuse!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! French resource file for ttink. ! Ce fichier est destine aux traducteurs. ! ! Ce fichier a le meme format qu'un fichier X-resources. ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! débute un commmentaire s'il apparait au début d'une ! ligne. ! ! .syntax1: est un mot clef. ! .Fr.syntax: est le mot clef pour la version francaise. ! Les lettres F et r sont générées a partir des variables ! d'environement LANG, LC_ALL et LC_MESSAGE. La premiere ! lettre est transformée en majuscule, la seconde n'est pas ! modifiée. ! Si vous traduisez ce texte,remplacer .Fr. par ! la chaine de charactere correspondant à votre langue. ! ! \ En fin de ligne (les espaces et tabulateurs ne sont pas ! admis) \ signifie que le texte continue sur la ligne ! suivante. ! ! \ texte permet d'inserer des espaces en début du texte. ! ! \n Ceci signifie retour chariot, le texte est continué ! sur la ligne suivante. ! ! \t représente un tabulateur. ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .Fr.syntax1:\ Arguments pour .Fr.syntax2:\ Obligatoire:\n\ -d device_file --device fichier_interface\n\ En option:\n\ -m name--model nom ou numéro\n\ L'imprimante est autodétectée si cette\n\ option n'est pas présente\n\ -D --D4 force l'utilisation exclusive du protocolle D4\n\ Commandes (une seule commande est admise):\n\ -r --reset remise a zéro\n\ -c --clean nettoyage des buses\n\ -n --nozzle-check test des buses\n\ -s --status (commande par defaut)\n\ -a --align-head alignement des têtes\n\ -e --exchange-ink remplacemrnt des cartouches (seulement\n\ quelques imprimantes)\n\ -i --identity retourne l'identité de l'imprimante\n\ Informations:\n\ -v --version affiche la version\n\ -l --list-printer liste des imprimantes connues\n\ Divers:\n\ -L Impression du protocol D4 sur stderr\n\ -u Impression des textes avec UTF-8\n .Fr.syntaxM:\ En option:\n\ -D --D4 force l'utilisation exclusive du protocolle D4\n\ Commandes (une seule commande est admise):\n\ -r --reset remise a zéro\n\ -c --clean nettoyage des buses\n\ -n --nozzle-check test des buses\n\ -s --status (commande par defaut)\n\ -a --align-head alignement des têtes\n\ -e --exchange-ink remplacemrnt des cartouches (seulement\n\ quelques imprimantes)\n\ -i --identity retourne l'identité de l'imprimante\n\ Informations:\n\ -v --version affiche la version\n\ -l --list-printer liste des imprimantes connues\n\ Divers:\n\ -L Impresson du protocol D4 sur stderr\n\ -u Impression des textes avec UTF-8\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages .Fr.noAccess:\ Pas d'accés au fichier d'interface ou imprimante éteinte. .Fr.noDetected:\ L'imprimante n'a pas été détectée.. .Fr.unknownModel:\ modele inconnus .Fr.noOPen:\ Erreur à l'ouverture du fichier d'interface. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on .Fr.continue:\ Continuer (oui/non) [non] ? : .Fr.yesorno: on .Fr.saveCancel: ea .Fr.blackQ: noir .Fr.colorQ: couleur .Fr.followingPrintersFound:\ Imprimantes detectées: .Fr.ChoosePrinter:\ Choississez l'imprimante !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status .Fr.black: noir .Fr.cyan: cyan .Fr.magenta: magenta .Fr.yellow: jaune .Fr.lcyan: cyan clair .Fr.lmagenta: magenta clair .Fr.lblack: noir photo/matte .Fr.blue: bleu .Fr.red: rouge .Fr.dyellow: jaune foncé .Fr.gloss: optimisation du glaçage .Fr.grey: gris .Fr.llblack: gris .Fr.Lblack: gris clair .Fr.printerState: status imprimante .Fr.unknown: inconnu .Fr.selfTest: Test .Fr.busy: occupe .Fr.printing: impression .Fr.cleaning: nettoyage .Fr.ok: Ok .Fr.error: Erreur .Fr.interfaceNotSelected: Interface non séléctionnée .Fr.paperJamError: Erreur papier .Fr.inkOutError: Encre épuisée .Fr.paperOutError: Manque de papier !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment .Fr.alignWarning:\ Attention !\nCeci peut endommager l'imprimante. .Fr.alignBlackOrColor:\ Alignement tête noir ou couleur ? *firstHeadAlign:\ Inserez une feuille vierge dans l'imprimante, avant de commencer l'alignement des têtes. .Fr.nextHeadAlign:\ Reinserez la feuille de papier\n\ pour continuer la procédure d'alignement. .Fr.lastHeadAlign:\ Inspectez le résultat soigneusement afin d'être sur\n\ que les têtes de l'imprimante sont alignées correctement.\n\n\ Vous pouvez maintenant: enregistrer les résultats dans l'imprimante\n\ ou annuler les modifications\n(engregistrer/annuler) [annuler] : .Fr.choosePattern:\ Inpectez les lignes imprimées et choisissez la meilleure paire\n\ de lignes.\n\ Reinserez la feuille dans l'imprimante.. .Fr.sampleNo:\ échantillon # .Fr.choosePattern2:\ Inpectez les lignes imprimées et choisissez la meilleure paire\n\ de lignes\n .Fr.chooseCPattern:\ Inspectez la feuille d'alignement et determinez l'échantillon\n\ le plus "lisse".\n\ Cet échantillon est celui qui semble être le moins "granuleux".\n\ Si vous ne trouvez pas d'échantillon "lisse" choisissez le meilleur\n\ échantillon et répétez la procédure d'ajustage.\n\ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge .Fr.functionNA:\ Cette fonction n'est pas disponible pour votre imprimante. .Fr.askDoExchange:\ Voulez vous vraiment remplacer une cartouche (oui/non) [non] ? : .exchangeBlackOrColor: Choisissez la cartouche: .Fr.adviseMoveCartridge:\ La cartouche est amenée en position de remplacement. .Fr.adviseExchangeCartridge:\ Remplacez la cartouche maintenant. .Fr.askExDone:\ Echange effectué (oui/non) [non] ? : .Fr.adviseFillCartridge:\ Le remplissage est enclenché. .Fr.adviseExchangeDone:\ Remplacement cartouche terminé. .Fr.communicationError:\ Erreur pour lecture ou écriture sur l'imprimante ! .Fr.exchangeError:\ L'imprimante a retourné une erreur pour la fonction de remplacement ! mtink-1.0.16/utils/extractPythontxt.sh0000755000076400001540000000260310376041214016163 0ustar jjfuse#!/bin/sh # extract a few resources from the Mtink files and # build a language file for pyink: # # The produced file will be named Pyink.res and will # include the textes for all kwnon languages, the # textes are to be encoded with UTF-8 # # Needed resources: Resources='check_PB.labelString clean_PB.labelString align_PB.labelString reset_PB.labelString cartridge_PB.labelString printerState_LB.labelString pref_PB.labelString cfg2Device_PB.labelString' #which files fileList="`ls Mtink.??`" getRes() { python< 1: # found a matching line m = w[1] while m[-1:] == '\\\\': m = m[:-1] # add next line s = f.readline() s = s[:-1] m = m + s l = m.split(':') if len(l) > 1: if l[0] == res: # build now our resource string r=m.split('_PB.labelString') if len(r) == 1: r=m.split('_LB.labelString') print lang+'.'+r[0]+r[1] f.close() ! } for f in $fileList do for res in $Resources do lang=`echo $f|sed 's/.*\\.//'` case $lang in Tr) sc=iso8859-9;; *) sc=iso8859-1;; esac #echo $f: $res $lang $sc getRes | iconv -f $sc -t UTF-8 done done > Pyink.res mtink-1.0.16/utils/Ttink.en0000644000076400001540000001404310665016511013631 0ustar jjfuse!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! English resource file for ttink. ! This is for translators. ! ! This file is build like a normal X-resources files ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! is a commment character if it appears at the begin of a ! line. ! ! .syntax1: is ein key word. ! .De.syntax: is the key for a localized text. ! both characters in this case De are taken from the ! environment variablea LANG, LC_ALL. The first letter ! will be set to upper case and the second remain normal. ! If you translate this file, please replace .En. with ! the correct value. ! ! \ At the end of a line (space and tabulators are ! not allowed) show that the actual line will be continued. ! ! \ text allow to ident the text. This will only be required after ! the key word. If nor \ is present, the space are ! removed. ! ! \n This is a carriage return. Textes will be printed in ! the next line. ! ! Please note that spaces at the en of a line will not ! be removed. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .syntax1:\ Arguments for .syntax2:\ Mandatory:\n\ -d device_file --device device_file\n\ Optional:\n\ -m name --model name or numero\n\ without this the printer will be autodetected\n\ -D --D4 Use always the D4 protocol\n\ Order (only one order may be given):\n\ -r --reset\n\ -c --clean\n\ -n --nozzle-check\n\ -s --status (default)\n\ -a --align-head\n\ -e --exchange-ink (not all printers)\n\ -i --identity print printer identity\n\ Info:\n\ -v --version print version\n\ -l --list-printer list known printers\n\ Misc:\n\ -L debug ouput for D4 protocol on stderr\n\ -u printout with UTF-8 code\n .syntaxM:\ Optional:\n\ -D --D4 Use always the D4 protocol\n\ Order (only one order may be given):\n\ -r --reset\n\ -c --clean\n\ -n --nozzle-check\n\ -s --status (default)\n\ -a --align-head\n\ -e --exchange-ink (not all printers)\n\ -i --identity print printer identity\n\ Info:\n\ -v --version print version\n\ -l --list-printer list known printers\n\ Misc:\n\ -L debug ouput for D4 protocol on stderr\n\ -u printout with UTF-8 code\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages .noAccess:\ No access to device file or no attached printer. .noDetected:\ Can't detect printer model. .unknownModel:\ Sorry unknown model .noOPen:\ Sorry can't open the device file. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on .continue:\ Continue (yes/no) [no] ? : .yesorno: yn .saveCancel: sc .blackQ: black .colorQ: color .followingPrintersFound:\ The following printers were found: .ChoosePrinter:\ Choose printer !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status .black: Black .cyan: Cyan .magenta: Magenta .yellow: Yellow .lcyan: Light cyan .lmagenta: Light magenta .lblack: Photo/Matte black .blue: Blue .red: Red .dyellow: Dark yellow .gloss: Gloss optimizer .grey: Grey .llblack: Light light black .Lblack: Light black .printerState: printer state .unknown: unknown .selfTest: self test .busy: busy .printing: printing .cleaning: cleaning .ok: Ok .error: Error .interfaceNotSelected: Interface not selected .paperJamError: Paper jam error .inkOutError: Ink out error .paperOutError: Paper out error !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment .alignWarning:\ Warning !\nThis may damage the printer. .alignBlackOrColor:\ Align black or color head ? *firstHeadAlign:\ Please place a sheet of paper in your printer to begin\n\ the head alignment procedure. .nextHeadAlign:\ Please reinsert the sheet of paper in your printer to\n\ continue the head alignment procedure. .lastHeadAlign:\ Please inspect the final output very carefully to ensure that your\n\ printer is in proper alignment.\n\n\ You may now: save the results in the printer or\n\ Cancel without saving the results\n(save/cancel) [cancel] : .choosePattern:\ Please inspect the print, and choose the best pair of lines\n\ from the last printed pattern.\n\ Reinsert the sheet into the printer. -sampleNo:\ pattern # .choosePattern2:\ Please inspect the print, and choose the best pair of lines\n\ from the printed pattern\n .chooseCPattern:\ Inspect the alignment sheet, and determine which\n\ pattern is the smoothest.\n\ This pattern will appear to have the least ``grain''.\n\ If you cannot find a smooth pattern, please\n\ select the number for the best pattern, and\n\ repeat the procedure.\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge .functionNA:\ This function is not available for your printer. .askDoExchange:\ Do you really want to exchange a cartridge (Yes/No) [no] ? : .exchangeBlackOrColor:\ Choose cartridge: .adviseMoveCartridge:\ The cartridge will now be moved to the exchange position. .adviseExchangeCartridge:\ Please exchange the cartridge now. .askExDone:\ Exchange done (yes/no) [no] ? : .adviseFillCartridge:\ The ink filling will now be started. .adviseExchangeDone:\ Exchange cartridge done. .communicationError:\ Error while writing or reading from/to printer ! .exchangeError:\ Printer return an error while requiring cartridge exchange ! mtink-1.0.16/utils/rdPrtDesc.De.txt0000644000076400001540000001536110376041214015177 0ustar jjfuserdPrtDesc: ---------- Dieses Hilfsprogramm erlaubt es, die Druckerbeschreibungen zu extrahieren und diese in einer menschenlesbare Form zu prsentieren. Wenn Sie Ihre eigene Beschreibungsdaten zur Verfgung stellen, wird die Datei printer.desc von ttink/mtink gelesen und deren Inhalt zur Menge der bekannten Drucker hinzugefgt. Syntax: rdPrtDesc -p|-c -p rdPrtDes: Eine fr Menschen lesbare Version der Druckerdaten fr alle bekannten Drucker erzeugen. -c rdPrtDes: Die Datei printer.desc lesen und die entsprechende .c-Datei erzeugen. Die Datei printer.desc muss im aktuellen Verzeichnis sein. Die Daten fr den bereits bekannten Druckern werden hinzugefgt. Die Ausgabe erfolgt auf das Terminal, kann aber in eine Datei umgeleitet werden. Datei printer.desc: ------------------- Diese Datei beinhaltet Abschnitte, die den einzelnen Drucker beschreiben. Ein Block sieht so aus: .PRINTER .name: Stylus C20SX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: OLD D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .alignFunctionName: - .END Das Wort .PRINTER leitet einen neuen Datensatz ein. Die nachstehenden Wrter bis zum Wort .END sind die eigentliche Beschreibung. Bitte die Zeilen nicht mit dem Zeichen '.' beginnen, denn diese Zeichen bedeutet fr mtink/ttink, dass eine gltige Beschreibungszeile schon vorhanden ist. Zeilen, die nicht mit einem '.' beginnen, werden als Kommentarzeilen interpretiert. Leerzeichen am Beginn einer Zeile werden berlesen, so dass " .xxx" nicht als Kommentar verarbeitet wird. "- .name:" muss die Bezeichnung des Druckers beinhalten, und zwar genau so, wie es der Drucker nach einer Abfrage zurckliefert. ".colorsNb:" gibt an wieviel Farben vorhanden sind. Wrter die mit "Prot:" enden, geben das Protokoll an, das fr die jeweilige Funktion zu verwenden ist. Neuere Druckern beherrschen ein neuen Protokoll (D4) welches es erlaubt, mit dem Drucker ber unabhngige Kanle zu kommunizieren. Dies erlaubt es beispielsweise, die Resttintenmenge abzufragen, obwohl der Drucker noch mit Drucken beschftigt ist. Das D4-Protokoll beinhaltet ebenfalls einen Satz Kommandos, die zum Teil die normalen Kommandos (REMOTE Kommandos) ersetzen knnen. Unglcklicherweise unterscheiden sich die Drucker erheblich bezglich der Menge der implementierten D4-Kommandos. Dementsprechend is es mglich anzugeben, welcher Kommandotyp zu verwenden ist, um die Verwendung des D4-Protokoll (Verwendng mit lteren Druckern) zu unterbinden. Nachstehende Eintrge sind mglich: - OLD Der Drucker untersttzt nicht D4. - OLD D4 Nicht D4-Kommandos verwenden aber in das D4-Protokoll einbetten. - OLD EXD4 Alte Kommandos verwenden und Drucker im Kompatibilittsmodus betreiben (das D4-Protokoll wird abgeschaltet). - D4 Der Drucker kennt D4 Kommandos, das auch verwenden. ".mainProt:" Default Modus festlegen. ".resetProt:" Kommando fr Rcksetzen deklarieren. Manche Drucker besitzen auch eine D4-Version die allerdings nicht zum gewnschten Ergebnis fhrt (Stylus Color 980 oder die Stylus Scan ... Serie). ".alignProt:" Dieses Kommando hat offenbar keine D4 Entsprechung. Das klassische Kommando wird stattdessen immer verwendet. Wrter die mit "Flg" enden, geben an, ob der Drucker eine bestimmte Fhigkeit besitzt. Die zugewiesenen Werte sind True (Wahr) oder False (Falsch). ".stateFlg:" Gibt an, ob der Drucker Zustandsangaben (Druck im Gang,...) zurckgeben kann. ".cleanSeparateFlg:" Einige wenige Drucker erlauben es, die Dsenreinigung geziehlt vorzunehmen (nur Schwarz/nur Farbe). Fr solche Druckern ist "True" anzugeben. ".idFlg:" Der Stylus Scan 2500, und wahrscheinlich auch der Stylus Scan 2000, geben keine Identifizierung zurck. Fr solche Modelle ist "False" anzugeben. ".exchangeFlg:" Wenige Drucker, wie die Stylus Color 480/580, besitzen keine Bedienelemente, so dass das Auswechseln der Tintenpatrone eine Softwarelsung erfordet. In diesem Fall "True" angeben. ".exchangeSeparateFlg:" Beide zuvor genannten Drucker bentigen eine Angabe bezglich der Patronne, die auszuwechseln ist. Den Wert auf "True" setzen. Manche Drucker, wie der Stylus Photo 890, erlauben es, das Auswechseln der Patrone softwaregesteuert vorzunehmen. Wenn Sie wnschen, diese Mglichkeit zu verwenden, modifizieren Sie den Wert fr ".exchangeFlg:" von "False" auf "True". Die mit "Nb:" vesehenen Wrter: ".passesNb:" ".colorPassesNb:" ".colorPassesNb:" ".colorChoicesNb:" beschreiben die Dsen-Ausrichtung. Die beiden ersten Wrter (Schwarz) geben an, wieviele Durchgnge notwendig sind und wieviele Antwortmglichkeiten vorhanden sind. Die zwei nchsten Eintragungen betreffen die Ausrichtung bezglich der Farbdsen. Die mglichen Werte knnen ermittelt werden indem der EPSON-Statusmonitor fr Windows oder Mac OS bemht wird. Wenn eine Ausrichtung der Farbdsen nicht vorhanden ist, muss der Wert fr ".colorChoicesNb" 0 sein. Das letzte Wort ".alignFunctionName" musste wegen dem Stylus Photo 820 eingefhrt werden. Dieser Drucker besitzt keinen internen Code fr das Ausrichten der Kpfe, so dass der Statusmonitor diesen zur Verfgung stellen muss. Ausser fr oben genannte Drucker (Wert = Pattern820) ist ein "-" anzugeben. Achtung: Der von Mtink abgesetze Code beinhaltet Steuersequenzen, die nur vom Stylus Photo 820 verstanden werden. Datei printer.desc installieren: -------------------------------- Ttink/Mtink erwarten die Datei printer.desc in einem der folgenden Ordner: - /usr/lib/mtink - /usr/local/lib/mtink - /opt/mtink Wenn die Datei printer.desc gefunden wurde, werden die brige Ordner nicht mehr untersucht. Wenn Sie die Beschreibung Ihres Druckers ndern mchten, knnen Sie mit "rdPrtDesc" die Daten fr die bekannten Druckern extrahieren und modifizieren. Nachdem diese Datei in eines der oben genannten Verzeichnisse kopiert wurde, werden beim nchsten Aufruf von ttink/mtink den vernderten Daten der Vorrang gegenber den internen Daten gegeben. Daten in einen neuen Drucker in ttink/mtink einbinden: ------------------------------------------------------ Die Datei printer.desc im Verzeichniss .../mtink/utils generieren, dann ergnzen und die c-Datei erzeugen mit: rdPrtDesc -c > ../model.c Die Daten fr die alten und neuen Drucker sind nun in der Datei ../model.c. Nach der Rckkehr zum Hauptverzeichniss "make;make install" aufrufen. mtink-1.0.16/utils/Mtink.Ru0000755000076400001540000002253710437770106013624 0ustar jjfuse! File Mtink.De, German ressources. ! Mtink.Ru, . ! ! Notiz fuer Uebersetzer. ist eine X-Ressource-Datei. ! Nachstehende Zeichensequenzen haben eine spezielle Bedeutung: ! \ Am Ende einer Zeile (Leerzeichen Tabulatoren duerfen ! vorhanden sein) bedeutet, dass die Resource in der naechste Zeile ! fortgesetzt werden. ! \n steht fuer eine Zeilenschaltung. ! \ (\ Leerzeichen) Das Leerzeichen ist Teil der Zeichenkette. ! Leerzeichen am Anfang eine Zeichenkette werden normalerweise ! eliminiert. ! \t Steht fuer ein Tabulatorzeichen. ! ! am Anfang einer Zeile (Leerzeichen duerfen vorgesetzt sein) leitet ! ein Kommentar ein. ! ! Wenn Sie eine Uebersetzung vornehmen, ist die Sprachkennung innerhalb ! des Bezeichners einzutragen. ! Beispiel: ! Die default Ressource EpsonUtil*unknown ist auf Deutsch zu uebersetzen ! ! EpsonUtil*unknown: unknown ! EpsonUtil.Ru*unknown: Unbekannt ! EpsonUtil ist der Klassennamen, .De muss nach den Klassennamen ! eingefuegt werden. Soll von Deutsch nach Franzoesisch uebersetzt werden ! ist jeweils De durch Fr zu ersetzen. ! ! Die Sprachkennung besteht aus zwei Zeichen, welche aus der Umgebungsvariable ! LANG, LC_ALL LC_MESSAGE entnommen werden. Der erste Buchstabe wird ! als Kapitaelchen umgewandelt. ! ! Der uebersichtlichkeit halber habe ich jede Ressource auf mehrere Zeilen ! umgebrochen. sollte vor allem bei mehrzeiligen Texten die uebersicht ! bezueglich Formatierung verbessern. EpsonUtil.Ru*title_LB.fontList: *-urw palladio l-bold-r-normal-*-*-*-*-*-*-*-koi8-ru EpsonUtil.Ru*fontList: *-urw palladio l-*-r-normal-*-*-*-*-*-*-*-koi8-ru *Ru.tooltip_label.fontList: *-urw palladio l-*-r-normal-*-*-*-*-*-*-*-koi8-ru EpsonUtil.Ru*unknown: ! Die Version wird beim Erstellen der C-Datei ersetzt. EpsonUtil.Ru*title_LB.labelString:\ EPSON UTILITIES V 0.9.12 EpsonUtil.Ru*legend_LB.labelString:\ EpsonUtil.Ru*ok_PB.labelString:\ EpsonUtil.Ru.mainWindow.ok_PB.tooltip:\ \n\ EpsonUtil.Ru*pref_PB.labelString:\ EpsonUtil.Ru*pref_PB.tooltip:\ - \n\ - \n\ - \n\ - \n\ - EpsonUtil.Ru*about_PB.labelString:\ EpsonUtil.Ru*about_PB.tooltip:\ \n\ EpsonUtil.Ru*help_PB.labelString:\ EpsonUtil.Ru*help_PB.tooltip:\ . EpsonUtil.Ru*check_PB.labelString:\ \n\ \n EpsonUtil.Ru*check_PB.tooltip:\ ,\n\ , \n\ EpsonUtil.Ru*clean_PB.labelString:\ \n\ \n EpsonUtil.Ru*clean_PB.tooltip: \ \n\ (),\n\ \n\ ( ) EpsonUtil.Ru*align_PB.labelString:\ \n\ \n\ EpsonUtil.Ru*align_PB.tooltip:\ !\n\ ! EpsonUtil.Ru*reset_PB.labelString:\ \n\ \n\ EpsonUtil.Ru*reset_PB.tooltip:\ \n\ \n\ . EpsonUtil.Ru*cartridge_PB.labelString:\ \n\ \n\ EpsonUtil.Ru*cartridge_PB.tooltip:\ \n\ \n\ EpsonUtil.Ru*addPrinterTxt:\ EpsonUtil.Ru*printerState_LB.labelString:\ EpsonUtil.Ru*state_LB.labelString:\ - EpsonUtil.Ru*noPrinter*messageString:\ !\n\ , ,\n\ ,\n\ .\n\ \n\ , \n\ \n\ . EpsonUtil.Ru*noPrinter*dialogTitle:\ EpsonUtil.Ru*cfg1_LB.labelString:\ : EpsonUtil.Ru*cfg2Printer_PB.labelString:\ : EpsonUtil.Ru*cfg2Printer_PB.tooltip:\ . EpsonUtil.Ru*cfg2Device_PB.labelString:\ : EpsonUtil.Ru*cfg2Device_PB.tooltip:\ Mtink \n\ ! EpsonUtil.Ru*next_PB.labelString:\ EpsonUtil.Ru*next:\ EpsonUtil.Ru*previous_PB.labelString:\ EpsonUtil.Ru*previous:\ EpsonUtil.Ru*save:\ EpsonUtil.Ru*cancel:\ EpsonUtil.Ru*ok:\ OK EpsonUtil.Ru*about:\ EPSON Utilities\n\ \n\ V 0.9.12\n\ \n\ Copyright: Jean-Jacques Sarton 2001\n\ \n\ Email: jj.sarton@t-online.de\n\ \n\ URL: http://xwtools.automatix.de\n\ \n\ Gimp-Print\n\ Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\n\ \n\ : GPL\n\ \n :\n\ Keith Amidon\n\ camalot@picnicpark.org\n\ Ronny Budzinske\n\ Nicola Fabiano\n\ ivololeribar@yahoo.it\n\ Tokai Ferenc\n\ Karlheinz Guenster\n\ Gene Heskett\n\ gene_heskett@iolinc.net\n\ Mogens Jaeger\n\ mogensjaeger@get2net.dk\n\ Till Kamppeter\n\ (leader Foomatic/www.linuxprinting.org project)\n\ http://www.linuxprinting.org/till\n\ Stefan Kraus\n\ sjk@weserbergland.de\n\ http://xwgui.automatix.de\n\ Rainer Krienke\n\ krienke@uni-koblenz.de\n\ Sylvain Le-Gall\n\ sylvain.le-gall@polytechnique.org\n\ Steven J. Mackenzie\n\ Raul Morales\n\ raul.mh@telefonica.net\n\ http://www.telefonica.net/web/ruten\n\ Simon Morlat\n\ Marc Riese\n\ Marc-Riese@gmx.de\n\ Hikmet Salar\n\ Salar@gmx.de\n\ Glen Stewart\n\ Daniel Tamm\n\ daniel@tamm-tamm.de\n\ http:/www.tamm-tamm.de\n http:/www.expedit.org\n\ Robert Wachinger\n\ nospam@robert-wachinger.de\n\ Klaus Wuenschel\n\ klaus.wuenschel@knittelsheim-computer.de\n\ http:/www.knilse.de\n\ Alberto Zanoni. EpsonUtil.Ru*ctTxt0:\ :\n\ \n\ []. EpsonUtil.Ru*ctTxtC0:\ :\n\ \n\ , ޣ \ \n\ [] []. EpsonUtil.Ru*ctTxt1:\ \n , []. EpsonUtil.Ru*ctTxt1:\ . \ 1 8, 15. .\n\ \n\ , []. EpsonUtil.Ru*ctTxtP:\ []. EpsonUtil.Ru*ctTxt5:\ .\n\n :\n\n[] \ \n\ [], . EpsonUtil.Ru*exTxt0:\ :\n\ \n\ :\n\ \n\ [] \n\ [] . EpsonUtil.Ru*exTxt00:\ :\n\ \n\ :\n\ \n\ [] \n\ [] . EpsonUtil.Ru*exTxt1:\ :\n\ \n\ . EpsonUtil.Ru*exTxt2:\ :\n\ \n\ :\n\ \n\ []. EpsonUtil.Ru*exTxt3:\ :\n\ \n\ . EpsonUtil.Ru*capabilities_LB.labelString:\ : EpsonUtil.Ru*capabilities_RC*id_TB.labelString:\ . EpsonUtil.Ru*capabilities_RC*reset_TB.labelString:\ . EpsonUtil.Ru*capabilities_RC*state_TB.labelString:\ ϣ . EpsonUtil.Ru*capabilities_RC*ex_TB.labelString:\ . EpsonUtil.Ru*colors_RC*four_TB.labelString:\ 4 EpsonUtil.Ru*colors_RC*six_TB.labelString:\ 6 EpsonUtil.Ru*head_RC*col_TB.labelString:\ EpsonUtil.Ru*head_RC*bw_TB.labelString:\ EpsonUtil.Ru*noAccess*dialogTitle:\ EpsonUtil.Ru.scrTxt_MW.head_RC.bw_TB.tooltip:\ \n\ ޣ . EpsonUtil.Ru.scrTxt_MW.head_RC.col_TB.tooltip:\ \n\ . EpsonUtil.Ru*noAccess*messageString:\ .\n\ , mtink \n\ .\n\ . EpsonUtil.Ru*fsb*dialogTitle:\ Mtink EpsonUtil.Ru*fsb*CancelLabelString:\ EpsonUtil.Ru*fsb*okLabelString:\ OK EpsonUtil.Ru*fsb*applyLabelString:\ EpsonUtil.Ru*fsb*filterLabelString:\ EpsonUtil.Ru*fsb*fileListLabelString:\ EpsonUtil.Ru*fsb*dirListLabelString:\ EpsonUtil.Ru*_LB.labelString:\ ! ein ' ' folgt das '\' Zeichen. EpsonUtil.Ru*_PB.labelString:\ ...\ EpsonUtil.Ru*_PB.tooltip:\ . EpsonUtil.Ru*tooltip_TB.labelString:\ EpsonUtil.Ru*tooltip_TB.tooltip:\ \n\ \n\ . EpsonUtil.Ru*autodetect_TB.labelString:\ . EpsonUtil.Ru*autodetect_TB.tooltip:\ Mtink \n\ .\n\ . EpsonUtil.Ru*save_PB.labelString: EpsonUtil.Ru*save_PB.tooltip: . EpsonUtil.Ru.ConfigureForm.cancel_PB.tooltip:\ ,\n\ . EpsonUtil.Ru*cancel_PB.labelString:\ ! Status EpsonUtil.Ru*error:\ EpsonUtil.Ru*printing:\ EpsonUtil.Ru*selfTest:\ EpsonUtil.Ru*busy:\ EpsonUtil.Ru*ok:\ OK EpsonUtil.Ru*cleaning:\ EpsonUtil.Ru*unknown:\ mtink-1.0.16/utils/Ttink.it0000644000076400001540000001371610376041620013647 0ustar jjfuse!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! File Italiano per ttink. ! Qanto segue per i traduttori. ! ! Questo file prodotto come un semplice file X-resource ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! un carattere di commmento se appare all'inizio di una ! linea. ! ! .syntax1: una parola chiave. ! .It.syntax: la chiave per un testo particolare. ! entrambi i caratteri (in questo caso It) sono presi dalle ! variabili d'ambiente LANG, LC_ALL. La prima lettera ! viene posta maiuscola e la seconda rimane normale. ! Qualora tu traduca questo file, sostituisci .En. con ! il valore corretto. ! ! \ Alla fine di una linea (spazi e tabulatori non sono ! ammessi) indica che la linea continua nella successiva. ! ! \ text permette di indentare text. E' richiesto solo dopo ! la parola chiave. Se neppure \ presente, lo spazio viene ! rimosso. ! ! \n Segno di "a capo". Il seguito verr scritto sulla ! linea successiva. ! ! Nota che gli spazi alla fine di una linea non vengono ! rimossi. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .It.syntax1:\ Argomenti per .It.syntax2:\ Obbligatorio:\n\ -d device_file --device device_file\n\ Opzionali:\n\ -m name --model nome o numero\n\ senza questo la stampante viene rilevata sutomaticamente\n\ Ordine (solo un ordine pu essere impartito):\n\ -r --reset\n\ -c --clean\n\ -n --nozzle-check\n\ -s --status (default)\n\ -a --align-head\n\ -e --exchange-ink (non per tutte le stampanti)\n\ -i --identity stampa il tipo di stampante\n\ Informazioni:\n\ -v --version stampa la versione\n\ -l --list-printer elenca le stampanti presenti\n .It.syntaxM:\ Ordine (solo un ordine pu essere impartito):\n\ -r --reset\n\ -c --clean\n\ -n --nozzle-check\n\ -s --status (default)\n\ -a --align-head\n\ -e --exchange-ink (non per tutte le stampanti)\n\ -i --identity stampa il tipo di stampante\n\ Info:\n\ -v --version stampa la versione\n\ -l --list-printer elenca le stampanti presenti\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Messaggi d'errore e di avvertimento .It.noAccess:\ Accesso al file dispositivo impossibile o stampante non connessa. .It.noDetected:\ Modello di stampante non rilevabile. .It.unknownModel:\ Spiacente, modello sconosciuto. .It.noOPen:\ Spiacente, nessun accesso al file dispositivo. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Testi per richieste ed altro .It.continue:\ Continua (s/no) [no] ? : .It.yesorno: sn .It.saveCancel: se .It.blackQ: nero .It.colorQ: colore .It.Hcontinue:\ @QContinua ?@Bs@Bno .It.Wyesorno:\ Save=YES,Save=NO .It.WsaveCancel: se .It.followingPrintersFound:\ Sono state rilevate le seguenti stampanti: .It.ChoosePrinter:\ Scegli la stampante !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Stato .It.black: Nero .It.cyan: Ciano .It.magenta: Magenta .It.yellow: Giallo .It.lcyan: Ciano chiaro .It.lmagenta: Magenta chiaro .It.lblack: Grigio .It.lblack: Foto / nero matte .It.blue: Blu .It.red: Rosso .It.dyellow: Giallo scuro .It.gloss: Ottimizzatore lucentezza .It.grey: Grigio .It.printerState: stato stampante .It.unknown: sconosciuto .It.selfTest: auto test .It.busy: occupata .It.printing: stampa in corso .It.cleaning: pulizia .It.ok: Ok .It.error: Errore .It.interfaceNotSelected: Interfaccia non selezionata .It.paperJamError: Errore: carta inceppata .It.inkOutError: Errore: inchiostro terminato .It.paperOutError: Errore: carta terminata !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Allineamento testine .It.alignWarning:\ Attenzione !\nQuesto pu danneggiare la stampante. .It.alignBlackOrColor:\ Allineo la testina del nero o del colore ? *firstHeadAlign:\ Inserisci un foglio nella stampante per iniziare\n\ la procedura di allineamento testina. .It.nextHeadAlign:\ Inserisci di nuovo il foglio nella stampante per\n\ continuare la procedura di allineamento testina. .It.lastHeadAlign:\ Controlla attentamente il risultato finale per assicurarti che la tua\n\ stampante sia allineata correttamente.\n\n\ Puoi ora: salvare i risultati nella stampante o\n\ uscire senza salvare i risultati\n(salva/esci) [esci] : .It.choosePattern:\ Analizza la stampa, e scegli la miglior coppia di linee\n\ dell'ultima stampa effettuata.\n\ Inserisci di nuovo il foglio nella stampante. .It.sampleNo:\ campione # .It.choosePattern2:\ Analizza le linee stampate e scegli la miglior coppia\n .It.chooseCPattern:\ Analizza l'allineamento del foglio, e trova quale\n\ schema sia il pi fine.\n\ Questo schema quello con grana pi piccola.\n\ Se non riesci a trovarne uno fine,\n\ seleziona il numero di quello migliore, e\n\ ripeti la procedura.\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Cambio cartuccia .It.functionNA:\ Questa funzione non disponibile per la stampante. .It.askDoExchange:\ Vuoi davvero sostituire la cartuccia (s/no) [no] ? : .It.exchangeBlackOrColor:\ Scegli la cartuccia: .It.adviseMoveCartridge:\ La cartuccia viene ora spostata nella posizione di sostituzione. .It.adviseExchangeCartridge:\ Sostituisci ora la cartuccia. .It.askExDone:\ Sostituzione effettuata (s/no) [no] ? : .It.adviseFillCartridge:\ Inizio riempimento inchiostro. .It.adviseExchangeDone:\ Sostituzione cartuccia effettuata. .It.communicationError:\ Errore durante la lettura o scrittura dalla/alla stampante ! .It.exchangeError:\ La stampante ha dato errore durante la richiesta di sostituzione cartuccia ! mtink-1.0.16/utils/Mtink.De0000644000076400001540000002506610664610234013560 0ustar jjfuse! File Mtink.De, German ressources. ! Datei Mtink.De, Deutsche Ressourcen. ! ! Notiz fr bersetzer. Dies ist eine X-Ressource-Datei. ! Nachstehende Zeichensequenzen haben eine spezielle Bedeutung: ! \ Am Ende einer Zeile (Leerzeichen und Tabulatoren drfen nicht ! vorhanden sein) bedeutet, dass die Ressource in der nchste Zeile ! fortgesetzt werden. ! \n Dies steht fr eine Zeilenschaltung. ! \ (\ und Leerzeichen) Das Leerzeichen ist Teil der Zeichenkette. ! Leerzeichen am Anfang eine Zeichenkette werden normalerweise ! eliminiert. ! \t Steht fr ein Tabulatorzeichen. ! ! am Anfang einer Zeile (Leerzeichen drfen vorgesetzt sein) leitet ! ein Kommentar ein. ! ! Wenn Sie eine bersetzung vornehmen, ist die Sprachkennung innerhalb ! des Bezeichners einzutragen. ! Beispiel: ! Die default Ressource EpsonUtil*unknown ist auf Deutsch zu bersetzen ! ! EpsonUtil*unknown: unknown ! EpsonUtil.De*unknown: Unbekannt ! EpsonUtil ist der Klassennamen, .De muss nach den Klassennamen ! eingefgt werden. Soll von Deutsch nach Franzsisch bersetzt werden ! ist jeweils De durch Fr zu ersetzen. ! ! Die Sprachkennung besteht aus zwei Zeichen, welche aus der Umgebungsvariable ! LANG, LC_ALL und LC_MESSAGE entnommen werden. Der erste Buchstabe wird ! als Kapitlchen umgewandelt. ! ! Der bersichtlichkeit halber habe ich jede Ressource auf mehrere Zeilen ! umgebrochen. Dies sollte vor allem bei mehrzeiligen Texten die bersicht ! bezglich Formatierung verbessern. EpsonUtil.De*unknown: unbekannt ! Die Version wird beim Erstellen der C-Datei ersetzt. EpsonUtil.De*title_LB.labelString:\ EPSON UTILITIES V 0.9.12 EpsonUtil.De*legend_LB.labelString:\ Tintenmenge EpsonUtil.De*ok_PB.labelString:\ Ende EpsonUtil.De.mainWindow.ok_PB.tooltip:\ Status-Monitor\n\ verlassen EpsonUtil.De*pref_PB.labelString:\ Einstellungen EpsonUtil.De*pref_PB.tooltip:\ - Browser,\n\ - Minihilfe,\n\ - Schnittstelle\n\ - Druckerwahl\n\ - Betriebsart EpsonUtil.De*about_PB.labelString: ber EpsonUtil.De*about_PB.tooltip:\ Lizenz und\n\ Mitwirkende EpsonUtil.De*help_PB.labelString:\ Hilfe EpsonUtil.De*help_PB.tooltip:\ Hilfe in einem Browser anzeigen. EpsonUtil.De*check_PB.labelString:\ Dsen\n\ prfen EpsonUtil.De*check_PB.tooltip:\ Wenn der Ausdruck streifig ist,\n\ knnen Sie kontrollieren ob\n\ die Dsen verschmutzt sind. EpsonUtil.De*clean_PB.labelString:\ Dsen\n\ reinigen EpsonUtil.De*clean_PB.tooltip: \ Wenn der Ausdruck streifig \n\ und die Dsen verstopft sind,\n\ knnen Sie hiermit eine\n\ Reinigung vornehmen. EpsonUtil.De*align_PB.labelString:\ Kpfe\n\ ausrichten EpsonUtil.De*align_PB.tooltip:\ Achtung!\n\ Dies knnte den Drucker beschdigen! EpsonUtil.De*reset_PB.labelString:\ Drucker\n\ zurcksetzen EpsonUtil.De*reset_PB.tooltip:\ Das Zurcksetzen des Druckers\n\ funktioniert nicht bei allen\n\ Modellen. EpsonUtil.De*cartridge_PB.labelString:\ Patrone\n\ wechseln EpsonUtil.De*cartridge_PB.tooltip:\ Drucker ohne Schalter\n\ bentigen das. EpsonUtil.De*addPrinterTxt:\ Andere Drucker EpsonUtil.De*printerState_LB.labelString:\ Status: EpsonUtil.De*state_LB.labelString:\ - EpsonUtil.De*noPrinter*messageString:\ Kommunikationsproblem!\n\ Drucker bezglich dieser Fehlern prfen:\n\ "Papierfehler", "Tintenstand",\n\ "Drucker ist nicht eingeschaltet".\n\ \n\ Beachten Sie, dass manche Drucker fr\n\ einige Sekunden nach dem Einschalten\n\ nicht `ansprechbar' sind. EpsonUtil.De*noPrinter*dialogTitle:\ Fehler EpsonUtil.De*cfg1_LB.labelString:\ Drucker Auswahl: EpsonUtil.De*cfg2Printer_PB.labelString:\ Drucker Auswahl: EpsonUtil.De*cfg2Printer_PB.tooltip:\ Sie knnen in dieser Liste mit Druckern Ihr Modell auswhlen. EpsonUtil.De*cfg2Device_PB.labelString:\ Port Auswahl: EpsonUtil.De*cfg2Device_PB.tooltip:\ Wenn das Mtink nur\n\ selbst bestimmen\n\ knnte! EpsonUtil.De*next_PB.labelString:\ Weiter EpsonUtil.De*next:\ Weiter EpsonUtil.De*previous_PB.labelString:\ Zurck EpsonUtil.De*previous:\ Zurck EpsonUtil.De*save:\ Sichern EpsonUtil.De*cancel:\ Abbrechen EpsonUtil.De*ok:\ OK EpsonUtil.De*about:\ EPSON Utilities\n\ \n\ Version V 0.9.12\n\ \n\ Copyright: Jean-Jacques Sarton 2001\n\ \n\ Email: jj.sarton@t-online.de\n\ \n\ URL: http://xwtools.automatix.de\n\ \n\ Teile des Codes stammen vom Gimp-Print Projekt\n\ Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\n\ \n\ Lizenz: GPL\n\ \nDank an:\n\ Keith Amidon\n\ camalot@picnicpark.org\n\ Ronny Budzinske\n\ Nicola Fabiano\n\ ivololeribar@yahoo.it\n\ Tokai Ferenc\n\ Karlheinz Guenster\n\ Gene Heskett\n\ gene_heskett@iolinc.net\n\ Mogens Jger\n\ mogensjaeger@get2net.dk\n\ Till Kamppeter\n\ (leader Foomatic/www.linuxprinting.org project)\n\ http://www.linuxprinting.org/till\n\ Stefan Kraus\n\ sjk@weserbergland.de\n\ http://xwgui.automatix.de\n\ Rainer Krienke\n\ krienke@uni-koblenz.de\n\ Sylvain Le-Gall\n\ sylvain.le-gall@polytechnique.org\n\ Steven J. Mackenzie\n\ Raul Morales\n\ raul.mh@telefonica.net\n\ http://www.telefonica.net/web/ruten\n\ Simon Morlat\n\ Marc Riese\n\ Marc-Riese@gmx.de\n\ Hikmet Salar\n\ Salar@gmx.de\n\ Glen Stewart\n\ Daniel Tamm\n\ daniel@tamm-tamm.de\n\ http:/www.tamm-tamm.de\n http:/www.expedit.org\n\ Robert Wachinger\n\ nospam@robert-wachinger.de\n\ Klaus Wnschel\n\ klaus.wuenschel@knittelsheim-computer.de\n\ http:/www.knilse.de\n\ Alberto Zanoni. EpsonUtil.De*ctTxt0:\ Kopfausrichtung:\n\ \n\ Bitte ein leeres Blatt Papier in den Drucker einlegen und [Weiter] bettigen. EpsonUtil.De*ctTxtC0:\ Kopfausrichtung:\n\ \n\ Bitte ein leeres Blatt Papier in den Drucker einlegen, whlen Sie den schwarzen \ oder den farbigen Druckkopf\nund dann [Weiter] um fortzufahren oder [Abbrechen]. EpsonUtil.De*ctTxt1:\ Bitte begutachten Sie das so eben gedruckte Muster, und whlen Sie die besten \ Linienpaare aus.\nLegen Sie das Blatt erneut in den Drucker, und bettigen Sie [Weiter]. EpsonUtil.De*ctTxt1:\ Schauen Sie sich das bedruckte Blatt genau an. Finden Sie das Muster heraus, \ das den geradesten, senkrechten Strich ergibt. Jedem Strich ist eine Zahl von \ 1 bis 8, beziehungsweise 15, zugeordnet. Die Zahlen stehen aus Platzgrnden \ untereinander. Diese Zahl klicken Sie an.\n\ \n\ Legen Sie das Blatt erneut in den Drucker, und whlen Sie [Weiter]. EpsonUtil.De*ctTxt1_1:\ Muster #1\n\ Schauen Sie sich das bedruckte Blatt genau an. Finden Sie das Muster heraus, \ das den geradesten, senkrechten Strich ergibt. Jedem Strich ist eine Zahl von \ 1 bis 8, beziehungsweise 15, zugeordnet. Die Zahlen stehen aus Platzgrnden \ untereinander. Diese Zahl klicken Sie an.\n\ \n\ und whlen Sie [Weiter]. EpsonUtil.De*ctTxt1_2:\ Muster #2\n\ Schauen Sie sich das bedruckte Blatt genau an. Finden Sie das Muster heraus, \ das den geradesten, senkrechten Strich ergibt. Jedem Strich ist eine Zahl von \ 1 bis 8, beziehungsweise 15, zugeordnet. Die Zahlen stehen aus Platzgrnden \ untereinander. Diese Zahl klicken Sie an.\n\ \n\ und whlen Sie [Weiter]. EpsonUtil.De*ctTxt1_3:\ Muster #3\n\ Schauen Sie sich das bedruckte Blatt genau an. Finden Sie das Muster heraus, \ das den geradesten, senkrechten Strich ergibt. Jedem Strich ist eine Zahl von \ 1 bis 8, beziehungsweise 15, zugeordnet. Die Zahlen stehen aus Platzgrnden \ untereinander. Diese Zahl klicken Sie an.\n\ \n\ und whlen Sie [Weiter]. EpsonUtil.De*ctTxtP:\ Warten Sie bis das Blatt ausgeworfen wird und bettigen Sie [Weiter]. EpsonUtil.De*ctTxt5:\ Bitte begutachten Sie die Ergebnisse bezglich der Ausrichtung sehr \ sorgfltig.\n\nSie knnen nun:\n\n die Einstellung im Drucker [Sichern] \ oder\n\ [Abbrechen], ohne die Einstellungen zu bernehmen. EpsonUtil.De*exTxt0:\ Patrone Wechseln:\n\ \n\ Bettigen Sie :\n\ \n\ [Weiter] um fortzufahren oder\n\ [Abbruch]. EpsonUtil.De*exTxt00:\ Patrone Wechseln:\n\ \n\ Whlen Sie bitte Farbe oder Schwarz und bettigen Sie :\n\ \n\ [Weiter] um fortzufahren oder\n\ [Abbruch]. EpsonUtil.De*exTxt1:\ Patrone wechseln:\n\ \n\ Wagen wird in die Wechselstellung gefahren. EpsonUtil.De*exTxt2:\ Patrone Wechseln:\n\ \n\ Neue Patrone einsetzen und:\n\ \n\ [Weiter] bettigen. EpsonUtil.De*exTxt3:\ Patrone Wechseln:\n\ \n\ Tinte wird nachgefllt. EpsonUtil.De*capabilities_LB.labelString:\ Drucker Konfiguration: EpsonUtil.De*capabilities_RC*id_TB.labelString:\ Drucker gibt Identifikation zurck. EpsonUtil.De*capabilities_RC*reset_TB.labelString:\ Software-Reset kann durchgefhrt werden. EpsonUtil.De*capabilities_RC*state_TB.labelString:\ Drucker liefert Status Informationen. EpsonUtil.De*capabilities_RC*ex_TB.labelString:\ Tintenwechsel per Software ist notwendig. EpsonUtil.De*colors_RC*four_TB.labelString:\ 4 Farben EpsonUtil.De*colors_RC*six_TB.labelString:\ 6 Farben EpsonUtil.De*head_RC*col_TB.labelString:\ Farbe EpsonUtil.De*head_RC*bw_TB.labelString:\ Schwarz EpsonUtil.De*noAccess*dialogTitle:\ Fehler EpsonUtil.De.scrTxt_MW.head_RC.bw_TB.tooltip:\ Operation mit der schwarzen\n\ Tintenpatrone ausfhren. EpsonUtil.De.scrTxt_MW.head_RC.col_TB.tooltip:\ Operation mit der farbigen\n\ Tintenpatrone ausfhren. EpsonUtil.De*noAccess*messageString:\ Keine Zugriffsberechtigung auf die\n\ Schnittstellendateien.\n\ Stellen Sie sicher, dass mtink gengend Zugriffsrechte\n\ erhlt.\n\ \nMit Debian basierte Distribution wie Ubuntu\n\ muss der Anwender Mitglied der Gruppe lp sein.\n\ Schauen Sie dafr in der Dokumentation nach. EpsonUtil.De*fsb*dialogTitle:\ Mtink EpsonUtil.De*fsb*CancelLabelString:\ Abbruch EpsonUtil.De*fsb*okLabelString:\ OK EpsonUtil.De*fsb*applyLabelString:\ Filter EpsonUtil.De*fsb*filterLabelString:\ Filter EpsonUtil.De*fsb*fileListLabelString:\ Dateien EpsonUtil.De*fsb*dirListLabelString:\ Ordner EpsonUtil.De*browser_LB.labelString:\ Browser whlen ! Achtung ein ' ' folgt das '\' Zeichen. EpsonUtil.De*browser_PB.labelString:\ ...\ EpsonUtil.De*browser_PB.tooltip:\ Browser auswhlen. EpsonUtil.De*tooltip_TB.labelString:\ Minihilfe EpsonUtil.De*tooltip_TB.tooltip:\ Diese lstige Minihilfe\n\ knnen Sie hiermit\n\ ein und ausschalten. EpsonUtil.De*autodetect_TB.labelString:\ Automatische Erkennung erlauben. EpsonUtil.De*autodetect_TB.tooltip:\ Mtink wird beim Start versuchen, den\n\ Drucker selbst zu bestimmen.\n\ Dies funktioniert nicht bei allen Druckern. EpsonUtil.De*save_PB.labelString: Sichern EpsonUtil.De*save_PB.tooltip: nderungen bernehmen. EpsonUtil.De.ConfigureForm.cancel_PB.tooltip:\ nderungen nicht bernehmen,\n\ Maske verlassen. EpsonUtil.De*cancel_PB.labelString:\ Abbruch ! Drucker Status EpsonUtil.De*error:\ Fehler EpsonUtil.De*printing:\ Druckt EpsonUtil.De*selfTest:\ Selbst Test EpsonUtil.De*busy:\ Beschftigt EpsonUtil.De*ok:\ OK EpsonUtil.De*cleaning:\ Reinigung EpsonUtil.De*unknown:\ Unbekannt mtink-1.0.16/utils/addToAbout.sh0000755000076400001540000000103510376041214014573 0ustar jjfuse#!/bin/sh # Add people to the about list for the files Mtink.?? # Set SEARCH to the line which will precede the new entry # \ must be duplicated SEARCH=' http://xwgui.automatix.de\\n\\' # Set APPEND to the line which will is to be added # \ must be duplicated APPEND='Rainer Krienke\\n\\\n krienke@uni-koblenz.de\\n\\' for f in Mtink.?? do awk '{ if ( $0 == "'"$SEARCH"'" ) { print $0 print "'"$APPEND"'" } else { print $0 } }' $f > $f.new mv $f.new $f done mtink-1.0.16/utils/Ttink.sv.utf80000644000076400001540000001410110664610365014545 0ustar jjfuse!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Svensk resursfil för ttink. ! Swedish recourse file for ttink. ! This is for translators. ! ! This file is built like a normal X-resources file ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! is a commment character if it appears at the begin of a ! line. ! ! .syntax1: is ein key word. ! .En.syntax1: is the key for a localized text. ! both characters (in this case En) are taken from the ! environment variablea LANG, LC_ALL. The first letter ! will be set to upper case and the second remain normal. ! If you translate this file, please replace .En. with ! the correct value. ! ! \ At the end of a line (following spaces and tabulators are ! not allowed) show that the actual line will be continued. ! ! \ text allow to indent the text. This will only be required after ! the key word. If no \ is present, spaces are removed. ! ! \n This is a carriage return. Following text will be ! printed in the next line. ! ! Please note that spaces at the end of a line will not ! be removed. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .Sv.syntax1:\ Argumenter för .Sv.syntax2:\ Obligatorisk:\n\ -d apparatfil --device apparatfil\n\ Optional:\n\ -m namn --model namn eller nummer\n\ utan detta upptäckas skrivaren automatiskt\n\ -D --D4 Använd alltid D4-protokollet\n\ Uppdrag (bara ett uppdrag kan ges):\n\ -r --reset Sätt tillbaka skrivaren\n\ -c --clean Rengör munstycken\n\ -n --nozzle-check Testa munstycken\n\ -s --status (standarduppdrag)\n\ -a --align-head rät upp huvudet\n\ -e --exchange-ink utbyt patronen (inte alla skrivaren)\n\ -i --identity skriv ut skrivarens identitet\n\ Information:\n\ -v --version skriv ut versionsnummer\n\ -l --list-printer skriv ut lista av kända skrivaren\n\ Andra:\n\ -L debug ouput för D4-protokollet på stderr\n\ -u utskrift med UTF-8-kod\n .Sv.syntaxM:\ Optional:\n\ -D --D4 Använd alltid D4-protokollet\n\ Uppdrag (bara ett uppdrag kan ges):\n\ -r --reset Sätt tillbaka skrivaren\n\ -c --clean Rengör munstycken\n\ -n --nozzle-check Testa munstycken\n\ -s --status (standarduppdrag)\n\ -a --align-head rät upp huvudet\n\ -e --exchange-ink utbyt patronen (inte alla skrivaren)\n\ -i --identity skriv ut skrivarens identitet\n\ Information:\n\ -v --version skriv ut versionsnummer\n\ -l --list-printer skriv ut lista av kända skrivaren\n\ Andra:\n\ -L debug ouput för D4-protokollet på stderr\n\ -u utskrift med UTF-8-kod\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages .Sv.noAccess:\ Ingen tillgång till apparatfilen eller ingen skrivare är ansluten. .Sv.noDetected:\ Kan inte bestämma skrivarens modell. .Sv.unknownModel:\ Okänd skrivare .Sv.noOPen:\ Kan inte öppna apparatfilen. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on .Sv.continue:\ Fortsätta (ja/nej) [nej] ? : .Sv.yesorno: jn .Sv.saveCancel: sa .Sv.blackQ: svart .Sv.colorQ: färg .Sv.followingPrintersFound:\ Hittade följande skrivare: .Sv.ChoosePrinter:\ Välj skrivaren !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status .Sv.black: Svart .Sv.cyan: Cyan .Sv.magenta: Magenta .Sv.yellow: Gul .Sv.lcyan: Ljuscyan .Sv.lmagenta: Ljusmagenta .Sv.lblack: Foto/matt svart .Sv.blue: Blå .Sv.red: Röd .Sv.dyellow: Mörkgul .Sv.gloss: Glansoptimerare .Sv.printerState: skrivarens status .Sv.unknown: okänd .Sv.selfTest: självtest .Sv.busy: upptagen .Sv.printing: skriver ut .Sv.cleaning: reningen pågår .Sv.ok: Ok .Sv.error: Fel .Sv.interfaceNotSelected: Gränssnittet är inte valt .Sv.paperJamError: Pappersstockningsfel .Sv.inkOutError: Bläcket är slut .Sv.paperOutError: Pappret är slut !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment .Sv.alignWarning:\ Varning !\nDetta kunde förstöra skrivaren. .Sv.alignBlackOrColor:\ Räta upp det svarta eller det färgade huvudet? .Sv*firstHeadAlign:\ Vänligen sätt in en pappersark i din skrivare. .Sv.nextHeadAlign:\ Vänligen sätt in igen arken i skrivaren för att forsätta processen. .Sv.lastHeadAlign:\ Vänligen granska den sista utskriften mycket noggrant för\n\ att tillförsäkra dig att skrivaren är inställd bra.\n\n\ Du kan nu: spara resultatet i skrivaren eller\n\ avbryta utan att spara resultatet\n(spara/avbryta) [avbryta] : .Sv.choosePattern:\ Vänligen granska utskriften och välj paret med\n\ dom rakaste linjer från det sista mönstret.\n\ Sätt arken i skrivaren igen. .Sv.chooseCPattern:\ Granska arken med mönstren och fastställ\n\ mönstret som är jämnast.\n\ Om du inte kan hitta ett jämnt mönster\n\ välj nummret av det bästa mönstret,\n\ och repetera processen.\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge .Sv.functionNA:\ Denna funktion är inte tillgänglig för din skrivare. .Sv.askDoExchange:\ Vill du utbyta en patron (ja/nej) [nej] ? : .Sv.exchangeBlackOrColor: Välj patronen: .Sv.adviseMoveCartridge:\ Skrivhuvudet flyttas nu till utbytespositionen. .Sv.adviseExchangeCartridge:\ Du kan nu byta patronen. .Sv.askExDone:\ Utbyte klart (ja/nej) [nej] ? : .Sv.adviseFillCartridge:\ Påfyllning av bläcket startas nu. .Sv.adviseExchangeDone:\ Utbyte av patronen är klar. .Sv.communicationError:\ Läs-/skrivfel på skrivaren! .Sv.exchangeError:\ Skrivaren svarar med fel vid begäran av patronbyte! mtink-1.0.16/utils/printer.desc.bldin0000644000076400001540000012714410663474650015647 0ustar jjfuse.PRINTER .name: Stylus C20SX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C20UX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C40SX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C40UX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C42SX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: True .exchangeSeparateFlg: True .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C42UX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: True .exchangeSeparateFlg: True .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C42 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: True .exchangeSeparateFlg: True .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: -3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: /C42.align .END .PRINTER .name: Stylus C50 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C60 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C62 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C70 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C80 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C82 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C84 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C86 .colorsNb: 7 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 300 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 400 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 440 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 460 .colorsNb: 4 .mainProt: OLD EXD4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 1 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 480 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: True .exchangeSeparateFlg: True .cleanSeparateFlg: True .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 500 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 580 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: True .exchangeSeparateFlg: True .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 600 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 640 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 660 .colorsNb: 4 .mainProt: OLD EXD4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 1 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 670 .colorsNb: 4 .mainProt: OLD EXD4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 680 .colorsNb: 4 .mainProt: OLD EXD4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 685 .colorsNb: 4 .mainProt: OLD EXD4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 740 .colorsNb: 4 .mainProt: OLD EXD4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 760 .colorsNb: 4 .mainProt: OLD EXD4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 777 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 800 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 850 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 860 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 880 .colorsNb: 4 .mainProt: OLD EXD4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 900 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 980 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 1160 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 2 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 1500 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 1520 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 3000 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color Pro .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color Pro XL .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus CX3200 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: False .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 200R .colorsNb: 7 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 300R .colorsNb: 7 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 700 .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 720 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 750 .colorsNb: 6 .mainProt: OLD EXD4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 780 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 785 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 790 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo R800 .colorsNb: 8 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 810 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 820 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: Pattern820 .END .PRINTER .name: Stylus Photo 830 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: Pattern820 .END .PRINTER .name: Stylus Photo 870 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 875 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 875DC .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 890 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: True .alignFunctionName: - .END .PRINTER .name: Stylus Photo 895 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: True .alignFunctionName: - .END .PRINTER .name: Stylus Photo 895EX .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: True .alignFunctionName: - .END .PRINTER .name: Stylus Photo 900 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 900R .colorsNb: 7 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 915 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 925 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 950 .colorsNb: 7 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 1200 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 1270 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 1280 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 1290 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: True .alignFunctionName: - .END .PRINTER .name: Stylus Photo 1290S .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 2000P .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 2 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 2100 .colorsNb: 7 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 2 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo EX .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo R2400 .colorsNb: 8 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 5000 .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 5500 .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 7000 .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 7500 .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 7600 .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 9000 .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 9500 .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 9600 .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 10000 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 10000CF .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Scan 2000 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: False .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Scan 2500 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: False .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: ??? .colorsNb: 8 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END mtink-1.0.16/utils/Ttink.en.utf80000644000076400001540000001404310664610365014524 0ustar jjfuse!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! English resource file for ttink. ! This is for translators. ! ! This file is build like a normal X-resources files ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! is a commment character if it appears at the begin of a ! line. ! ! .syntax1: is ein key word. ! .De.syntax: is the key for a localized text. ! both characters in this case De are taken from the ! environment variablea LANG, LC_ALL. The first letter ! will be set to upper case and the second remain normal. ! If you translate this file, please replace .En. with ! the correct value. ! ! \ At the end of a line (space and tabulators are ! not allowed) show that the actual line will be continued. ! ! \ text allow to ident the text. This will only be required after ! the key word. If nor \ is present, the space are ! removed. ! ! \n This is a carriage return. Textes will be printed in ! the next line. ! ! Please note that spaces at the en of a line will not ! be removed. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .syntax1:\ Arguments for .syntax2:\ Mandatory:\n\ -d device_file --device device_file\n\ Optional:\n\ -m name --model name or numero\n\ without this the printer will be autodetected\n\ -D --D4 Use always the D4 protocol\n\ Order (only one order may be given):\n\ -r --reset\n\ -c --clean\n\ -n --nozzle-check\n\ -s --status (default)\n\ -a --align-head\n\ -e --exchange-ink (not all printers)\n\ -i --identity print printer identity\n\ Info:\n\ -v --version print version\n\ -l --list-printer list known printers\n\ Misc:\n\ -L debug ouput for D4 protocol on stderr\n\ -u printout with UTF-8 code\n .syntaxM:\ Optional:\n\ -D --D4 Use always the D4 protocol\n\ Order (only one order may be given):\n\ -r --reset\n\ -c --clean\n\ -n --nozzle-check\n\ -s --status (default)\n\ -a --align-head\n\ -e --exchange-ink (not all printers)\n\ -i --identity print printer identity\n\ Info:\n\ -v --version print version\n\ -l --list-printer list known printers\n\ Misc:\n\ -L debug ouput for D4 protocol on stderr\n\ -u printout with UTF-8 code\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages .noAccess:\ No access to device file or no attached printer. .noDetected:\ Can't detect printer model. .unknownModel:\ Sorry unknown model .noOPen:\ Sorry can't open the device file. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on .continue:\ Continue (yes/no) [no] ? : .yesorno: yn .saveCancel: sc .blackQ: black .colorQ: color .followingPrintersFound:\ The following printers were found: .ChoosePrinter:\ Choose printer !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status .black: Black .cyan: Cyan .magenta: Magenta .yellow: Yellow .lcyan: Light cyan .lmagenta: Light magenta .lblack: Photo/Matte black .blue: Blue .red: Red .dyellow: Dark yellow .gloss: Gloss optimizer .grey: Grey .llblack: Light light black .Lblack: Light black .printerState: printer state .unknown: unknown .selfTest: self test .busy: busy .printing: printing .cleaning: cleaning .ok: Ok .error: Error .interfaceNotSelected: Interface not selected .paperJamError: Paper jam error .inkOutError: Ink out error .paperOutError: Paper out error !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment .alignWarning:\ Warning !\nThis may damage the printer. .alignBlackOrColor:\ Align black or color head ? *firstHeadAlign:\ Please place a sheet of paper in your printer to begin\n\ the head alignment procedure. .nextHeadAlign:\ Please reinsert the sheet of paper in your printer to\n\ continue the head alignment procedure. .lastHeadAlign:\ Please inspect the final output very carefully to ensure that your\n\ printer is in proper alignment.\n\n\ You may now: save the results in the printer or\n\ Cancel without saving the results\n(save/cancel) [cancel] : .choosePattern:\ Please inspect the print, and choose the best pair of lines\n\ from the last printed pattern.\n\ Reinsert the sheet into the printer. -sampleNo:\ pattern # .choosePattern2:\ Please inspect the print, and choose the best pair of lines\n\ from the printed pattern\n .chooseCPattern:\ Inspect the alignment sheet, and determine which\n\ pattern is the smoothest.\n\ This pattern will appear to have the least ``grain''.\n\ If you cannot find a smooth pattern, please\n\ select the number for the best pattern, and\n\ repeat the procedure.\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge .functionNA:\ This function is not available for your printer. .askDoExchange:\ Do you really want to exchange a cartridge (Yes/No) [no] ? : .exchangeBlackOrColor:\ Choose cartridge: .adviseMoveCartridge:\ The cartridge will now be moved to the exchange position. .adviseExchangeCartridge:\ Please exchange the cartridge now. .askExDone:\ Exchange done (yes/no) [no] ? : .adviseFillCartridge:\ The ink filling will now be started. .adviseExchangeDone:\ Exchange cartridge done. .communicationError:\ Error while writing or reading from/to printer ! .exchangeError:\ Printer return an error while requiring cartridge exchange ! mtink-1.0.16/utils/Mtink.It0000644000076400001540000001703010376042626013600 0ustar jjfuse! File Mtink.It, italian resources EpsonUtil.It*unknown: sconosciuto EpsonUtil.It*title_LB.labelString: STRUMENTI EPSON V 0.9.12 EpsonUtil.It*legend_LB.labelString: Livello inchiostro EpsonUtil.It*ok_PB.labelString: Esci EpsonUtil.It.mainWindow.ok_PB.tooltip: Ciao. EpsonUtil.It*pref_PB.labelString: Preferenze EpsonUtil.It*pref_PB.tooltip: - Browser,\n- Mini aiuto ,\n- Scelta porta\n- Scelta stampante\n- Modalit operativa EpsonUtil.It*about_PB.labelString: Informazioni EpsonUtil.It*about_PB.tooltip: Licenza e\ncooperatori EpsonUtil.It*help_PB.labelString: Aiuto EpsonUtil.It*help_PB.tooltip: Mostra l'aiuto con un browser. EpsonUtil.It*check_PB.labelString: Controllo\nUgelli EpsonUtil.It*check_PB.tooltip: Se la stampa presenta striscie\npuoi controllare qui\n se gli ugelli siano sporchi. EpsonUtil.It*clean_PB.labelString: Pulizia\nugelli EpsonUtil.It*clean_PB.tooltip: Se gli ugelli non sono a posto,\npuoi pulirli qui. EpsonUtil.It*align_PB.labelString: Allineamento\nTestina EpsonUtil.It*align_PB.tooltip: Attenzione !\nQuesto pu danneggiare la stampante. EpsonUtil.It*reset_PB.labelString: Ripristina\nStampante EpsonUtil.It*reset_PB.tooltip: Il ripristino\nnon funziona\ncon tutte le stampanti. EpsonUtil.It*cartridge_PB.labelString: Cambio\ncartuccia EpsonUtil.It*cartridge_PB.tooltip: Se la tua stampante non\nha alcun pulsante\nhai bisogno di questo. EpsonUtil.It*addPrinterTxt: Altra stampante EpsonUtil.It*printerState_LB.labelString: Stato: EpsonUtil.It*state_LB.labelString: - EpsonUtil.It*noPrinter*messageString: Problemi con la comunicazioneverso la stampante,\ncontrolla se vi siano errori:\n"Carta terminata", "Non c' inchiostro", "Stampante non accesa"\n\nNota che alcune stampanti si bloccano per alcuni secondi dopo\nesser state accese. EpsonUtil.It*noPrinter*dialogTitle: Errore EpsonUtil.It*cfg1_LB.labelString: Scelta stampante: EpsonUtil.It*cfg2Printer_PB.labelString: Scelta stampante: EpsonUtil.It*cfg2Printer_PB.tooltip: Verr proposta una lista di stampanti.\nPuoi scegliere qui il tuo modello. EpsonUtil.It*cfg2Device_PB.labelString: Scelta port: EpsonUtil.It*cfg2Device_PB.tooltip: Sarebbe bello\nse mtink fosse in\ngrado di farlo ! EpsonUtil.It*next_PB.labelString: Avanti EpsonUtil.It*next: Avanti EpsonUtil.It*previous_PB.labelString: Indietro EpsonUtil.It*previous: Indietro EpsonUtil.It*save: Salva EpsonUtil.It*cancel: Annulla EpsonUtil.It*ok: OK EpsonUtil.It*about:\ Strumenti EPSON\n\ \n\ Versione V 0.9.12\n\ \n\ Copyright: Jean-Jacques Sarton 2001\n\ \n\ Email: jj.sarton@t-online.de\n\ \n\ URL: http://xwtools.automatix.de\n\ \n\ Parti del codice sono state prese dal progetto gimp-print\n\ Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\n\ \n\ Licenza: GPL\n\ Un grazie a:\n\ Keith Amidon\n\ camalot@picnicpark.org\n\ Ronny Budzinske\n\ Nicola Fabiano\n\ ivololeribar@yahoo.it\n\ Tokai Ferenc\n\ Karlheinz Guenster\n\ Gene Heskett\n\ gene_heskett@iolinc.net\n\ Mogens Jger\n\ mogensjaeger@get2net.dk\n\ Till Kamppeter\n\ (leader Foomatic/www.linuxprinting.org project)\n\ http://www.linuxprinting.org/till\n\ Stefan Kraus\n\ sjk@weserbergland.de\n\ http://xwgui.automatix.de\n\ Rainer Krienke\n\ krienke@uni-koblenz.de\n\ Sylvain Le-Gall\n\ sylvain.le-gall@polytechnique.org\n\ Steven J. Mackenzie\n\ Raul Morales\n\ raul.mh@telefonica.net\n\ http://www.telefonica.net/web/ruten\n\ Simon Morlat\n\ Marc Riese\n\ Marc-Riese@gmx.de\n\ Hikmet Salar\n\ Salar@gmx.de\n\ Glen Stewart\n\ Daniel Tamm\n\ daniel@tamm-tamm.de\n\ http:/www.tamm-tamm.de\n http:/www.expedit.org\n\ Robert Wachinger\n\ nospam@robert-wachinger.de\n\ Klaus Wnschel\n\ klaus.wuenschel@knittelsheim-computer.de\n\ http:/www.knilse.de\n\ Alberto Zanoni. EpsonUtil.It*ctTxt0: Inserisci un foglio nella stampante per iniziare la procedura di allineamento testine.\nPremi [Avanti] per iniziare\no [Annulla] per terminare. EpsonUtil.It*ctTxtC0: Inserisci un foglio nella stampante per iniziare la procedura di allineamento testine.\nScegli la cartuccia Nero o Colore e\npremi [Avanti] per iniziare\no [Annulla] per terminare. EpsonUtil.It*ctTxt1: Controlla la stampa, e scegli la miglior coppia di linee, poi rimetti la pagina nel vassoio della carta\ne premi [Avanti] per continuare. EpsonUtil*ctTxt1_1: campione #1\nAnalizza la stampa, e scegli la miglior coppia di linee dell'ultima stampa effettuata. EpsonUtil*ctTxt1_2: campione #2\nAnalizza la stampa, e scegli la miglior coppia di linee dell'ultima stampa effettuata. EpsonUtil*ctTxt1_3: campione #3\nAnalizza la stampa, e scegli la miglior coppia di linee dell'ultima stampa effettuata. EpsonUtil.It*ctTxt1C: Controlla l'allineamento del foglio, e vedi quale pattern sia meglio definito.\nE' il pattern che ha grana pi fine.\nSe non trovassi un pattern a grana fine, scegli il numero del\npattern migliore, e ripeti la procedura.\nInserisci il foglio nella stampante e premi [Avanti] per continuare. EpsonUtil.It*ctTxtP: Attendi che il foglio sia uscito dalla stampante e premi [Avanti] per continuare. EpsonUtil.It*ctTxt5: Analizza il risultato finale molto attentamente, per assicurarti che la stampante sia allineata in modo corretto.\n\nPuoi ora :\n\n [Salvare] i risultati nella stampante o\n [Annullare] senza salvare i risultati EpsonUtil.It*exTxt0: Cambio cartuccia:\n\nPremi :\n\n [Avanti] per continuare o\n [Annulla] EpsonUtil.It*exTxt00: Cambio cartuccia:\n\nScegli nero o colore\nPremi :\n\n [Avanti] per continuare o\n [Annulla] EpsonUtil.It*exTxt1: Cambio cartuccia:\n\nLa testina verr portata in posizione per la sistituzione. EpsonUtil.It*exTxt2: Cambio cartuccia:\n\nInserisci una nuova cartuccia e:\n\n Premi [Avanti] EpsonUtil.It*exTxt3: Cambio cartuccia:\n\n processo "riempimento inchistro". EpsonUtil.It*colors_RC*four_TB.labelString: 4 Colori EpsonUtil.It*colors_RC*six_TB.labelString: 6 colori EpsonUtil.It*head_RC*col_TB.labelString: Colore EpsonUtil.It*head_RC*bw_TB.labelString: Nero EpsonUtil.It*noAccess*dialogTitle: Errore EpsonUtil.It.scrTxt_MW.head_RC.bw_TB.tooltip: Operazione\nsulla cartuccia\ncon l'inchiostro nero. EpsonUtil.It.scrTxt_MW.head_RC.col_TB.tooltip: Operazione\nsulla cartuccia\ncon l'inchiostro colorato. EpsonUtil.It*noAccess*messageString: Nessun accesso al file\ndel dispositivo stampante\n\nAssicurati che mtink abbia i\ndiritti per accedere ai file dispositivo.\n\nFai anche riferimento alla documentazione. EpsonUtil.It*fsb*dialogTitle: Mtink EpsonUtil.It*fsb*CancelLabelString: Annulla EpsonUtil.It*fsb*okLabelString: OK EpsonUtil.It*fsb*applyLabelString: Filtro EpsonUtil.It*fsb*filterLabelString: Filtro EpsonUtil.It*fsb*fileListLabelString: File EpsonUtil.It*fsb*dirListLabelString: Cartelle EpsonUtil.It*browser_LB.labelString: Scegli il browser EpsonUtil.It*browser_PB.labelString: \ ...\ EpsonUtil.It*browser_PB.tooltip: Scelta del browser. EpsonUtil.It*tooltip_TB.labelString: Mini aiuto EpsonUtil.It*tooltip_TB.tooltip: Puoi disabilitare\nil mini aiuto\nqui. EpsonUtil.It*autodetect_TB.labelString: Permetti il rilevamento automatico. EpsonUtil.It*autodetect_TB.tooltip: Mtink, all'avvio, cercher\ndi trovare il modello della stamante collegata.\nQuesto non funziona con tutte le stampanti. EpsonUtil.It*save_PB.labelString: Salva EpsonUtil.It*save_PB.tooltip: Salva i cambiamenti. EpsonUtil.It*ConfigureForm.cancel_PB.tooltip: Non applicare i cambiamenti,\nesci dalla configurazione. EpsonUtil.It*cancel_PB.labelString: Annulla ! Printer state EpsonUtil.It*error:\ Errore EpsonUtil.It*printing:\ Stampa in corso EpsonUtil.It*selfTest:\ Auto test EpsonUtil.It*busy:\ Occupato EpsonUtil.It*ok:\ OK EpsonUtil.It*cleaning:\ Pulizia in corso EpsonUtil.It*unknown:\ Sconosciuto mtink-1.0.16/utils/Ttink.da0000644000076400001540000001311710376041214013611 0ustar jjfuse!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Danish resource file for ttink. ! Dansk data for ttink. ! ! This file is build like a normal X-resources files ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! is a commment character if it appears at the begin of a ! line. ! ! .syntax1: is ein key word. ! .De.syntax: is the key for a localized text. ! both characters in this case De are taken from the ! environment variablea LANG, LC_ALL. The first letter ! will be set to upper case and the second remain normal. ! If you translate this file, please replace .En. with ! the correct value. ! ! \ At the end of a line (space and tabulators are ! not allowed) show that the actual line will be continued. ! ! \ text allow to ident the text. This will only be required after ! the key word. If nor \ is present, the space are ! removed. ! ! \n This is a carriage return. Textes will be printed in ! the next line. ! ! Please note that spaces at the en of a line will not ! be removed. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .Da.syntax1:\ Argumenter for .Da.syntax2:\ Obligatorisk:\n\ -d enheds_fil --device enheds_fil\n\ Valgfri:\n\ -m navn --model navn eller nummer\n\ uden angivelse vil printeren blive autodetektet\n\ Funktion (der kan kun udfres en funktion af gangen):\n\ -r --reset reset printer\n\ -c --clean rens dyser\n\ -n --nozzle-check dyse test\n\ -s --status (standard)\n\ -a --align-head ret printerhovedet ind\n\ -e --exchange-ink (ikke alle printere understtter dette)\n\ -i --identity udskriv printer identitet\n\ Information:\n\ -v --version print version\n\ -l --list-printer list kendte printere\n .Da.syntaxM:\ Funktion (der kan kun udfres en funktion af gangen):\n\ -r --reset reset printer\n\ -c --clean rens dyser\n\ -n --nozzle-check dyse test\n\ -s --status (standard)\n\ -a --align-head ret printerhovedet ind\n\ -e --exchange-ink (ikke alle printere understtter dette)\n\ -i --identity udskriv printer identitet\n\ Information:\n\ -v --version print version\n\ -l --list-printer list kendte printere\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages .Da.noAccess:\ Ingen adgang til enhed eller ingen tilsluttet printer. .Da.noDetected:\ Kan ikke bestemme printer model. .Da.unknownModel:\ Ukendt printer. .Da.noOPen:\ Kan ikke bne enheds filen. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on .Da.continue:\ Fortst (ja/nej) [nej] ? : .Da.yesorno: jn .Da.saveCancel: ga .Da.blackQ: sort .Da.colorQ: farve .Da.followingPrintersFound:\ Printere fundet: .Da.ChoosePrinter:\ Vlg printer !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status .Da.black: Sort .Da.cyan: Cyan .DA.magenta: Magenta .Da.yellow: Gul .Da.lcyan: Lys cyan .Da.lmagenta: Lys magenta .Da.lblack: Lys sort .Da.lblack: Foto/Mat sort .Da.blue: Bl .Da.red: Rd .Da.dyellow: Mrk gul .Da.gloss: Glans optimerer .Da.grey: Gr .Da.printerState: printer status .Da.unknown: unendt .Da.selfTest: selv test .Da.busy: optaget .Da.printing: udskrivning .Da.cleaning: rensning .Da.ok: Ok .Da.error: Fejl .Da.interfaceNotSelected: Ingen printerport valgt .Da.paperJamError: Fejl ved papirfremfring .Da.inkOutError: Der er ikke nok blk .Da.paperOutError: Intet papir !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment .Da.alignWarning:\ Pas p !\nDette kan skade printeren. .Da.alignBlackOrColor:\ Retten ind af sort eller farve hoved ? *Da.firstHeadAlign:\ Placer et ark papir i printeren for at begynde\n\ at rette hovedet ind. .Da.nextHeadAlign:\ Genindst arket i printeren. .Da.lastHeadAlign:\ Inspicer det frdige udskrift meget omhyggeligt for at sikre\n\ At printerhovedet er korrekt rettet ind.\n\n\ Du kan nu: gemme resultatet i printeren, eller\n\ afbryde uden at gemme resultatet\n(gem/afbryd) [afbryd] : .Da.choosePattern:\ Inspicer udskriftet omhyggeligt, og vlg det bedste liniepar\n\ fra det sidst printede mnster.\n\ Genindst arket i printeren. .Da.chooseCPattern:\ Inspicer retten ind arket, og afgr hvilket\n\ mnster der er det glatteste.\n\ Dette mnster er det der har den mindste "korn"struktur.\n\ Hvis du ikke kan afgre hvilket der er det glatteste,\n\ og vlg nummeret p et af de bedste, og\n\ gentag proceduren.\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge .Da.functionNA:\ Denne funktion er ikke mulig med din printer. .Da.askDoExchange:\ nsker du at skifte patronen (Ja/Nej) [nej] ? : .exchangeBlackOrColor:\ Vlg patron: .Da.adviseMoveCartridge:\ Patronen vil nu blive frt til udskiftnings plads. .Da.adviseExchangeCartridge:\ Udskift patronen nu. .Da.askExDone:\ Udskiftning udfrt (Ja/Nej) [nej] ? : .Da.adviseFillCartridge:\ Pfyldning af blk starter nu. .Da.adviseExchangeDone:\ Udskiftning af patron udfrt. .Da.communicationError:\ Fejl ved lasning/skrivning fra/til printeren ! .Da.exchangeError:\ Printeren melder fejl p funktionen 'udskiftning af patron' ! mtink-1.0.16/utils/bldTtink-Utf8-File.sh0000755000076400001540000000027110376041214016022 0ustar jjfuse#!/bin/sh for f in Ttink.?? do lang=`echo $f|sed 's/.*\\.//'` case $lang in tr) sc=iso8859-9;; *) sc=iso8859-1;; esac iconv -f $sc -t UTF-8 $f > $f.utf8 done mtink-1.0.16/utils/Ttink.da.utf80000644000076400001540000001316010664610365014505 0ustar jjfuse!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Danish resource file for ttink. ! Dansk data for ttink. ! ! This file is build like a normal X-resources files ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! is a commment character if it appears at the begin of a ! line. ! ! .syntax1: is ein key word. ! .De.syntax: is the key for a localized text. ! both characters in this case De are taken from the ! environment variablea LANG, LC_ALL. The first letter ! will be set to upper case and the second remain normal. ! If you translate this file, please replace .En. with ! the correct value. ! ! \ At the end of a line (space and tabulators are ! not allowed) show that the actual line will be continued. ! ! \ text allow to ident the text. This will only be required after ! the key word. If nor \ is present, the space are ! removed. ! ! \n This is a carriage return. Textes will be printed in ! the next line. ! ! Please note that spaces at the en of a line will not ! be removed. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .Da.syntax1:\ Argumenter for .Da.syntax2:\ Obligatorisk:\n\ -d enheds_fil --device enheds_fil\n\ Valgfri:\n\ -m navn --model navn eller nummer\n\ uden angivelse vil printeren blive autodetektet\n\ Funktion (der kan kun udføres en funktion af gangen):\n\ -r --reset reset printer\n\ -c --clean rens dyser\n\ -n --nozzle-check dyse test\n\ -s --status (standard)\n\ -a --align-head ret printerhovedet ind\n\ -e --exchange-ink (ikke alle printere understøtter dette)\n\ -i --identity udskriv printer identitet\n\ Information:\n\ -v --version print version\n\ -l --list-printer list kendte printere\n .Da.syntaxM:\ Funktion (der kan kun udføres en funktion af gangen):\n\ -r --reset reset printer\n\ -c --clean rens dyser\n\ -n --nozzle-check dyse test\n\ -s --status (standard)\n\ -a --align-head ret printerhovedet ind\n\ -e --exchange-ink (ikke alle printere understøtter dette)\n\ -i --identity udskriv printer identitet\n\ Information:\n\ -v --version print version\n\ -l --list-printer list kendte printere\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages .Da.noAccess:\ Ingen adgang til enhed eller ingen tilsluttet printer. .Da.noDetected:\ Kan ikke bestemme printer model. .Da.unknownModel:\ Ukendt printer. .Da.noOPen:\ Kan ikke åbne enheds filen. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on .Da.continue:\ Fortsæt (ja/nej) [nej] ? : .Da.yesorno: jn .Da.saveCancel: ga .Da.blackQ: sort .Da.colorQ: farve .Da.followingPrintersFound:\ Printere fundet: .Da.ChoosePrinter:\ Vælg printer !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status .Da.black: Sort .Da.cyan: Cyan .DA.magenta: Magenta .Da.yellow: Gul .Da.lcyan: Lys cyan .Da.lmagenta: Lys magenta .Da.lblack: Lys sort .Da.lblack: Foto/Mat sort .Da.blue: Blå .Da.red: Rød .Da.dyellow: Mørk gul .Da.gloss: Glans optimerer .Da.grey: Grå .Da.printerState: printer status .Da.unknown: unendt .Da.selfTest: selv test .Da.busy: optaget .Da.printing: udskrivning .Da.cleaning: rensning .Da.ok: Ok .Da.error: Fejl .Da.interfaceNotSelected: Ingen printerport valgt .Da.paperJamError: Fejl ved papirfremføring .Da.inkOutError: Der er ikke nok blæk .Da.paperOutError: Intet papir !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment .Da.alignWarning:\ Pas på !\nDette kan skade printeren. .Da.alignBlackOrColor:\ Retten ind af sort eller farve hoved ? *Da.firstHeadAlign:\ Placer et ark papir i printeren for at begynde\n\ at rette hovedet ind. .Da.nextHeadAlign:\ Genindsæt arket i printeren. .Da.lastHeadAlign:\ Inspicer det færdige udskrift meget omhyggeligt for at sikre\n\ At printerhovedet er korrekt rettet ind.\n\n\ Du kan nu: gemme resultatet i printeren, eller\n\ afbryde uden at gemme resultatet\n(gem/afbryd) [afbryd] : .Da.choosePattern:\ Inspicer udskriftet omhyggeligt, og vælg det bedste liniepar\n\ fra det sidst printede mønster.\n\ Genindsæt arket i printeren. .Da.chooseCPattern:\ Inspicer retten ind arket, og afgør hvilket\n\ mønster der er det glatteste.\n\ Dette mønster er det der har den mindste "korn"struktur.\n\ Hvis du ikke kan afgøre hvilket der er det glatteste,\n\ og vælg nummeret på et af de bedste, og\n\ gentag proceduren.\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge .Da.functionNA:\ Denne funktion er ikke mulig med din printer. .Da.askDoExchange:\ Ønsker du at skifte patronen (Ja/Nej) [nej] ? : .exchangeBlackOrColor:\ Vælg patron: .Da.adviseMoveCartridge:\ Patronen vil nu blive ført til udskiftnings plads. .Da.adviseExchangeCartridge:\ Udskift patronen nu. .Da.askExDone:\ Udskiftning udført (Ja/Nej) [nej] ? : .Da.adviseFillCartridge:\ Påfyldning af blæk starter nu. .Da.adviseExchangeDone:\ Udskiftning af patron udført. .Da.communicationError:\ Fejl ved lasning/skrivning fra/til printeren ! .Da.exchangeError:\ Printeren melder fejl på funktionen 'udskiftning af patron' ! mtink-1.0.16/utils/printerlist0000644000076400001540000012424510663473315014533 0ustar jjfuse.PRINTER .name: Stylus C20SX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C20UX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C40SX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C40UX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C42SX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: True .exchangeSeparateFlg: True .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C42UX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: True .exchangeSeparateFlg: True .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C50 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C60 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C62 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C70 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C80 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C82 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C84 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus C86 .colorsNb: 7 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 300 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 400 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 440 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 460 .colorsNb: 4 .mainProt: OLD EXD4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 1 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 480 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: True .exchangeSeparateFlg: True .cleanSeparateFlg: True .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 500 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 580 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: True .exchangeSeparateFlg: True .cleanSeparateFlg: True .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 600 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 640 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 660 .colorsNb: 4 .mainProt: OLD EXD4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 1 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 670 .colorsNb: 4 .mainProt: OLD EXD4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 680 .colorsNb: 4 .mainProt: OLD EXD4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 685 .colorsNb: 4 .mainProt: OLD EXD4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 740 .colorsNb: 4 .mainProt: OLD EXD4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 760 .colorsNb: 4 .mainProt: OLD EXD4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 777 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 800 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 850 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 860 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 880 .colorsNb: 4 .mainProt: OLD EXD4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 900 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 980 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 1160 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 2 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 1500 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 1520 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color 3000 .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color Pro .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Color Pro XL .colorsNb: 4 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus CX3200 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: False .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 200R .colorsNb: 7 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 300R .colorsNb: 7 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 700 .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 720 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 750 .colorsNb: 6 .mainProt: OLD EXD4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD EXD4 .alignProt: OLD EXD4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 780 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 785 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 790 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 810 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 820 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: Pattern820 .END .PRINTER .name: Stylus Photo 830 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: Pattern820 .END .PRINTER .name: Stylus Photo 870 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 875 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 875DC .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 890 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 895 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: True .alignFunctionName: - .END .PRINTER .name: Stylus Photo 895EX .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: True .alignFunctionName: - .END .PRINTER .name: Stylus Photo 900R .colorsNb: 7 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 915 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 925 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 950 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 1200 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 1270 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 1280 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 1290 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: True .alignFunctionName: - .END .PRINTER .name: Stylus Photo 1290S .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 2000P .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 2 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo 2100 .colorsNb: 7 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 2 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo EX .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Photo R2400 .colorsNb: 8 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 5000 .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 5500 .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 7000 .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 7500 .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 7600 .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 9000 .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 9500 .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 9600 .colorsNb: 6 .mainProt: OLD .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: OLD .alignProt: OLD .idFlg: True .passesNb: 1 .choicesNb: 7 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 10000 .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Pro 10000CF .colorsNb: 6 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Scan 2000 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: False .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: Stylus Scan 2500 .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: False .passesNb: 3 .choicesNb: 15 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END .PRINTER .name: ??? .colorsNb: 8 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: False .resetProt: D4 .alignProt: D4 .idFlg: True .passesNb: 0 .choicesNb: 0 .colorPassesNb: 0 .colorChoicesNb: 0 .checkNozzleNeedReset: False .alignFunctionName: - .END mtink-1.0.16/utils/chckRes.txt0000644000076400001540000000102410664224631014335 0ustar jjfusechckRes ------- This little utility compare 2 resource files. Example: ------------------------------------ $ ./chckRes Ttink.en Ttink.it Missed resources <.llblack:> <.Lblack:> Resources not expected <.Hcontinue:> <.Wyesorno:> <.WsaveCancel:> <.sampleNo:> ------------------------------------ Missed resources tell usr that .llblack: and .Lblack: what found within the refrence file Ttink.en but not within the checked file Ttink.it Resources not expected enumerate the obsolete resources found into the checked file. mtink-1.0.16/utils/bldRes.c0000644000076400001540000001076310376041214013575 0ustar jjfuse/* file bldRes.c * build c-resource file * * read printer description file and fill the * printer knowledge data base * * Copyrights: Jean-Jacques Sarton j.sarton@t-online.de */ /* * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include void printHead() { printf("#include \"version.h\"\nchar *fallbackResources[] = {\n"); } void printTrailer() { printf("\n (char *)0\n};\n"); } void searchVersionPart(char *s, char **b, char **e) { *b = *e = NULL; while ( *s ) { if ( s[0] == 'V' && s[1] == ' ' && isdigit(s[2]) ) { *b = s; s += 2; while ( isdigit(*s) || *s == '.' ) s++; *e = s; return; } s++; } } void translate(FILE *fp, int utf) { int inComment = 0; int inText = 0; char buf[2048]; char *s; char *b, *e; /* read the resource file line by line and build the c file */ while ( fgets(buf, sizeof(buf), fp) ) { s = buf; searchVersionPart(s, &b, &e); s = buf; if ( ! inText ) while ( *s && (*s == ' ' || *s == '\t') ) s++; if ( !inComment && ! inText && *s == '!' ) { inComment = 1; printf("#if 0\n/*\n %s", s); } else if ( inComment && *s == '\n' ) { printf("\n"); } else if ( inComment && *s == '!' ) { printf(" %s", s); } else if ( inComment ) { printf("*/\n#endif\n"); inComment = 0; } if ( ! inComment ) { if ( *s == '\n' && ! inText ) { printf("\n"); continue; } inText = 1; printf(" \""); while ( *s ) { if ( s == b ) { printf("\"VERSION"); s += e-b; if ( *s == '\n' ) { printf(",\n"); break; } else { printf("\""); } } if ( s == buf && s[0] == '.' && s[3] == '.' && utf ) { printf("%c",*s); // . s++; printf("%c",*s); // D s++; printf("%c",*s); // e s++; printf("8"); // add 8 printf("%c",*s); // . s++; } switch (*s) { case '"': printf("\\\""); break; case '\\': if ( s[1] == '\n' ) { s++; s++; printf("\"\n"); continue; } else if ( s[1] == '"' ) { printf("\\\""); s++; } else { printf("\\\\"); } break; case '\n': printf("\",\n"); inText = 0; break; default: printf("%c",*s); } s++; } } } } int main(int argc, char **argv) { FILE *fp; int utf; argc--; argv++; if ( argc ) { printHead(); while ( argc > 0 ) { if ( (fp = fopen(argv[0], "r")) != NULL ) { if ( strstr(argv[0],"utf8") ) utf = 1; else utf = 0; translate(fp, utf); fclose(fp); } argc--; argv++; } printTrailer(); } else { printHead(); translate(stdin,0); printTrailer(); } exit(0); return 0; } mtink-1.0.16/utils/Ttink.de0000644000076400001540000001461410664053720013625 0ustar jjfuse!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! german resource file for ttink. ! Deutsche Datei fr ttink. ! ! Diese Datei entspricht vom Aufbau her den blichen ! X Ressourcen-Dateien. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! ist ein Kommentarzeichen wenn es am Begin einer Zeile ! steht. ! ! .syntax1: ist ein Schlssel. ! .De.syntax: ist der entspechend lokalisierte Schlssel. ! Die 2 Buschstaben, hier "De", werden von den Umgebungs- ! Variablen LANG und LC_ALL abgeleitet. ! ! \ am Ende einer Zeile (Leerzeichen oder Tabulatoren sind ! nicht erlaubt) bedeutet das, das die nchste Zeile eine ! Fortsetzungszeile ist. ! \ Text bewirkt, dass Leerzeichen am Anfang des Textes ! (nach dem Schlssel) nicht entfernt werden. ! ! \n steht fr eine Zeilenschaltung. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .De.syntax1:\ Argumente fr .De.syntax2:\ Obligatorisch:\n\ -d Gerte_datei --device Gerte_datei\n\ Optional:\n\ -m Name --model Name oder Nummer\n\ Ohne diese Angabe wird der Drucker automatisch bestimmt\n\ -D --D4 D4-Protokoll immer verwenden\n\ Auftrag (Es kann nur ein Auftrag angegeben werden):\n\ -r --reset Drucker zurcksetzen\n\ -c --clean Dsenreinigung\n\ -n --nozzle-check Dsentest\n\ -s --status (Standardauftrag)\n\ -a --align-head Kpfe ausrichten\n\ -e --exchange-ink Patronen wechseln\n\ (nicht alle Druckern)\n\ -i --identity Drucker Identifizierungsstring ausgeben\n\ Informationen:\n\ -v --version Version ausgeben\n\ -l --list-printer Bekannte Drucker ausgeben\n\ Diverse:\n\ -L D4 Protokollausgabe auf stderr (debug)\n\ -u Text Ausgabe erfolgt mit UTF-8 Kodierung\n .De.syntaxM:\ Optional:\n\ -D --D4 D4-Protokoll immer verwenden\n\ Auftrag (Es kann nur ein Auftrag angegeben werden):\n\ -r --reset Drucker zurcksetzen\n\ -c --clean Dsenreinigung\n\ -n --nozzle-check Dsentest\n\ -s --status (Standardauftrag)\n\ -a --align-head Kpfe ausrichten\n\ -e --exchange-ink Patronen wechseln\n\ (nicht alle Druckern)\n\ -i --identity Drucker Identifizierungsstring ausgeben\n\ Informationen:\n\ -v --version Version ausgeben\n\ -l --list-printer Bekannte Drucker ausgeben\n\ Diverse:\n\ -L D4 Protokollausgabe auf stderr (debug)\n\ -u Text Ausgabe erfolgt mit UTF-8 Kodierung\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages .De.noAccess:\ Kein Zugriff auf die Gertedatei, oder Drucker ist nicht angeschlossen. .De.noDetected:\ Das Druckermodell kann nicht bestimmt werden. .De.unknownModel:\ Unbekannter Drucker .De.noOPen:\ Die Gertedatei kann nicht geffnet werden. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on .De.continue:\ Weiter (ja/nein) [nein]? : .De.yesorno: jn .De.saveCancel: sa .De.blackQ: Schwarz .De.colorQ: Farbe .De.followingPrintersFound:\ Ermittelte Drucker: .De.ChoosePrinter:\ Drucker whlen !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status .De.black: Schwarz .De.cyan: Zyan .De.magenta: Magenta .De.yellow: Gelb .De.lcyan: Hellzyan .De.lmagenta: Hellmagenta .De.lblack: Photo/Matt Schwarz .De.blue: Blau .De.red: Rot .De.dyellow: Dunkelgelb .De.gloss: Glanzoptimierer .De.grey: Grau ! Photo R2400 die Franzsiche Texte beinhalten korreckterweise ! grau und hell grau. Hellschwarz und Hellhellschwarz ist ein ! Unsinn ! .De.llblack: Grau .De.Lblack: Hellgrau .De.printerState: Druckertatus .De.unknown: Unbekannt .De.selfTest: Selbsttest .De.busy: Beschftigt .De.printing: Druck .De.cleaning: Reinigung .De.ok: Ok .De.error: Fehler .De.interfaceNotSelected: Schnittstelle nicht angewhlt .De.paperJamError: Fehler im Papierweg .De.inkOutError: Tintenmenge ist zu gering .De.paperOutError: Papier fehlt !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment .De.alignWarning:\ Achtung !\nDies knnte den Drucker unbrauchbar machen. .De.alignBlackOrColor:\ Schwarz- oder Farbkopf ausrichten? .De*firstHeadAlign:\ Bitte ein leeres Blatt Papier in den\nDrucker legen. .De.nextHeadAlign:\ Bitte das Blatt erneut in den Drucker legen. .De.lastHeadAlign:\ Bitte begutachten Sie die Ergebnisse bezglich der\n\ Ausrichtung sehr sorgfltig.\n\ Sie knnen nun: Die Einstellungen im Drucker sichern oder abbrechen,\n\ ohne die Einstellungen zu bernehmen\n(Sichern, Abbruch) [Abbbruch] : .De.choosePattern:\ Bitte begutachten Sie das soeben gedruckte Muster,\n\ und whlen Sie die besten Linienpaare aus.\n\ Legen Sie das Blatt erneut in den Drucker. .De.sampleNo:\ Muster # .De.choosePattern2:\ Bitte begutachten Sie das soeben gedruckte Muster,\n\ und whlen Sie die besten Linienpaare aus\n .De.chooseCPattern:\ Bitte das Blatt begutachten und das Muster auswhlen, das\n\ die geringste Kornstruktur hat. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge .De.functionNA:\ Diese Function ist fr diesen Drucker nicht verfgbar. .De.askDoExchange:\ Mchten Sie die Patrone wechseln (ja/nein) [nein]? : .De.exchangeBlackOrColor: Patronne whlen: .De.adviseMoveCartridge:\ Der Kopf wird in die Austauschposition bewegt. .De.adviseExchangeCartridge:\ Bitte die Patrone wechseln. .De.askExDone:\ Ist der Austausch durchgefhrt (ja/nein) [nein]? : .De.adviseFillCartridge:\ Das Auffllen der Tinte erfolgt. .De.adviseExchangeDone:\ Der Patronenwechsel ist durchgefhrt. .De.communicationError:\ Fehler beim Schreiben/Lesen zum/vom Drucker! .De.exchangeError:\ Der Drucker meldet einen Fehler auf der Anforderung "Patrone wechseln"! mtink-1.0.16/utils/Mtink.Sv0000644000076400001540000002200710376041214013604 0ustar jjfuse! File Mtink.Sv, swedish resources ! Translation by Daniel Tamm (daniel@tamm-tamm.de) ! ! Note for translator. This is a X-Resource file. The following ! character sequences have a special meaning: ! \ at the end of a line (no space allowed after the \): ! resource continue at the next line. ! \n This is a linefeed. ! \ (\ and space) the space character is part of the resource ! string. Normally space at the begin and end of a resource are ! elinminated. ! \t This is for a tabulator character. ! ! If you translate this you have to put the language designation ! withinh the key. ! Example: ! The resource default EpsonUtil*unknown must be translated into german ! ! EpsonUtil*unknown: unknown ! EpsonUtil.De*unknown: Unbekannt ! EpsonUtil is the program class name, .De must be inserted after this ! ! The language designator is composed for the first two character ! which are normally stored into the environment variable LANG and/or ! LC_ALL, LC_MESSAGE. The first letter is to be written with upercase. EpsonUtil.Sv*unknown: oknd ! The version number will be set into the c-source file ! EpsonUtil.Sv*title_LB.labelString: EPSON UTILITIES V 0.9.12 EpsonUtil.Sv*legend_LB.labelString: blckmngd EpsonUtil.Sv*ok_PB.labelString: Ut EpsonUtil.Sv*mainWindow.ok_PB.tooltip: Stnga\nStatus Monitor. EpsonUtil.Sv*pref_PB.labelString: Alternativ EpsonUtil.Sv*pref_PB.tooltip:\ - Browser,\n\ - Minihjlp,\n\ - Val av anslutning\n\ - Val av skrivaren\n\ - funktionsstt EpsonUtil.Sv*about_PB.labelString: Info EpsonUtil.Sv*about_PB.tooltip:\ Licens och\n\ medverkande EpsonUtil.Sv*help_PB.labelString: Hjlp EpsonUtil.Sv*help_PB.tooltip: Visa hjlpen i ett browser-fnster. EpsonUtil.Sv*check_PB.labelString: Kontrollera\nmunstycken EpsonUtil.Sv*check_PB.tooltip:\ Skriv ut ett testmnster fr att\n\ se om munstycken r tppta.\n\ Tppta munstycken gr vita\n\ remsor i utskrifter. EpsonUtil.Sv*clean_PB.labelString: Rengr\nmunstycken EpsonUtil.Sv*clean_PB.tooltip:\ Du kan rengra munstycken hr\n\ om dom inte r i ordning. EpsonUtil.Sv*align_PB.labelString: Rta upp\ntryckhuvud EpsonUtil.Sv*align_PB.tooltip:\ Varning !\n\ Detta kan skada skrivaren. EpsonUtil.Sv*reset_PB.labelString: Reset\nskrivaren EpsonUtil.Sv*reset_PB.tooltip: Detta funkar inte fr alla modeller. EpsonUtil.Sv*cartridge_PB.labelString: Byta\npatron EpsonUtil.Sv*cartridge_PB.tooltip:\ Om din skrivare har\n\ ingen knapp d bever\n\ du det hr. EpsonUtil.Sv*addPrinterTxt: Andra skrivare EpsonUtil.Sv*printerState_LB.labelString: Status: EpsonUtil.Sv*state_LB.labelString: - EpsonUtil.Sv*noPrinter*messageString:\ Kommunikationsproblem med skrivaren!\n\ Vnligen kontrollera fljande fel:\n\ "Pappret r slut", "Blcket r slut", "Skrivaren r inte p"\n\ \n\ Notera att ngra skrivare svarar inte fr\n\ ngra sekunder efter stta dom p. EpsonUtil.Sv*noPrinter*dialogTitle: Fel EpsonUtil.Sv*cfg1_LB.labelString: Val av skrivaren: EpsonUtil.Sv*cfg2Printer_PB.labelString: Val av skrivaren: EpsonUtil.Sv*cfg2Printer_PB.tooltip:\ En lista av skrivare erbjuds.\n\ Dr kan du vlja din modell. EpsonUtil.Sv*cfg2Device_PB.labelString: Val av porten: EpsonUtil.Sv*cfg2Device_PB.tooltip:\ Det vore bra\n\ om mtink kunde\n\ gra det sjlv! EpsonUtil.Sv*next_PB.labelString: Nsta EpsonUtil.Sv*next: Nsta EpsonUtil.Sv*previous_PB.labelString: Fregende EpsonUtil.Sv*previous: Fregende EpsonUtil.Sv*save: Spara EpsonUtil.Sv*cancel: Avbryt EpsonUtil.Sv*ok: OK EpsonUtil.Sv*about:\ EPSON Utilities\n\ \n\ Version V 0.9.12\n\ \n\ Copyright: Jean-Jacques Sarton 2001\n\ \nEmail: jj.sarton@t-online.de\n\ \n\ URL: http://xwtools.automatix.de\n\ \n\ Delar av koden har tagits frn gimp-print projektet\n\ Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\n\ \n\ Licens: GPL\n\ \n\ Tack till:\n\ Keith Amidon\n\ camalot@picnicpark.org\n\ Ronny Budzinske\n\ Nicola Fabiano\n\ ivololeribar@yahoo.it\n\ Tokai Ferenc\n\ Karlheinz Guenster\n\ Gene Heskett\n\ gene_heskett@iolinc.net\n\ Mogens Jger\n\ mogensjaeger@get2net.dk\n\ Till Kamppeter\n\ (ledare Foomatic/www.linuxprinting.org projektet)\n\ http://www.linuxprinting.org/till\n\ Stefan Kraus\n\ sjk@weserbergland.de\n\ http://xwgui.automatix.de\n\ Rainer Krienke\n\ krienke@uni-koblenz.de\n\ Sylvain Le-Gall\n\ sylvain.le-gall@polytechnique.org\n\ Steven J. Mackenzie\n\ Raul Morales\n\ raul.mh@telefonica.net\n\ http://www.telefonica.net/web/ruten\n\ Simon Morlat\n\ Marc Riese\n\ Marc-Riese@gmx.de\n\ Hikmet Salar\n\ Salar@gmx.de\n\ Glen Stewart\n\ Daniel Tamm\n\ daniel@tamm-tamm.de\n\ http:/www.tamm-tamm.de\n http:/www.expedit.org\n\ Robert Wachinger\n\ nospam@robert-wachinger.de\n\ Klaus Wnschel\n\ klaus.wuenschel@knittelsheim-computer.de\n\ http:/www.knilse.de\n\ Alberto Zanoni. EpsonUtil.Sv*ctTxt0:\ Vnligen stt in en ark i din skrivare fr att brja med proceduren att rta upp huvudet.\n\ Tryck p [Nsta] fr att brja\n\ eller [Avbryt] fr att avbryta. EpsonUtil.Sv*ctTxtC0:\ Vnligen stt in en ark i din skrivare fr att brja med proceduren att rta upp huvudet.\n\ Vlj det svarta eller det frjat huvudet och\n\ tryck p [Nsta] fr att brja eller [Avbryt] fr att avbryta. EpsonUtil.Sv*ctTxt1:\ Granska utskriften, och vlj det bsta linjeparet i mnstret. Sedan stt arken i skrivaren igen \ och tryck p [Nsta] fr att fortstta. EpsonUtil.Sv*ctTxt1C:\ Granska utskriften noggrant, och vlj mnstret med dom rakaste vertikala linjer. \ Om du inte kan hitta ett jmnt mnster, vlj nummret av det \ bsta mnstret, och repetera proceduren.\n\ \n\ Stt in arken i skrivaren igen och tryck p [Nsta] fr att fortstta. EpsonUtil.Sv*ctTxtP:\ Vnta tills arken kastas ut ur skrivaren och sen tryck p [Nsta] fr att fortstta. EpsonUtil.Sv*ctTxt5:\ Granska den sista utskriften mycket noggrant fr att tillfrskra att skrivaren r korrekt rtat upp.\n\ \n\ Sedan vlj:\n\ \n\ [Spara] fr att spara resultatet i skrivaren eller\n\ [Avbryt] fr att avbryta utan att spara resultatet. EpsonUtil.Sv*exTxt0:\ Utbyte av patronen:\n\ \n\ Vnligen tryck:\n\ \n\ [Nsta] fr att fortstta eller\n\ [Avbryt] EpsonUtil.Sv*exTxt00:\ Utbyte av patronen:\n\ \n\ Vnligen vlj svart eller frg\n\ Tryck:\n\ \n\ [Nsta] fr att fortstta eller\n\ [Avbyt] EpsonUtil.Sv*exTxt1:\ Utbyte av patronen:\n\ \n\ Skrivhuvudet flyttas till utbytespositionen. EpsonUtil.Sv*exTxt2:\ Utbyte av patronen:\n\ \n\ Stt i en ny patron och:\n\ \n\ Tryck [Nsta] EpsonUtil.Sv*exTxt3:\ Utbyte av patronen:\n\ \n\ process "fylla blcket". EpsonUtil.Sv*colors_RC*four_TB.labelString: 4 frger EpsonUtil.Sv*colors_RC*six_TB.labelString: 6 frger EpsonUtil.Sv*head_RC*col_TB.labelString: Frg EpsonUtil.Sv*head_RC*bw_TB.labelString: Svart EpsonUtil.Sv*noAccess*dialogTitle: Fel EpsonUtil.Sv*scrTxt_MW.head_RC.bw_TB.tooltip:\ Utfr operationen\n\ med patronen fr\n\ svart blck. EpsonUtil.Sv*scrTxt_MW.head_RC.col_TB.tooltip:\ Utfr operationen\n\ med patronen fr\n\ frgat blck. EpsonUtil.Sv*noAccess*messageString:\ Ingen access till skrivarens apparatfil.\n\ \n\ Vnligen kontrollera att mtink har tillrckliga\n\ rtter fr att komma t apparafilen.\n\ \n\ Konsultera ven dokumentationen fr detta. EpsonUtil.Sv*fsb*dialogTitle: Mtink EpsonUtil.Sv*fsb*CancelLabelString: Avbryt EpsonUtil.Sv*fsb*okLabelString: OK EpsonUtil.Sv*fsb*applyLabelString: Filter EpsonUtil.Sv*fsb*filterLabelString: Filter EpsonUtil.Sv*fsb*fileListLabelString: Filer EpsonUtil.Sv*fsb*dirListLabelString: Kataloger EpsonUtil.Sv*browser_LB.labelString: Vlj webblsare EpsonUtil.Sv*browser_PB.labelString: \ ...\ EpsonUtil.Sv*browser_PB.tooltip: Val av webblsaren EpsonUtil.Sv*tooltip_TB.labelString: Minihjlp EpsonUtil.Sv*tooltip_TB.tooltip:\ Hr kan du\n\ avaktivera\n\ minihjlpen. EpsonUtil.Sv*autodetect_TB.labelString: Tillta automatisk upptckten EpsonUtil.Sv*autodetect_TB.tooltip:\ Vid starten, Mtink ska frska att\n\ ta reda p anslutna skrivaren.\n\ Detta funkar inte med alla skrivare. EpsonUtil.Sv*save_PB.labelString: Spara EpsonUtil.Sv*save_PB.tooltip: Anvnd ndringarna. EpsonUtil.Sv*ConfigureForm.cancel_PB.tooltip:\ Anvnd inte ndringarna,\n\ stnga konfigurationen. EpsonUtil.Sv*cancel_PB.labelString: Avbryt ! Printer state EpsonUtil.Sv*error: Fel EpsonUtil.Sv*printing: Skriver ut EpsonUtil.Sv*selfTest: Sjlvtest EpsonUtil.Sv*busy: Upptagen EpsonUtil.Sv*ok: OK EpsonUtil.Sv*cleaning: Rengrar EpsonUtil.Sv*unknown: Oknd mtink-1.0.16/utils/printer.desc0000777000076400001540000000000010665176047020157 2printer.desc.bldinustar jjfusemtink-1.0.16/utils/Mtink.Ru.utf80000755000076400001540000002670610437770106014513 0ustar jjfuse! File Mtink.De, German ressources. ! Файл Mtink.Ru, Русские ресурсы. ! ! Notiz für Übersetzer. Это ist eine X-Ressource-Datei. ! Nachstehende Zeichensequenzen haben eine spezielle Bedeutung: ! \ Am Ende einer Zeile (Leerzeichen и Tabulatoren dürfen не ! vorhanden sein) bedeutet, dass die Ressource in der nächste Zeile ! fortgesetzt werden. ! \n Это steht für eine Zeilenschaltung. ! \ (\ и Leerzeichen) Das Leerzeichen ist Teil der Zeichenkette. ! Leerzeichen am Anfang eine Zeichenkette werden normalerweise ! eliminiert. ! \t Steht für ein Tabulatorzeichen. ! ! am Anfang einer Zeile (Leerzeichen dürfen vorgesetzt sein) leitet ! ein Kommentar ein. ! ! Wenn Sie eine Übersetzung vornehmen, ist die Sprachkennung innerhalb ! des Bezeichners einzutragen. ! Beispiel: ! Die default Ressource EpsonUtil*unknown ist auf Deutsch zu übersetzen ! ! EpsonUtil*unknown: unknown ! EpsonUtil.Ru*unknown: Unbekannt ! EpsonUtil ist der Klassennamen, .De muss nach den Klassennamen ! eingefügt werden. Soll von Deutsch nach Französisch übersetzt werden ! ist jeweils De durch Fr zu ersetzen. ! ! Die Sprachkennung besteht aus zwei Zeichen, welche aus der Umgebungsvariable ! LANG, LC_ALL и LC_MESSAGE entnommen werden. Der erste Buchstabe wird ! als Kapitälchen umgewandelt. ! ! Der Übersichtlichkeit halber habe ich jede Ressource auf mehrere Zeilen ! umgebrochen. Это sollte vor allem bei mehrzeiligen Texten die Übersicht ! bezüglich Formatierung verbessern. EpsonUtil.Ru*unknown: не известен ! Die Version wird beim Erstellen der C-Datei ersetzt. EpsonUtil.Ru*title_LB.labelString:\ EPSON UTILITIES V 0.9.12 EpsonUtil.Ru*legend_LB.labelString:\ Количество чернил EpsonUtil.Ru*ok_PB.labelString:\ Конец EpsonUtil.De.mainWindow.ok_PB.tooltip:\ Статус\n\ покинуть EpsonUtil.Ru*pref_PB.labelString:\ Установки EpsonUtil.Ru*pref_PB.tooltip:\ - Враузер,\n\ - Подсказка,\n\ - Интерфейс\n\ - Выбор принтера\n\ - Режим работы EpsonUtil.Ru*about_PB.labelString: Über EpsonUtil.Ru*about_PB.tooltip:\ Лицензия и\n\ помошники EpsonUtil.Ru*help_PB.labelString:\ Помощ EpsonUtil.Ru*help_PB.tooltip:\ Помощ показать в новом окне. EpsonUtil.Ru*check_PB.labelString:\ Дюзы\n\ проверить EpsonUtil.Ru*check_PB.tooltip:\ Если распечатка загрязнена,\n\ проверьте чисты ли\n\ Дюзы печатающей головки. EpsonUtil.Ru*clean_PB.labelString:\ Дюзы чистить EpsonUtil.Ru*clean_PB.tooltip: \ Если распечатка загрязнена \n\ и Дюзы засорены,\n\ то прочисте Дюзы печатающей головки. EpsonUtil.Ru*align_PB.labelString:\ Печатающую головку\n\ выправить EpsonUtil.Ru*align_PB.tooltip:\ Внимание!\n\ Это может повредить Принтер! EpsonUtil.Ru*reset_PB.labelString:\ Установить\n\ первоначальные установки EpsonUtil.Ru*reset_PB.tooltip:\ Установление первоначальных установок\n\ не поддерживается всеми типами\n\ принтеров. EpsonUtil.Ru*cartridge_PB.labelString:\ Чернильный патрон\n\ сменить EpsonUtil.Ru*cartridge_PB.tooltip:\ Принтеры без выключателя\n\ нуждаются в этом. EpsonUtil.Ru*addPrinterTxt:\ Другой принтер EpsonUtil.Ru*printerState_LB.labelString:\ Статус EpsonUtil.Ru*state_LB.labelString:\ - EpsonUtil.Ru*noPrinter*messageString:\ Ошибка связи!\n\ Проверить принтер по поводу этой ошибки:\n\ "Ошибка подачи бумаги", "Количество чернил",\n\ "Принтер включен".\n\ \n\ Учтите, что некоторые Принтеры не\n\ реагируют несколько секунд\n\ после включения. EpsonUtil.Ru*noPrinter*dialogTitle:\ Ошибка EpsonUtil.Ru*cfg1_LB.labelString:\ Принтер Выбор: EpsonUtil.Ru*cfg2Printer_PB.labelString:\ Принтер Выбор: EpsonUtil.Ru*cfg2Printer_PB.tooltip:\ Вы можете выбрать в этом списке ваш тип принтера. EpsonUtil.Ru*cfg2Device_PB.labelString:\ Порт Выбор: EpsonUtil.Ru*cfg2Device_PB.tooltip:\ Если бы Mtink мог бы\n\ определить тип сам! EpsonUtil.Ru*next_PB.labelString:\ Дальше EpsonUtil.Ru*next:\ Дальше EpsonUtil.Ru*previous_PB.labelString:\ Назад EpsonUtil.Ru*previous:\ Назад EpsonUtil.Ru*save:\ Сохранить EpsonUtil.Ru*cancel:\ Прервать EpsonUtil.Ru*ok:\ OK EpsonUtil.Ru*about:\ EPSON Utilities\n\ \n\ Version V 0.9.12\n\ \n\ Copyright: Jean-Jacques Sarton 2001\n\ \n\ Email: jj.sarton@t-online.de\n\ \n\ URL: http://xwtools.automatix.de\n\ \n\ Части Кода заимствованы из Gimp-Print проекта\n\ Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\n\ \n\ Лицензия: GPL\n\ \nБлагодарность следующим лицам:\n\ Keith Amidon\n\ camalot@picnicpark.org\n\ Ronny Budzinske\n\ Nicola Fabiano\n\ ivololeribar@yahoo.it\n\ Tokai Ferenc\n\ Karlheinz Guenster\n\ Gene Heskett\n\ gene_heskett@iolinc.net\n\ Mogens Jćger\n\ mogensjaeger@get2net.dk\n\ Till Kamppeter\n\ (leader Foomatic/www.linuxprinting.org project)\n\ http://www.linuxprinting.org/till\n\ Stefan Kraus\n\ sjk@weserbergland.de\n\ http://xwgui.automatix.de\n\ Sylvain Le-Gall\n\ sylvain.le-gall@polytechnique.org\n\ Steven J. Mackenzie\n\ Raul Morales\n\ raul.mh@telefonica.net\n\ http://www.telefonica.net/web/ruten\n\ Simon Morlat\n\ Marc Riese\n\ Marc-Riese@gmx.de\n\ Hikmet Salar\n\ Salar@gmx.de\n\ Glen Stewart\n\ Daniel Tamm\n\ daniel@tamm-tamm.de\n\ http:/www.tamm-tamm.de\n http:/www.expedit.org\n\ Robert Wachinger\n\ nospam@robert-wachinger.de\n\ Klaus Wünschel\n\ klaus.wuenschel@knittelsheim-computer.de\n\ http:/www.knilse.de\n\ Alberto Zanoni. EpsonUtil.Ru*ctTxt0:\ Установка головки:\n\ \n\ Вложите чистый лист бумаги в принтер и нажмите [Дальше]. EpsonUtil.Ru*ctTxtC0:\ Установка головки:\n\ \n\ Вложите чистый лист бумаги в принтер, установите чёрную \ или цветную головку\n\ и нажмите [Дальше] или [Прервать]. EpsonUtil.Ru*ctTxt1:\ Выберите лучшую пару линий\n Вложите чистый лист бумаги в принтер, и нажмите [Дальше]. EpsonUtil.Ru*ctTxt1:\ Выберите строку с наиболее прямолинейным штрихом. Напротив каждого штриха находится число от \ 1 до 8, или 15. Выберите курсором одно из этих чисел.\n\ \n\ Вложите снова лист в Принтер, и нажмите [Дальше]. EpsonUtil.Ru*ctTxtP:\ Подождите пока лист будет выдан и нажмите [Дальше]. EpsonUtil.Ru*ctTxt5:\ Просмотрите тщательно распечатку.\n\nВы можете теперь:\n\n[сохранить] теперяшнюю установку\ или\n\ [Прервать], без сохранения установки. EpsonUtil.Ru*exTxt0:\ Чернильный патрон сменить:\n\ \n\ нажмите :\n\ \n\ [Дальше] для продолжения или\n\ [Прервать]. EpsonUtil.Ru*exTxt00:\ Чернильный патрон сменить:\n\ \n\ Выберите цветной или чернобелый и нажмите :\n\ \n\ [Дальше] для продолжения или\n\ [Прервать]. EpsonUtil.Ru*exTxt1:\ Чернильный патрон сменить:\n\ \n\ Каретка будет двигаться в различных направлениях. EpsonUtil.Ru*exTxt2:\ Чернильный патрон сменить:\n\ \n\ Вставте новый чернильный патрон и:\n\ \n\ нажмите [Дальше]. EpsonUtil.Ru*exTxt3:\ Чернильный патрон сменить:\n\ \n\ Патрон будет наполнен чернилами. EpsonUtil.Ru*capabilities_LB.labelString:\ Конфигурация принтера: EpsonUtil.Ru*capabilities_RC*id_TB.labelString:\ Принтер выдаёт идентификационные данные. EpsonUtil.Ru*capabilities_RC*reset_TB.labelString:\ Програмный ресет возможен. EpsonUtil.Ru*capabilities_RC*state_TB.labelString:\ Принтер выдаёт данные о своём состоянии. EpsonUtil.Ru*capabilities_RC*ex_TB.labelString:\ Необходима смена чернил с помощью программы. EpsonUtil.Ru*colors_RC*four_TB.labelString:\ 4 Цвета EpsonUtil.Ru*colors_RC*six_TB.labelString:\ 6 Цвета EpsonUtil.Ru*head_RC*col_TB.labelString:\ Цвет EpsonUtil.Ru*head_RC*bw_TB.labelString:\ Чёрный EpsonUtil.Ru*noAccess*dialogTitle:\ Ошибка EpsonUtil.De.scrTxt_MW.head_RC.bw_TB.tooltip:\ Выполнить операцию \n\ с чёрным чернильным патроном. EpsonUtil.De.scrTxt_MW.head_RC.col_TB.tooltip:\ Выполнить операцию \n\ с цветным чернильным патроном. EpsonUtil.Ru*noAccess*messageString:\ Доступ к интерфейсу не возможен.\n\ Проверьте, имеет ли mtink достаточно\n\ прав доступа.\n\ Проверьте это в документации. EpsonUtil.Ru*fsb*dialogTitle:\ Mtink EpsonUtil.Ru*fsb*CancelLabelString:\ прервать EpsonUtil.Ru*fsb*okLabelString:\ OK EpsonUtil.Ru*fsb*applyLabelString:\ Фильтер EpsonUtil.Ru*fsb*filterLabelString:\ Фильтер EpsonUtil.Ru*fsb*fileListLabelString:\ Файлы EpsonUtil.Ru*fsb*dirListLabelString:\ Директория EpsonUtil.Ru*Враузер_LB.labelString:\ Враузер выбрать ! Внимание ein ' ' folgt das '\' Zeichen. EpsonUtil.Ru*Враузер_PB.labelString:\ ...\ EpsonUtil.Ru*Враузер_PB.tooltip:\ Враузер выбрать. EpsonUtil.Ru*tooltip_TB.labelString:\ Подсказка EpsonUtil.Ru*tooltip_TB.tooltip:\ Эту навязчивую подсказку\n\ можно с помощью этого\n\ включить или выключить. EpsonUtil.Ru*autodetect_TB.labelString:\ Автоматическое определение типа принтера. EpsonUtil.Ru*autodetect_TB.tooltip:\ Mtink пытается при старте\n\ определить тип принтера автоматически.\n\ Это не возможно для всех типов принтеров. EpsonUtil.Ru*save_PB.labelString: сохранить EpsonUtil.Ru*save_PB.tooltip: установки сохранить. EpsonUtil.De.ConfigureForm.cancel_PB.tooltip:\ установки не сохранять,\n\ выдти. EpsonUtil.Ru*cancel_PB.labelString:\ прервать ! Принтер Status EpsonUtil.Ru*error:\ Ошибка EpsonUtil.Ru*printing:\ Печать EpsonUtil.Ru*selfTest:\ Тест EpsonUtil.Ru*busy:\ Работает EpsonUtil.Ru*ok:\ OK EpsonUtil.Ru*cleaning:\ Чистка EpsonUtil.Ru*unknown:\ Не известен mtink-1.0.16/utils/Mtink.By0000644000076400001540000001601310376041214013566 0ustar jjfuse! File Mtink.By, bavarian resources EpsonUtil.By*unknown: kennd koana EpsonUtil.By*title_LB.labelString: EPSON GRAFFE V 0.9.12 EpsonUtil.By*legend_LB.labelString: Dindnmeng EpsonUtil.By*ok_PB.labelString: Aufhean EpsonUtil.By.mainWindow.ok_PB.tooltip: Status-Monitor\nvalassn. EpsonUtil.By*pref_PB.labelString: Wos eigschtit is EpsonUtil.By*pref_PB.tooltip: - Browser,\n- Minihuif,\n- Schnittschtein\n- Druckaauswahl\n- Betriebsart EpsonUtil.By*about_PB.labelString: ba EpsonUtil.By*about_PB.tooltip: Lizenz und\nde wo mitgmacht ham EpsonUtil.By*help_PB.labelString: Huif EpsonUtil.By*help_PB.tooltip: Huif in am Browser ozoagn. EpsonUtil.By*check_PB.labelString: Dsn\nprfn EpsonUtil.By*check_PB.tooltip: Wenn da Ausdruck Streifn hod,\nna konnst kontrollian, ob\nde Dsn dreggad san. EpsonUtil.By*clean_PB.labelString: Dsn\nsaubamacha EpsonUtil.By*clean_PB.tooltip: Wenn da Ausdruck Streifn hod\nund de Dsn zua san,\nna konnst do a\nReinigung oschdssn. EpsonUtil.By*align_PB.labelString: Kepf\nausrichtn EpsonUtil.By*align_PB.tooltip: Bass auf !\nDo kannt da da Drucka varecka. EpsonUtil.By*reset_PB.labelString: Druckr\nzrucksetzn EpsonUtil.By*reset_PB.tooltip: s'Zrucksetzn vom Drucka\nght ned bei olle. EpsonUtil.By*cartridge_PB.labelString: Patrona\nwechsln EpsonUtil.By*cartridge_PB.tooltip: Drucka ohne Schoida\nbraucha des. EpsonUtil.By*addPrinterTxt: Andere Drucka EpsonUtil.By*printerState_LB.labelString: Schtatus: EpsonUtil.By*state_LB.labelString: - EpsonUtil.By*noPrinter*messageString: Dea mog ned!\nSchaug amoi, obs Fehla gibt:\n"Papiafehla", "No Dindn da?",\n"Isa iwahabts eigschoid?".\n\nDeng dro, da manche Drucka\na boor Sekundn nachm Eischoidn\nno ned `da` san. EpsonUtil.By*noPrinter*dialogTitle: Fhla EpsonUtil.By*cfg1_LB.labelString: Drucka zum Auswin: EpsonUtil.By*cfg2Printer_PB.labelString: Drucka zum Auswin: EpsonUtil.By*cfg2Printer_PB.tooltip: Suach da do an Drucka aus. EpsonUtil.By*cfg2Device_PB.labelString: Port zum Auswin: EpsonUtil.By*cfg2Device_PB.tooltip: Wenn Mtink des bloss\nseiba aussuacha\nkannd ! EpsonUtil.By*next_PB.labelString: Weida EpsonUtil.By*next: Weida EpsonUtil.By*previous_PB.labelString: Zruck EpsonUtil.By*previous: Zruck EpsonUtil.By*save: Sichan EpsonUtil.By*cancel: Aufhean EpsonUtil.By*ok: Ois kloa EpsonUtil.By*about:\ EPSON Graffe\n\ \n\ Version V 0.9.12\n\ \n\ Copyright: Jean-Jacques Sarton 2001\n\ \n\ Email: jj.sarton@t-online.de\n\ \n\ URL: http://xwtools.automatix.de\n\ \n\ A Teil vom Code kimmt vom Gimp-Print Projekt\n\ Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\n\ \n\ Lizenz: GPL\n\ \n\ A Dangsche an:\n\ Keith Amidon,\n\ camalot@picnicpark.org\n\ Ronny Budzinske\n\ Nicola Fabiano\n\ ivololeribar@yahoo.it\n\ Tokai Ferenc\n\ Karlheinz Guenster\n\ Gene Heskett\n\ gene_heskett@iolinc.net\n\ Till Kamppeter\n\ (leader of the Foomatic/www.linuxprinting.org)\n\ http://linuxprinting.org/till\n\ Stefan Kraus\n\ sjk@weserbergland.de\n\ http://xwgui.automatix.de\n\ Sylvain Le-Gall\n\ sylvain.le-gall@polytechnique.org\n\ Steven J. Mackenzie\n\ Raul Morales\n\ raul.mh@telefonica.net\n\ http://www.telefonica.net/web/ruten\n\ Simon Morlat,\n\ Marc Riese Marc-Riese@gmx.de,\n\ Hikmet Salar\n\ Salar@gmx.de,\n\ Glen Stewart\n\ Daniel Tamm\n\ daniel@tamm-tamm.de\n\ http:/www.tamm-tamm.de\n http:/www.expedit.org\n\ Robert Wachinger\n\ nospam@robert-wachinger.de\n\ Alberto Zanoni. EpsonUtil.By*ctTxt0: Kopfausrichtn:\n\nBittsche, leg a laars Blattl Papia inn Drucka ei und mach [Weida]. EpsonUtil.By*ctTxtC0: Kopfausrichtn:\n\nBittsche, leg a laars Blattl Papia inn Drucka ei,wj da den Schwarz oda Farb-Kopf\nund mach [Weiter] oda brich mit [Abbrechen] ob EpsonUtil.By*ctTxt1: Schaug da amoi des grad druckte Musta o, und suach da de bestn Linienpaare aus.\nLeg des Blattl nommoi in den Drucka, und mach [Weida]. EpsonUtil.By*ctTxt1: Schaug da des grod druckte Blattl genau o. Suach des Musta des wo an gradastn, senkrechtn Strich gibt. An an jedn Strich is a Zoj vo 1 bis 8 oda 15 higschrim. De Zoin stengan wegam Blootz untaranand. De Zoj klickst o.\n\nLeg des Blattl nommoi in den Drucka, und mach [Weida]. EpsonUtil.By*ctTxtP: Wart bis des Blattl ausgwoafa wead und mach [Weida]. EpsonUtil.By*ctTxt5: Etz schaug da de Ergebniss wega da Ausrichtung nommoi ganz guad o, \n\nEtz konnst no:\n\n de Einstellung im Drucka [Sichan] oda\n [Abbrecha] ohne dasd was g`ndad host. EpsonUtil.By*exTxt0: Patrona wechsln:\n\nDua amoi :\n\n [Weiter] um weidazmacha oda\n [Abbruch] EpsonUtil.By*exTxt00: Patrona wechsln:\n\nSuach da Farb oda Schwarz aus unddua :\n\n [Weida] zum Weidamacha oda\n [Abbruch] EpsonUtil.By*exTxt1: Patrona wechsln:\n\nDa Druckkopf wead etz in de Stellung zum Wechsln gfahrn. EpsonUtil.By*exTxt2: Patrona wechsln:\n\nDua a neiche Patrona eine und\n\n druck [Weida] EpsonUtil.By*exTxt3: Patrona wechsln:\n\n De Dindn wead etz nachgfuid. EpsonUtil.By*capabilities_LB.labelString: Drucka konfigurian: EpsonUtil.By*capabilities_RC*id_TB.labelString: Da Drucka gibt sei Identifikation zruck EpsonUtil.By*capabilities_RC*reset_TB.labelString: Es ght koa Software Reset EpsonUtil.By*capabilities_RC*state_TB.labelString: Da Drucka schickt Status Informationen EpsonUtil.By*capabilities_RC*ex_TB.labelString: Dindnwechsl muasst per Software macha EpsonUtil.By*colors_RC*four_TB.labelString: 4 Farbn EpsonUtil.By*colors_RC*six_TB.labelString: 6 Farbn EpsonUtil.By*head_RC*col_TB.labelString: Farb EpsonUtil.By*head_RC*bw_TB.labelString: Schwarz EpsonUtil.By*noAccess*dialogTitle: Fehla EpsonUtil.By.scrTxt_MW.head_RC.bw_TB.tooltip: Mach des mid da Patrona\nmit da schwarzn Dindn. EpsonUtil.By.scrTxt_MW.head_RC.col_TB.tooltip: Mach des mid da Patrona\nmit da farbign Dindn. EpsonUtil.By*noAccess*messageString: sZuagreifa auf de Device-Dateien ght ned\n\nSchaug, da mtink gnua Zuagriffsrechte\ngriagt.\nWennstas ned woasst, schau in de Biachen nach. EpsonUtil.By*fsb*dialogTitle: Mtink EpsonUtil.By*fsb*CancelLabelString: Abbruch EpsonUtil.By*fsb*okLabelString: Ois kloa EpsonUtil.By*fsb*applyLabelString: Fuita EpsonUtil.By*fsb*filterLabelString: Fuita EpsonUtil.By*fsb*fileListLabelString: Feils EpsonUtil.By*fsb*dirListLabelString: Oadna EpsonUtil.By*browser_LB.labelString: Browser aussuacha EpsonUtil.By*browser_PB.labelString: \ ...\ EpsonUtil.By*browser_PB.tooltip: Browser aussuacha. EpsonUtil.By*tooltip_TB.labelString: Minihuif EpsonUtil.By*tooltip_TB.tooltip: De lstige Minihuif\nkonnst do damit\nei und ausschoitn. EpsonUtil.By*autodetect_TB.labelString: Lass a automatische Erkennung zua EpsonUtil.By*autodetect_TB.tooltip: Mtink probiat beim Startn, da\nseiba an Drucka bestimmt.\nDes ght aba ned bei an jeden Drucka. EpsonUtil.By*save_PB.labelString: Sichan EpsonUtil.By*save_PB.tooltip: Ois wosd gndat host banehma. EpsonUtil.By.ConfigureForm.cancel_PB.tooltip: De ndarungen wegschmeissn,\nd`Maskrne valassn. EpsonUtil.By*cancel_PB.labelString: Abbruch ! Drucker Status EpsonUtil.By*error:\ Fehler EpsonUtil.By*printing:\ Druckt EpsonUtil.By*selfTest:\ Selbst Test EpsonUtil.By*busy:\ Beschftigt EpsonUtil.By*ok:\ Ois kloa EpsonUtil.By*cleaning:\ saubamacha EpsonUtil.By*unknown:\ Unbekannt mtink-1.0.16/utils/Mtink.Da0000644000076400001540000001757710376041214013560 0ustar jjfuse! File Mtink.Da, also default resource ! ! Translated by ! Mogens Jger, Danmark ! mogensjaeger@get2net.dk EpsonUtil.Da*unknown: ukendt ! The version number will be set into the c-source file ! EpsonUtil.Da*title_LB.labelString: EPSON UTILITIES V 0.9.12 EpsonUtil.Da*legend_LB.labelString: Blk mngde EpsonUtil.Da*ok_PB.labelString: Afbryd EpsonUtil.Da*mainWindow.ok_PB.tooltip: Afslut\nStatus Monitor. EpsonUtil.Da*pref_PB.labelString: Indstillinger EpsonUtil.Da*pref_PB.tooltip:\ - Browser,\n\ - Mini hjlp,\n\ - Port valg,\n\ - Printer valg,\n\ - arbejds mde. EpsonUtil.Da*about_PB.labelString: Om EpsonUtil.Da*about_PB.tooltip:\ Licens og\n\ medvirkende. EpsonUtil.Da*help_PB.labelString: Hjlp EpsonUtil.Da*help_PB.tooltip: Vis hjlp i en browser. EpsonUtil.Da*check_PB.labelString: Check\nDyser EpsonUtil.Da*check_PB.tooltip:\ Print et test mnster for at\n\ checke for blokerede dyser.\n\ Blokerede dyser giver blanke\n\ striber p udskrifter. EpsonUtil.Da*clean_PB.labelString: Rens\nDyser EpsonUtil.Da*clean_PB.tooltip:\ Hvis dyserne ikke er OK,\n\ kan du rense dyserne her. EpsonUtil.Da*align_PB.labelString: Indret\nHoved EpsonUtil.Da*align_PB.tooltip:\ Advarsel !\n\ Dette kan beskadige printeren. EpsonUtil.Da*reset_PB.labelString: Reset\nPrinter EpsonUtil.Da*reset_PB.tooltip: Dette virker ikke for alle modeller. EpsonUtil.Da*cartridge_PB.labelString: Skift\nPatron EpsonUtil.Da*cartridge_PB.tooltip:\ Hvis din printer ikke\n\ tilbyder nogen switch\n\ kan du bruge dette. EpsonUtil.Da*addPrinterTxt: Anden Printer EpsonUtil.Da*printerState_LB.labelString: Tilstand: EpsonUtil.Da*state_LB.labelString: - EpsonUtil.Da*noPrinter*messageString:\ Problemer med kommunikationen med printeren,\n\ check printeren for fejl:\n\ "Intet Papir", "Ingen blk", "printer ikke tndt"\n\ \n\ Bemrk at nogle printere blokerer i nogle f\n\ sekunder efter de er blevet tndt. EpsonUtil.Da*noPrinter*dialogTitle: Fejl EpsonUtil.Da*cfg1_LB.labelString: Printer valg: EpsonUtil.Da*cfg2Printer_PB.labelString: Printer valg: EpsonUtil.Da*cfg2Printer_PB.tooltip:\ En liste af printere vil blive vist.\n\ Du kan vlge din model der. EpsonUtil.Da*cfg2Device_PB.labelString: Port valg: EpsonUtil.Da*cfg2Device_PB.tooltip:\ Kunne mtink bare\n\ selv klare det ! EpsonUtil.Da*next_PB.labelString: Nste EpsonUtil.Da*next: Nste EpsonUtil.Da*previous_PB.labelString: Forrige EpsonUtil.Da*previous: Forrige EpsonUtil.Da*save: Gem EpsonUtil.Da*cancel: Afbryd EpsonUtil.Da*ok: OK EpsonUtil.Da*about:\ EPSON Utilities\n\ \n\ Version V 0.9.12\n\ \n\ Copyright: Jean-Jacques Sarton 2001\n\ \nEmail: jj.sarton@t-online.de\n\ \n\ URL: http://xwtools.automatix.de\n\ \n\ Dele af koden er taget fra gimp-print project\n\ Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\n\ \n\ Licens: GPL\n\ \n\ Tak til:\n\ Keith Amidon\n\ camalot@picnicpark.org\n\ Ronny Budzinske\n\ Nicola Fabiano\n\ ivololeribar@yahoo.it\n\ Tokai Ferenc\n\ Karlheinz Guenster\n\ Gene Heskett\n\ gene_heskett@iolinc.net\n\ Mogens Jger\n\ mogensjaeger@get2net.dk\n\ Till Kamppeter\n\ (leader Foomatic/www.linuxprinting.org project)\n\ http://www.linuxprinting.org/till\n\ Stefan Kraus\n\ sjk@weserbergland.de\n\ http://xwgui.automatix.de\n\ Rainer Krienke\n\ krienke@uni-koblenz.de\n\ Sylvain Le-Gall\n\ sylvain.le-gall@polytechnique.org\n\ Steven J. Mackenzie\n\ Raul Morales\n\ raul.mh@telefonica.net\n\ http://www.telefonica.net/web/ruten\n\ Simon Morlat\n\ Marc Riese\n\ Marc-Riese@gmx.de\n\ Hikmet Salar\n\ Salar@gmx.de\n\ Glen Stewart\n\ Daniel Tamm\n\ daniel@tamm-tamm.de\n\ http:/www.tamm-tamm.de\n http:/www.expedit.org\n\n Robert Wachinger\n\ nospam@robert-wachinger.de\n\ Klaus Wnschel\n\ klaus.wuenschel@knittelsheim-computer.de\n\ http:/www.knilse.de\n\ Alberto Zanoni. EpsonUtil.Da*ctTxt0:\ Placer et ark papir i printeren for at begynde indretning af hoved processen.\n\ Tryk [Nste] for at begynde\n\ eller [Afbryd] for at stoppe. EpsonUtil.Da*ctTxtC0:\ Placer et ark papir i printeren for at begynde indretning af hoved processen.\n\ Vlg Sort eller farve, og\n\ Tryk [Nste] for at begynde, eller [Afbryd] for at stoppe. EpsonUtil.Da*ctTxt1:\ Undersg printet, og vlg det bedste liniepar i det sidste mnster,\n genindst arket i printeren og tryk [Nste] for at fortstte EpsonUtil.Da*ctTxt1C:\ Undersg arket, og afgr hvilket mnster der er glattest.\n\ Dette mnster er det der har mindst 'korn'.\n\ Hvis du ikke kan finde et glat mnster, skal du vlge nummeret p det\n\ bedste mnster, og gentage processen\n\ Indst arket i printeren, og tryk [Nste] for at fortstte. EpsonUtil.Da*ctTxtP:\ Vent til arket er kommet ud af printeren, og tryk [Nste] for at fortstte. EpsonUtil.Da*ctTxt5:\ Undersg det sidste udskrift meget omhyggeligt, for at vre sikker p at din printer er rettet helt ind.\n\ \n\ Du kan nu:\n\ \n\ [Gem] resultatet i printeren, eller\n\ [Afbryd] uden at gemme resultatet EpsonUtil.Da*exTxt0:\ Udskiftning patron:\n\ \n\ Tryk :\n\ \n\ [Nste] \for at fortstte, eller\n\ [Afbryd] EpsonUtil.Da*exTxt00:\ Udskiftning patron:\n\ \n\ Vlg sort eller farve\n\ Tryk:\n\ \n\ [Nste] for at fortstte, eller\n\ [Afbryd] EpsonUtil.Da*exTxt1:\ Udskiftning patron:\n\ \n\ Patron vognen bliver frt til positionen for udskiftning. EpsonUtil.Da*exTxt2:\ Udskiftning patron:\n\ \n\ Inst en ny patron, og:\n\ \n\ Tryk [Nste] EpsonUtil.Da*exTxt3:\ Udskiftning patron:\n\ \n\ proces "pfyldning blk". EpsonUtil.Da*colors_RC*four_TB.labelString: 4 Farver EpsonUtil.Da*colors_RC*six_TB.labelString: 6 Farver EpsonUtil.Da*head_RC*col_TB.labelString: Farver EpsonUtil.Da*head_RC*bw_TB.labelString: Sort EpsonUtil.Da*noAccess*dialogTitle: Fejl EpsonUtil.Da*scrTxt_MW.head_RC.bw_TB.tooltip:\ Udfrer pfyldning af\n\ sort blk i patronen. EpsonUtil.Da*scrTxt_MW.head_RC.col_TB.tooltip:\ Udfrer pfyldning af\n\ farvet blk i patronen. EpsonUtil.Da*noAccess*messageString:\ Kan ikke f fat i printeren.\n\ \n\ Kontroller at mtink har de forndne\n\ filrettigheder til enhedens filer.\n\ \n\ Se i vrigt dokumentationen. EpsonUtil.Da*fsb*dialogTitle: Mtink EpsonUtil.Da*fsb*CancelLabelString: Afbryd EpsonUtil.Da*fsb*okLabelString: OK EpsonUtil.Da*fsb*applyLabelString: Filter EpsonUtil.Da*fsb*filterLabelString: Filter EpsonUtil.Da*fsb*fileListLabelString: Filer EpsonUtil.Da*fsb*dirListLabelString: Biblioteker EpsonUtil.Da*browser_LB.labelString: Vlg Browser EpsonUtil.Da*browser_PB.labelString: \ ...\ EpsonUtil.Da*browser_PB.tooltip: Browser valg EpsonUtil.Da*tooltip_TB.labelString: Mini Hjlp EpsonUtil.Da*tooltip_TB.tooltip:\ Du kan deaktivere\n\ mini hjlpen her. EpsonUtil.Da*autodetect_TB.labelString: Tillad automatisk genkendelse EpsonUtil.Da*autodetect_TB.tooltip:\ Mtink vil prve at finde hvilken\n\ printermodel der er tilsluttet.\n\ Dette virker ikke med alle printere. EpsonUtil.Da*save_PB.labelString: Gem EpsonUtil.Da*save_PB.tooltip: Godkend ndringerne. EpsonUtil.Da*ConfigureForm.cancel_PB.tooltip:\ Undlad at tilfje ndringerne,\n\ forlad konfigurationen. EpsonUtil.Da*cancel_PB.labelString: Afbryd ! Printer state EpsonUtil.Da*error: Fejl EpsonUtil.Da*printing: Printer EpsonUtil.Da*selfTest: Selv Test EpsonUtil.Da*busy: Optaget EpsonUtil.Da*ok: OK EpsonUtil.Da*cleaning: Renser EpsonUtil.Da*unknown: Ukendt mtink-1.0.16/utils/bldTtinkResFile.sh0000755000076400001540000000015110376041214015570 0ustar jjfuse#!/bin/sh # create the file tres.c in the mainSrc directory LANG=C ./bldRes Ttink.* > ../mainSrc/tres.c mtink-1.0.16/utils/rdPrtDesc.Fr.txt0000644000076400001540000001451310376041214015214 0ustar jjfuserdPrtDesc: ---------- Cet utilitaire permet l'extraction de la descrition des paramtres pour les diffrents imprimantes et la prsentatin de ceux ci sous forme lisible. De plus il est possible de gnrer le fichier descriptif en language c a l'aide de rdPrtDesc. Syntaxe: rdPrtDesc -p|-c -p rdPrtDes cre un fichier lisible comprenant les donnes de toutes les imprimantes connues. -c rdPrtDes cre un fichier en language c a partir du fichier printer.desc situ dans le rpertoire courant. Le fichier gnr peut tre utilis par ttink/mtink. Les donnes des imprimantes dja connues sont bien sur prises en compte. Fichier printer.desc: --------------------- Ce fichier contient des blocs dcrivant les diffrentes imprimantes. Chaque bloc se presente de la faon suivante: .PRINTER .name: Stylus C20SX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: OLD D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .alignFunctionName: - .END Le mot clef ".PRINTER" dclare le dbut d'un bloc descriptif. Chaque bloc est trmin pas le mot clef ".END". Les mots clef entre ".PRINTER" et ".END" correspondent des charactristiques particulires et sont suivis d'un argument. Prre de noter que le charactre '`' a une signification particulire lors ce qu'il se trouve en dbut de ligne ou sil n'est prcd que de charactres blancs ou des tabulateurs. Le nom de l'imprimante, tel qu'il est retournu lors d'une interrogation de l'imprimante doit suivre le mot clef ".name:". ".colorsNb:" informe ttink/mtink du nombre de couleurs utilises. Les mots clef se terminant avec "Prot:" dsigne quel protocol est utilis pour la fonction donne. Les nouvelles imprimantes peuvent, grace au protocol D4, informer l'utilisateur quand la quantit d'encre rsiduelle et a l'etat de fonctionemen de l'imprimante (impression en cour, ...). Le protocol D4 utilise pour ceci des canaux indpendants. Le protocol D4 dfinit galement un certain nombre de commandes faisant double emploi avec des commandes existantes et permettant parfois une meilleure fontionalit. Malheureusement, l'implmentation varie selon les modelles. Pour cette raison et de plus pou assur le fonctionnement avec les imprimantes ne connaissant pas ce proptocol, il est possible de paramtrer diffrent mode: - OLD L'imprimante n'utilise pas le mode D4. - OLD D4 Utilisation d'une commande ancienne imbrique dnas le protocol D4. - OLD EXD4 L'imprimante connait le mode D4 mais l'imprimante doit tre mise en mode de compatibilit. - D4 L'imprimante connait une commande speciale D4, celle ci est utilise. ".mainProt:" declaration du mode par defaut. ".resetProt:" declarearion du protocol pour la commande de remise a zro. Certaine imprimante D4 connaisent cette commande mais les rsultats ne sont pas cey escompts ( Stylus Color 980 et Stylus Scan ...) ".alignProt:" Cette commande (alignement des ttes) n'est pas accessible directement par le protocol D4. Il est necessaire de declarer aux moins OLD. Suivamt la catgorie de l'imprimante il faut ventuellement ajouter EXD$ ou D4. Les mots clef se terminant par "Flg:" (pour drapeau) sont a suivre par les mots False (faut) ou True (vrai) en fonction des possinilits de l'imprimante. ".stateFlg:" indique si l'imprimante peu retourner des informations concernamt sont tat (imprime, erreur, ...). ".cleanSeparateFlg:" un faible nombre d'imprimante permettent le nettyage des buses de faon selective. Dans ce cas dclarer True. ".idFlg:" La Stylus Scan 2500 and probablement laStylus Scan 2000 ne retournent pas la chaine d'identification. Mettre le drapeau sur false pour ce matriel. ".exchangeFlg:" Un certain nombre d'imprimantes (Stylus Color 480/580) ne possde pas de possoir permettant l'enclenchement du processus d'change des cartouches d'encre. Une solution logicielle est neccesaire pour celle ci (valeur True). ".exchangeSeparateFlg:" Les 2 imprimantes suscite ncessite l'envoi de commandes pour les 2 types de cartouche d'encre. La valeur dot tre True. Certaines imprimantes sont pourvuent d'un poussoir pour le changement des carouches et accepte cependant une commande partir du logiciel. Si vous dsirez avoir cette possibilit, placer la valeur True pour le mot clef ".exchangeFlg:". Les mot clef se terminants par "Nb:" concernent l'alignement des ttes. ".passesNb:" ".ChoicesNb:" ".colorPassesNb:" ".colorChoicesNb:" Les 2 premiers mots clef prcide le nombre de passes et de choix pour l'alignement standard. Les 2 mots clef suivant permettent de notr les paramtres pour l'alignement des ttes couleur. Si cette possibilit n'existe pas il est neccessaire d'affecter 0 ".colorPassesNb:" Le dernier mot clef a t introduit en raison du manque de la fonction d'impression des lignes d'ajustement pour la Stylus Photo 820. La valeur est normalement -, pour la Stylus Photo 820 il faut inscrire Pattern820. Installation du fichier printer.desc: ------------------------------------- Ttink/Mtink recherchent le fichier printer.desc dans les rpertoires suivants: - /usr/lib/mtink - /usr/local/lib/mtink - /opt/mtink Si le fichier est trouv, celui ci est lut et la recherche est abondonne. Si vous direz modifier la description de vtre imprimante, vous pouvez extraire les information a l'aide de l'utilitaire rdPrtDesc et effectuer les changements souhaits. Aprs cette operation il suffit de copier le fichier sous un des rpertoires cits plus haut. Installer une nouvelle imprimante dans ttink/mtink: --------------------------------------------------- gnrez le fichier printer.desc dans le rpertoires .../mtink/utils et executez la commande rdPrtDesc -c > ../model.c Le fichier model.c contient les donnes de la novelle imprimante ainsi que les modelles dja connus Avec "make; make install" vous pouvez compiler et installer les programmes. mtink-1.0.16/utils/bldRes.Hu.txt0000644000076400001540000000047310376041214014542 0ustar jjfusebldRes: Ez a program olvassa a megadott forrs fjlt s alkot egy c-fjlt, amelyik belefoglaltatik a f programba. Syntax: bldRes resource_file_1 ..... Az output a konzolon kszl. Ha forrsfjlt kvn alkotni, cmezZE jra az outputot a kvnt fjlhoz. Pldul: bldRes Ttink.en Ttink.de > ../mainSrc/tres.c mtink-1.0.16/utils/Mtink.gen0000644000076400001540000000306610376041214013771 0ustar jjfuse! file Mtink.gen, general resources ! these resources must not be changed EpsonUtil*background: #cccccc EpsonUtil*foreground: #000000 EpsonUtil*shadowThickness: 1 EpsonUtil*XmToggleButton.shadowThickness: 0 EpsonUtil*highlightThickness: 1 EpsonUtil*XmSeparator.shadowThickness: 2 EpsonUtil*XmSeparatorGadget.shadowThickness: 2 EpsonUtil*XmSeparatorGadget.foreground: black EpsonUtil*scaleB.background: black EpsonUtil*scaleLb.background: #808080 EpsonUtil*scaleC.background: cyan EpsonUtil*scaleM.background: magenta EpsonUtil*scaleY.background: yellow EpsonUtil*scaleLc.background: #80ffff EpsonUtil*scaleLm.background: #ff80ff EpsonUtil*scalePh.background: #ffffff EpsonUtil*title_LB.foreground: blue EpsonUtil*title_LB.background: white EpsonUtil*TopShadowColor: #eeeeee EpsonUtil*BottomShadowColor: #111111 *tooltipBackground: #efefd7 *tooltipForeground: blue *tooltip_label.borderColor: red *tooltip_label.borderWidth: 1 *tooltip_label.alignment: ALIGNMENT_BEGINNING *tooltipPost: 1000 *tooltipDuration: 5000 *tooltipX: 10 *tooltipY: 2 ! for not european language you must include font resources ! into the langauge specific resource file EpsonUtil*title_LB.fontList: *-helvetica-*-r-normal--14-*-*-*-*-*-iso8859-1 EpsonUtil*fontList: *-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1 *tooltip_label.fontList: *-helvetica-bold-r-normal--14-* mtink-1.0.16/utils/Ttink.it.utf80000644000076400001540000001374110664610365014542 0ustar jjfuse!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! File Italiano per ttink. ! Qanto segue è per i traduttori. ! ! Questo file è prodotto come un semplice file X-resource ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! è un carattere di commmento se appare all'inizio di una ! linea. ! ! .syntax1: è una parola chiave. ! .It.syntax: è la chiave per un testo particolare. ! entrambi i caratteri (in questo caso It) sono presi dalle ! variabili d'ambiente LANG, LC_ALL. La prima lettera ! viene posta maiuscola e la seconda rimane normale. ! Qualora tu traduca questo file, sostituisci .En. con ! il valore corretto. ! ! \ Alla fine di una linea (spazi e tabulatori non sono ! ammessi) indica che la linea continua nella successiva. ! ! \ text permette di indentare text. E' richiesto solo dopo ! la parola chiave. Se neppure \ è presente, lo spazio viene ! rimosso. ! ! \n Segno di "a capo". Il seguito verrà  scritto sulla ! linea successiva. ! ! Nota che gli spazi alla fine di una linea non vengono ! rimossi. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .It.syntax1:\ Argomenti per .It.syntax2:\ Obbligatorio:\n\ -d device_file --device device_file\n\ Opzionali:\n\ -m name --model nome o numero\n\ senza questo la stampante viene rilevata sutomaticamente\n\ Ordine (solo un ordine può essere impartito):\n\ -r --reset\n\ -c --clean\n\ -n --nozzle-check\n\ -s --status (default)\n\ -a --align-head\n\ -e --exchange-ink (non per tutte le stampanti)\n\ -i --identity stampa il tipo di stampante\n\ Informazioni:\n\ -v --version stampa la versione\n\ -l --list-printer elenca le stampanti presenti\n .It.syntaxM:\ Ordine (solo un ordine può essere impartito):\n\ -r --reset\n\ -c --clean\n\ -n --nozzle-check\n\ -s --status (default)\n\ -a --align-head\n\ -e --exchange-ink (non per tutte le stampanti)\n\ -i --identity stampa il tipo di stampante\n\ Info:\n\ -v --version stampa la versione\n\ -l --list-printer elenca le stampanti presenti\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Messaggi d'errore e di avvertimento .It.noAccess:\ Accesso al file dispositivo impossibile o stampante non connessa. .It.noDetected:\ Modello di stampante non rilevabile. .It.unknownModel:\ Spiacente, modello sconosciuto. .It.noOPen:\ Spiacente, nessun accesso al file dispositivo. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Testi per richieste ed altro .It.continue:\ Continua (sì/no) [no] ? : .It.yesorno: sn .It.saveCancel: se .It.blackQ: nero .It.colorQ: colore .It.Hcontinue:\ @QContinua ?@Bsì@Bno .It.Wyesorno:\ Save=YES,Save=NO .It.WsaveCancel: se .It.followingPrintersFound:\ Sono state rilevate le seguenti stampanti: .It.ChoosePrinter:\ Scegli la stampante !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Stato .It.black: Nero .It.cyan: Ciano .It.magenta: Magenta .It.yellow: Giallo .It.lcyan: Ciano chiaro .It.lmagenta: Magenta chiaro .It.lblack: Grigio .It.lblack: Foto / nero matte .It.blue: Blu .It.red: Rosso .It.dyellow: Giallo scuro .It.gloss: Ottimizzatore lucentezza .It.grey: Grigio .It.printerState: stato stampante .It.unknown: sconosciuto .It.selfTest: auto test .It.busy: occupata .It.printing: stampa in corso .It.cleaning: pulizia .It.ok: Ok .It.error: Errore .It.interfaceNotSelected: Interfaccia non selezionata .It.paperJamError: Errore: carta inceppata .It.inkOutError: Errore: inchiostro terminato .It.paperOutError: Errore: carta terminata !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Allineamento testine .It.alignWarning:\ Attenzione !\nQuesto può danneggiare la stampante. .It.alignBlackOrColor:\ Allineo la testina del nero o del colore ? *firstHeadAlign:\ Inserisci un foglio nella stampante per iniziare\n\ la procedura di allineamento testina. .It.nextHeadAlign:\ Inserisci di nuovo il foglio nella stampante per\n\ continuare la procedura di allineamento testina. .It.lastHeadAlign:\ Controlla attentamente il risultato finale per assicurarti che la tua\n\ stampante sia allineata correttamente.\n\n\ Puoi ora: salvare i risultati nella stampante o\n\ uscire senza salvare i risultati\n(salva/esci) [esci] : .It.choosePattern:\ Analizza la stampa, e scegli la miglior coppia di linee\n\ dell'ultima stampa effettuata.\n\ Inserisci di nuovo il foglio nella stampante. .It.sampleNo:\ campione # .It.choosePattern2:\ Analizza le linee stampate e scegli la miglior coppia\n .It.chooseCPattern:\ Analizza l'allineamento del foglio, e trova quale\n\ schema sia il più fine.\n\ Questo schema è quello con grana più piccola.\n\ Se non riesci a trovarne uno fine,\n\ seleziona il numero di quello migliore, e\n\ ripeti la procedura.\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Cambio cartuccia .It.functionNA:\ Questa funzione non è disponibile per la stampante. .It.askDoExchange:\ Vuoi davvero sostituire la cartuccia (sì/no) [no] ? : .It.exchangeBlackOrColor:\ Scegli la cartuccia: .It.adviseMoveCartridge:\ La cartuccia viene ora spostata nella posizione di sostituzione. .It.adviseExchangeCartridge:\ Sostituisci ora la cartuccia. .It.askExDone:\ Sostituzione effettuata (sì/no) [no] ? : .It.adviseFillCartridge:\ Inizio riempimento inchiostro. .It.adviseExchangeDone:\ Sostituzione cartuccia effettuata. .It.communicationError:\ Errore durante la lettura o scrittura dalla/alla stampante ! .It.exchangeError:\ La stampante ha dato errore durante la richiesta di sostituzione cartuccia ! mtink-1.0.16/utils/Mtink.Fr0000644000076400001540000002262410664610223013572 0ustar jjfuse! File Mtink.Fr, french resources. ! Fichier Mtink.Fr, resource franaises. ! ! Notes pout les traducteurs. Ce fichier correspond au format des resources ! pour X11. ! ! Les squences suivantes ont une signification spciale: ! \ en fin de ligne (les espace et tabulateurs ne sont pas admis) ! signifie que le texte continue sur la ligne suivante. ! \n correspond a un retour chariot. ! \ (\ et espace). L'espace fait parti du texte. ! Les espace sont normalement limins en dbut des textes. ! \t correspond a un tabulateur. ! ! en debut de ligne (les espaces en dbut de ligne sont admissibles) ! dnote un commentaire. ! ! Si vous traduis un fichier resource vers une autre langue, il est neccessaire ! de modifier le mot clef en fonction de la langue cible. ! Example: ! La resource EpsonUtil*unknown est a traduire en franais: ! ! EpsonUtil*unknown: unknown ! EpsonUtil.Fr*unknown: inconnus ! EpsonUtil est le nom de classe du programmme, .Fr doit etre inserr a ! aprs le nom de classe. Si la traduction s'effectue du franais vers ! l'italien, .Fr est remplacer par .It. ! ! Le code pour l'identification de la langue est extrait des variables ! d'environement LANG, LC_ALL und LC_MESSAGE. Le premier charactre est ! transform en lettre capitale. ! ! J'ai, dans le but d'une meilleure lisibilit, rpartit les textes ! sur plusieurs lignes, ce qui devrait rendre le formatage plus clair. EpsonUtil.Fr*unknown:\ inconnus ! Le numro de version est corrig lors de la gnration des fichiers C. EpsonUtil.Fr*title_LB.labelString:\ UTILITAIRES EPSON V 0.9.12 EpsonUtil.Fr*legend_LB.labelString:\ Quantit d'encre EpsonUtil.Fr*ok_PB.labelString:\ Quitter EpsonUtil.Fr.mainWindow.ok_PB.tooltip:\ Au revoir. EpsonUtil.Fr*pref_PB.labelString\ Prfrence EpsonUtil.Fr*pref_PB.tooltip:\ - Browser,\n\ - Bulles d'aide,\n\ - Fichier de connexion\n\ - Imprimante\n\ - Mode de travail EpsonUtil.Fr*about_PB.labelString:\ A propos EpsonUtil.Fr*about_PB.tooltip:\ Licence et\n cooperateurs EpsonUtil.Fr*help_PB.labelString:\ Aide EpsonUtil.Fr*help_PB.tooltip:\ Afficher l'aide avec un browser. EpsonUtil.Fr*check_PB.labelString:\ Test\n\ buses EpsonUtil.Fr*check_PB.tooltip:\ Ici, vous pouvez controller\n\ l'tat des buses. EpsonUtil.Fr*clean_PB.labelString:\ Nettoyage\n\ buses EpsonUtil.Fr*clean_PB.tooltip:\ Le nettoyages des buses\n\ permet l'limination\n\ des "rayures". EpsonUtil.Fr*align_PB.labelString:\ Alignement\n EpsonUtil.Fr*align_PB.tooltip:\ Attention !\n\ Ceci peu rendre l'imprimante inutilisable. EpsonUtil.Fr*reset_PB.labelString:\ RAZ\n\ imprimante EpsonUtil.Fr*reset_PB.tooltip:\ La remise a zro\n\ ne fonctionne pas\n\ pour toutes les imprimantes. EpsonUtil.Fr*cartridge_PB.labelString:\ Changement\n\ cartouche EpsonUtil.Fr*cartridge_PB.tooltip:\ Pour les imprimantes\n\ sans commutateurs. EpsonUtil.Fr*addPrinterTxt:\ Autre Imprimante EpsonUtil.Fr*printerState_LB.labelString:\ Status: EpsonUtil.Fr*state_LB.labelString: - EpsonUtil.Fr*noPrinter*messageString:\ Probleme de communication\n\ Controllez l'imprimante pour:\n\ "manque de papier", "encre epuise"\n\ "imprimante hors service"\n\ \n\ Notez que certaines imprimantes ne\n\ sont accessibles que plusieurs secondes aprs\n\ la mise sous tension. EpsonUtil.Fr*noPrinter*dialogTitle:\ Erreur EpsonUtil.Fr*cfg1_LB.labelString:\ Choix de l'imprimante: EpsonUtil.Fr*cfg2Printer_PB.labelString:\ Choix de l'imprimante: EpsonUtil.Fr*cfg2Printer_PB.tooltip:\ Une liste d'imprimante est propose. EpsonUtil.Fr*cfg2Device_PB.labelString:\ Choix du port: EpsonUtil.Fr*cfg2Device_PB.tooltip: Malheureusement, la dtection\nn'est pas automatique ! EpsonUtil.Fr*next_PB.labelString:\ Suivant EpsonUtil.Fr*next:\ Suivant EpsonUtil.Fr*previous_PB.labelString:\ prcdent EpsonUtil.Fr*previous:\ prcdent EpsonUtil.Fr*save:\ Enregistrer EpsonUtil.Fr*cancel:\ Annuler EpsonUtil.Fr*ok:\ OK EpsonUtil.Fr*about:\ EPSON Utilities\n\ \n\ Version V 0.9.12\n\nCopyright: Jean-Jacques Sarton 2001\n\ \n\ Email: jj.sarton@t-online.de\n\ \n\ URL: http://xwtools.automatix.de\n\ \n\ Des portions de code ont ete tires du projet gimp-print\n\ Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\n\ \n\ Licence: GPL\n\ \n\ Mes remerciement a:\n\ Keith Amidon\n\ camalot@picnicpark.org\n\ Ronny Budzinske\n\ Nicola Fabiano\n\ ivololeribar@yahoo.it\n\ Tokai Ferenc\n\ Karlheinz Guenster\n\ Gene Heskett\n\ gene_heskett@iolinc.net\n\ Mogens Jger\n\ mogensjaeger@get2net.dk\n\ Till Kamppeter\n\ (leader Foomatic/www.linuxprinting.org project)\n\ http://www.linuxprinting.org/till\n\ Stefan Kraus\n\ sjk@weserbergland.de\n\ http://xwgui.automatix.de\n\ Rainer Krienke\n\ krienke@uni-koblenz.de\n\ Sylvain Le-Gall\n\ sylvain.le-gall@polytechnique.org\n\ Steven J. Mackenzie\n\ Raul Morales\n\ raul.mh@telefonica.net\n\ http://www.telefonica.net/web/ruten\n\ Simon Morlat\n\ Marc Riese\n\ Marc-Riese@gmx.de\n\ Hikmet Salar\n\ Salar@gmx.de\n\ Glen Stewart\n\ Daniel Tamm\n\ daniel@tamm-tamm.de\n\ http:/www.tamm-tamm.de\n http:/www.expedit.org\n\ Robert Wachinger\n\ nospam@robert-wachinger.de\n\ Klaus Wnschel\n\ klaus.wuenschel@knittelsheim-computer.de\n\ http:/www.knilse.de\n\ Alberto Zanoni. EpsonUtil.Fr*ctTxt0:\ Alignement du chariot:\n\ \n\ Placez une feuille vierge dans l'imprimante et activez [Suivant]pour continuer ou [Annuler] EpsonUtil.Fr*ctTxtC0:\ Alignement du chariot:\n\ \n\ Placez une feuille vierge dans l'imprimante,choisissez la tte \ (noir ou couleur) et activez [Suivant] pour continuer ou [Annuler] EpsonUtil.Fr*ctTxt1:\ Inspectez limpression et choisissez la meilleure paire de lignes.\n\ Remettez la feuille dans limprimante et activez [Suivant] pour continuer. EpsonUtil.Fr*ctTxt1_1:\ Echantillon #1\n\ Inspectez limpression et choisissez la meilleure paire de lignes.\n\ Activez [Suivant] pour continuer. EpsonUtil.Fr*ctTxt1_2:\ Echantillon #2\n\ Inspectez limpression et choisissez la meilleure paire de lignes.\n\ Activez [Suivant] pour continuer. EpsonUtil.Fr*ctTxt1_3:\ Echantillon #3\n\ Inspectez limpression et choisissez la meilleure paire de lignes.\n\ Activez [Suivant] pour continuer. EpsonUtil.Fr*ctTxt1C:\ Inspectez la feuille d'alignment, et determinez l'echantillon le plus "lisse".\n\ Cet echantillon est celui qui semble etre le moins "granulleux".\n\ Si vous ne trouvez pas d'echantillon "lisse" choisissez le meilleur echantillon\n\ et rptez la procedure d'ajustage.\n\ Activez [Suivant] pour continuer. EpsonUtil.Fr*ctTxtP:\ Attendez jusqu la fin de limpression et activez [Suivant] pour continuer. EpsonUtil.Fr*ctTxt5:\ Inspectez le resultat final afin de dterminer si l'alignment est correct.\n\ \n\ Vous pouvez:\n\ \n\ [Enregistrer] les rsultats dans l'imprimante ou\n\ [Annuler] l'enregistrement dans l'imprimante EpsonUtil.Fr*exTxt0:\ Remplacement des cartouches:\n\ \nActivez :\n\ \n\ [Suivant] pour continuer ou\n\ [Annuler] EpsonUtil.Fr*exTxt00:\ Remplacement des cartouches:\n\ \n\ Choisissez noir ou couleur\n\ Activez :\n\ \n\ [Suivant] pour continuer ou\n\ [Annuler] EpsonUtil.Fr*exTxt1:\ Remplacement des cartouches:\n\ \n\ Le chariot est ammene a la position de remplacement. EpsonUtil.Fr*exTxt2:\ Remplacement des cartouches:\n\ \n\ remplacez la cartouche et:\n\ \n\ activez [Suivant] EpsonUtil.Fr*exTxt3:\ Remplacement des cartouches:\n\ \n\ le remplissage est en cours. EpsonUtil.Fr*colors_RC*four_TB.labelString:\ 4 couleurs EpsonUtil.Fr*colors_RC*six_TB.labelString:\ 6 Couleurs EpsonUtil.Fr*head_RC*col_TB.labelString:\ Couleur EpsonUtil.Fr*head_RC*bw_TB.labelString:\ Noir EpsonUtil.Fr*noAccess*dialogTitle:\ Erreur EpsonUtil.Fr.scrTxt_MW.head_RC.bw_TB.tooltip:\ L'operation sur la\n\ cartouche contenant\n\ l'encre noire. EpsonUtil.Fr.scrTxt_MW.head_RC.col_TB.tooltip:\ L'operation sur la\n\ cartouche contenant\n\ les encres colores. EpsonUtil.Fr*noAccess*messageString:\ Pas de droit d'accs aux\n\ fichiers /dev/...\n\ \nPour les distribitions base sur Debian\n\ l'utilisateur doit tre membre du groupe lp.\n\ \nRemdiez a ceci. Consulter la documentation si\n\ necessaire. EpsonUtil.Fr*fsb*dialogTitle: Mtink EpsonUtil.Fr*fsb*CancelLabelString:\ Annuler EpsonUtil.Fr*fsb*okLabelString:\ OK EpsonUtil.Fr*fsb*applyLabelString:\ Filtre EpsonUtil.Fr*fsb*filterLabelString:\ Filtre EpsonUtil.Fr*fsb*fileListLabelString:\ Fichiers EpsonUtil.Fr*fsb*dirListLabelString:\ Repertoires EpsonUtil.Fr*browser_LB.labelString:\ Choisissez le Browser ! Attention un espace se trouve en fin de ligne EpsonUtil.Fr*browser_PB.labelString:\ ...\ EpsonUtil.Fr*browser_PB.tooltip:\ Choix du browser. EpsonUtil.Fr*tooltip_TB.labelString:\ Bulles d'aide EpsonUtil.Fr*tooltip_TB.tooltip:\ Bulles d'aide\n\ hors / en service EpsonUtil.Fr*autodetect_TB.labelString:\ Autoriser la detection automatique EpsonUtil.Fr*autodetect_TB.tooltip:\ La dtection automatique de\n\ l'imprimante ne fonctionne\n\ pas sur tout les modles.\n\ Il est ncessaire, pour certaine\n\ imprimantes de ne pas autoriser\n\ cette dtection EpsonUtil.Fr*save_PB.labelString:\ Enregistrer EpsonUtil.Fr*save_PB.tooltip:\ Prise en compte des modifications. EpsonUtil.Fr.ConfigureForm.cancel_PB.tooltip:\ Quiiter le mmasque sans\n\ prise en compte des modifications. EpsonUtil.Fr*cancel_PB.labelString:\ Annuler ! Printer state EpsonUtil.Fr*error:\ Erreur EpsonUtil.Fr*printing:\ Impression EpsonUtil.Fr*selfTest:\ Test EpsonUtil.Fr*busy:\ Occup EpsonUtil.Fr*ok:\ OK EpsonUtil.Fr*cleaning:\ Nettoyage EpsonUtil.Fr*unknown:\ Inconnu mtink-1.0.16/utils/Ttink.de.utf80000644000076400001540000001466410664610365014523 0ustar jjfuse!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! german resource file for ttink. ! Deutsche Datei für ttink. ! ! Diese Datei entspricht vom Aufbau her den üblichen ! X Ressourcen-Dateien. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! ist ein Kommentarzeichen wenn es am Begin einer Zeile ! steht. ! ! .syntax1: ist ein Schlüssel. ! .De.syntax: ist der entspechend lokalisierte Schlüssel. ! Die 2 Buschstaben, hier "De", werden von den Umgebungs- ! Variablen LANG und LC_ALL abgeleitet. ! ! \ am Ende einer Zeile (Leerzeichen oder Tabulatoren sind ! nicht erlaubt) bedeutet das, das die nächste Zeile eine ! Fortsetzungszeile ist. ! \ Text bewirkt, dass Leerzeichen am Anfang des Textes ! (nach dem Schlüssel) nicht entfernt werden. ! ! \n steht für eine Zeilenschaltung. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .De.syntax1:\ Argumente für .De.syntax2:\ Obligatorisch:\n\ -d Geräte_datei --device Geräte_datei\n\ Optional:\n\ -m Name --model Name oder Nummer\n\ Ohne diese Angabe wird der Drucker automatisch bestimmt\n\ -D --D4 D4-Protokoll immer verwenden\n\ Auftrag (Es kann nur ein Auftrag angegeben werden):\n\ -r --reset Drucker zurücksetzen\n\ -c --clean Düsenreinigung\n\ -n --nozzle-check Düsentest\n\ -s --status (Standardauftrag)\n\ -a --align-head Köpfe ausrichten\n\ -e --exchange-ink Patronen wechseln\n\ (nicht alle Druckern)\n\ -i --identity Drucker Identifizierungsstring ausgeben\n\ Informationen:\n\ -v --version Version ausgeben\n\ -l --list-printer Bekannte Drucker ausgeben\n\ Diverse:\n\ -L D4 Protokollausgabe auf stderr (debug)\n\ -u Text Ausgabe erfolgt mit UTF-8 Kodierung\n .De.syntaxM:\ Optional:\n\ -D --D4 D4-Protokoll immer verwenden\n\ Auftrag (Es kann nur ein Auftrag angegeben werden):\n\ -r --reset Drucker zurücksetzen\n\ -c --clean Düsenreinigung\n\ -n --nozzle-check Düsentest\n\ -s --status (Standardauftrag)\n\ -a --align-head Köpfe ausrichten\n\ -e --exchange-ink Patronen wechseln\n\ (nicht alle Druckern)\n\ -i --identity Drucker Identifizierungsstring ausgeben\n\ Informationen:\n\ -v --version Version ausgeben\n\ -l --list-printer Bekannte Drucker ausgeben\n\ Diverse:\n\ -L D4 Protokollausgabe auf stderr (debug)\n\ -u Text Ausgabe erfolgt mit UTF-8 Kodierung\n !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages .De.noAccess:\ Kein Zugriff auf die Gerätedatei, oder Drucker ist nicht angeschlossen. .De.noDetected:\ Das Druckermodell kann nicht bestimmt werden. .De.unknownModel:\ Unbekannter Drucker .De.noOPen:\ Die Gerätedatei kann nicht geöffnet werden. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on .De.continue:\ Weiter (ja/nein) [nein]? : .De.yesorno: jn .De.saveCancel: sa .De.blackQ: Schwarz .De.colorQ: Farbe .De.followingPrintersFound:\ Ermittelte Drucker: .De.ChoosePrinter:\ Drucker wählen !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status .De.black: Schwarz .De.cyan: Zyan .De.magenta: Magenta .De.yellow: Gelb .De.lcyan: Hellzyan .De.lmagenta: Hellmagenta .De.lblack: Photo/Matt Schwarz .De.blue: Blau .De.red: Rot .De.dyellow: Dunkelgelb .De.gloss: Glanzoptimierer .De.grey: Grau ! Photo R2400 die Französiche Texte beinhalten korreckterweise ! grau und hell grau. Hellschwarz und Hellhellschwarz ist ein ! Unsinn ! .De.llblack: Grau .De.Lblack: Hellgrau .De.printerState: Druckertatus .De.unknown: Unbekannt .De.selfTest: Selbsttest .De.busy: Beschäftigt .De.printing: Druck .De.cleaning: Reinigung .De.ok: Ok .De.error: Fehler .De.interfaceNotSelected: Schnittstelle nicht angewählt .De.paperJamError: Fehler im Papierweg .De.inkOutError: Tintenmenge ist zu gering .De.paperOutError: Papier fehlt !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment .De.alignWarning:\ Achtung !\nDies könnte den Drucker unbrauchbar machen. .De.alignBlackOrColor:\ Schwarz- oder Farbkopf ausrichten? .De*firstHeadAlign:\ Bitte ein leeres Blatt Papier in den\nDrucker legen. .De.nextHeadAlign:\ Bitte das Blatt erneut in den Drucker legen. .De.lastHeadAlign:\ Bitte begutachten Sie die Ergebnisse bezüglich der\n\ Ausrichtung sehr sorgfältig.\n\ Sie können nun: Die Einstellungen im Drucker sichern oder abbrechen,\n\ ohne die Einstellungen zu übernehmen\n(Sichern, Abbruch) [Abbbruch] : .De.choosePattern:\ Bitte begutachten Sie das soeben gedruckte Muster,\n\ und wählen Sie die besten Linienpaare aus.\n\ Legen Sie das Blatt erneut in den Drucker. .De.sampleNo:\ Muster # .De.choosePattern2:\ Bitte begutachten Sie das soeben gedruckte Muster,\n\ und wählen Sie die besten Linienpaare aus\n .De.chooseCPattern:\ Bitte das Blatt begutachten und das Muster auswählen, das\n\ die geringste Kornstruktur hat. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge .De.functionNA:\ Diese Function ist für diesen Drucker nicht verfügbar. .De.askDoExchange:\ Möchten Sie die Patrone wechseln (ja/nein) [nein]? : .De.exchangeBlackOrColor: Patronne wählen: .De.adviseMoveCartridge:\ Der Kopf wird in die Austauschposition bewegt. .De.adviseExchangeCartridge:\ Bitte die Patrone wechseln. .De.askExDone:\ Ist der Austausch durchgeführt (ja/nein) [nein]? : .De.adviseFillCartridge:\ Das Auffüllen der Tinte erfolgt. .De.adviseExchangeDone:\ Der Patronenwechsel ist durchgeführt. .De.communicationError:\ Fehler beim Schreiben/Lesen zum/vom Drucker! .De.exchangeError:\ Der Drucker meldet einen Fehler auf der Anforderung "Patrone wechseln"! mtink-1.0.16/getGimpPluginDir.sh0000755000076400001540000000150110376041214014615 0ustar jjfuse#!/bin/sh # check for the gimp plugin directory getGimptoolDir() { for dir in `echo $PATH | tr ':' ' '` do if [ -x $dir/gimptool ] then echo $dir break; fi if [ -x $dir/gimptool-2.0 ] then echo $dir break; fi done } # this work perfectly with gimp 1.0, 1.1 and 1.2. # gimptool will alway fail but we can get the wanted path getDir() { Res=`sh -x $gimptoolDir/gimptool ---install-admin-bin t.sh --just-print --dry-run 2>&1 | sed -n 's/.*plug[_]*in[_]*dir=\(.*\)/\1/p'` if [ "$Res" = "" ] then # we may have gimp 2.0 Res=`$gimptoolDir/gimptool-2.0 --gimpplugindir 2>&1` if [ "$Res" = "" ] then Res=`$gimptoolDir/gimptool --gimpplugindir 2>&1` fi fi echo $Res/plug-ins } gimptoolDir=`getGimptoolDir` getDir mtink-1.0.16/LISEZ-MOI0000777000076400001540000000000010665176047014514 2html/LISEZ-MOIustar jjfusemtink-1.0.16/chooser/0000755000076400001540000000000010376041214012511 5ustar jjfusemtink-1.0.16/chooser/mtinkc.c0000755000076400001540000005242410376041214014154 0ustar jjfuse/* Mtinkc.c * Copyright (C) 2001 Jean-Jacques Sarton jj.sarton@t-online.de * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* This file look for the configurations file ~/mtinkrc[.*] and present a choice for the case you have more mptinters */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define COMMAND "mtink -c %d %s &" char *fallbackResources[] = { /*! an other grey */ "*background: #cccccc", "! for Motif 1.2/Lesstif make look as for openMotif", "*TopShadowColor: #eeeeee", "*BottomShadowColor: #111111", "*foreground: black", "*shadowThickness: 1", "*XmSeparator.shadowThickness: 2", "*visibleItemCount: 4", "*XmList.background: white", "*XmList.foreground: darkblue", "*XmList.highlightThickness: 0", /* default resources */ "*dialogTitle: Mtink Chooser", "*title_LB.labelString: Mtink: Printer Selection", "*ok_PB.labelString: OK", "*cancel_PB.labelString: Cancel", "*new: Add new printer", /* german resources */ "*De*dialogTitle: Mtink Auswahl", "*De*title_LB.labelString: Mtink: Drucker Auswahl", "*De*ok_PB.labelString: OK", "*De*cancel_PB.labelString: Abbruch", "*De.new: Drucker hinzufgen", /* french resources */ "*Fr*dialogTitle: Mtink Choix", "*Fr*title_LB.labelString: Mtink: Choix imprimante", "*Fr*ok_PB.labelString: OK", "*Fr*cancel_PB.labelString: Annuller", "*Fr.new: Nouvelle imprimante", /* danish resources */ "*Da*dialogTitle: Mtink Vlger", "*Da*title_LB.labelString: Mtink: Vlg printer", "*Da*ok_PB.labelString: OK", "*Da*cancel_PB.labelString: Afbryd", "*Da.new: Tilfj ny printer", /* hungarian resources */ "*Hu*dialogTitle: Mtink vlaszt", "*Hu*title_LB.labelString: Mtink: Nyomtat kijells", "*Hu*ok_PB.labelString: OK", "*Hu*cancel_PB.labelString: Visszavon", "*Hu*new: j nyomtat hozzadsa", NULL }; /* list of hosts and comments which will be displayed */ typedef struct nodes_s { int confNr; char *printer; } nodes_t; nodes_t *nodes; /* prototypes */ static Widget createLayout(char *language); static int readRc(char *prgName, nodes_t **nodes); static void fillList(Widget list, int n, nodes_t *); static void callCommand(int pos, Widget w); static char *skipSpace(char*s); static void cancel_CB(Widget w, XtPointer clientData, XtPointer callData); static void ok_CB(Widget w, XtPointer clientData, XtPointer callData); char guiLanguage[20]; char *prgName; char *mainResource; char *dispString = NULL; Widget topLevel; Widget mainWindow; Widget mainForm; Widget title_LB; Widget node_LST; Widget cancel_PB; Widget ok_PB; XtAppContext theApp; /*******************************************************************/ /* Function cmpInt(char *s) */ /* */ /* compare the confNr for sorting */ /* */ /*******************************************************************/ int cmpInt(const void *P1, const void *P2) { nodes_t *p1 = (nodes_t *)P1; nodes_t *p2 = (nodes_t *)P2; return p1->confNr - p2->confNr; } /*******************************************************************/ /* Function skipSpace(char *s) */ /* */ /* advance pointer up to the next non space character */ /* */ /*******************************************************************/ static char *skipSpace(char*s) { while(*s && (*s==' '||*s=='\t') ) s++; return s; } /*******************************************************************/ /* Function readRC(char *prgName, nodes_t **nodes) */ /* */ /* Read the file . in the home directory and allocate */ /* and fill the *node structure with the conten of the file. */ /* */ /* Lines begining with [ }*# are sikped, the same apply with lines */ /* without content. */ /* the first word is the name of the remote host. the rest are */ /* comments which will be displayed. */ /* */ /* return the number of lines with informations */ /* */ /*******************************************************************/ int readRc(char *prgName, nodes_t **nodes) { char *home = getenv("HOME"); char *fileName; FILE *fp; char *s; int len = 0; char buf[1024]; int i = 0; char search[] = "PRINTER:"; int slen = strlen(search); DIR *dir; struct dirent *ent; fileName = (char*)calloc(strlen(home)+100,1); *nodes = (nodes_t*)calloc(sizeof(nodes_t),1); if ( (dir = opendir(home)) ) { while ( (ent = readdir(dir)) != NULL ) { if ( strncmp(ent->d_name, ".mtinkrc", 8 ) ) { continue; } if ( ent->d_name[8] == '\0' ) i = 0; else if ( ent->d_name[8] == '.' ) i = atoi(&ent->d_name[9]); else continue; if ( i ) sprintf(fileName,"%s/.mtinkrc.%d",home,i); else sprintf(fileName,"%s/.mtinkrc",home); if ( (fp = fopen(fileName,"r")) ) { while(fgets(buf, sizeof(buf), fp) ) { s = buf; while(*s && *s != '\n' ) s++; *s = '\0'; if ( (s = strchr(buf, '\0')) ) *s = '\0'; s = skipSpace(buf); if ( strncmp(search,s, slen) ) { continue; } else { s += slen; *nodes = (nodes_t*)realloc(*nodes,sizeof(nodes_t)*(len+2)); s = skipSpace(s); if ( *s ) { (*nodes)[len].printer=strdup(s); (*nodes)[len].confNr=i;; len++; (*nodes)[len].printer = 0; (*nodes)[len].confNr = 0; } } } fclose(fp); } } closedir(dir); } free(fileName); return len; } /*******************************************************************/ /* Function cancel_CB() */ /* */ /* The user don't like us, terminate. */ /* */ /*******************************************************************/ void cancel_CB(Widget w, XtPointer clientData, XtPointer callData) { exit(0); } /*******************************************************************/ /* Function callCommand(int pos, Widget w) */ /* */ /* Call mtink. */ /* */ /*******************************************************************/ void callCommand(int pos, Widget w) { char command[1024]; sprintf(command,COMMAND, nodes[pos].confNr, dispString); system(command); } /*******************************************************************/ /* Function ok_CB() */ /* */ /* The user want to start mtink */ /* */ /*******************************************************************/ void ok_CB(Widget w, XtPointer clientData, XtPointer callData) { int pos = 0; int *position_list; int position_count; /* look for the selected host */ XmListGetSelectedPos(node_LST, &position_list, &position_count ); if ( position_count > 0) { pos = position_list[0]-1; } else { /* #@!*, nothings is selected */ XBell(XtDisplay(w),100); return; } /* undisplay our window */ //XUnmapWindow(XtDisplay(w),XtWindow(topLevel)); /* call mtink on the remote computer */ callCommand(pos,w); exit(0); } /********************************************************************* * Function: getResource * * read the resource * * Input: Widget w * char *resource * * Return: char *resource * ********************************************************************/ char *getResource(Widget w, char *resource) { XrmDatabase database; char *type_return; XrmValue value_return; Widget top = w; char *tmp; char *first; char *last = strdup(resource); /* build the full resource name */ while( !XtIsShell(top) ) { tmp = XtName(top); first = (char*)calloc(strlen(tmp)+strlen(last)+2,1); sprintf(first, "%s.%s",tmp,last); free(last); last = first; top = XtParent(top); } /* get the class name */ XtGetApplicationNameAndClass(XtDisplay(w), &type_return, &tmp); /* and complete the name */ first = (char*)calloc(strlen(tmp)+strlen(last)+2,1); sprintf(first, "%s.%s",tmp,last); free(last); /* get Database */ database = XtDatabase(XtDisplay(w)); /* get value from the resource database,the class ist not */ /* is not important here */ XrmGetResource(database, first, "String", &type_return, &value_return); free(first); return value_return.addr; } /*******************************************************************/ /* Function fillList(Widget list, int n, nodes_t *nodes) */ /* */ /* Put a further more entry (New) at the end of list */ /* */ /*******************************************************************/ void fillList(Widget list, int n, nodes_t *nodes) { XmString *table; int i, j; char buf[1024]; char *new = NULL; table = (XmString*)calloc(sizeof(XmString), n+1); for ( i = 0; i < n; i++ ) { sprintf(buf,"%2d: %s", nodes[i].confNr, nodes[i].printer); table[i] = XmStringCreateSimple(buf); } new = getResource(mainWindow,"new"); if ( new == NULL ) new = "NEW PRINTER"; /* look for the first number which is free */ for ( j = 0; j < n; j++ ) { if ( nodes[j].confNr != j ) { break; } } nodes[i].confNr = j; sprintf(buf,"%2d: %s", j, new); table[i] = XmStringCreateSimple(buf); XmListAddItems(list, table, n+1, 1); for ( i = 0; i < n+1; i++ ) XmStringFree(table[i]); free(table); XmListSelectPos(list,1, False); } /*******************************************************************/ /* Function createLayout(char *language) */ /* */ /* create the rmtink layot. language is the name of the top window */ /* so we will be able to have all internationalized resoiurces in */ /* a resource file. */ /* */ /*******************************************************************/ Widget createLayout(char *language) { Widget separator; Arg args[20]; int n = 0; Pixel bg; mainWindow = XtVaCreateWidget(language, xmFormWidgetClass, topLevel, XmNmarginHeight, 0, XmNmarginWidth, 0, NULL); if (mainWindow == NULL) { return False; } XtManageChild(mainWindow); title_LB = XtVaCreateWidget("title_LB", xmLabelWidgetClass, mainWindow, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 5, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 5, XmNtopAttachment, XmATTACH_FORM, XmNtopOffset, 10, XmNalignment, XmALIGNMENT_CENTER, NULL); XtManageChild(title_LB); n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNtopOffset, 5); n++; XtSetArg(args[n], XmNtopWidget, title_LB); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNleftOffset, 5); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNrightOffset, 5); n++; node_LST = XmCreateScrolledList(mainWindow, "title_LB",args,n); XtManageChild(node_LST); cancel_PB = XtVaCreateWidget("cancel_PB", xmPushButtonWidgetClass, mainWindow, XmNleftAttachment, XmATTACH_POSITION, XmNleftOffset, 5, XmNleftPosition, 65, XmNrightAttachment, XmATTACH_POSITION, XmNrightOffset, 5, XmNrightPosition, 95, XmNbottomAttachment, XmATTACH_FORM, XmNbottomOffset, 5, NULL); XtManageChild(cancel_PB); ok_PB = XtVaCreateWidget("ok_PB", xmPushButtonWidgetClass, mainWindow, XmNleftAttachment, XmATTACH_POSITION, XmNleftOffset, 5, XmNleftPosition, 5, XmNrightAttachment, XmATTACH_POSITION, XmNrightOffset, 5, XmNrightPosition, 35, XmNbottomAttachment, XmATTACH_FORM, XmNbottomOffset, 5, NULL); XtManageChild(ok_PB); separator = XtVaCreateWidget("separator", xmSeparatorWidgetClass, mainWindow, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomOffset, 5, XmNbottomWidget, cancel_PB, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 0, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 0, NULL); XtManageChild(separator); XtVaSetValues(XtParent(node_LST), XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomOffset, 5, XmNbottomWidget, separator, NULL); /* if the scrolled list has a other bacground as thesttandasd */ /* the scrollbar will be also colored, avoid this */ XtVaGetValues( mainWindow, XmNbackground, &bg, NULL); XtVaSetValues( XtNameToWidget(XtParent(node_LST), "*VertScrollBar"), XmNbackground, bg, NULL); XtAddCallback(cancel_PB, XmNactivateCallback, cancel_CB, NULL); XtAddCallback(ok_PB, XmNactivateCallback, ok_CB, NULL); XtAddCallback(node_LST, XmNdefaultActionCallback, ok_CB, NULL); return mainWindow; } /*******************************************************************/ /* Function getDisplayName(int argc, char **argv) */ /* */ /* look for the display name if given and remenber it */ /* */ /*******************************************************************/ void getDisplayName(int argc, char **argv) { while(*argv) { if ( strcmp(*argv, "-display") == 0 ) { if ( *argv ) { dispString = (char*)calloc(strlen(argv[0])+strlen(argv[1])+2,1); sprintf(dispString,"%s %s",argv[0], argv[1]); break; } } argv++; } if ( dispString == NULL ) { dispString = strdup(""); } } /*******************************************************************/ /* Function main(int argc, char **argv) */ /* */ /* The begin of the world */ /* */ /*******************************************************************/ int main(int argc, char **argv) { Dimension w1 = 0, w2 = 0, h1 = 0, h2 = 0; char *s; char *lang; char tmpBuf[20]; int n; Widget displayW; /* language handling, I know this is wrong */ lang = getenv("LANG"); if ( lang == NULL ) { lang = getenv("LC_MESSAGES"); if ( lang == NULL ) { lang = getenv("LC_ALL"); } } if ( lang ) { if ( strcmp("german", lang) == 0 ) { strcpy(tmpBuf,"De"); } else { tmpBuf[0] = toupper(lang[0]); tmpBuf[1] = lang[1]; tmpBuf[2] = '\0'; } } /* for help files */ strcpy(guiLanguage, tmpBuf); prgName = argv[0]; if ( (s = strrchr(prgName, '/')) != NULL ) { prgName = s + 1; } /* read our rc file */ n = readRc(prgName, &nodes); /* sort the list */ qsort(nodes, n, sizeof(nodes_t), cmpInt); /* look for the display name if given */ getDisplayName(argc, argv); /* only 0 entry is the rc file, we have not to offer choices */ /* call mtink now */ if ( n == 0 ) { callCommand(n,topLevel); exit(0); } /* make the topLevel */ mainResource = (char*)calloc(strlen(prgName)+3,1); strcpy(mainResource,prgName); mainResource[0] = toupper(mainResource[0]); topLevel = XtAppInitialize(&theApp, mainResource, NULL, 0, &argc, argv, fallbackResources, 0, 0); if ( topLevel == (Widget) NULL ) { fprintf(stderr,"%s: can't connect to X11\n", prgName); exit(1); } /* don't map now */ XtVaSetValues(topLevel, XmNmappedWhenManaged, False, NULL); /* disable drag and drop */ displayW = XmGetXmDisplay(XtDisplay(topLevel)); XtVaSetValues(displayW, XmNdragInitiatorProtocolStyle, XmDRAG_NONE, NULL); createLayout(tmpBuf); fillList(node_LST,n,nodes); XtRealizeWidget(topLevel); /* put the main window on the middle of the screen */ h2 = DisplayHeight(XtDisplay(topLevel),0); w2 = DisplayWidth(XtDisplay(topLevel),0); XtVaGetValues(topLevel, XmNwidth, &w1, XmNheight, &h1, NULL); XMoveWindow(XtDisplay(topLevel), XtWindow(topLevel), (w2-w1)/2,(h2-h1)/2); /* set min width and height */ XtVaSetValues(topLevel, XmNminHeight, h1, XmNminWidth, w1, NULL); XtMapWidget(topLevel); XtManageChild(mainWindow); XtMapWidget(topLevel); /* set the focus to the list */ XmProcessTraversal(node_LST, XmTRAVERSE_CURRENT); /* main loop */ XtAppMainLoop(theApp); /* never reached */ exit(0); return 0; } mtink-1.0.16/xpm/0000755000076400001540000000000010376041214011653 5ustar jjfusemtink-1.0.16/xpm/Worm.xpm0000644000076400001540000001114010376041214013322 0ustar jjfuse/* XPM */ static char *magick[] = { /* columns rows colors chars-per-pixel */ "64 64 13 1", " c Gray40", ". c #bbbbbbbbbbbb", "X c #222222222222", "o c #777777777777", "O c Gray80", "+ c Gray20", "@ c #888888888888", "# c #dddddddddddd", "$ c #444444444444", "% c Gray60", "& c #eeeeeeeeeeee", "* c #555555555555", "= c #aaaaaaaaaaaa", /* pixels */ "#O#&O%=O#%$+* %===..@*o...OO@*@#O=@=OO=%@===.OO.....OO%o%O...==O", "O...%@=.. $ =%%=%%@o$$@####O $%#O=%.#.%@@@o@.OOO..==OO@ .O.====.", "==%%@@=..@*%O..O=%%oo@O##..@$ O&O=.##.%%%%oo======%%..oo.O#O.===", "=%%%%%==O=o%#OO#O=.OOO#O% *$*%#&O=O#O=%%%%%==@*$*@@%=@* @=OO====", "==...=%=.% %##OO..O&#O.=o o%O&#.%.#=@o@=..OO% * %=%%@ oo@%@@%==", "==..=%%=.%@.##.=%=.OO.====.O#&&#=%OOo$ =OOOO..==O##.=%=..==@@===", "=====..=.OO##.%@%==....OOOOO#&&O=%.=$+@#&#.@ooo@O##.=%=..OOOOOO.", "==.==OO..##O=%@@%====..O#O...O.%@@@ $ O&O%*$$ooo@OO=@%.....O###.", "%%==@%.==OO=@@@%====....==%@o ***o o=##%$+$%..=.#O==OOO.====OO.", "%@=% ===OO=%%%===.O##O= ****ooooo%=OO#.o$ =#&O..OO.O##O.=..==.=", "@@=%@o@=%%=======.O##O= +$o@=.O...OO..O.oo.&&#.=%@%..==%%%O#.==%", "%=..=%%%@ @%==O#&&.@ $*=O#OO..OOO.....@@#&&.%@@ o=o*$$o=##O..%", "=O#O.==.=@o o%=.#&#O=@o@O#&O=%%.OO..O##O%=##.@@%%@oo$+$* =OOOO.=", "=##OO==.OO=%=..O##=%==.OOO.=%%%%=.==..O.=.#.@o%..=%@ =.%%.....=", ".##O.=%=..=%.##OO.%@%.==%%%%%%%%@o ooo%.O.@o%.O.===.#&&.%%==%%%", "..===%%=..=%.#.=..@@%=%@@@%=%%%%%%oooo@=#.o @.#O=%..O&&#.=.=@ %", ".=%..==O#O.=.O=%==@@===%%=.OOO..OOO...O##=**=OO=@%...##.==..%o@.", "#=.#O..##O==.OO.==%%=.O.=O####OO##OOOOO&#=* .O=@@=O.=OO%o%=..OO#", "===...O.=%@%.##...==.OO.=O#OOOOO#O.OOOOO#%*o..%%=O#O.O= %==....", " o%..=%%@%=O=%=.=%.#O=.#O%%=.=...=.=@%=@$o..==O##.%o*$ =.===@o", "@oo@=O=%==%oooo@%=@o=OO.OO=@@==oo%%o *$*@ $oOO=.#O@*$$$ =OO.==%@", "OOOO#O%@=% $*@%====@o=...=@@%== $@@ * o@% *=#O=O#. $ o%O##O===.O", "##OOO.===o$*%O#O.OO=o@%oooo@=.=o*@=@%.O#O..##.%.O=@=O##&#O=%==O#", "OO.==.==% $=#&#..O#=o o*$ o=..=%%.O...O##O##O=%=%%=###O.=%%.O..O", "O=%%=%@ *$oO&O===OO%o o@@@=OO=%==.#O===..%%..===@o=..=@ *@.##.=O", ".%@=..@o**%#O%@%=.O%@@%O#O##.%%==.....==%@%=.OO.=%@%@o $$oOO.%=O", "%@=O#OO.==##.%=...O.%=O##OOO%%=...OOOOO.=%==.OOO.%@@ooo o%%=%@=.", "%%O#O====#&&OO##OO#O.OOO....===..=O##OO.====..=====%===%=.%.=%..", "%=O#= *o@.OO.=.OO..=%=.=%=.OO.====%=...=%=....=%%%=.OOOOOO.O#.O.", "%%=.%*$o%@%@*$*%=%o* %%%=O#O.====@ %%o@=O####.==%%==..##..O###O", "%o o$ ..%o $$ @% * @@%.=.OO==%===@o@o*o...OO#O.OOO.==.O#...OOO.", "= * @O.=%%%=..= *%OO##O..=%====.=%%=@%=o o@%=..OOOO...O....==.", "= =..O#.=.O#&&&#=o%.O##.==%=O=%.OOO##OO%@o @%o*@=.....O.O.==.", "=*oO##&#OO##&&&&O.%@%===%@@.OO=%O######....=%oo $$*o@%=.OOO.=%=.", "o$oOOOO==O##O##O.=%%%%@oo@=O#=@=#O.=.O...OO..=%@o@=@oo %OO=%@@%=", "@o=O.%o o=.%@%=.=@@%=.=%=..O.%@.#O=..O...OOO...OO#OO=%@o%%@@@@%=", "OOOO=@oo@== * %.%o@==O###O.==@@====OO.===.OOOOOO#OOOOO.%%%%%==.O", "#O.====...=%%=OO%@%==.#&#=%%%@@ooo@=%oo@@@%%=....OOOOO=@=O..O###", ".%@=...OO==O###.@@==..OO=@@%======%o*$ o*** @%=.....%@.#OO##OO", "@o%.OOOOO.O&&O.=%%%=.O#.%@%===..==@ *@..oo@@oooooo @.O==.O.===%%", "@%=O#O.==..OO..==ooo%.#O..O..%@o * o=#&O=.OO...%@o@=##O...%%@@@@", "==.##.o**** %==%ooo@%.#O.OO..=@ooo%O#&#=%====..OO..#&#O.===%%%==", ".=..=@ **$$o== o=OO##.%%%%%==.O###OO=@@%@ o=.OO..O##O.===@@=OO", ".===%@@%=%%=.@* %=OOOO..=%%@@%%.#&#OOO=@%%@oo=O.===O#O=%@o *o.##", "%@%=%%=..OOO.%%O##O.===....==%%@=OOOOO=%=====.#OOOO#&. $$$$*=#&O", "o %===OOOO.OOOOOO..OO.......===@o=OO.@o%.....O##OO##O=*$ o@.###.", "* =.=.##O===...@ @=OOO=%%=%%%=%o%.%o$*=O%o %.=%=..==%%=OOO##OO=", " @OOO##O%@@%==%@o o@=.=%%%%@=.%oo@*++o.. $*o@ =O%o o%O#O.....@", "@O###&#=oo@@%===..=@o@%%%====O.%@oo @=.@$ ==%@=OO%@ *o%..=...=%", ".OOOO.%o** o@.O###O.====.O#OO.%@%..OO##O%@=##OOO#.=%@o %%%%===%", "=%@oo *$$*@%=#&###OOO######O.%%%.O##&&O.OOOOO.%==.=o o@%%@ oo@=", ".%ooooooo=OO...====.O&&##.==%%=.O#O.##...==.O=o %=@*$@=..=@oo@%.", "OOOOO......@oooo @%=.OO= *o@%.==...##O.=%%=O=o @% *@.OOOOO...O#", "O###.==@oo *o%%%%%@o %.@+X*@%%@ o%.#OO.=%=..=%%%@ @O#O.......OO", "...=@@o**oo@%.=%...@ o=O%$+ %%oo@oo.O==.===.O..====.#O.=....===.", "===@o@@o=.OOO.%oo==oo=O#.@ @=% @..%.O=%=...O#O.=%.##O.=.OOO.===.", "OO.%%%=.##O....=@%@* .#OO=%=O%o.&#%=O.%=...O#O@ o=OOO..###O@ @.O", "OOO.==..##.=.OO.=.=@=O#OO=%=#OO#&O%@O#=====..% $ =O...O#O=%*$%OO", "=.....=.##.=.OO.=.OO##OOO=@=##&&&O%o=O.===%%o*$*@O#%oo%=@ *$ .O.", "==...=%=O.%%.##===.O##O##=%.#O.OOO= ...=%%%o o@.#O@**oo * o=#O=", "@o%..%@=..==OO.=%==.OO.OO%%..@@=OO.@ %..=%====.OO#.@@==%@%%%=#.=", "@ o==@@=OOO.O.==%%=.O=@=.%%.@*o.#O.%@%.O.=%=O#OO.=%==..=%%o@.O.=", "=%%O.@@.##.=.=%%%%.O.@o%=%%.%*@O#.=@@=O#O.%=O#O.=%%==..@@%%=O#..", "O.O&O%%O#Oo$*@==%=O#.o ==%=O= %OO.%@=OO.O...OOO.====.O.@@.OO#.=O" }; mtink-1.0.16/xpm/cheese.xpm0000644000076400001540000010340010376041214013633 0ustar jjfuse/* XPM */ static char * cheese_xpm[] = { "186 179 33 1", " c None", ". c #D8CEB0", "+ c #D5CAB0", "@ c #D5C7AC", "# c #D1C7A9", "$ c #D8CAB0", "% c #CABCA3", "& c #BCAE96", "* c #CEC3A9", "= c #D1C3A9", "- c #DCD1B7", "; c #CEBFA6", "> c #C7B69C", ", c #D5CEB0", "' c #C3B69C", ") c #C7BCA3", "! c #DCCEB0", "~ c #CABFA3", "{ c #E1D5B7", "] c #D8D1B7", "^ c #DCD5B7", "/ c #CAB9A3", "( c #C7B99E", "_ c #B9A896", ": c #BFB298", "< c #BFAE96", "[ c #C3B29C", "} c #B9AB96", "| c #B9A889", "1 c #B9A890", "2 c #B9AB90", "3 c #BCAB96", "4 c #E1D8B7", "......+@#@+$$.....................$$%&%**=#+-................................................$+@=;*#++$$...............................$$=(&|11:%#+.$.....................................", "$$$$$+$;>%$,,$$$$$$$$$$$$$$$$$$$$$,+=')==+@--$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$++@*('[>;@+,+$$$$$$$$$$$$$$$$$$$$$$$$$$$$$++*'}&)~*~(;@+,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", ",,,,$,,*'*$!,,,,,,,,,,,,,,,,,,,,,$.+$=~*=+-{],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,$,,#))%~~%*@$,+,,,,,,,,,,,,,,,,,,,,,,,,,,,$,+%2:)**=*;%=$,+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.", "$$$$.$+=*+^]$$$$$$$$$$$$$$$$$$$$$.+.,$$.]-{.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.$+=;;##=*;#+$.$$$$$$$$$$$$$$$$$$$$$$$$$$$.$=(_(;;=;***#.$.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", "...$+$$++--.....................+.+$,+$$-!...................................$$$$$$.......$$$+#*==#@#=#.............................$$+*&:;==*==#=*!....................................,.", "$$$,..,$.$$$+++$$$$$$$$$$$$$$$$$.$..$...$,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$++++,,+,,++$$$$$,,++@#=#==##@+.$$$$$$$$$$$$$$$$$$$$$$$$$$$,,+=:[***#***#=].$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", ",,$$+$,$.,#=@$++,,,,,++++++,,,,$.$$.$$$.$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+$$$+#=#=@$$++,,,$$..+@#=##=@#++].,,,,,,,,,,,,,,,,,,,,,,,,,$$.+@(';*==*==+@-.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.", "$$....$++=/''*+.$$$$$...+..$$$$.+.,+,,.+.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$+@=**;;;*=#+..$$$..$+++@#=#@#@+.-.$$$$$$$$$$$$$$$$$$$$$$$$$..$$@~'*=**==#+.-.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", ".$+$+..$=(_&'/=+...$++++++$...+.+$.$$+.$,.............................$.#*'[(~;*===@$...$$.$$++@@=#@++.]..........................$$,.,$=(~;###@++{-..................................,.,.", "$,...$$+*::%~*#!$$$,$$+.++,$$$.$..$...$,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,+=[:'';#=##@+.$$$,,+.+.@+@@@#+$.--$$$$$$$$$$$$$$$$$$$$$$$$$,,$+$++=~;=@#@+---$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", "$$+$,.$$=:'*=@+].,$,++++$$,,,$.$$.$$$.$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,$$+*/(;~=+==#@+].,$$.+.+++#=#@@,.!!.,,,,,,,,,,,,,,,,,,,,,,,,$$......$$+=@+!{{..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.", "....$+,,+;(*++--.$.$.$$$,.$$$.+.,+,,.+.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.,+#/*###++#=++-.$..$.$$.+,+@+,..-..$$$$$$$$$$$$$$$$$$$$$$$$..$$$$+$+.,..---..+$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", "+$+..$$$,#=*+]{..$.+,++.+...+.+$.$$+.$,.............................$$.+#~*=#$+@@+$.].$$.$,,+$$+++$.-..+........................$$,.,,.+.+$.....$$..................................,.,.,.", "...$$..+$$.!---.$,$.$.$$.$$$.$..$...$,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,.+$.+@$$,$$+..{!$,,+.$$.,+..$$$..+.$$$$$$$$$$$$$$$$$$$$$$$$,,$+$$$.$..+$+...,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", "+$,.$$.++$,$!..,$,$.$..$,,,$.$$.$$$.$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,$$.,+.,.-!].$$.-].$$.+..$$.$+.,,$$.$,,,,,,,,,,,,,,,,,,,,,,,,$$.....$.$$.+.+$$$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.", "..$+,,$..,$,++$$.$.$,++.$$$.+.,+,,.+.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.,$$$+$$$.$$.]-.....$.$$..$..$$$,,$.$$$$$$$$$$$$$$$$$$$$$$$$..$$$$+.+,,$.$.,,.+$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", "+..$$,$$$.$..,.$.+,$..+...+.+$.$$+.$,.............................$$.....,,++.,$$$$+$$.$,,+$.+$...$$.+........................$$,.,,.+.$$+$.$$$$..................................,.,.,.,.", ".$$..$.,.+.$$$$,$.$.$$.$$$.$..$...$,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,.+$$$$$$..+$.,,..,,+.$$.,+..+$$..+.$$$$$$$$$$$$$$$$$$$$$$$$,,$+$$$++++.,+...,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", ",.$$.+$$.$...,$,$.$..$,,,$.$$.$$$.$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,$$.,,.,..$$..$$$$$$$.+..$$.$+.,,$$.$,,,,,,,,,,,,,,,,,,,,,,,,$$....+$+@=@$.+$$$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.", "$+,,$..,$,++$$.$.$,++.$$$.+.,+,,.+.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.,$$$+$$$..$$,..,...$.$$..$..$$$,,$.$$$$$$$$$$$$$$$$$$$$$$$$..$$$$$+@*#@+$$,,.+$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", ".$$,$$$.$..,.$.+,$..+...+.+$.$$+.$,.............................$$.....,,++.,$$$$+$$.$,,+$.+$...$$.+........................$$,.,,,.+@=#+,.$$$..................................,.,.,.,.,.", "$..$.,.+.$$$$,$.$.$$.$$$.$..$...$,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,.+$$$$$$..+$.,,..,,+.$$.,+..+$$..+.$$++++++$$$$$$$$$$$$$$$$,,$+$$$+$+#+.....,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", "$$.+$$.$...,$,$.$..$,,,$.$$.$$$.$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,$$.,,.,..$$..$$$$$$$.+..$$.$+.,,$$.$,,$+==$$,+,,,,,,,,,,,,,,$$.....$,+$$@.]$$$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.", ",,$..,$,++$$.$.$,++.$$$.+.,+,,.+.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.,$$$+$$$..$$,..,...$.$$..$..$$$,,$.$$+@;%*+$.$$$$$$$$$$$$$$..$$$$$.$..+..$.,.+$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", "$,$$$.$..,.$.+,$..+...+.+$.$$+.$,.............................$$.....,,++.,$$$$+$$.$,,+$.+$...$$.+...+@)%@$...............$$,.,,,+.++$...+$$..................................,.,.,.,.,.,.", ".$.,.+.$$$$,$.$.$$.$$$.$..$...$,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,.+$$$$$$..+$.,,..,,+.$$.,+..+$$..+.$$$$+=@+].$$$$$$$$$$$$$$,,$+$$$.+...$$$..,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", ".+$$.$...,$,$.$..$,,,$.$$.$$$.$.,,,,,,,,,,++++,,,,,,,,,,,,,,,$$.,,.,..$$..$$$$$$$.+..$$.$+.,,$$.$,,..$$++--.,,,,,,,,,,,,,$$.....$.$$+.,.$$$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,.,.,.,.", "$..,$,++$$.$.$,++.$$$.+.,+,,.+.$$$$$$$$$$$,,+.$$$$$$$$$$$$$$$.,$$$+$$$..$$,..,...$.$$..$..$$$,,$.$$++,+....+$$$$$$$$$$$$$..$$$$$.$...+$+.,.+$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", "$$$.$..,.$.+,$..+...+.+$.$$+.$,........++====@+$$...........$$.....,,++.,$$$$+$$.$,,+$.+$...$$.+....$.+$.$..............$$,.,,,+.++$...+$$.................................$+$+$,.,.,.,.,.", ".,.+.$$$$,$.$.$$.$$$.$..$...$,$$$$$$$$+$=;'(/*$,,$$$$$$$$$$$,.+$$$$$$..+$.,,..,,+.$$.,+..+$$..+.$$$$.$$.$.$$$$$$$$$$$$$$,,$+$$$.+...$$$..,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$+++++,,$+$$$$$$$$", "$$.$...,$,$.$..$,,,$.$$.$$$.$.,,,,,,,$,#;'(~;*@.,,,,,,,,,,,$$.,,.,..$$..$$$$$$$.+..$$.$+.,,$$.$,,..$,.+.+.,,,,,,,,,,,,,$$.....$.$$+.,.$$$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+$@#;%%;=$$+.,.,.,.", ".,$,++$$.$.$,++.$$$.+.,+,,.+.$$$$$$$$.+#(/;*##+!$$$$$$$$$$$.,$$$+$$$..$$,..,...$.$$..$..$$$,,$.$$++,$+.+.+$$$$$$$$$$$$$..$$$$$.$...+$+.,.+$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,@*>&&<<%#+.+$$$$$$", "$.$..,.$.+,$..+...+.+$.$$+.$,.......$$+#/~#=@++-..........$$.....,,++.,$$$$+$$.$,,+$.+$...$$.+....$..$.$..............$$,.,,,+.++$...+$$.............................$$+;'3'(~~%*+$.,.,.,.", ".+.$$$$,$.$.$$.$$$.$..$...$,$$$$$$$$,.$#%~#++$.-.+++$$$$$$,.+$$$$$$..+$.,,..,,+.$$.,+..+$$..+.$$$$.$$.$.$$$$$$$$$$$$$$,,$+$$$.+...$$$..,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,+*'&'%**=;;+.$$$$$$$", ".$...,$,$.$..$,,,$.$$.$$$.$.,,,,,,,$$+++@==,..^!$$$++++,,$$.,,.,..$$..$$$$$$$.+..$$.$+.,,$$.$,,..$,.+.+.,,,,,,,,,,,,,$$.....$.$$+.,.$$$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,$$$*&';*=*==#@..,.,.,.", "$,++$$.$.$,++.$$$.+.,+,,.+.$$$$$$$$.,..,+@$$.-$#===+,..$$.,$$$+$$$..$$,..,...$.$$..$..$$$,,$.$$++,$+.+.+$$$$$$$$$$$$$..$$$$$.$...+$+.,.+$$$$$$$$$$$$$$$$$$$$$$$$$$$$.++%:%*=*=*#=+-$$$$$$$", "$..,.$.+,$..+...+.+$.$$+.$,.......$$$$$+.,..+#;~~~%;=++$+$.....,,++.,$$$$+$$.$,,+$.+$...$$.+....$..$.$....$$$$$$$...$$,.,,,+.++$...+$$.............................$.$+%:;*=*==@+]-.,.,.,.", ".$$$$,$.$.$$.$$$.$..$...$,$$$$$$$$,..,.$+$+=;%;;*===*#$,..+$$$$$$..+$.,,..,,+.$$.,+..+$$..+.$$$$.$$.$.$$$+,+,+,,,++$,,$+$$$.+...$$$..,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,$+$*'~*==##$${]$$$$$$$", "...,$,$.$..$,,,$.$$.$$$.$.,,,,,,,$$+$$..+++*;;##=@=@=#+$$.,,.,..$$..$$$$$$$.+..$$.$+.,,$$.$,,..$,.+.+.,,$$,+#==+$$,$$.....$.$$+.,.$$$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,$,.+.=%%#*==++--..,.,.,.", "++$$.$.$,++.$$$.+.,+,,.+.$$$$$$$$.,..,$$.+=;;*==@=###=@.,$$$+$$$..$$,..,...$.$$..$..$$$,,$.$$++,$+.+.+$$++@==#@@+.$..$$$$$.$...+$+.,.+$$$$$$$$$$$$$$$$$$$$$$$$$$$$.$$.++#;~##$+^{-.$$$$$$$", ".,.$.+,$..+...+.+$.$$+.$,.......$$$$$,.$$$;~=#@@@@=@#@@......,,++.,$$$$+$$.$,,+$.+$...$$.+....$..$.$....+,#@@@@++$+$,.,,,+.++$...+$$.............................$..$$.$+$+=#.^{]+,.,.,.,.", "$$$,$.$.$$.$$$.$..$...$,$$$$$$$$,..,.$+,,+*;*=#=#=#===+!.$$$$$$..+$.,,..,,+.$$.,+..+$$..+.$$$$.$$.$.$$$$$+=#++++++.,$+$$$.+...$$$..,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,$+,.$+.$$!---.$.$$$$$$$$", ".,$,$.$..$,,,$.$$.$$$.$.,,,,,,,$$+$$..$$$.=;#=###@#@#++..,.,..$$..$$$$$$$.+..$$.$+.,,$$.$,,..$,.+.+.,,..$$#@+@+++$......$.$$+.,.$$$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,$,.$+,.+,....$$.$.,.,.,.,.", "$$.$.$,+++$$$.+.,+,,.+.$$$$$$$$.,..,$$..,+#**##=@===@$$-.$+$$$..$$,..,...$.+++.$..$$$,,$.$$++,$+.+.+$$++++@@@++$,.$$$$$$.$...+$+.,.+$$$$$$$$$$$$$$$$$$$$$$$$$$$$.$$..$$.$+++$..$.$$$$$$$$$", ".$.+,$$+$++$+$+$.$$+.$,.......$$$$$,.$$$$.+#==@#@@#@+.-]...,,++.,$$$$+$++==@.+++$...$$.+....$..$.$......+++++++$.!..,,,+.++$...+$$.............................$..$$..$...$.$+,+,.,.,.,.,.", "$,$.$+#*~%*+$...$...$,$$$$$$$$,..,.$+,,.,+$$##@@@@+++]-!.$$$$..+$.,,..,+#~/%=$...+$$..+.$$$$.$$.$.$$$$$$..++++,$..++$$$.+...$$$..,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,$+,.$+.+$$.+,.$.$$$$$$$$$$", "$,$$$@%<&<'*+$+.$$$.$.,,,,,,,$$+$$..$$+$$+++++++@++$!-]$.,..$$..$$$$$$$@;:'(~+$+.,,$$.$,,..$,.+.+.,,...++,+...........$.$$+.,.$$$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,$,.$+,.+...$.$$.$.,.,.,.,.,.", ".$.,+*'&>~~*+.$+,,.+.$$$$$$$$.,..,$$......$$$+$...---...+$$$..$$,..,..,+/:)*#$..$$$,,$.$$++,$+.+.+$$+++..$.+$$,$+$$$$$.$...+$+.,.+$$$$$$$$$$$$$$$$$$$$$$$$$$$$.$$..$$.$++,$..$.$$$$$$$$$$$", ".+$.$=:';=#@...$$+.$,.......$$$$$,.$$$$+$,...,..$....$+..,,++.,$$$$++$++~/=++-!...$$.+....$..$.$......$$.$...$....,,,+.++$...+$$.............................$..$$..$...$.$+,+,.,.,.,.,.,.", "$..+,#/)=@$+{-$...$,$$$$$$$$,..,.$+,,.,.,$++$$+$...,$..$$$$..+$.,,...,$,+*#$]-.++++++.$$$$.$$.$.$$$$$$..$,$++.$$++$$$.+...$$$..,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,$+,.$+.+$$.+,.$.$$$$$$$$$$$$", "$$.$++=~#=+--.$$$.$.,,,,,,,$$+$$..$$+$$$.....$,$++$.$$.,..$$..$$$$$$$,$+++.--.+@++$$$+,..$,.+.+.,,...++,$...$,......$.$$+.,.$$$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,$,.$+,.+...$.$$.$.,.,.,.,.,.,.", ".,$.$+$..-{--$,,.+.$$$$$$$$.,..,$$......$$$+$.$....$,.+$$$..$$,..,...$$$..$++@+++$+++.$++,$+.+.+$$+++..$.+$$,$+$$$$$.$...+$+.,.+$$$$$$$$$$$$$$$$$$$$$$$$$$$$.$$..$$.$++,$..$.$$$$$$$$$$$$$", "$.+..,+....$,$$+.$,.......$$$$$,.$$$$+$,...,$.+$$$,$+..,,++.,$$$$++$.,.$$+$=#@+++,+$+...$..$.$......$$.$...$....,,,+.++$...+$$.............................$..$$..$...$+++++,.,.,.,.,.,.,.", ".+.+$$$+,$.,$...$,$$$$$$$$,..,.$+,,.,.,$++$$,$...,$..$$$$..+$.,,...,$$+.+++@@+++++++.$$$.$$.$.$$$$$$..$,$++.$$++$$$.+...$$$..,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,$+,.$+.+$++$$+.$$$$$$$$$$$$$$$", ".$.,+++@++$.$$$.$.,,,,,,,$$+$$..$$+$$$.....$,$++$.$$.,..$$..$$$$$$$,..+..+++++$$+$.$+,.$,.+.+.,,...++,$...$,......$.$$+.,.$$$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,$,.$+,.+.+$,@*#=+$,.,.,.,.,.,.,.", "$.$$$+@++$.$,,.+.$$$$$$$$.,..,$$......$$$+$.$....$,.+$$$..$$,..,...$$$.$+,@##$+,$+++.$+,$+.+.+$$+++..$.+$$,$+$$$$$.$...+$+.,.+$$$$$$$$$$$$$$$$$$$$$$$$$$$$.$$..$$.$.+@#==#+.$$$$$$$$$$$$$$", "+...$,@+++.$$+.$,.......$$$$$,.$$$$+$,...,$.+$$$,$+..,,++.,$$$$++$.,.$,$$++++$$+,+$+..$..$.$......$$.$...$....,,,+.++$...+$$.............................$..$$..$.$..@##+++.,.,.,.,.,.,.,.", ".+$++$+@+$....$,$$$$$$$$,..,.$+,,.,.,$++$$,$...,$..$$$$..+$.,,...,$$+.$.+.$+$+++$$,.$$.$$.$.$$$$$$..$,$++.$$++$$$.+...$$$..,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,$+,.$+.+.$+,==@$.-$$$$$$$$$$$$$$", ".,..+$.$++$$$.$.,,,,,,,$$+$$..$$+$$$.....$,$++$.$$.,..$$..$$$$$$$,..+.$.++$,++$+,++..$,.+.+.,,,,++++$...$,......$.$$+.,.$$$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,$,.$+,.+.+.$+++@++..,.,.,.,.,.,.,.", "$$$$.,$....,.+.$$$$$$$$.,..,$$......$$$+$.$....$,.+$$$..$$,..,...$$$.$,$..+$.$,.$.$.+,$+.+.+$$$@@@++++$$,$+$$$$$.$...+$+.,.+$$$$$$$$$$$$$$$$$$$$$$$$$$$$.$$..$$.$.+.$.,,$!!.$$$$$$$$$$$$$$", "...$$.+$$+$+.$,.......$$$$$,.$$$$+$,...,$.+$$$,$+..,,++.,$$$$++$.,.$,$,$$..+.$$.$.+.$..$.$.++=%('[%=@++$....,,,+.++$...+$$.............................$..$$..$.$.$.$$.,....,.,.,.,.,.,.,.", "$++..+......$,$$$$$$$$,..,.$+,,.,.,$++$$,$...,$..$$$$..+$.,,...,$$+.$.$.,$$.$.,$.+.$.$$.$.$$*'&_&:&'~@.$$$++$$$.+...$$$..,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,$+,.$+.+.$,+,$$$.+$$$$$$$$$$$$$$$$", "..++.$++$$$.$.,,,,,,,$$+$$..$$+$$$.....$,$++$.$$.,..$$..$$$$$$$,..+.$.+$.,$,$$.$.$.$,.+.+,,@/}&();%%/*,,,.....$.$$+.,.$$$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,$,.$+,.+.+.$.$,+.+..,.,.,.,.,.,.,.,.", "$$..$....,.+.$$$$$$$$.,..,$$......$$$+$.$....$,.+$$$..$$,..,...$$$.$,$..+$.$,.+,$.+,$+.+.$+~&})~;****;+$$$$$$$.$...+$+.,.+$$$$$$$$$$$$$$$$$$$$$$$$$$$$.$$..$$.$.+.$.$.$.$$$$$$$$$$$$$$$$$$", ".$$.+$$+$+.$,.......$$$$$,.$$$$+$,...,$.+$$$,$+..,,++.,$$$$++$.,.$,$,$$..+.$$.$.+.$..$.$$$$/}[;**=**==+...,,,+.++$...+$$.............................$..$$..$.$.$.$.$,$.,.,.,.,.,.,.,.,.,.", "+..+......$,$$$$$$$$,..,.$+,,.,.,$++$$,$...,$..$$$$..+$.,,...,$$+.$.$.,$$.$.,$.+.$.$$.$.,+#(_);*=**=*==-.+$$$.+...$$$..,$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,$+,.$+.+.$,+,$.$.+$$$$$$$$$$$$$$$$$$", "++.$++$$$.$.,,,,,,,$$+$$..$$+$$$.....$,$++$.$$.,..$$..$$$$$$$,..+.$.+..,$,$$.$.$.$,.+.+$.++(&~;**=*=#@+]....$.$$+.,..$$.,,,,,,,,,,,,,,,,,,,,,,,,,,,,$,.$+,.+.+.$.$,+.+..,.,.,.,.,.,.,.,.,.", "..$....,.+.$$$$$$$$.,..,$$......$$$+$.$....$,.+$$$..$$,..,...$$$.$,$.$+$.$,.+,$.+,$+.+..+.+):%**=*===+!-.$$$.$...+$+$,.+$$$$$$$$$$$$$$$$$$$$$$$$$$$$.$$..$$.$.+.$.$.$.$$$$$$$$$$$$$$$$$$$$", "$.+$$+$+.$,.......$$$$$,.$$$$+$,...,$.+$$+,$+..,,++.,$$$$++$.,.$,$,$...+.$$.$.+.$..$.$$.$+$='>;****##+{!,,,+.++$...,$$.............................$..$$..$.$.$.$.$,$.,.,.,.,.,.,.,.,.,.,.", ".+......$,$$$$$$$$,..,.$+,,.,.,$++$$,+$++$$..$$$$..+$.,,...,$$+.$.$.+$$.$.,$.+.$.$$.$.,$,.++*(;*=#=@$]{.$$$.+...$$$$.,$$$$$$$$+++++++++$$$$$$$$$$$$,$+,.$+.+.$,+,$.$.+$$$$$$$$$$$$$$$$$$$$", ".$++$$$.$.,,,,,,,$$+$$..$$+$$$.....$$+#**#+$+,..$$..$$$$$$$,..+.$.+..,$,$$.$.$.$,.+.+$.$$.$$+=;;=@++-{-...$.$$+.,..$$.,,,,,,+$$$$$$$$$++,,,,,,,,,,$,.$+,.+.+.$.$,+.+..,.,.,.,.,.,.,.,.,.,.", "$....,.+.$$$$$$$$.,..,$$......$$$+$.+#/:[/=+.$$$..$$,..,...$$$.$,$.$+$.$,.+,$.+,$+.+..+..$,+++$+=+.^-].$$$.$...+$+$,.+$$$$$$.+++####@+..$$$$$$$$$$.$$..$$.$.+.$.$.$.$$$$$$$$$$$$$$$$$$$$$$", "+$$+$+.$,.......$$$$$,.$$$$+$,...,+.@~[()*#..+,++.,$$$$++$.,.$,$,$...+.$$.$.+.$..$.$$.$+,$...,,..---!$,,,+.++$...,$$......$+++==+@@++@,$.........$..$$..$.$.$.$.$,$.,.,.,.,.,.,.,.,.,.,.,.", "......$,$$$$$$$$,..,.$+,,.,.,$++$$.++)'%===!..$..+$.,,...,$$+.$.$.+$$.$.,$.+.$.$$.$.,$,.$.$$+$$....$+.$$$.+...$$$$.,$$$$$$,$$@++@++++++.$$$$$$$$$,$+,.$+.+.$,+,$.$.+$$$$$$$$$$$$$$$$$$$$$$", "++$$$.$.,,,,,,,$$+$$..$$+$$$.$$+.$$+$~';#++-..$$..$$$$$$$,..+.$.+..+$,$$.$.$.$,.+.+$.$$.$...$.$$.$..+...$.$$+.,..$$.,,,,,$,++#@++++++$+.,,,,,,,,$,.$+,.+.+.$.$,+.+..,.,.,.,.,.,.,.,.,.,.,.", "...,.+.$$$$$$$$.,..,$$......+,+$+++$+=)*@+]-$$..$$,..,...$$$.$,$.$+,+++.+,$.+,$+.+..+..$,++$,$,,+.$$.$$$.$...+$+$,.+$$$$$.$.++#,$$$+$@$.$$$$$$$$.$$..$$.$.+.$.$.$.$$$$$$$$$$$$$$$$$$$$$$$$", "$+$+.$,.......$$$$$,.$$$$+$$$,+==@+$.+##+${-,++.,$$$$++$.,.$,$,$++=;%=@+$,+.$..$.$$.$+,$...$,$$.$,.$,,,+.++$...,$$......$.+$+++,++$+,++........$..$$..$.$.$.$.$,$.,.,.,.,.,.,.,.,.,.,.,.,.", "....$,$$$$$$$$,..,.$+,,.,.,,+@#@++++$.$$-^-.$..+$.,,...,$$+.$.$+$;/&:'%@+$.$.$$.$.,$,.$.$$+.$..$,$+.$$$.+...$$$$.,$$$$$$,$.+$.$$+$+$$,,.$$$$$$$,$+,.$+.+.$,+,$.$.+$$$$$$$$$$$$$$$$$$$$$$$$", "$$$.$.,,,,,,,$$+$$..$$+$$$$$+@=++$++.,,.$.+.$$..$$$$$$$,..+.$..+#'}&())=+$+$,.+.+$.$$.$...$.$$.$..+...$.$$+.,..$$.,,,,,$,$..++++,+,+$$.,,,,,,,$,.$+,.+.+.$.$,+.+..,.,.,.,.,.,.,.,.,.,.,.,.", ".,.+.$$$$$$$$.,..,$$.......+.#@#+++++$$+.+.$..$$,..,...$$$.$,$$+~&<%~*;*...,$+.+..+..$,++$,$,,+.$$.$$$.$...+$+$,.+$$$$$.$.$+$..$$.$$.$$$$$$$$$.$$..$$.$.+.$.$.$.$$$$$$$$$$$$$$$$$$$$$$$$$$", "$+.$,.......$$$$$,.$$$$+$$.++++$+$$$..$$.$,++.,$$$$++$.,.$,$,,.$%&(**#==..$..$.$$.$+,$...$,$$.$,.$,,,+.++$...,$$......$.+,..$$..$.,,,........$..$$..$.$.$.$.$,$.,$+$+$+.,.,.,.,.,.,.,.,.,.", "..$,$$$$$$$$,..,.$+,,.,.,,$$.+++$,++$$.,$.$..+$.,,...,$$+.$.$$++*:/;**##-..$$.$.,$,.$.$$+.$..$,$+.$$$.+...$$$$.,$$$$$$,$.$$+..++.$$$$+$$$$$$$,$+,.$+.+.$,+,$.$.+$,+,+,.$$$$$$$$$$$$$$$$$$$", "$.$.,,,,,,,$$+$$..$$+$$$$,,++$+++.,..+$.+.$$..$$$$$$$,..+.$..$++#((;==@@-.,.+.+$.$$.$...$.$$.$..+...$.$$+.,..$$.,,,,,$,$...++..+,....,,,,,,,$,.$+,.+.+.$.$,+.+.$$.++$$,.,.,.,.,.,.,.,.,.,.", ".+.$$$$$$$$.,..,$$.......$$$$+$.$$$.,..+.$..$$,..,...$$$.$,$$.$$+*)~=++--$$+.+..+..$,++$,$,,+.$$.$$$.$...+$+$,.+$$$$$.$.$+$..$$.$$$$$$$$$$$$.$$..$$.$.+.$.$.$.$,+++$+.$$$$$$$$$$$$$$$$$$$$", ".$,.......$$$$$,.$$$$+$$.....$..,.+$$$.$,++.,$$$$++$.,.$,$,,+.,$$+@*=@-4-..$.$$.$+,$...$,$$.$,.$,,,+.++$...,$$......$.+,..$$..$.,,,+++$$$..$..$$..$.$.$.$.$,$.$.$$++,.,.,.,.,.,.,.,.,.,.,.", "$,$$$$$$$$,..,.$+,,.,.,,$$$+$,+$$$...,$.$..+$.,,...,$$+.$.$$.$$.,$+.]^^!..$.$.,$,.$.$$+.$..$,$+.$$$.+...$$$$.,$$$$$$,$.$$+..++.$$$@=*=#+,+$,$+,.$+.+.$,+,$.$.+.$.+..$$$$$$$$$$$$$$$$$$$$$$", "$.,,,,,,,$$+$$..$$+$$$$,,,..$.,..$$+$.+.$$..$$$$$$$,..+.$..$,.+$$.$$$$..$.+.+$.$$.$...$.$$.$..+...$.$$+.,..$$.,,,,,$,$...++..+,.+@~[}<)=$,$,.$+,.+.+.$.$,+.+.$,+.$$.,.,.,.,.,.,.,.,.,.,.,.", ".$$$$$$$$.,..,$$.......$$$$+.$$$+.,..+.$..$$,.$+++$$$$.$,$$.$$..,$.,...+,+.+..+..$,++$,$,,+.$$.$$$.$...+$+$,.+$$$$$.$.$+$..$$.$++*&_:(>%@$.$$..$$.$.+.$.$.$.$,$.$,,$$$$$$$$$$$$$$$$$$$$$$$", ",..$$$$.$$$$$,.$$$$+$$.....$..,.+$$$.$,++.,$+,,$$++,+$,$,,+.,$$$,+$+$$.$.$.$$.$+,$...$,$$.$,.$,,,+.++$...,$$......$.+,..$$..$.$.@/_')~*~#$..$$..$.$.$.$.$,$.$.$,$$,.,.,.,.,.,.,.,.,.,.,.,.", "$+++,,++,$.,.$+,,.,.,,$$$+$,+$$$...,$.$..+$.$=;)/%=@$+$.$$.$$.,.$...,.$.$.$.,$,.$.$$+.$..$,$+.$$$.+$$+$+$$.,$$$$$$,$.$$+..++.$.++(})***=@].+,.$+.+.$,+,$.$.+.$.$..$$$$$$$$$$$$$$$$$$$$$$$$", "$$+*;*=@++$$..$$+$$$$,,,..$.,..$$+$.+.$$..++=(:}}}:~@+$$.$,.+$$.$$$$+.$.+.+$.$$.$...$.$$.$..+...$..+@=@+$+$.,,,,,$,$...++..+,+$++)&%;;##+-.$+,.+.+.$.$,+.+.$,+.$$.,.,.,.,.,.,.,.,.,.,.,.,.", "+#;/''/;#+++$$.......$$$$+.$$$+.,..+.$..$++='_}')%)'%@,,$.$$..,$.,...+,+.+..+..$,++$,$,,+.$$.$$$.$+,*(%+,$.+$$$$$.$.$+$..$$.$.,$+=>%=@@@{-...$$.$.+.$.$.$.$,$.$,,$$$$$$$$$$$$$$$$$$$$$$$$+", "+#)/)~~%;+.,+$$$$+$$.....$..,.+$$$.$,++.$$+%&&);*;;*)=$,+.,$$$,+$+$$.$.$.$$.$+,$...$,$$.$,.$,,,+..$+;'*$.$......$.+,..$$..$.$$,.++=**#+-{!$$..$.$.$.$.$,$.$.$,$$,.,.,.,.,.,.,.,.,.,.,.,.$$", ".*~*=###*=+$.,,.,.,,$$$+$,+$$$...,$.$..+.+*(_(***=***=.$.$$.,.$...,.$.$.$.,$,.$.$$+.$..$,$+.$$$.+$++#;+^-,$$$$$$,$.$$+..++.$..$$$$++$.--..,.$+.+.$,+,$.$.+.$.$..$$$$$$$$$$$$$$$$$$$$$$$$.,", ",=*====##=..$$+$$$$,,,..$.,..$$+$.+.$$.$.+*&:;==*===#*!$,.+$$.$$$$+.$.+.+$.$$.$...$.$$.$..+...$.,.$$+$--!.,,,,,$,$...++..+,+$.,,,,$,.--.+$+,.+.+.$.$,+.+.$,+.$$.,.,.,.,.,.+$+$+$,.,.,.,$$$", "$@=####@@@+........$$$$+.$$$+.,..+.$..$,$$=:';***#*===].$$..,$.,...+,+.+..+..$,++$,$,,+.$$.$$$.$$$.+..$.++$$$$$.$.$+$..$$.$.,$$$$$+$$$$$...$$.$.+.$.$.$.$,$.$,,$$$$$$$$+$++,,+.,$+$$$$$,.,", "++======++$.$$$+$$.....$..,.+$$$.$,++.$.,+=>';==*=#*+@-.,$$$,+$+$$.$.$.$$.$+,$...$,$$.$,.$,,,+..,+.++.+@##+$$.$.+,.+$$++$.$$,.......,,.$$$..$.$.$.$.$,$.$.$,$$,.,.,.,$$+$$@=#=@+$$+.,.$+$$", "++@##@##@+,-..,.,,$$$+$,+$$$...,$.$..+.+$$$~'~*===*@+.{!$.,.$...,.$.$.$.,$,.$.$$+.$..$,$+.$$$.+$$.$.$+*/[>=+,+,$.$+.++..,$..$$$$$$$$$$$.,.$+.+.$,+,$.$.+.$.$..$$$$$$$+@=**;;;*=@+,.$$$...,", "++#===@@+.--$$$$$,,,..$.,..$$+$.+.$$.$...+$#/~**=##++--.+$$.$$$$+.$.+.+$.$$.$...$.$$.$..+...$.,.$,$.$@(}&'(=$$,$.$+++++$,+$.,,,,,,,..,+$+,.+.+.$.$,+.+.$,+.$$.,.,.,$,#*'[(~;*=*=@$,.,$$+$$", "$@@@@@@+,.-.,....$$$$+.$$$+.,..+.$..$,$$+.,$#;;#+@$+-{]$..,$.,...+,+.+..+..$,++$,$,,+.$$.$$$.$$$.$.++*&&);*#..$.++$+++$.$.,$$$$$$$$$$$...$$.$.+.$.$.$.$,$.$,,$$$$$$,+=[:'';#=##@+.$$$,...,", ",++#++++.]-.$+$$.....$..,.+$$$.$,++.$.,.$$+$+++==+.{--.$$$,+$+$$.$.$.$$.$+,$...$,$$.$,.$,,,+..,+.+.$$@''**@+-.+..+.+$++.$$,.......,,.$$$..$.$.$.$.$,$.$.$,$$,.,.,.$$+*(/~~=+==#@+-..$+$+$$", "$,+#@@+..!$$,.,,$$$+$,+$$$...,$.$..+.+$$,..+$$+.----.++.,.$...,.$.$.$.,$,.$.$$+.$..$,$+.$$$.+$$.$.$,++~(*++--..$$.+.+.$$..$$$$$$$$$$$.,.$+.+.$,+,$.$.+.$.$..$$$$$$..+#(*###++@=++].$.....,", "$$,++$.-]..$$$$,,,..$.,..$$+$.+.$$.$...$+$....+$.!....+$$.$$$$+.$.+.+$.$$.$...$.$$.$..+...$.,.$,$.$.+$@==+-^!$..$$$$,.,+$.,,,,,,,..,+$+,.+.+.$.$,+.+.$,+.$$.,.,.,$$.+@~*=#++@@$$!].$$+$+$.", "$,$.....$.$....$$$$+.$$$+.,..+.$..$,$$+..,$++$.,+,.$$$..,$.,...+,+.+..+..$,++$,$,,+.$$.$$$.$$$.$.+.$$++,.---..++,.,+$$$.,$$$$$$$$$$$...$$.$.+.$.$.$.$,$.$,,$$$$$$,,$$,+@$$.$++,.^!+,.....$", "$.+++$$.+,$+$$.....$..,.+$$$.$,++.$.,.$$$....$$.$$...$$$,+$+$$.$.$.$$.$+,$...$,$$.$,.$,,,+..,+.+.$,..$$.$.$,+..$+$..,.$$,.......,,.$$$..$.$.$.$.$,$.$.$,$$,.,.,.$$.,$...-.].$$!-].$+$+$+,.", ".$$..,.$.$,.,,$$$+$,+$$$...,$.$..+.+$$,..+$$+..$.,+++.,.$...,.$.$.$.,$,.$.$$+.$..$,$+.$$$.+$$.$.$,$++,.+.$.$.$$...$$$$..$$$$$$$$$$$.,.$+.+.$,+,$.$.+.$.$..$$$$$$..+$+$$$$.$$.-].........$$", ",.$$$+,$.$$$$,,,..$.,..$$+$.+.$$.$...$+$.,+$++.$$...+$$.$$$$+.$.+.+$.$$.$...$.$$.$..+...$.,.$,$.$...$+.$.+.$..$$$,,.,+$.,,,,,,,..,+$+,.+.+.$.$,+.+.$,+.$$.,.,.,$$...,,,,$+.,+$$$$$$+$+$.,.", "$+....$.$....$$$$+.$$$+.,..+.$..$,$$+..++$.+$$+,.$$$..,$.,...+,+.+..+..$,++$,$,,+.$$.$$$.$$$.$.+.$$$..$,$.$.++,.,$$$$.,$$$$$$$$$$$...$$.$.+.$.$.$.$,$.$,,$$$$$$,,$$$$$$$..$$.....,.....$$$", ".++$$.+,$+$$.....$..,.+$$$.$,++.$.,.$$.$+=#+,.$$...$$$,+$+$$.$.$.$$.$+,$...$,$$.$,.$,,,+..,+.+.$,..$$.$,$,+..$+$..,.$$,.......,,.$$$..$.$.$.$.$,$.$.$,$$,.,.,.$$.,.....+$..$+$$+$+$+$+,.,.", "$..,.$.$,.,,$$$+$,+$$$...,$.$..+.+$$,.++@==@$$$,+++.,.$...,.$.$.$.,$,.$.$$+.$..$,$+.$$$.+$$.$.$,$++,.+.$.$.$$...$$$$..$$$$$$$$$$$.,.$+.+.$,+,$.$.+.$.$..$$$$$$..+$+$$$$..+$..,,.......$$$$", "$$$+,$.$$$$,,,..$.,..$$+$.+.$$.$...$+$+++##+,.$...+$$.$$$$+.$.+.+$.$$.$...$.$$.$..+...$.,.$,$.$...$+.$.+.$..$$$,,.,+$.,,,,,,,..,+$+,.+.+.$.$,+.+.$,+.$$.,.,.,$$...,,,,$+.,+$$$$$$+$+$.,.,.", "....$.$...+$$$$+.$$$+.,..+.$..$,$$+...$++=@+...$$$..,$.,...+,+.+..+..$,++$,$,,+.$$.$$$.$$$.$.+.$$$..$,$.$.++,.,$$$$.,$$$$$$$$$$$...$$.$.+.$.$.$.$,$.$,,$$$$$$,,$$$$$$$..$$.....,.....$$$$$", "+$$.+,$++$==++.+..,.+$$$.$,++.$.,.$$+,.+,$$.]$...$$$,+$+$$.$.$.$$.$+,$...$,$$.$,.$,,,+..,+.+.$,..$$.$,$,+..$+$..,.$$,.......,,.$$$..$.$.$.$.$,$.$.$,$$,.,.,.$$.,.....+$..$+$$+$+$+$+,.,.,.", ".,.$.$,.$#*%=+$.+$$$...,$.$..+.+$$,..$+$$,..$.+++.,.$...,.$.$.$.,$,.$.$$+.$..$,$+.$$$.+$$.$.$,$++,.+.$.$.$$...$$$$...$$$$$$$$$$.,.$+.+.$,+,$.$.+.$.$..$$$$$$..+$+$$$$..+$..,,.......$$$$$$", "$+,$.$$,$=)~@,$.,..$$+$.+.$$.$...$+$..,.$$$.+...+$$.$$$$+.$.+.+$.$$.$...$.$$.$..+...$.,.$,$.$...$+.$.+.$..$$$,,.,+$$,,,,,,,..,+$+,.+.+.$.$,+.+.$,+.$$.,.,.,$$...,,,,$+.,+$$$$$$+$+$.,.,.,.", "..$.$..$,$==+!.$$$+.,..+.$..$,$$+...$$$$.,.$.$$$..,$.,...+,+.+..+..$,++$,$,,+.$$.$$$.$$$.$.+.$$$..$,$.$.++,.,$$$$.,.$$$$$$$$$$...$$.$.+.$.$.$.$,$.$,,$$$$$$,,$$$$$$$..$$.....,.....$$$$$$$", "$.+,$+.$,+$+--..,.+$$$.$,++.$.,.$$+,..,+$+,$...$$$,+$+$$.$.$.$$.$+,$...$,$$.$,.$,,,+..,+.+.$,..$$.$,$,+..$+$..,.$$+.......,,.$$$..$.$.$++.$,$.$.$,$$,.,.,.$$.,.....+$..$+$$+$+$+$+,.,.,.,.", ".$.$,.$.$$,...$$$$...,$.$..+.+$$,..$+$$...$.+++.,.$...,.$.$.$.,$,.$.$$+.$..$,$+.$$$.+$$.$.$,$++,.+.$.$.$$...$$$$...$$$$$$$$$$.,.$+.+.$+.$++$++.$.$..$$$$$$..+$+$$$$..+$..,,.......$$$$$$$$", ",$.$$,+$,$$..,,..$$+$.+.$$.$...$+$..,.$$$.+...+$$.$$$$+.$.+.+$.$$.$...$.$$.$..+$$.$.,.$,$.$...$+.$.+.$..$$$,,.,+$$,,,,,,,..,+$+,.+.++,=**#+$.+,+.$$.,.,.,$$...,,,,$+.,+$$$$$$+$+$.,.,.,.,.", "$.$..$.,$..$$$$$+.,..+.$..$,$$+...$$$$.,.$.$$$..,$.,...+,+.+..+..$,++$,$,,+.++$++++$$$.$.+.$$$..$,$.$.++,.,$$$$.,.$$$$$$$$$$...$$.$.,=;>>/;+$.$.$,,$$$$$$,,$$$$$$$..$$.....,.....$$$$$$$$$", "+,$+.$$.++,...,.+$$$.$,++.$.,.$$+,..,+$+,$...$$$,+$+$$.$.$.$$.$+,$...$,$$.+$@=;%%*=+++.+.$,..$$.$,$,+..$+$..,.$$+.......,,.$$$..$.$$@~((~;*#$.$,$$,.,.,.$$.,.....+$..$+$$+$+$+$+,.,.,.,.,.", ".$,.$..$..$+$$$$...,$.$..+.+$$,..$+$$...$.+++.,.$...,.$.$.$.,$,.$.$$+.$..$$+*'&&:<%@+.+.$,$++,.+.$.$.$$...$$$$...$$$$$$$$$$.,.$+.+,+*/'**#++-$.$..$$$$$$..+$+$$$$..+$..,,.......$$$$$$$$$$", ".$$,+$,$$..,,..$$+$.+.$$.$...$+$..,.$$$.+...+$$.$$$$+.$.+.+$.$$.$...$.$$+,@;'3'(%~)*+.$.$...$+.$.+.$..$$$,,.,+$$,,,,,,,..,+$+,.+.$$$#(%#=#++-$.$$.,.,.,$$...,,,,$+.,+$$$$$$+$+$.,.,.,.,.,.", "$..$.,$..$$$$$+.,..+.$..$,$$+...$$$$.,.$.$$$..,$.,...+,+.+..+..$,++$,$,,.+*'&'%;**;;+$.+.$$$..$,$.$.++,.,$$$$.,.$$$$$$$$$$...$$.$..,#~~=+$..].+++$$$$$$,,$$$$$$$..$$.....,.....$$$$$$$$$$$", "$+.$$.++,...,.+$$$.$,++.$.,.$$+,..,+$+,$...$$$,+$+$$.$.$.$$.$+,$...$,$$$$$*:';*#====+..$,..$$.$,$,+..$+$..,.$$+.......,,.$$$..$.$+$$+@=@+$.{]$,++$+$,.$$.,.....+$..$+$$+$+$+$+,.,.,.,.,.,.", ",.$..$..$+$$$$...,$.$..+.+$$,..$+$$...$.+++.,.$...,.$.$.$.,$,.$.$$+.$...++%&)*#**=#@+-.,$++,.+.$.$.$$...$$$$...$$$$$$$$$$.,.$+.+,..,$+$++.-+===@+,.,$$..+$+$$$$..+$..,,.......$$$$$$$$$$$$", "$,+$,$$..,,..$++$++.$$.$...$+$..,.$$$.+...+$$.$$$$+.$.+.+$.$$.$...$.$$+.$$~:;*====#+.-....$+.$.+.$..$$$,,.,+$$,,,,,,,..,+$+,.+.$$+$,+,+..+@;~%%%;=++++$...,,,,$+.,+$$$$$$+$+$.,.,.,.,.,.,.", ".$.,$..$$$$$++$++.$+,,$,$$+...$$$$.,.$.$$$..,$.,...+,+.+..+..$,++$,$,,.$,+='~;**##$${.$$$$..$,$.$.++,.,$$$$.,.$$$$$$$$$$...$$.$....$.$$$@;%;;#==**@$..,$$$$$$$..$$.....,.....$$$$$$$$$$$$$", ".$$.++,...,$$++@=#+$$.$.,.$$+,..,+$+,$...$$$,+$+$$.$.$.$$.$+,$...$,$$$.$++=%%====++^{.,..$$.$,$,+..$+$..,.$$+.......,,.$$$..$.$+$+.$$,+@*~;#=#@=@=#+$$.,.....+$..$+$$+$+$+$+,.,.,.,.,.,.,.", "$..$..$+$$$,++#=#=@+$+.+$$,..$+$$...$.+++.,.$...,.$.$.$.,$,.$.$$+.$...+..$+#**##$$-{.$$++,.+.$.$.$$...$$$$...$$$$$$$$$$.,.$+.+,...$.,$,=%;#=@@=@##=#..+$+$$$$..+$..,,.......$$$$$$$$$$$$$$", "+$,$$..,,.$,+=##+#+,$+...$+$..,.$$$.+...+$$.$$$$+.$.+.+$.$$.$...$.$$+.$$..$+++=#,^--....$+.$.+.$..$$$,,.,+$$,,,,,,,..,+$+,.+.$$+$,+$$++=~*#==@#=##@@....,,,,$+.,+$$$$$$+$+$.,.,.,.,.,.,.,.", ".,$..$$$$$.$+@@+@++++.$$+...$$$$.,.$.$$$..,$.,...+,+.+..+..$,++$,$,,.$,.+$+$$$!---!++$$$..$,$.$.++,.,$$$$.,.$$$$$$$$$$...$$.$....$..,$$*;==#@#=#===+!.$$$$$$..$$.....,.....$$$$$$$$$$$$$$$", "$.++,...,+$++#@+@++,$.,.$$+,..,+$+,$...$$$,+$+$$.$.$.$$.$+,$...$,$$$.$+.,.,+...$....,..$$.$,$,+..$+$..,.$$+.......,,.$$$..$.$+$+.$$$.,+=~####@@@@#++!......+$..$+$$+$+$+$+,.,.,.,.,.,.,.,.", ".$..$+$$$.,.+#@+++$$..$$,..$+$$...$.+++.,.$...,.$.$.$.,$,.$.$$+.$...+..$$$$.+++.$.$$$++,.+.$.$.$$...++$+,..$$$$$$$$$$.,.$+.+,...$.,.+$.@;*===#===@$$-.+$$$$..+$..,,..$+$+$$$$$$$$$$$$$$$$$", ",$$..,,.$$$$$+@,$++....$+$..,.$$$.+...+$$.$$$$+.$.+.+$.$$.$...$.$$+.$$....$..$$.+.....$+.$.+.$..$$+$$+$$+$+,,,,,,..,+$+,.+.$$+$,+$$.$+,+###@@@@#@+,]].,,,,$+.,+$$$$$,.#@+++$,.,.,.,.,.,.,.", "$..$$$$$..,++++++,....+...$$$$.,.$.$$$..,$.,...+,+.+..+..$,++$,$,,.$,.+$+$.$$..+.++$$$..$,$.$.++,,$#*%%*++.$$$$$$$$$...$$.$....$..,$,$$.$==@@#@+++--!.$$$$..$$.....,$=%'/#+,$$$$$$$$$$$$$$", "++,...,+$$....$$$$.$$.$$+,..,+$+,$...$$$,+$+$$.$.$.$$.$+,$...$,$$$.$+.,.,+..$+.$..,..$$.$,$,+..$$+@%[&<[*+.$....,,.$$$..$.$+$+.$$$.$.++++++++@$+$!-]$....+$..$+$$+$++;:'(*$$,.,.,.,.,.,.,.", "..$+$$$.,.$$++....$.,$,..$+$$...$.+++.,.$...,.$.$.$.,$,.$.$$+.$...+..$$$$.++,.$.$$$++,.+.$.$.$$..+='&'%;;$$,$$$$$$$.,.$+.+,...$.,.+.+.$$..+$...--]!..$$$$..+$..,,..$#)'%*=+.$$$$$$$$$$$$$$", "$..,,.$$$....+$$+.$$.$+$..,.$$$.+...+$$.$$$$+.$.+.+$.$$.$...$.$$+.$$....$..$$.+.....$+.$.+.$..$$.+*:'*#+#]!,,,,..,+$+,.+.$$+$,+$$.$.$.,$+.,..$....$$,,,,$+.,+$$$$+,$+~)=++--,$+$+.,.,.,.,.", ".$$$$$..,++$$.,,.$,.+...$$$$.,.$.$$$..,$.,...+,+.+..+..$,++$,$,,.$,.+$+$.$$..+.++$$$..$,$.$.++,,$,@()=#@+-.$$$$$$$...$$.$....$..,$,$.$$,.$$+$,...$.,$$$$..$$......$+$@;=+]-$$+.,.+$$$$$$$$", ",...,+$$...,$$$$,$$.$$+,..,+$+,$...$$$,+$+$$.$.$.$$.$+,$...$,$$$.$+.,.,+..$+.$..,..$$.$,$,+..$$.$++@~=@${^....,,.$$$..$.$+$+.$$$.$.+,.$$..$,$++$,$$....+$..$+$$+$..,+..!--.@++++$$+.,.,.,.", "$+$$$.,.$$+$....$.,$,..$+$$...$.+++.,.$...,.$.$.$.,$,.$.$$+.$...+..$$$$.++,.$.$$$++,.+.$.$.$$..+.$++$--^-!$$$$$$$.,.$+.+,...$.,.+.+.$$..+$.$....$,.$$$$..+$..,,..$$$.++,$++++++++,.$$$$$$$", ".,,.$$$....+$$+.$$.$+$..,.$$$.+...+$$.$$$$+.$.+.+$.$$.$...$.$$+.$$....$..$$++,,...$+.$.+.$..$$.$,.$,+.....,,,..,+$+,.+.$$+$,+$$.$.$.,$+.,$.$$$+.$$,,,,$+.,+$$$$+,,.$.$$+##+@+$++$+,$,.,.,.", "$$$$..,++$$.,,.$,.+...$$$$.,.$.$$$..,$.,...+,+.+..+..$,++$,$,,.$,.+$+$.$+++$+$$+$$..$,$.$.++,,$,$$+$$+$$$+$$$$$$...$$.$....$..,$,$.$$,.$$,$,...$.,$$$$..$$......$$+,$,++=#@,+++$+.$,$$$$$$", "..,+$$...,$$$$,$$.$$+,..,+$+,$...$$$,+$+$$.$.$.$$.$+,$...$,$$$.$+.,.,++$,@#==+$..$$.$,$,+..$$.$.+$+++++,....,,.$$$..$.$+$+.$$$.$.+,.$$..$,$++$,$$....+$..$+$$+$...$.$$++@++$+$+$$$$.,.,.,.", "$$$.,.$$+$....$.,$,..$+$$...$.+++.,.$...,.$.$.$.,$,.$.$$+.$...+..$$$$..+@**#+@.++,.+.$.$.$$..+.$.,@+#+$$$$$$$$$.,.$+.+,...$.,.+.+.$$..+$.$....$,.$$$$..+$..,,..$$$.+.+.@#+$+$++,+,.$$$$$$$", ",.$$$....+$$+.$$.$+$..,.$$$.+...+$$.$$$$+.$.+.+$.$$.$...$.$$+.$$....$$..$==#++!.$+.$.+.$..$$.$,$$.+++++.,,,..,+$+,.+.$$+$,+$$.$.$.,$+.,$.$$$+.$$,,,,$+.,+$$$$+,,.$.$.+.+++$++.+$+$,.,.,.,.", "$$..,++$$.,,.$,.+...$$$$.,.$.$$$..,$.,...+,+.+..+..$,++$,$,,.$,.+$+$..$$+=#@..]$..$,$.$.++,,$,$..+.$@+$.$$$$$$...$$.$....$..,$,$.$$,.$$,$,...$.,$$$$..$$......$$+,$,$$+.++++$+$,..$$$$$$$$", ",++$..++$$$$,$$.$$+,..,+$+,$...$$$,+$+$$.$.$.$$.$+,$...$,$$$.$+.,.,++.+,,+++$..$$.$,$,+..$$.$.++$++...$...,,.$$$..$.$+$+.$$$.$.+,.$$..$,$++$,$$....+$..$+$$+$...$.$,.$++$+$++++$..,.,.,.,.", "$$@#@@$.+...$.,$,..$+$$...$.+++.,.$...,.$.$.$.,$,.$.$$+.$...+..$$$$..+.$$$+$.!.,.+.$.$.$$..+.$...$$$$+,.$$$$$.,.$+.+,...$.,.+.+.$$..+$.$....$,.$$$$..+$..,,..$$$.+.$+.$$.......++$$$$$$$$+", "=~>'');++++.$$.$+$..,.$$$.+...+$$.$$$$+.$.+.+$.$$.$...$.$$+.$$....$$.$$$,.....$+.$.+.$..$$.$,$$+.,.,.$$,,..,+$+,.+.$$+$,+$$.$.$.,$+.,$.$$$+.$$,,,,$+.,+$$$$+,,.$.$..+..$+++$$$..,.,.,.,.$$", "'}_&<&';@$.$,.+...$$$$.,.$.$$$..,$.,...+,+.+..+..$,++$,$,,.$,.+$+$..$.,,$$+.$$..$,$.$.++,,$,$...+$$$$.,$$$$$...$$.$....$..,$,$.$$,.$$,$,...$.,$$$$..$$......$$+,$,$$.$+,$.....$$$$$$$$$+.~", "1:'~;~)/*+,$$.$$+,..,+$+,$...$$$,+$+$$.$.$.$$.$+,$...$,$$$.$+.,.,++.+$$.,.$,.$$.$,$,+..$$.$.++$..,..$$..,,.$$$..$.$+$+.$$$.$.+,.$$..$,$++$,$$....+$..$+$$+$...$.$,.$,.$.$$+$$...,.,.,.$+$'", "}%*;**;*;+$.,$,..$+$$...$.+++.,.$...,.$.$.$.,$,.$.$$+.$...+..$$$$..+...+$$.$+,.+.$.$.$$..+.$...$$$$+,.$$$$$.,.$+.+,...$.,.+.+.$$..+$.$....$,.$$$$..+$..,,..$$$.+.$+.$$.$...,,++$$$$$$$.+*}", ":;*==**==+$$.$+$..,.$$$.+...+$$.$$$$+.$.+.+$.$$.$...$.$$+.$$....$$.$$$...+..$+.$.+.$..$$.$,$$+.,.,.$$,,..,+$+,.+.$$+$,+$$.$.$.,$+.,$.$$$+.$$,,,,$+.,+$$$$+,,.$.$..+..$,++$$$..,.,.,.,+$+%1", ")****==*#=].+...$$$$.,.$.$$$..,$.,...+,+.+..+..$,++$,$,,.$,.+$+$..$.,,$$+.$$..$,$.$.++,,$,$...+$$$$.,$$$$$...$$.$....$..,$,$.$$,.$$,$,...$.,$$$$..$$......$$+,$,$$.$+,$.....$$$$$$$$$.,@'1", "%=*=**==@$-.$$+,..,+$+,....$$$,+$+$$.$.$.$$.$+,$...$,$$$.$+.,.,++.+$$.,.$,.$$.$,$,+..$$.$.++$..,..$$..,,.$$$..$.$+$+.$$$.$.+,.$$..$,$++$,$$....+$..$+$$+$...$.$,.$,.$.$$+$$...,.,.,.$$.+(&", "(;=**==#+.-.,..$+$$...$$+++.,.$...,.$.$.$.,$,.$.$$+.$...+..$$$$..+...+$$.$+,.+.$.$.$$..+.$...$$$$+,.$$$$$.,.$+.+,...$.,.+.+.$$..+$.$....$,.$$$$..+$..,,..$$$.+.$+..$.$...,,++$$$$$$$..++*&", "';;=**=#+{!$+$..,.$$$.,...+$$.$$$$+.$.+.+$.$$.$...$.$$+.$$....$$.$$$...+..$+.$.+.$..$$.$,$$+.,.,.$$,,..,+$+,.+.$$+$,+$$.$.$.,$+.,$.$$$+.$$,,,,$+.,+$$$$+,,.$.$..+$.$,++$$$..,.,.,.,+$$$+#:", ":*#*=@+$-^....$$$$.,.$$$$$..,$.,...+++$+$.+..$,++$,$,,.$,.+$+$..$.,,$$+.$$..$,$.$.++,,$,$...+$$$$.,$$$$$...$$.$....$..,$,$.$$,.$$,++++$+.,$$$$..$$......$$+,$,$$..+,$.....$$$$$$$$$.,..$$~", "*;*=##+-{-$$+,..,+$+,....$$$,+$++++,+,+++.++,$...$,$$$.$+.,.,++.+$$.,.$,.$$.$,$,+..$$.$.++$..,..$$..,,.$$$..$.$+$+.$$$.$.+,.$$..$$+#**@+$$...+$..$+$$+$...$.$,.$+.$.$$+$$...,.,.,.$$++,+$@", "+++#@-^^-.,..$+$$...$$+++.,.$.$$+$+=+=@+++$$$.$$+.$...+..$$$$..+...+$$.$+,.+.$.$.$$..+.$...$$$$+,.$$$$$.,.$+.+,...$.,.+.+.$$..+$.+#/:[/=+,$$$..+$..,,..$$$.+.$+..$.$...,,++$$$$$$$....$..+", ".$.]]-!.$$+$..,.$$$.,...+$$.$,,$@=@#+@@+@...$...$.$$+.$$....$$.$$$...+..$+.$.+.$..$$.$,$$+.,.,.$$,,..,+$+,.+.$$+$,+$$.$.$.,$+.,+.@~:()*#.,+,$+.,+$$$$+,,.$.$..+$.$,++$$$..,.,.,.,+$$$.$$$$", "+.$$$..$....$$$$.,.$$$$$..,$.$$+#+@$+++@++.$,++$,$,,.$,.+$+$..$.,,$$+.$$..$,$.$.++,,$,$...+$$$$.,$$$$$...$$.$....$..,$,$.$$,.$$.++%'%===!..$..$$......$$+,$,$$..+,$.....$$$$$$$$$.,..$.,.,", "+...$+.+$$+,..,+$+,....$$$,+.++$@#+$++,$+@.$...$,$$$.$+.,.,++.+$$.,.$,.$$.$,$,+..$$.$.++$..,..$$..,,.$$$..$.$+$+.$$$.$.+,.$$+.$$$+~';#++-..+$..$+$$+$...$.$,.$+.$.$$+$$...,.,.,.$$++,+$+$.", ".$$$..$.,..$+$$...$$+++.,.$.$.$+++++$$$+$...$$+.$...+..$$$$..+...+$$.$+,.+.$.$.$$..+.$...$$$$+,.$$$$$.,.$+.+,...$.,.+.+.$+++$+++++=)*@$]-$$..+$..,,..$$$.+.$+.$++++,.,,++$$$$$$$....$....$", ",,.$$,$$+$..,.$$$.,...+$$.$,$.,+++$+,+$+++....$.$$+.$$....$$.$$$...+..$+.$.+.$..$$.$,$$+.,.,.$$,,..,+$+,.+.$$+$,+$$.$.$.$$++==@$$.+##+${-,$+.,+$$$$+,,.$.$..+,@#;;=@+$..,.,.,.,+$$$.$$$$,.", "$$+,.$....$$$$.,.$$$$$..,$.$.+$$$+++$+,++,$++$,$,,.$,.+$+$..$.,,$$+.$$..$,$.$.++,,$,$...+$$$$.,$$$$$...$$.$....$..,$,$.$,++#@++++$.$+]^-.$..$$......$$+,$,$$.$=>&&[%=+$$$$$$$$$.,..$.,.,$$", "..$+.+$$+,..,+$+,....$$$,+.+.+,+..++$$+.$....$,$$$.$+.,.,++.+$$.,.$,.$$.$,$,+..$$.$.++$..,..$$..,,.$$$..$.$+$+.$$$.$.+,$.+@=+++++.,..$.+.+$..$+$$+$...$.$,.$+=(_:()%=+.$,.,.,.$$++,+$+$.,.", "$$..$.,..$+$$...$$+++.,.$.$.$.$.$$$.......$$+.$...+..$$$$..+...+$$.$+,.+.$.$.$$..+.$...$$$$+,.$$$$$.,.$+.+,...$.,.+.+.$.++#@#++$+$$$$.$.$..+$..,,..$$$.+.$+++~&:)****..,$$$$$$....$....$$$", ".$$,$$+$..,.$$$.,...+$$.$,$.$.+.,.$++$+++...$.$$+.$$....$$.$$$...+..$+$+.+.$..$$.$,$$+.,.,.$$,,..,+$+,.+.$$+$,+$$.$.$.$$$+++$$+$+..+$.$,$+.,+$$$$+,,.$.$...$$%&(~**=*...,.,.,+$$$.$$$$,.,.", "+,.$....$$$$.,.$$$$$..,$.$.+.$.+$+,......++$,$,,.$,.+$+$..$.,,$$+.$$++,$+.$.++,,$,$...+$$$$.,$$$$$...$$.$....$..,$,$.$,.,.++++,++$+.,+.$..$$......$$+,$,$$$++~:/;*=##-!$$$$$$.,..$.,.,$$$$", "$+.+$$+,..,+$+,....$$$,+.+.+,$...$$$+$$$...$,$$$.$+.,.,++.+$$.,.$,+.$+++$,+..$$.$.++$..,..$$..,,.$$$..$.$+$+.$$$.$.+,$+$++$++$....$$.+.+$..$+$$+$...$.$,.,.,,='(;==@@-..,.,.$$++,+$+$.,.,.", "..$.,..$+$$...$$+++.,.$.$.$.$.$$$.......$$+.$...+..$$$$..+...+$$.$.++++$.$.$$..+.$...$$$$+,.$$$$$.,.$+.+,...$.,.+.+.$...$$+$.+$$....$.$..+$..,,..$$$.+.$+$$$$.#);#++]-.$$$$$....$....$$$$$", "$,$$+$..,.$$$.,...+$$.$,$.$.+.,.$++$+++++$+.$$+.$$....$$.$$$...+.$$.$$,+.$..$$.$,$$+.,.,.$$,,..,+$+,.+.$$+$,+$$.$.$.$$$...$..,,+$+$.$,$+.,+$$$$+,,.$.$.....++$+#*=@-4-..,.,+$$$.$$$$,.,.,.", ".$....$$$$.,.$$$$$..,$.$.+.$.+$+,..,$@***#$++,.$,.+$+$..$.,,$$+.$..$++$.$.++,,$,$...+$$$$.,$$$$$...$$.$....$..,$,$.$,.,$+$,$$$$...,+.$..$$......$$+,$,$$$+$.$+$$$]^-!.+$$$$.,..$.,.,$$$$$$", ".+$$+,..,+$+,....$$$,+.+.+,$...$$$$,+%:3<)=,$$.$+.,.,++.+$$.,.$,+$,..+$,+..$$.$.++$..,..$$..,,.$$$..$.$+$+.$$$.$.+,$+$,..$,...$+$$.+.+$..$+$$+$...$.$,.,.,$...,.$$!.+.,.,.$$++,+$+$.,.,.,.", "$.,..$+$$...$$+++.,.$.$.$.$.$$$...$$~:_:(/;@.,+..$$$$..+...+$$.$.,$$$..$.$$..+.$...$$$$+,.$$$$$.,.$+.+,...$.,.+.+.$...$$+.$+$$....$.$..+$..,,..$$$.+.$+$$$.+$+$$,.,..$$$$$....$....$$$$$$$", "$$+$..+$++$.,...+$$.$,$.$.+.,.$++,+$)_')~~;#$.$$....$$.$$$...+.$$...$+.$..$$.$,$$+.,.,.$$,,..,+$++.+$$$+$,+$$.$.$.$$$...$..,,+$+$.$,$+.,+$=/[&')#+$+.....+.,..,$$$+$..,.,+$$$.$$$$,.,.,.,."}; mtink-1.0.16/xpm/bronze.xpm0000644000076400001540000020046210376041214013704 0ustar jjfuse/* XPM */ static char * bronze_xpm[] = { "254 254 17 1", " c None", ". c #79715C", "+ c #AFA481", "@ c #948C6D", "# c #C7BB91", "$ c #A19777", "% c #BBB089", "& c #888064", "* c #D4C79A", "= c #9B9172", "- c #82795E", "; c #B7A985", "> c #CFC096", ", c #A89D7B", "' c #C3B58D", ") c #8F8568", "! c #DBCEA4", ",,,$$$$,=$$,$++;++%+;+++++%%;++$,++++++++++;;;,%%%;%';+;;%%%;+,;''%%'#+;',;+%''+;;;%'#>>%';%''##''#%>>>#>#*''%>'#>>+'%'#>>>***!!****'>>#%''>>%'>'%%'*##>>#%;#'###'';#%%;#'%%%%;>''%;+#';;''%%'%;+%'%%%++#%;%%%%++;;;;;+++,+++++=+++,;+++++;%,+++++,,$$@$=$$+,,", ",,$$,,,$,$,,,,,+%+,,;;%;++%,,,;$++;;;+;++;%++$+,+;;+++,+%%';$;,+%';#,;%;$,+;#'%%%%'''%'';+;+####>'#;+%#'#>>%%*%#'>''%#>>>*****'#'**#>>>>#'''##%'##;>#>###*%;##>'#''+';,''#''+%%;%'%%+,$;;;';;;+,+,,>%%#,$%%;;+',++%;;;+;;;;;++,+++,,,%;;+;+,+$%,+,,,,=,$,,$$+,", ";,,,=$,,+,,,+)$=$$+,+,+,,=$$,+$=;++,+;++++;+%,+++;%%$$++#%%+$$++;++,+%++,+;'%%'#'%%#'%;%;%%%>'###';;%'#>#'%%%+#%%'##>'>#>>*!!###''*!>>>'>'>%#>%'#%%%##>#'%%;%#>###;;%;+%'''#%%%'%';++,,+,+++%;++,$;+%+++;$=;;;++,,,,%+++$,;+++$$;$+$$++%%%,;$$=$,;+,,,++,$$,,;", "+++&,,,+,,,+$+$=,++,,,$,=+,++,$,$+++$$,+;;++,+;;%%;+,++%;%%++++;%+;%+%%+++;%%>#%#''#''#%%%+,#>>>;,;'''+##;%;%+%'#>>*##*>**#'#>>>>##>#*>>>>'>>##%;;%+;%'>#'%%%;#>#>;'%;%%##>''''#>%%%;;;+%++;;%;+++,;;%%++$++%;;%;$+;;++;++$=+;,,=+$,,=$$$,,$+$$,,$+,++,,,$$,;,", "$+)=@;,++;,,,,++,,=$$,,,,$,,,+,,+$,+$$+++++,;+%%%++;+;;%;',$;++;%+;%;+;%%;%%'+%'##>##+;%';,;'>>%+%%%#';%%%%%%'###>>>#>#**>>>>>*>>>>>>#>*%>##>>'#'%;;%%%;;+#;%%%;#*;+,;';+>>;###''#'%%;+;+%%%%%%++;;$=%%%;%++;'';;+,;++,,,,+,$$,$++$,+,,$+$,$=,+++,,++,;$++$@=$", "@=$$,=,+,+,,++,$,,$,++++$,$$,++$$,,,++++;+,++%;%++%;%%%%+$,,+;+;%+%%#%+++%''%%#+++;%,%%;%;%%%##%;'#%%%%%%%%'#'%>>>##>#'#>******'*#*****##%>>#*>###>%;'''#%%#';'##'%%;;++%;+%+;+#%;%#%#+++;%%%';;++,,$$%%%%%%;++%;%+++;%;,+,+,+,+%,$$,$++,+,,,+,+,+,,+,,,,,$$@@", "@$$$$+$=,++,++,+,+$,,,,+$=,,,,+,%,+;;,;;%+++,',,+;%%%+,$,++,+%;%%%+%;+;++>;%%%%++%%;%%;+;;%''###%+%%''%%%%''%%'#!>%'%''#>**!>>''%%*!*!#''%#%>#*''%##'%%%#'''#%##'#'%%%%%#%++;%;+%%;%+$+;,;%+%%%%%%+,+,$+'%+%;;+,+,+;+,;+;%++,,++++,$,=++,,$$;,,+,++,+,+,,$$@==", "==$$,,=$,;+;;$+++$=$$;+$$,+,++$%$++;+,;+$$,+,++,;;;++%+,,+;++%%%%+++,,,;;;%%%'%;;,+'+;#++;%####''%#####%'###'#####'+%;##>,#%>+%'++###>#''%;%#####'#'#'#%'#%;;;#'%###%;++;+'#;+%'%%%%%;;+$+%;+';%+;;+;++,+%++%+++,,+,+'$++++;+%,$+,,+,+$$++,$$$++,+;+$%,$,,$,,$", "$,+,,$$=$$$,$$,$$=,,+,,$,+$,,$$$+%,+;+%++=+,,++++++;+%,%+;%%%%%%;,++,+;;;%''%';+,,;++,,+%%'#%,;'#;'#'#'%>%'#>%>#>>%;''#>>;+;+%%'%,$%'>>##%%'>>>#%>>#'%%'###'%%##;+##%%;,+;%+,++,#'''%%%;+,+,;,%%%;+;;;;,%+,,+;++++,,=,+++++;,$$=+,+$,,,,,,$$$$$,$$,==$=$$,,,,$", "$$,+$$$,==$=$,,+,,$,$+,+@,=$,$$=$,,%+$,,,$=+;,++;++%;,,;%%%%;'#;+;;%%;%%'%'##+,,+;;+,,;%%#%+%;'%;'#'##'+'##>'##>>'%>'##*'%%++%'#'%,%;%*>#>''%>>#>'>###%;>#''''%+;+%''#;;+,++%+++,,%#%%%;;;;%;+%;%'%%%%%,,+;%,;+,+,;%=$,$,%%$$+,$=$$$,,,+,,+,$$$$,$$$==$$,=,+,,", ";,$$,,,=$$$$$,,,=,,,+;,$$=,$$$$,+,+,$$,$,+$,;,,+;+,;;++;%''%,%;;;;%%#+;;%%'+%++;;%%%+,%%%%'%%%%;+%%>>%,,%*>%%+*>##%##*>'%%%;###>#%#;%;'>*##%##;>>%%'>>%$+;#>%'%;%%%%%'%%;++;%%+;+;,$%'%%%;%%%;%;%%''%%'+;%,+;%%,,;+,+,$,$$$,,$,,$$$$,=$=$,,,,+$,,,$=$,$$,,,$,,", "$,,+,,$$$$,,,,,+,+++,,,,$,$,,,+,,+==$,,++$,+,+;;,;+;;%,,+++,%+%%'%%+;+%;',$++%%%';+,+;%#'%';##';%%%'++%%%'###%%#'##'>>>'%%%#'>>>**'%;%;%>>>##'''%##'''%%+;,''%%#%'##''''%+,++%';%%+,+';;,%;'%%;%%;;;++++%;;;++;+++,,,,++,,=$=+,,+,,,,,,,$,;++$=,+,,,,$$==,$+,,", ",$,$;$$$,,,+,,$,,=,,,+,,,,+++,+++%,,,,+,+,+,+++++,;;++,$,+;%%%#%+;;;+++,,;++;%%;%+;++%%####%%'#;%''#+;%%#'>#>'>##>>'>*>''%%##%!!>>>'%%'%>*'*>##>#>>##''%%%+#'''##%#'%#'#%%;++%%#%;%+++,%,+,+%#%%%%;+,,,+,,+;%=;++,+,,+$,+,,,$+++,+,+,,,,,,,$%,$,+,,,+,,$$$+$,,", "+=+@$$$+,,@$=$,$$;,,,;,,,++,,+++,+,,++,,,+,;;;+++,%$$$$,,+;;$#+'%%%;+;++%+%;%%%%+;;%%%%#%%+###'###%,#''''#>>#>;##>'%>>%%%'>#>>;#'>#>#'%;#%'%#>###>#>#>#''%%+#'#%+###>;+;%%%%;;++%%;+;%;;;;+;%%,,,$%%+,,$=$@=$%+++++;+,,,+++,$+;++,++++=,$,++,,$$$$%;@,$,,=@$++", "==)$@=,$+,@@@,,,,$=,,,,==;$+$$,++=,;+;%+,,+++,;;,$,,,$,+,,+++,+,=,,;+;%%%;;%%,+%%%%%';#%++;#%%%+;;;%%'##>>+;;'#*'%'#++;;#'>>>>%#>>>#>#%%%+'#%%';'%*;+%>#'#%%%;>%%%;;;;+'''%%%%;,+%;;;+;%%;;,;%$;,++%+$,+,+,$,$;%,,++;,;+++++,,+++,$=,$@=$,,=+,,,$=@)@,%,$@=$$=", "$@@)=$,$=)===$++=$=$+=$==,,,,+,=$,+%+,%$+++;++%+$+++,,,++;;++++',,$+%'%%';%%+++%''%#%''%%#%''''%%''%#>#%%%''%'%%%#;+;%''%#>>>>''%*>*>#%%;+;+#'%'%#'%%%%>>#%%%%%;'%'''+%%''#''%%%+,'%%#%%;%+,+$+%;++++;+,+++,+++++++;+++$+%%+=$=;,+,$,=$$@,,$$$@++===)@$===@@@@", ",$=$$$,,==$,$=@@=,$,$$,$$$++,,,$==$$==,+%;+,,,++,++;;;,,++;+++;%;+++'#,,;'#;%;;%;###;+;;%+'''#';;%%'#>%%'''%''###%%+%%'##+#*##>%>#>>+#'#'%;'%#'#'%###%%'''%'';#'%'%'%%;%+%%+'#%;%++;%'%+%#+;++++++++;+,,+;;+;;;+,,,,%%,,$==,,$,,,,,,+$$$$,,$$@==,,$=$=@,$$$=@@", "$$$==$$=$$=$$$,====,,,=,,,,+,++=,,,+,,,,,,,,,,,,%%;%;,;++';++++#%;;;;++,;%%%%%%%++,,,++%;%%'%+++%%#''+%''#%'%##>';%#''##>;'%##>>>#''%*>>'''%%##>#>''%#%'%>'#%%;+$%##;;;+;+,$,;%%%%%%;%%+,;;%%;+%,+,;+%++++;;;++,,,,++++,,,,,$,$;++,,+,,,=,,,$$=@=$,$$$$$$$=$$,", ",$,,,,,=,$$,,==$$,$,+=$+++,,++,,,,,,$++++;+++++=++%'$$+,++$,$,++;;%'++,%'%'#+%%%+,+,,%;;%%+;$,++%%''+;%#%#'#%>%%>'%%'##>%''##>>'>>#''##>##%%'%#%%%##'''%%;;#'#+;+,,+%%%;,+++,,%%%%+#%%;%++%%%'+++,,,$++,+$,%%+++++++;+++,,;+,,,,=+,+++,,$@$$,$,$$+$$$$$+,,$$$$", ",$$$$,@@@=,,=,$,,,,,,)+$,,,%,,@,,+++$$+;+$;;;%,,$@$$+,+++,,++++,=++;+;;;=++%%%%++;;%;+;+%';,++%'+>+;%%;%###%%'%#'+%'##>;#'#>>##%>>>##%#>###'';+%'%%%#>#+%%++;+%%%+;+;%%%+%;;%++''+%;+,+;;;;+;;=,%++,,++,++@=$=,,+%+;+=,;+,+,+,,$$,,,,,;,==,,$$=,$$,,$$$@$,,+$,", "$,,+,$@@$$=,,$,,,,,+,@@,,,+,=@=++,+,,,+,$,,$+$,$,=$$,++;;'+,+,,$,=%%;,+;+,;;%++;%%;%;;+#;#%+%%%#;+;%%%';*,';%#;,,;##>#''>>>>>#''##*>>#%%>###;;+%%'%+'+%#%#%%;%'%%;;%'%;';++;;%;%+%;;++%,,$;;;,$+,;,,+%;+;;$,$=$,$$+,,,,,+,,+++,==@$+++,+@=,,,,,,$$$,@@=@$$==$$", ",$$,$==)===,$,+,+,,=$,$++,@==$$=;;$+,,,,+$++;,+++,,$,%;+++,,+++'+$;+;,;%+;+;;;;'%%%'++;%%;+%%%'%%;'''''';+#';+%%%%%>>#'##>*'#'+;#%'#>*>'%'#>%%;;;%##,;%'#;'%%''#%'%++;%;;+#%%%%%;;%;;%+%++++$+=%,,,+,++,'%=$$;+,,+,,,,,,$++,,+;,$@@@,++$@,,,++,,,,,$==@===,$,,", "==,+@=@=$$$,,=,+,$=$++$,$$=$$$$,,++,,$,,+$$,%;,,++$,,+%%++++,++=+,++++,+%;;;%%+'#;'%++;%+,++##'%%%';%;#;#%%';+%''%'##>'#'+%##;;%;;;'%'>'%>##'#%%%%;%%%'##%%''%%#%##+,+;%;+;%%'';+%%;;%;+++++,+$$;,+++;;%+,$$+++++++,,$,,,,,,,$$$$$=$$,+=$$,$$,,,,+,$$$==@@@,$=", "=$$$@@,=$,,=$$+@,$,$$=$==$$$=$$$+;,,++,=$$$$$,,,$$$+,,+%;;%+++,+$=+$,++,+'%#'++;;%'++%%;;;+%%%'';;%%%%'##%'%+;%%'########$++%#%;'#;++>>##'##''%%;;+''+'#%%%%;##'%%;%;%;;%%%%%%+++;'%%+++,,,,+$,++;+,;;+++,,,,$$$,,$,@$$$+,,+,,,,$$$=$=$==,$,$==@$$,+$$$=$@@==$", "@$,====$$,$,$@$@)@$$$@@$$$,=+,,,,++,;,$$$,@,$,$,+,,++++;++;;;+;,+,,+++,;;++++,+;++,%%'%%%'%;%#';'%+##%'%#'%,+%%#'#;%;%>'++%%'#%'%'%%+,;#>'#%>##%%;;%%'%#'';++;';'%';;%%%%%%',+;++++++%%++++++,=;;;;;;+%+;+,+$++,,$=$$,$$=%+++,,+,$$$=$=$@=$$+$@,@,,$$$$,@$@=$$", ",$@=$==+$=,$@@)@=$,====$$,@=$$$,,+=$=$,,$,$$$,$,,+,,++'+%;%%;%+++,+++++;;,+;%;;;;;+++'''#%%%#;+%+,;%%%';';+;%%'##%,;'#%;+%%''#''###%%%%;%%;+%'##';%++#''#%'%%$;;+;%+%%#'';+,++%%%,;;+;+,+++++,$,%%;%;;+%;++,++$,$$,$,,$$,$$=@,,,,+,$,$$===$==@@@@=,$$$$=====,,", "==,=@$$$,$$$@@@====$,$$$,$,,++,,+$=$,,,+,++,++++$;+++;,%++;+$$,$,%+;;+%+%,+%%%'%%'%%%;%%'%''#,+;;+;%%#%>;;%;%'###;;;;%%%%''###%#####%%%';;';%#;#'%%;;;++''%%++++$$'##%%%%;%%;%%%%#%%+,'+;+++%%,$,=+++;++%+;++,,+++,+,++,+$,$$$+,++$=,,,$$$$@=$=@@@=$$$=$$$=$=@", "=))$$$=,,$,,==$$$$,@$,,,,+,,,++,$$,,,$++++;++++++%%,,,++;=$$,,+,++;;%;%+%%,++,##$+%%%%##%%,+++,++++##;;+%;+''###''%%%%%%%###>#'%>>>>#'%%%%;;%'#'##%',%;+%;##,+;+,++,,#'#'%%%%,;%$;+,+%+%%%;;+%,,+,,$$+++++,;%,++;,+;++,+,$+,=$$;+,,,,,,=,$=,,$$$$$$,$$,,$@=$@$", "))===@=$+,===+$$$,,=$==$=,,,++=,,,++,+%;$;+%%$;%,,+++++++,,,$++,,,''+;;;+++,+,,,,+#'%%%;;++;+;+++;+;%%%%,+;##'>';#'%%%'''>*>%'#%#%%>*#''%'''';+''>#%++%'%%;+%++++,;;+%;%%+%##,+,+,,++++;+;%'$,+++++,,$+,+++++,,%%+;+%%+;+,,+,,,++,$,$$+$$,=,,$$$$$=$=,;$=@=@@)", "@==@==$==@@,$=$,,,,==$,,+$,,,==+,+;,+;+,+,$+,$,=$+++++$=,;++,,$+++$';%';;;%++++;;;%%%#%%%++;,%%%%%%%%''+%%;%%%#%%''#>''##%'####>###''###'%'##'%'#%%%;;;##%%;%%%%+,;+%;%;#'%#;+;+;++%;;+%'%;+++,+$++++,,$,;,+++$,,,,$,+,,;++;;,,,$+,,,,$=$$$,$,$+,$$=@@@$$=@==@", "@===$$$=@==@@=++$$,$,@$=,,,+,$=$,,,+;+++%$+$,+$$$%+;%=,,+++,,+,+;+;++;;;;%;;;;;%;+%%%,'+'#++++'%%%%%#'%%%%+;#%>+###>%'##%#>>#>';%#'##%%###%'##;+#'%;'%%;+#'#%%%%'++;'#;+;%';++%;'%+;'%;%;++;;+;,,,,+,+++$,%++,==,,$+$+;++;,$$,,$,,,,,+,,====$,$@=@,===$,$$====", "===$$$$$$$=$=@,$,$$@=$$,$,,,,$$$$,,,+$++,$$$$$$$,$$+,,,$%+,;++++++;%%%;;;%%+;+%+;++$$+,+%'%%;%'%'>'%#''%%,%%#%%%;;%'+*%''##*%%%%#%%%##'%%;%%%>%%%#%%,,%''%%%##'#;%;%%%++++=,,+++++;+;%%+%%%+;++++++,,+,$,,$,$+$@$$$,,$,$,,+$,$$$$,,$,,,$$$$,$$$=@@$===$$==$,==", "=$$+==$,==$==$$=====,$,,$,,@$==@,,$=,$$=$++,,,+$,,$,+$$$$,,,,++,%+%$,+,,%+;+%+++,,,+,;%++;$%%;%'%''#%++,+;+;;%#%%#;++%'#'>'%++%;'++''###'+%;;%%%%%;#;+,,$#'#%'%%'%%;,;;+++++,,+;+'++;++,$$,';;;++++$$,$$=,,,,$+++,$+,,=$$$$,$,=@$$@@,@,$$$$=$+=,===@,@$,==)@$=", "$$=@$$@@,=,===$+,$=@=+,=$$@@=$$$$,$==$@$,$;+,,,,,,+,++$,,+,+%+%%,,=$,$+,%;$+,,++;+;+;%;%%%+#%%####;'+;,++%;%%%#'%%;;;%>#''';%%%%%+%%''>#;;%%%%;'%'%%%;%+%;;''%###%%+#%%;%;;;+,++;;,,+;,,+,$=$%;%;+++,,,++,,,,;+,,$+;=+,@@==,$,,$$,@)@$$$,,$=$=$$$=$$)$,=$$$@$$", "$====$$@=@==$@$$,==$@$$===@=@$$$,,,$===$$$=$++++,++$,,$+++++%%+$,$,,+++,+,+++%%$,+%%;%;;%+,##,;++##;;+;+'%'''+;%'+;;%;;%'#>;%%'%%%%+###;%%%%%;%'%##%%%%+%;;'#'+%+%#+++%%%%%%++++';+;++++++,,$$$+%;%+++,++,+++++++++,$$$$$==,,,$,===@=$$==@==$$,$$$==$@=$=====,", "==$==$=@@@$$==$,),@==$,$$$$$$$,,,++@@$,$,,,+;++%,,$,+,,+,+,+$,$++$$++++++++;++;;;++%'%%%,=+++++;+%%''%%%%'##;%>+%%;;'%#%##>%%'%##%%;##%'%%;;;;;+';;#'#%%%%%'%+,;+;+%,,,'%'%%;+;++%++++;;++++++$$$$$+++++$,,+$,,%,+,;+,,$,$,$,,,,$$$@$,$$,===$@@$===$@)@,$=$=$$", "$$,$$$)@==@==$$@==$=$$,,+$$,$,,,$$,$++,+,,++,++,,$+++++;+;+$+,,,;;;;;++;;+;%+%,,;;;#+++++,,;+++++,+;'%#''#;%%;%;+;%%%+;''##'#%++,##''#''+%%%;;;,%'%;;'''%%%,+;,,+++++++++;;'+;,$++;%+;;+%;+;%+,$,++$+++,++,$,,,$++,+$,,,,;,$$$,,,,,$=+,$,$$=+===$==$@@=&)$$$$$", "@))+)@@@=@=@==$$,===$$@$$=$$,,+$$$,$++++%@,,,;+,,,+,+%,,,,+,$$,$$$+%;%',%;%',++++;;;%$,+;%+$++,,+$,++%%#+;;%%%;,%%%%'+%'#+'#%;+%++%####%%%%%'%+;%%%%;%##'',,$++,++++%+++,%%+%;;+;++%;+++%;;;+,$,,,$,,,,,+%+,++,,,;+$=$;++,,$$$=+,,+,,====$=+@@$$$=,=====@&))&)", ")&&)@@==$=$$=$$$@=@$===,$$$,,,,@=@$$$,,+=$=$$=,,,,,=,$+,,,+,+++$,,++;,$=$$$,,$%;;;%$$++++;%$+;++;+++++;%%';+'''%+;%%##%%%+'#+;%%;;++;+#';''%%;%;'%+;;;%;++;++++++;+,;++++$=';;;;+$$,,==$$$+;;,,++++,,$+,,$$,,,,$$)$$$$=+,$$+@@=+,,=$@++=$==@$=@$$$==$$====@))&", ")))@=====+,$$$,=$,=,,$@==@,+@==,$$=;,@$$,=$=$$,,+,+;$$$%,,,++++%,,,,,$++$+++,,%',;++,+;;++;+;%%%%%%%%,%++;;;'#;;%%%'#''';%;%%%''';+;%%''%'''%%%;''%;;++%%%;%%%%%+%+%;++++,++;+%%+,+++++,$$,,,,,;++,%,,++$,$+,+++,$$$=$@$$@;+$$=$=@,+$====$$$$===$$$,=,====@@)@", ")@====@$$@@,==,,$=@$@======@@==,$@@=$$,$;$$$$$+;+$,$===++$,%+,++++,$,$+,+++++++;%,++++%',+++%'%;%;%;%%%;;%%%+%%;%'%%%#'#%%'%%%##';%'''#%'%%#%%%;%%%%%;;%'%%%%%%%%;;+++;;;;++,+%++,$++,++,,$$,+++++%%,++$==$,+$;;,$$$$+,,+$$@@=+===)@==$@=@$$==,,@,,@)@==,=@=@@", "@==@@$$@)@))@=$@=$====$$$=$@@=@@@@$)@$+++=$,$$$@+$,,$,$,+++++%%%%%%,+,$+;;;+%+++%+%+%;;;;++;;%%%%#%%;%#;%%%;%+;%%%'%';%%';%+%'###%++%##%%##'%%%;;;%;%%%%;++%#'%'%%;;+++%%%;%+;+++%++;%%%$+,,;%%%%%,++++,$,$,+$$=$$,,,++,,==@@@=$==@=$$=$=$=$$=)===@)))@$$=@@==", "=@$$=)@)@))@@)@=@@=,=$,=@=$@$$===$$$$,$+;@$,,+,=$$++,,+$%;%;;+++;,+,++,+%+%%+;;%;%;%%'+%%%%%%;%+$,+,+,,,%%%%%+;%%%'+';%%,$,+,+##'%++,$;%%%+#'%%;;+'%%%%,;+,,+$;+%%%%%%%;%%%%;;'%;%;%;+++,+++++,+,+%;%++$+,,++$$$+,$,+=+,$,=,===$$$@=$=$$$$$=$$@=))@@@))@@=@=@=", "==@=@@@=)@=@)=@=$=@@$@=$@=$=$,$$,=$,$$$=$$+++;,$$$;;++,,$$@$$$,+%%%%%+,,,,$;+++,++,+$$+;;%%';;+,,,++,+;%#%##+;%%''%;%;+;%+,+;%%+;%+++,;;++;;%'%#%+%#'%%++,+,++$,++'%%%+;$,,+$++,++;$,,,$+%%%%%++$$$=@$$,+++;;$$=,;,,,=$$,$=$$$$$$$==,@@$======@@@)))@==@@@@=,=", "@$=@==@,=@)@@@=@@@==,$$,=@$$$$,,,,,+,$$;$=,,,,+$$$$;+++,$$$$$$$$,$+++++$++,%;++,$$,,++++,+++,,++%+;;;+++,%;%%%+##%%#%%%%'+%%%;;%;;%%;'';;%%%'%%,%%;%;,+++;+;+;++$,,,++++++,$,$+++++,,,,,++++%$$$$$,$$,+,++,$$$$;,,+,$=$+$,+,,,$+,+=$$@+$$$$===@)$@@))=====)@@=", "@$@@==@@=@=@==,===@,+@=@$$$,=$$++,$,,=+=$$;+$$$$$+$=$$,,$,,$,,,,,+,,+;++,+$,,$,+,++,++;;+,+,+++;+%;%+;;;%;%%%'#,#';%''%'%%'%;%%%%%;%'%##%%%%##$+''%%'+%%%;+;;;;++,,+,++++++++,,+,,,,++++++,+,,+,,,+$,,$+,=$,,+,==$$,$$$=$,,,+++==$,$=$$$@,$@========@=,$@$====", "@$,,@=@=@$===@$$$@=@$,$$,=$$$$,,,++,@@,,=,$@@@@@@$$@@=,+++,,++,,===$=,+,+++$$$,++;;;;;;%+,,,+%+%%%;+%%%+++#%;;,++%%++##'''##%'%#%%;#'#%'##+'%+;,;;+#%,+%%%+;%;%+;++,,,+%;;+;+++++$$++++$$==,==$$,,;,,+,++=@$$$@@@@@=,,$+@@@+++,$$=$$=$,$=$=====$$==$@$@=,===,@", "@@=@,@=@@@=,@@,,=$$====$+$,+===$===&))$$$$$=$$$=$,$$$$%;;;%+++,,,$$,++++%%+++,;%;+,,$;+,+,+,,+%;'++++;;+,,+$;+%;%+;;;%%''#+%'%%%%#%%#%#%+;%%+%;%;;+++,,%;%;++#%%;+,++++$%+,+;;;%;,+++%%++++,$$+,,+++%;;;%$$$,,$$$$$$$=,=$@)@==$,==$+,$$=+@$$==$===@=$@=,@===$@", ")=,===@)@=$@@=@$=$+$$===@@@@$$,,$$@==@$$$$$$$$,$$$+,$,+,++%%++++++,,,+,,+,+++++++++,,;++++++++++++;+;++++++++;%+%%+;;%%+++%'%''#%+%++%>;%%+;%+;++%;++%+++%+;+++++++++%+,,+$$+,+,++++;+++,,+++,,++++;%+,,++$++$,,$$$$$=$=,==@=$=+$$$@=$,@===+,=+)=$$@)=)=,===@@", "=@$=$$@@@@@@@@@&====$+==$$====@==$=@@=+$$,,,,,$+$,$+,+,,;;;+,$,,+,+++++;%+%%%%%+;;+++++;+,;%+;++++,;;+;;%+%+++%%%;;%%%%;+;++#+;%>'%;;++'%%%;%+,%++,++,%;%;+;+;+,+%+;,+++++++;;%+%%%'%;%+++++,+,,+,,;;;++,+,$,,+$+$,+$,$,===@@==@=====$@@=+$=$$=@@@=$@@@)@==@==", "@=,@)@@@@@$=))@@@@)@@=@,@,$$$,$$$$=$@$=$$$=,$,,,$,,,,$,,++$,$==,;+++++++$,+%;;;+++%++++++;,+;;+,;++%'+;+;+'+,,,,,+'%'#%%;%%%%'#''%%%;;'%#%%%;%+,,,;#;++;+'%%++,$++++%;%++++++,;+;;++++$++,++++$$$$,$+,,+$$,+,,,$+$,+$,=@=@$=$@,@,$$$$=+@@=))@@&)@)==@=@=))))@=", "@))&@@)$===@@@=@@@@==@@=$+,$$=,=$==@@@=$,,,,+===$==@$@$,$=$=,,$,,$$$,,,$,++++,,,+;%%;+;%%;%+;%%++%++;+%%+;%;+;;+;+;##%'++%%%%%'##'%%%%+%%;'#;;+;;;%'%;;%+;++;;+'%;;;,'%+;;+;;++,+++++,,$,,$$,$,$,,+==,=$$==@$=$===+,,,,=$@@=@==+$$$$,$$=)==@)=@=@=@==@=@=))@@@", "&@=@@@@@,$=,=====@==@@@=$=$$==@$$=$$@=@@,$@=,$$$$$$===@)@$,$$,,,,,,,,,,,,,$,+$+,,++++,+;+;'%++;++++%;+%%;;%%+%%;%%+@%%;%;%%#'#+,##%#%%;%;;%+,%;%;%%#%;%%;;;;++++++%';+;+++;++,+,+=,$,,,,,,,,,,,,$,$,=@@@@@$===,$$,=@),,=@==$,$==@=$$=$@=@@====@=@=$===,===&))=", "@@)))=@@@$==$==,====$==$)$=)=)===$=@===$@=$=,,+,$$$,$$$@=,;,,,++++++$,$+++$,+$+%+'%+++%+;%%';;%;%;;;;;;%%;%+'%%%%%,+;;%%'%'%';+;%#%%'%%%%;+,+%%%%%%;%%%;%;;;%;;%%;%;%;%;++++%;+;;,,$++++$$+++,++++,,$=$=$$$$,$,,,,,$$$=====$==@$@@@@=@====$$==$====$@=@==@@)@@", "&@)@@@==$$))=$=$$=,,$,,=))@@@=@@@$$==$=,$,,,++++;$,,+,,$$+;;%;%;+%,++++%%%,+;++++%%''%%%%;++#%%;%';%#$%%''+,%%%'#,++;+%'%''''%%%#'%#%#'%%;%+++''%'+,+'%%$,'+'%;'%;+%+;+'%'%'%%+;++,,%;%%+++,++;;;;%%,$,$+,,+,,;++;,,$,==$=$=$=@===@@)@=$,==+$$,==,@)==$=$@@)@)", "@)@@)@)=&)@)&,))@@@==$+@@@=$@=@=@$$,,$$+$$$$$+$$%;+++,$$$;++,,$;;+++=$$$$$,$%%%'%,,,$$$$,;+%+%'+++,$,,,+$,,++,%+;%,+'%%,+#%'%;%';+#%%++'%%;+%;;%;,,,,,,+$,,++;++%;%+;',,,$,,$%%%%%$,,,,$$@+++;;$,,,,%,$$$,++++%$$$$$$$,,$,,$+=@$@@@==@@=+$$=)&))@)-@&))&=)@)=)", "@)@@@@@&)))))&)@)@==$@@=$==$@===$=@@,$$+$,$,$+$$$$$$,$$$$,,$,$$+$$$$$$,,,,,,,$=$@$=$$$;$+,+,;+;+%++%++,+,+++$=%++;;+%'++;;#+;;++%%+++++,'%%;;;;++$,++++%++,++;++'++;+,$,$,$$====$$,,,,,,$,$$+$$,$,$$=$$,$$$$$$$$,$,,$,$$$$=@=@$@@====$==@====)))@@)=))&-==@)@@", "@=@@=@))))@@@)@))@=,,$==$$$$$=$==@=@++@@,$=$=,,$$$$$,$$$$=+$$$+++,,,$++,,+,+,,,,,,$+,+++$;+,,+;;;,++++++%+++++#%,%%%#;%%;%%%%;+;;;;%%%;%%%;%%++%++;,++%;;+;++,;%;$$+;;,+,,,,,$+,,,,+,+++,$,,+,,+,$$$=$==$$$$$$$$$$=$===@,+@====,===$====@=$,@@@)))=@)))))===@@", "@@$$)@@)@@==@&@)@@=,,,@===$,$=$=$$@=@==@@@=@==,$,$$,+$,$$$$$$$$,$$,+,,+,,,,%+++++++,+++++;+;;+++$$++;%;;%+++;,,++%;%;%%++%%#%%+;++,%%%%'%;%%%++,$;++++%+;%;+;$,,+++++;+,+++++,+;+++,,,+,++,++$$$=+$$$,$,$,,$$,$$=@=@====@@===$$$=$$,$====,,@@))))==@=@@=))&=$@", "&)=)@@))==@@@@)=)@@&))@@$@@$$==$$==)=@=$$====$+++;++;;;;+,,,$$$,++;;;%++%%%%;%%%+,,,$+%%;;+,,$+,++,++';%'%;+,,+;+;%;%%%+;;,,+;%;%+,+%%;+;%%%;;;=%,,+;+%+;;;$++++,,++++%%,+$$,+%%%%;%%%;+;;;;;++$$$$,$;;;+;;++;++====$=$=$=@@==+==$$=)$=)=&))==@@@@&===@))@@@))", "@&)=@@@@@$)&)@@=@$)))@)@)@@@@===$@==@=$$,$,$$==$=$$+,,$,+;++,,$$,$$$=,,$$$,,,,%;%+++;+%%%+%$++++;,++;;;;+++++++,%%#%+,+;++$,+++'$;+,,+%;$+%#'%'$,++;++%;%;++,++++++'%+%%+++++%%;%+$$+,,$,$$$$$$$,+,,+$,,,$,$$$$$=,,,$=$$@===@@@$=@=@)@=)))))===@@@)&&===)@)@)@", "))@)@$@=)&&))@===)))@@@@==@,=@@===@=$$,+,++++$=$=$$+;;;++;;+;;,,,,,$,$,,,$,,$,,+,++,$+=$=$,$%;%%+++++;;+%+;+%+,+;;++$,+++++%+++,;+++;+++,,++;++++%;+%$;;%+;+++%%;+$+$$$$$+,,,++++$$,,,,,$,,$,,,,;+;;;%++%;+$$$==$++,++$+=$=====@=@===@@@@@@)@@===)=)&)===@@)@@", ")=@)@@)@)@)@$=@===@@=@=@==@=@=@==$===$@====$$$$@@@=,==@@@$=@$=+,,+,,,+,,$$$$$,,$$,$,,,=$,$$+,++;+;+%++$$+++;;;+;;;+$,++;;%%+%+,$,+;+%%;+;,$=;;;+%;;++++$=++%+;;%;++,,$$=+,,,$$,$,$$$$$,,,,,+++,,+,$@@=@@@@$@=@=@$$,=,@@$=====$===@@==)=@@=$@=,=@=@@)))@),@=@=)", "@@$$)@@@@)@@,$@)@=$@,===$=$$==$=,$$$,=,,=@@@=$$$==$$$=$=$$$=$$$,;,,,+,++,$$,$$,$++,+++,,+++;+;;%%%;+;%,,%+;;;%';%+;,,+%%'%%;+,+++,+;%%%%%+,;++;;%%;%%$+,';;+;+%%;++++,$,+++,,,,,,$$,,,,++++++,+$,,$=$==@$===$==$$=$=@===,+$$$=,=$==$=,=$=====@@)$$=@@@@=)=)@=@", "@)@@@$@@=@@@@@@@@=,,,,@$$@@@,$@@,+$$@=$,=@==@$+$$=@,==$$$$,$$$====$,,,,,$,$,,$$,$+,,+,++;+++;;,++%%$+$$,,%'%%;'%,$++;;'%%+%+++;;++,;'+#'%;++,,;';;+''+,$$,$%%;+++;+++;++;+,+,,$+$,,$$+,,,,,+@=@$$$$$$$$,=$===$=$$@@=====$$@+,,@=)++@=),,$$=,,=)))@@@=)@$$)@@@$", "))@=@)=@=@$@@@@@@=)=@=$=&@@@==@@==@==$=+,$==$$,,$,$+$$==$$,,,,,$$$$%;;%;,,+,,+,,,,,+$,%%%+;%+$++;+;+,+,++;%;%%%#++;;;%%%,;++;++;+;++%'%%;;%;;;+'%%%%%,+++,,$+;+;,,%%+%%%;$,+,,++,++,,,+;;;;%$$$$,$,$==$==$$$$$,,,$$$$$+$=====)$=@@=)@$@===@=@=@@)=)@=$@@==@)@)", "=@@=@@))@$@)@@)@@=)@@@==@$========$=$$,+,,$$$;++++++;++,,,,;+;++$,$;;;;;%;%%%++%%%;%++%++,+,,++,,;+;+,++;%%%,+%;;%;%%%%+%%+++;;;;+;++,;';%%+;%;%%+;%;%+++,+$'+,+,,=,+,+++++%%%%%,+%%;;;%;;;%$$,;;;;;+$,,+++;++++,$$=$$$+$====@=,=====$@=@=@=)=@@@@=,)@)=&$@@==", ")$)=)&)@)@)=@=@))&&=@$$@$$=$,==@=@$+))=)+,++++;$$,$$$$=$$$,$,$$$$$$;$+,,+,+;;;%;++,,++,,$$,$$==$,=$$++%++=++;+'++%%%'%%;;,++#%%%%%+;+;%%;%'%%+++;%+++,+;++,=$+$$==,,,$,$,,+,$+%;;;+++,++,$+;$$$$$,$$$$=$$$$$$,,,+,+++,@@@@=+===)==+==$@=,=@&))@)@=@@)=)&))))&&", "@&&&))@@@)))=@@@=))@@@@@==$==$$@$$=)@@=@$$@)@@)@$$$,$$$$$$,,$,$,$,$@@$$$+,,+,,,,,,$$$$$$$$,+$,,$$$$,+++%;;$=$+$=$$+;%;;%+,+%++'%##%++$'%+;,+#$$$$$$=@;;;%;$+=$$,$,+++$$$$,$$$$$++,,++++$$=@$$$$=+,,$,$$=,,$$$$,@@@@)=@)===)$@=$,======@=)@)@)=)@@@)@&)@))))@&)", "&))@)@&@@@&&$,@@))@@@@====,,@=$=)@@@@@@@@)@@@=@@==$$$=$$$$$@@$=======+$,,,$;+,++$+,,,,,$,+++%++,,$,,,%+$+++,++++++$++%'$,;+%'%%'%'%+%,,=%%++;,+$;+,++$,='%,,,,,+,$;+,,,,$++,,,+++,+$,,+,$$===$$$$==@$=,$+==,$$=@@@@==@@$@@@=@@@,==$,=====@=@)@@&=,)&&@)@=)))))", "&)))))))@=)))@@$=@@@=@@,$@,,@===@=@$==@=@@==@==@@=@,$$$=@@=@=,,$,$,==$$@@)@$=,$,,+$+,,,,+,$$;;+$++++++,=$;+++;+;+,+%,,,,,,+%'#%'##%$+++$$+;+,,+,;;;++,$$,++++++;+;+$$,,+,;,$+$,,$,$@)@@@$==$$,$,+,$@@@@=$$=@@@@@==@=$@@@=@===)====$,))+=@=@==@=)))@))@@))))))@", ")=)&))))&)@)@@@=@=$$==$@)&)$=====$=@@=@=====$$$===@==@====@@=$;;+++,$,$====$$$$,,++,+;++++,=;+;;;+++;;$,,+;%%++$;+;++++$+,++;%%;;;;+,+,++,+%;;;,+'%;%,,,++;++;;+%;@$,++++;++,,;+$$=@@=$=,$,,++++,$=@@$$$=@=)@==$==$$,=@@=$===$=====))@)=@,@,===@=@))&&=)))&&@)", "&))@)&)))&)@@@=,@@@)@)@))@@===,$$,@$$@@==$++,++,=@@=$=,$$===$$$+++,,,;%$$,=,$++%;;%;;%%%%%$,$,,+%;;%+++++++;+++++,++++;$,++;;+,;,%+++,,+;+++,,,++++;++++,++%+%;%$,$+$;%%%%;%%;;%++$$$$$,+,,,,,,$,,$==$$+,$$@===+,++,+===)$$@$,$,,=,)=@)))@)$==$@@=)@@))@@)))=)", ")&$))@)@@)@@@)&&&@@@@@@@@=@=@=@&$@)$)$@,$=,,$==$$=$=@$@=,$$$$$++++;;++,,,$,$=$==$=@$==,=,,++,,+++%;;%$++++'$+$$++++;;+,%++++%+,,+%;+;++,,+;;+++,$+,+%;+;$$'+;;+;+,+,+,$@=$==@$==$=$,,,,,,;;;;;;+,=,$=$=,@@===$$=$@++,=,==@@)&@&==@@=@@@@@)@@)&&&)=@)))))))))&&", "))))@@&@&&)&&))&)))@)@=@@)@&@@)&)))@&)@@@@&@$$=$@=$$=$=,$+$$=$@$,=$$$++,,,,,$$$$,$$@=@$,,+++%++;=@,$$++;;%$,%+++%;;%$,++;+%%;,+++%%%;+'++$+%++%+++,$$%;;++$$==%$++;+++,$===$$$$$,$$,+,,,+$$=$$=@$$$$$$,+====$,@$$=@=)&@)@@=))))@)&&)))=)=@=))&&&)))@))@@@)@&@)", "@@)@=))&)@@)@@)@&&@=$@@==&&)&--@@@=@==@=)@@@=@@))$===@@$@+$$,$@$=@=$$$$$$@$,$$$$=$$$$$$,++++%;+,$=+,,+++++,++;+,%;+$,;+,;%%%;+++,+%%%'$,++$,%%++%%+,+++$;++,$$+%,+++$%;$,$$$$=$$$$$$,=$$==$$=@=@$$$$,=@,@===$,@)@==@=@@@=@@@)))@&)&&&$==@@@@))))@)))@))-=$@))@", ")@==@&)@@@@@)&)@@))@$,&@))@))@)@@=$=@===@=))@=@@@)@=@=@$=====$@=@@@@@$==@==,$$$$,$$=$$,,++;%=$,+$@+,++,$+;++$$++;;;+++;++%%;;%+;%+,,%%;;++++;++++$$+++,++++++,+,$,+%@%+,$$$$$$,$,$$=$$@@=@@=@@@@=,=====,==@@=)@)@@@@)=@======@@=@@)@)))@=,@@@@@)@@==))@&)&)@=)", ")))))@&)))@@@)@@@@=&&&&--)@@@@)$==$==,===@=@)))&&)@====+$=$==,=$===$=,$=@=$+,+,+,,$+,$,,,$==$@$$@@++;++,++,+,,%;%%+;+%;;++$$++,++;,,,+;%+%+++';;,,,+,+;,++,++$=$==$=$,,,$,,++,++++,$=,@==$@===$$$+===$$+$==)@)@)))@)=@@),$=$$===@@=)@@@-&--$@=@)@))@)@))))))=)", "@@$@))@)@@@-)@@=))@)&)&@)@)===@@)$@@@))$==$==@@@@@===$=$=$$==;$+$$$,$$+$$,,,,,,,,,,=+,+%$$$$$$=$@$++;'++%;+;++++$;+%+'%=$=+,$,,$,+$,$,$+,;;%++$++++++++,;%++=$$$$$@$$$,;,,==,,,,+,,$,+$,$$$,$$,$,+$=$=$$=$$==@=@&@,=$$=@@@@@@=)$)==@)=@))))))=@)@=&=@&)))@@@))", "&@))=@)@@@&@)$)@==&&)))&@))===@=@$@))@@)$====)=@@==++++@$==$$,$$,$$=$$,$$;+;+;%,++,$,,,,+$+$,,$=$$$,++++++++,,,$+%;;'$=$,+,$,+++,,,+,$$@$+%;;,,+,$++,+;;++,,,$$$$$+,,,,$,,$$+,,;;;+;;;,$$$$$$$,$+,$$$$,$+,,$$=@@@=@===@=)@)@@=@@@@==)&))))@))=)@@))&)@==@)&)@@", ")@&-&&)=@))))@@@)&)@@@)))&)@)@))$@@@=@=,=====,,==$===@$=$$=$$=$,$,,$$,+,$,$$$$$==,$,$,,,,$,+$,,,,,+++++++;+++++%+$+$++,$;,,++++;;+++,;+$$+$$'+,++++%;;+++++,,,,$$$++,,$++,,,$$$$$$$$$$+,$,,$,$$,,=$==$$,$===$$==@,===$==@=@=)@@)@))&)@&-)@@)=))@)))@)&@&)$&&&&", "&-)&&))))@@$@@)@@)=@@@@)))))@)@@@@======$,$@=@,==$$$=$$@@@=@==$=$==$@@+$,$,$$$$$,$,$,++++$,$+$+,+++++%+$+,%%++,,++,$,,+,++++;%;%;%,+++$$,,+,$,,+++%%%,$=%%++,+,+$,$,$++,+,$,$,$+,,$$$,+$@@==$=$=$$===@$$$$$=$$==@=$@,+===)$=)@@@@)&))))=@@@@)))))=@@)@)))-&&&@", "&&&&&)))=))@))))@)@,))=@)@@@@=@@=@$=====$)@@==$=====)))@@)@)&)===$$$$$+$$,$$,$=$+,,+,;@@$,,,+,,,,++,$+$$$+,$,+++++$,+,+++;+++'%'%+++;%;+,$+,++++;+$,+,$,$$$+++,+$+$$$,$=+,,,$,+,@$$,,+$,$=,$,$=@@)&@)@@=))=@@,====,@@@====$$)=)===@@@))@))@$=)@)&==))@@@@&)&&)", "&-&&))@-)&)&@)&&@&&@))=)@@@@)=@$=)===$$)=@==,,,+,$=$=@@$@@@=@@=@@$@$==,+++++;+=+;,++@==$$@=$,$+++%,+$$,$$$,+$%+;%,,$$$++$+,++;+%%+++,++++$=+$+%+;$,,$=$+,$$@%++;,$,$$$$$=$,;+,+%=+++%+++===$@$@=@=@@@==$@@$=$,++,,==@=@@+==$=),==$)@)=@=@)@))&))@=))&&-@)&&&-&", "@-&&&&&&&))@)&&-&))@@@)@@$@=@@@@)@===$@@&=@=,=$,$,,,,$@$=$$==$$$=,$$$$$$,$,,+$$$$$$,$$$,$,,,+,,$,$$,+$+$,+$$,,$,+,+$,++;+,++++,=%++++,++++,$++$$$$$$,,$+$,+,$,$$+++,+,$$$,$$$$$$,,$$,$,$$,$,$$$=$$===@$==$,,+,$,$$=@==)),$===@)=)@@@$=@=)@@@&&&&--)))@&-&)&))&", "&&&)))&&)@)))--&&&)@@@=)$@=$&)@@@@,@&-)=)@@@@@)@))==,==$=,$===$$$,$$,$$,$=++%+,,,$,,,$$,,,;,,%,++$$,,+,,+$,+$$,$,+;,++;++,%+;;+,;%++,%;++++;++,++,+$,,+,,+=$$$+,,++,$$+$$,$$,,+,+;++;@,$$,,$,$$$==$==$$=$=$==@@)&)==@@)&&&)==)@=@&=$@))@@)))))&&&)))&&@)@)&&&@", "&))&)@&)@&))@&&&))))@)@))))&)&&))&&)&)))@=@@$&@@)&$=,@$$=,$$$$$$$)$=@@@)@=$+,,+,,,$$$,$+,+,$+,,+,=$=$,+++%,$,++++;+,+;+++;;;;;;;;%;+;+;;;+,+;;++,,$$++++,+=$$++,+,$%;+,,$$$+$$,,$,,$$$@@@@@@$)$$$$,$$$$==@=$,)=)@&=@@==))&@)&&&)&-))@&)=))@@@&)&&&@))@)&)@)&)-", "&&==)&))&==&&&))))@@))@))))@@&@)@@))@)@@,=@)@@)@))@@=@=@$$$$$@@@=@$=======$@=$+;+%=$$,,+$,$$;+=$$$,,$;;,++;,$@$%%+;+;;%++;'%;%$,+;;%%+;,;%++$++%+$$%+++$%%$$,,=$,,,,,,++,$$$,+++$,===$=@==$$$=@@=$=$$==$@@=@=@@@&))@),,&)@)@))@)))))&=)=)&@)@)&)&&&)@@))))&@@&", "&-@&)@)&-&))))@@@)@))@@==@))@&))@))&@@@@=@@@@@@@@@@@@=@=))@@@@=@==@==$$$$$$=$$$=)@$$$=$$,,$$,$$,,,;+,,%%$,+$$=$,+++%%+++$,%%%,$+$,;%%++++,+%+++$$=$$+,;;,,,,+$,$,$+$++$$$$$=)@$$,$$$$$$===$$@@$=@$@@@@@=@@@))@@@@@)=@==@@=&)))))@@@))=,,@&))@@)=)))&@--)))&&&)", "&)&@&@&&&&=))@)&)@@)@@@@$@@@@@@)))@@@@)@@@$=@@===)@=$@@@==@@@=,$$==$$@=@$$$@$@$@=@,$$+$===$,;+,+,$+$++$=+$$,$+$+%+;++++;$++,,,++++,$+,%+,++%;++,,,$,@$$,$+$$$,,+,$$$$==$,,$$@@==@$=,$,=@=$$+==$=$,=$=@=@=@@@=====@=$=@@))=@)@)@@@@)@=@@)=@)@@@)&)@))&))&)))=)&", "&&&=)-&&@&&)-&@)@&)&)&@@@)@@@@=@@=))@=@)$&@$=$,@====@=$======+,$++=,,=$==@=$=$=@==$,=,+$$,$,$+$$,,$$=$$==$$$++,+$,,,++;++;,,;++,++,,;+;+;+;,,%+++,,,$$$$$$+$+,$$,$$$,,$$+,,+$@=$$$==@===$$$+$+$,,,=@=$)==$==$=@=,==))@))@=))==)@)@@)===@))&@&)@@@&=$&&))&.&&)&", "-&&&--&&&&))&&=)))@)@@)@$)@@@=@@)@)&&-&)@&@&)@==,=,=$,=@@@@)=@$@$+$$@$==$=$$$+$=$@$=$=$,$$$$@@+,%$=$$$$$,,,+,+++$,+$',+,+$,+,+;++++++,+++,,,$$$+++,+$,,$$$===;+++=$$$$$$$@$=@@$$,,$$=$===@$$$+@@=@@)@@@=$,==@,@==@)=)&@&&-)@))=@=$)=)@)=)=))))&)))-&)@&-&&&&)-", "&-&&&-&&&=)&&@))))&&)&&&&&&&@&))=@)@@&)))))=@===@)@$==@@))@)@@@==$===$$=$$==$,$$$=$=$=$,+,,,%$==$$=,,$+,,,++,++,$$,$+,+++$,+;++%++;$,+++,,,$,,$$++++++,,,$$,=,,$==;,,,+,$$$$$$,=,@$$$==$==$$=$@=@@)@@)@@====@=$==@@))&)))@&)))=)@=)&-&))&)))))&)&@&&&&&&&-&-&&", "-&--&--&&&))&@)@@)@))@)&&&&&&=@&$=&&@@@@@))==@@@=@@$=====@@)@$===$$=,$$$$,+=$=$,+,$,$+$,++==$$$$,,$++,+,+++%+,,,,,+,+++;+$,,%;,+%%$,,,++++++,+$,,;%;+,+++;++$$$==$$$$;;,$,$,$$,,@,==,,$$,====+=====@@@===$,=@=@@=)=@@@@=)@@)@=)&==-&)))&@))@)@@)@))@&&&&--&-&-", "&&&&&&&&&&)@&)@@)&)==&))&@)&&&)))@))=@@@@=@)@@@@=$)=,=)@=======$$=$=+++$$+@=====++$$$,,$$=,,$$==$,$++$%%$,,+,+++++++;%%+++,,++++++,,++++++++++$+,,+,,,+;$$+$,,$@$$,++$=+,$$$,+@===@=,+@;++$$@==$==,=@=@=),,)=@=@===)@@)=@@=))&)&)&)&)))&-))=&-&&@@)&&&&&&&&&-&", "&&-)&&&&&)))&&&@))&&&&@&)))@))))@=@=$@=$$@@==@$,@))&)@@@$==$,=,,==$@=@==$$$$=$$$@)$,+$=$,$,,$$,$$$,$,$,$,,++,+,,++++++++$,+++++%;+++,+%;+++;++$+++;+++$+,$+,$$$$=$,$$,===+,,,@$$$$===$=@==$+==$,$$======)@&@@)=$@=)$@$=$)=@=@@)@)))))@)@)&&@@)&&@&&)&&&&@&&&&@", "&&&)@&&))&&&&-&&)=@&&&@@@=@==)@@))@@==@@@@@$=@$=@=@@&)),=$,$=@,+@@@)$=$$@$=,,=$$=@@)@@@$=$=$$$+$,+,,,,,,+,+,$@,+=$$++%,$$+,++%++;;+%$=,$;+;,=+$==,++,,+,$,$,,+$+$$=$=$$$@@@@@@$$$$$====$=@)@@)=,=@=$,$=@)))@=@@=@@,==$@=@$===@@)@)=@$@)=&&&&)@&)&&)&&))&&-))@&", "&&$-)&)-&@&)&)&)&&))))&))&@&)@$=@=$@@$@=$@@)@$@@@=@@@@@@@@@@@)@&@)@@@@@@@)@)$,+$=@@@===@$@$$,$,,++,$$+,,++$+$==$$$,+++$$$++%+++$;++$,+$$$=,$,$==$@=%$,+,++$=;+,+$=,,@=)@==@@)@@+,,,)@@=@)@=@@))@@@@@))=@=)))===$@)@@))=@$=)==)@$=@=&))))))))&&)&)&&&&&-@&&-&))", ")--&--&-&&)&&))))&&@@)))@&)&&&&&&@))&&&&@&@)@)=@))@)@@=@=@))@@)$@&@@@@===@=@====$$=@@))@@@@,$,,+,,;$,,,,,,==@$=$,,,,,=$,,;++;,=$$;+;+,,,$,,,,,,$=$@@$@,$,,+$+,+,,,$$@@@@@=@=$=$$$$@@@)@=@@==)))=))@=&)===)==))@@$@)@)&-&&&))@)&&))&)))@@)@&&)&)&)&)&@&&-&&-&.&", "&-&-&&&&))=)))&)@&&&&=@)@)))))&)))))&&&&@=@)==@@))@===@&)@@@@@)@@)$====$,=$==$@,$$$$=$$==$=;+=++,++$+,@@=$=$@,,,,,,,+$,+,,%%$$$,,=$+%++$=$,+++,,+$==)$=@@+;=+,$+;,+$=$=@==$$$@$$$,===+$$@$@@@@@@@=@@))&=@==@@=)====@@$)&&&&)&)&))&-&@@@))=&&)&))))@@)&&&&&&&&&", "-&&&)&&&&)&&-=@&&))&&$=))@)@&)))))@))&&))$=&=@@=@==@@=))@$@===@@@@@$$==@=@$=$=@++,$===$$=$$$$,+,)@=)=@=@=$$=$$%++,++;$,,+$,++,,++,$+$;++$$++,,++;$$@$===@@@=$=@%;=,$$$$$,$$,,,+,)=$$$=@====$=@@@====@)@)@=@=)$==)@))$$))))))@)))&)&&))&)@)&&)&&&)@&--&))&)-&&&", "&&)&&@)&&)&---&&@)&)@&@))--&&)@))@)@)&))@@=@))&)@$@$$@@@@)==,@@====@@====$$,=))$$$,$,$,,,,,,$==@@@@====$$$,$$$$=+++$$,++++,+,+;+++,,;+++,,$+++$=,$$,$$$=$===)@@@=$$,,$,=,,,,+@$$=@$,$======@==@@=,$=$=)@)=$==@@))&))@@))@@@@)&@)@))&-@@&)&&)&&&&&&&&-&@&)&)@&&", "&&&@&)-&&-&-&&&&&&&))=&)&&-)))@)@)))@@))&@@@)=@@@@@=$@@@@@@)$@$======+=@$=,+@)$=$,$$+$+$,+,$,$$$==$@=@$,$,,$=$$$$$$,+++,,+,$,;+;++,,+;++,+,,=%$$$$$+++,@@@=$=@===$,$,+,,$,=$$$,==)=+=$==$$=@====$@@$)==@=@=@@@))=))=@@)))@))@)@)))&)--&$&@)&&)-)&&-&--&&@)&-)@", "-&&))&&--&-)&&.-&@)&@&-&)&)))@&$)))@)@@@=)))@&@@@====@==)@)@@=$=$,@====,=@)=)&$=,$,$+$@=$$,+,$$$$$@@$$$$++,,$$,,$,,,+,$,$++,++,$'+,++$+$+$+,,$,$$$+,,+,+==@@$$$$$$++,,)@$+,,+$$=))@=@====@=@$,=====))@=$)=@)=$===)@)@=@@))@)=&$)@@))))&-&&=)@&&-&))-&-&-@&&&@&", "&).---&&&&-)----&-&-)&&&&@)))@&-@&-&))@&@&@&@&))&-&))&&))@)@@)@==@===@$=$=$@=@@@$===$@@=$$$$,$$$$@@==$$,,++,+,$$,$++$,,=,+$+$$+++$,$$$$$,$++,$+$,,++,,$$,$=====,$+$,,$@@@$====@@@)@@===,$=$@=)@=@)=@))))&)))&)&)&&=&&&))@@@&&))&&@)@@&&&-&&-=&---.)&&&&)&&----", "&---&&))&)&&--&-&))&-&&-&)==@)&&&))&=&&)@))@=))))@&))@)@@&@@=@==$===$,,$)@=@====$$=@=@=$=;$$,$+,$$$$,$,,,;++,,==+,$=++,,,+$,,+++,+,,,,,,,,,=+,$=,$++,++$,$$$$$$,$,,@++$==@=$$$=======$=,+$=$=,===@=)))@@@@@)&@))&@@@)@))&@)))&&&))))=&-&&&&)&&-&---)-&&&&-&&--", "-)&-&-.&))-&&-&&&&&&--&&&)=))&)&)@)&$=)&&)&)$=)@)@@@@@@@=)@)=$@==,$@@@@@$$$===$@==$====$$=$@)@$==,,$,,,$+;++,@,$$$,$,,,,+,+++$,;+;+++,+,$,,,,,$$,,;+,,,+,,,$,$,$@)=@,=$$$=,=@==$$$==,,$@@@@@+,=@==)@)@)))))@))@)@@)@@@&)@=)=)&)&&&&)@)&-&.&&&)&-&&&&-&)@-&-&&&", "&--&&-..&-&-@-&&&&&-&)&&&)&@)&)))))&&&&)))@@@=@)@@@@$@@=@@@@@@=@@,$=@@@)$,,$,+=@@$=$,$$$$=)@====$=,,,+,,$+,,=$$$+,,,+++++,++++++++,++;++,,++,+$,$$@$,;,+,,,,+$===@@@@=$=,$,$$$@@=,$$$$@@@)@===@@@@))@=====)@@@@@)@)@@&@)))))&)&@&)&&&)))&&&)&@&&-&&&--&.--&--&", ")&&-&--.&&&-&-&)&&-&-&))&)@&&&&))@&)@)@)))@@@)=@$@$@==@$$$$@@@)@@&======))$$=$@===$=+$,+@@@===$=@$+;=,@$$+==$=+,,++,$,,+$%+$+++;++,,$$$+++++,,,+=$,=@=$=,%===@@$$$==@@,,,$,$=@=@=$==@)@=$===$))@@@===@,$@,=@=$==$)@)@)))@@@)&@&)&@&&&)&)@-&&-&&&&&-&&&-.-&&&-&", "--&&-.-&-)&&-)&&&--.&)@))&-&&@))&))@@@$@@$&)&&&@@$@)@@@&))@==@@)@=$==$==@@=)=)==@)@=@=$@@=$=$=@$@@=$=@==@$@=$$=,,+$@@%$$$,=+++++,+++,$$$==@@%+,+$$$==$$@=)==@=$@)$$=@=@=@)=@=@==$@)@@@@=@===&@=)=$==$)&)=@))$=@$&))))$)@@)@&&&@@)&&&&@))-&--&.&&&&&&&&&-&.--&&", "&--.---)-&&)&&&&&-&-&&&--&&&&&&&)&&&&))))&@@@&&&)))&&-@&)@&@@@@@@@@=@==$)@@@$@=@@@$@@))@====@=@@=$=@=@@$@==$,$+%=$@@=$,,,,+%,,+$+,,$+,,,$$@====@,$=$@=$@@$@=$==@=@=$==$@@)@$@@@@==@@@),==@@@)@)))$@@)))&)-)))))&&&)@&@)))-&))@&&=&-&&&&=&&&-&&&&&-@&&-)-....-&", ".--.--&&@@-))&&&&)&&&&)&)&&)))@)&))&&)@@=@)@&@)&&&&&&&))))@@)=@@@=)$$&&)@)@)@===@=@$)@)@$$======$=$$@$=@=@$$,,,=$,,$,$++++,,$+++,,$,$++,+$$,+$,$,,,$$@=@=@==$$$=@=$==$@@@@,@====)=&&@@)&&)=@===@@))=)@=@))&&)@))@)@)@)@&=&&&)&)))&)&&)&)&&&)&))&&))-&&@-&-.-.-", ".------------&@&&@)))&)&-))&))&@@&&)&)@)=@@))@@&)))))@)@@@@@)==@@@@@@@@@))&)@,@=====)@===,$@@==$$,$====$==,,$$,,+,,$$$;+$++$,$+$+,,$+;;;,$$,,,,+$$,,=@$$,==@,,$=$@@=$====)=====@$,)&)@@@@@@@==@==))=@)=@=)))&&&=&)@)==@))@))&&&@@)))&)&@&&&)@&-.)@----&.&&-&-.", "--&-----&&)&-.---&-)&@--&&))@)&)&)@&&)@)@@&&)&&)))&))@$)=@@$@@@@@==@@=@@@@@@@@$===$=@==$,,$$=$$$$$$$$$$$,$,,+$,,,,@$$$+,,+,,,,=$,,$,$+,$,$,$$,,,++,,,=$,$$$$$=$$=$$$$,$$==,,======@@@)@)@)===@@)===$=))@@@)))@)&-))@)@)=)&))))@))&)&)&&&&&&&--&&..-&&&---&&--&", "---&-----)-.-.---&-)&&)&&&)&-&&&@&@)))@=&-&@&&&))@@@@)&))@)=@@=@@,$$$,@@@=@@@==$$,$=$=$$=$$$,$$$$$,$$,$$+=,,$,++++$$+$$$$$,$+,,,,,+$$$$$=$,$=$$@,,$,$$,$,,,$$,,,$=,,$$@===$$$=$,@=@@==@==,======@@=@)))))@@@)@)@&&&--)&)==))))@-)&&&&&&-)&@&-&.-&-.&---&-.-)&&", "&&..&--&&--&&&&--&-&=-&&&&&&-&&)@&-)&)&&&&&&)))@@@@@@)&@@@@@$==,=@@$=@==,@=@==@,+@=,==$$$$@),$,,$$$,+$,=$,$$,@,=@=$=$$$$$$$$$,+++$=$,,$,$$=,+%@$@,,=$$$,,=$,+,,$$,@@+$$,$@$==$==$@=@=,=@,=@====$@=)@=@@)&-))$)@&))&&-&&)@)@&&=&)&--&&&&&-&-&&-&&-&-..&&-.--.--", ").-----&--&--&&&-&&&&&&&&&)--&&@-@&)&)&&)&&))@&)))@@&)))@@@))@@@@)@@)@)@@@====@@$=@)@@@+=$)@@+$@@)+)@==,@@=@$$=@$,,$$,$,,,=$,,$$$,$$,,,$+$$$$$$@=$$$==$=$+@@@)+$=@=@@$===@$&@@)=$$=@==@@)=))@)=)@)=)@)))@))&&)@)&@)@&&&&@-&&--&&&&-))&&@&&&&&&-&&-&-.&-------@", "-----&--&--&&-)@&&&&&)&=)--)&)-&&-&&&&=@)@))@)@)&)@)@)=@)=@)=))@@)@)&@=@===,@@=@@)@@@@====$=$==$=@@==$,==$,$@@$$$,@+,,,,$@=,,,,$,,,$=$,,,$,+,$$$$==,,=$=$==@@@=$$==$====@==@)@@@@@@==@=@=)@@=@@)@=)==@@@))&))@)))@)))@))=&)-&&&&&&&&-@@-&&)&-&)&&&&)--&--&--..", "-.&-----.--@&)&-@)&-&----&&&&&)&@&)&)&&))$@)@&)&&&@)@)@$$==@)@@&)@@@@@=@==$==@=@===@===$$=@,$,=$@===$$$,,$$=$$$$$@@$,,,+=$=$$,,+,,$=$$+,,,$=@,$$=$==$=,+,$,===,$$$=,==$====@)=====@@=====))=))&))=))))@$@@=))@&@))@==@@-)&))&&)&)&)&&&---&-)@@--&@@.--.-------", "---&-&-------&)&&-&&---&)&&&@)&@))))&&@)@=))@@@&&)&@=@@@))@@@@&)@))@@@$$=@@@@,===@@@=$$=@=@$$$,$===$,$,$,,$$$$$,$=@$+,+$$$,,,++=,++$,$$+,,+$=$,$,,,,$$$,$$=$=,$$$$,=@@@======@@==$@@=$@==@@)@)@)@@=@@$==@))@)&)-)@)=)@&&&@)&)&&=&&&-)&&&-.-)&&&&&---&-.-.&&&--", "----@.--&---&&&&&)----&-&)))&)&@&&)@))@&&&)$&&)&&@)@)))))$))))@)@@@@@$@=@@==@==&@@$=$@@@@@@@+==,$,$$=$@$@,,,,$$,,=$$;$$+$$++++=$=+,+$$;$$$$$=+,$==$,$,,@$;$$$$=,=$=@@@@@=$=@=@@==@))=)=,)===@=)))-))&))==$&)@))))@&)=$&)))@&)=@&@=)&&)&-&&&.&&-@-&--.&--.-)--&", ".-&--------.---@)&&-&-&&&&&))&--=$)))&&)&&&&)@)@)&@))@)=))))&&)@@==@@@@&))@@=)))=)@@=)@@@==@=$@=$===$@@@$++$@,,,=$$,,,+=$$++;$@=$=;+;$$,$$+$$=@,,,,$@=$==@==,$$=@====@@@@)==@@)&))==))==@==@=@@@))-)))))&@)@))))&&)-&-&-)@&&&&---@&&@&&&--&&-&-.--&&---&-.----", "--&--&&-&----&-.--.-&&-&&-@.-..---&&--&&)-&&&)&)@))@)))&&&-)&@)@@@@)@)$))@@@@@)@@==@@=@====@====@$$@$@=$$@@)@+@==,$$,,$$==,;+=@$$,$+,$==,,,$$====@)=@==@=@=@)),$@@=$===@$@@)@@@@@@@@@@@)=@)@$=)@))&&-))@))))))@))-&))&@&--&)---..-&--&&&&&.--).-&---&-&&--.&--", "&-...&)&-&&-&----.-.&@@-&---@&&-&&-&&)&&&&-&&&@)@)=))@))&&)&&@@@@)))@)@@@=@=@@@@=@@=@@,$=$===$$@)@@===$=$$$@@=)$$=,$$$$$$$$===$$$)$$$$$$$,$$$$$==@==$=$$==@==@@)$@=@$$=$$===@=@@=@@=@=@=)))@))=@@&&&&&)&@@))@@)))&&&&&&))&)&&&&)-&.---@&&@--...-.-------)-...-", ".-...-&)---&---.--&--&&---&&.&&)&&&)-@)))&-&&&=))&@==&@&))&)))$@@))@@)@&@@$,=$===$==@@@,,@==,)==@@@)@=$$,$=@$$$=,=$$$@@=,,=@$$$$$==$@,$=@$,@$+$,$==$==$$=@)@=@$@=@==@=$,@$@@@$===$==,=))@))@)&)==@))&&@))&@=)@@=&)&&&&&&))@&-&&&&-----&--&&--&----&&--&-).....", "-...-.-&-.----.&---&&-&&----)&)&))@&&&@.)&&))@)))&@))@&&&)@@@)@)@&)@@@@@@=@$$$====$=@==,$=====$@=@))@@$$$$@,=$$,$,$,,$===$$=$$++,$+$=@$=,,=,,=,,$,===,$,==))@@======$=@==@=$=$,==@@=@@)=)=@@)))))))@))&)@))=&&@)&)&&&&--)&&)@&@)&&&&-&)&&-&&------.-..-&---...", "---.--.---------&&-&&&)-)&&-)-)&=)@&&&&&&@&)@)&)@&&$&&))&)@)@)@@@@@@@=)$@$)$))),,,=,@$=,@@==,===)))@===,,@$=$,,$$==$$$$$=@$$=,$+,$,,$$=$$,$,$=$,=$,=@=,=@=@@&)@$@=$=@$=)$$=@)@@),==)$=@=@@@@)))@)@@@@))&-@&)&@)&&@@@)&-&&@&&&&&@&@&&&-&&&&&&&---.&-&---..--...", "...--.-.&----&---&-&))--)&-&&)-@@&@)&&&&&@)&@&@))&)&&&)&@)@@@)))@@)@==@$@@=)@)@),=@$$@))==@$=====@@@=@@$@@$,=,$$=$$,,$$$$$,$,,$$,$$,$$=,$$,@$$$,,$=,@===@@=@=@@,$@=$==$@@,$@==,)@&@=@$$&@=)=@$))))@)=-))&&&&&&@)))&@@-&)&&@@--)@@)-&&&---&)&&&--&&---&.-.----.", "-..----&.------&-&&&&&&&--&&&&)&@@)&))&-&@&&@&&&)&&$@@-&&)@)@@)@))@)@@@@@===$$=$,$,===$,=$@==$==$&))@=@,,@$,=$,,$=,$,,$$=$$,$$,,,$@,$@$==,$$=,=,,,$==@$$=@@)@@@==@=====$=@=$=$,,$=)==@==)=)@))&)@@=))&&&)&@$&)))&)))))-&&)&&))@)&)&-&-&&&&&-&---.----.---.-.--", "....--&-)--&-.----.&-&-&-&-&--)@&&&)&)&-&&&)&)&)@&@=)))&&&)@)@$))))@)@@))=,======,===@=,====@@===@@))@$$$==$,=,,,$$=$$@$,@=,$$,+$$@==+==@$,,,$$$$$@$$$$$=@)@@@==@=====@@@=====@==$==)@))@@@))&@)@))@)&)&)&&)&&)=&))&&&--)&&))&)&&-&--&&&&--&---.--&-.-@)--...-", ")....&))--&&&...----&@&&----.--&&&&&&&))&&-&&-@)))@))@)&)-))))@@@)&=)@)))@@=======@=@====,==$=@@)@=@)@$$,==@===$$@$$$=$$$$,@$@$,$=@@,$,)$@=,$,$=====$$$$$=@@@@=)@@$@=$=,=@=@=====@@=$@)=)@))@)@@$))))&@)))@=@@@)&&&--&&))&)&&&&&-&--&&-&-----------&-&-)&....@", "--..-&&-&&&--&--...--&&@&-.-)--&-&&&&&))&&)-&&))@)@@))@&)&)&&=@@)=)))=)@@@=)=@@@==@@=@$@$==@,==@)@)=$@=$$@=@@===$@$$,,$=$$,,@$$=$=$+$$=,,$$,==$=@@@@=@$$@@==@@)$=@=,$======@)==)==@=)=)=)@)@)@@)@)&&&&&=@@)&)@))@&-@))&&&-&&&--&.--.-))&&)-..--.-&--&-&-)-..&-", "---.--&------&&-@-&-&-&&&&)@&-.---)&-&&&&&&)@@)@@)@@@))&)))&-)@=@$=)@@@@@)==@)))@@@=@@=@=======$$@$==@@$,$$@)++@@,$,+,,$=,++,$==@$,;$$$=,$,$$,@@,,@=@==$@=@=$,$=@@$@$$@@@@)=@)@)@)@=@@@==)@,$)@@)@&&&&)))))))@@)&&)&&))&@&@)&--&--&&@@&&&-&&))----&---&---.---", ".---..--------&)@&--&&--&)&)&&&-@==)))&&&&&&-@@&))@)))@@@))&&&@@@@@==@=$@&@@@@@@=====)@@@=@===$$$,$,$=$@=+++,$,,$=$,$,,,$,,++=$=$+;+,$@,,,,=$=,,,,,,$+====,@,$$$$=@=@@@=@$=$&==&=@)=)@@=)==@@=@@)&&))))=)))@)))))@)&&&&&)))&)@@&&))&&&-&--&--&&@-&&-----------", "&--)-..------&)&-&&&---)&&&)=&&@@))&)))&$=@==&)&&)&@$@@&)$$@@&))@@)@@=,@=@====@=@@=@$==@@@@@,,$=$$=$+,),,$,$$$,,$@=$++$+,$+,++@=++,+,$,+=,+$@,$$,,$,$$$$++$$$$,$@$,$=@)@=$@==)===@====,,)@@=@@))))@&@$)$=$&@)&&&&@)===--))@))))@@@&)))&-----&&-)&------.-&)---", "--&-&&&..-&.&@--&&&------&&&@)&@&&&@)&&&))@@@))&&&=@@@@$=)@))=&&&@@@@)===$@@@===@$@@@$==@$@,$$$$=@=$,=$+$$$$$$$$$@@,,,+,$=$$,,++,,,==,=+,,,==@,$$$$$,$$$$$,===@$$$$@@@==$==@=@@@$=)@=====@@))))))&)@@=)@@@=))&)&@))@$@@&))&)&))))&@&&&-&----&=-&&-@----)--&&.&", ".----&&----)&&=&@&&-)&--&--&&&&&&&&&&)$)@@))))@&)-)@))@@@$@)@))@&))@)@==@==@==@@@)@@@====@$=$$$$@@@$$$=$$$$====,,$@+$,,,$@$$+$,+,,+==@,+,$$$@,$$==@,=$=$$$$=@=$$=$$$==$==@=)@@=)@@=)@=@=@)@=)@&@)$)))=)$))@@@-@&))=)@))&&&&)&&&&)&&&-&@-&&&@&&-&@&-&-.&-&-&-&.", "-.------&.&&&-&)&-&))&-@&)--&&&&&&&&&&&&)))@@@)@&@&&))=)@@@)@@@@)@@))@@@@@$$$@@)@)@@@@==$$@===$=)=))==,===$==@==$,$$$,,$,,@,,,=,$,$,@,,,$,,,=,,==$$$$==$$=@@=)=$$=@=$$====@@))==@@$==@=@@))@@@)@@)@=@@@)))&&&@)@)@)@))&)=)&&&-&)&&-&@&)&-&&-&&&&&-&)-&-&----..", "&--.----&&-&-&&&&&&&&&&&&&&@&&&))&&)&))&&&&&@)))@&$))&)@=)@@=,)=@=@$,@,=@@======$=@+==,,,$)@=,+,,=+,+$=$,=$$=$=$$,$$,$$$,,,=$,+$,,$=$,,,$$$=,$=@$=;$$=,=++),++,=$+@)==$,=$$@==$,$====@),,=,@=)=@=$@@@@@@)&))$@@&&)&)&)-))))-&))@-&-&&&&)-&&&&&-&&&&-&--&-.---&", "&--&-.-&-.--------&&@@&)&&&&&-))=)@))@@&&&&&)&)))=)=@)&=)@@=$==@==,,@@@===,@@==,,,=$=@$=$$,=,$$,$,,,,$,,=,,,,+,,++$$$$$$$,$$$,,,+,$$$=,,$=,,++=$,,$=,$$,$$,,,$,$$$+,,=$$=$=,@$$,===)$===$)=,@,@=====)))&&&@@@)))@)&&&&&)@=@&&@@&&-&&&&&&&&))&--------&-&---.--", "-&-------&)-----&&-)@&-&&&)=&@&@@))))&@$=&&))&&)))))@@)===)=@)=@@=$==$=@@@)==@$$$$$$==$$,$=,$$$$$=$,$$=,$=$,$,,++$$=,+$$+$+,,,+$,,,$$+$,$$,==,,$,,,$$=,$$$$=,$,,$$,,$$=,=@=,$=$$===)=)@======@@@@===@=@=@))))@)&-&&@&@)=))))))@)@--&@&&&&&&)-&-&-.--&&----.)&-", "---&--------&)--&-&)&&)&-)&&)&&@&&)))&@)))@)))&&)&)@&)$)=)@)@@)@)=@@@=@)@@)&@=@===$@@@==$$$===$$$,==$=,$@=$$,=+,+,$$,$,$,%,$,,=$$,,$,,,;$,,$+,,,,$,,$=$$$$==,,$$$=@@,$=$=@=======)))@)@)@@@==@=)@=@=@)=)@@))&&&&@))))$@@@)))&&)&-@))&-&-)&&&@---.-&--&---&-&--", "------&&@&--&&&)-@&&&)&-)&)&))-&&@&&)&@)=@)))))&&&)@))))@@=@@=@==@@)))@&)@)&)=@@=@==)@=@=$=@====$$,@======,,,=$$,,,$=$+++$,,$+++,,$,,;++,=,+,,$,,,,$=@$=$=@@$$==@====$=@=@@=$@@@@$&)&@)))))$@==@)))@@@=)@@)@&&&@@&)$)))&)))&&&-=&)))&)&)&)&)&&-&&@)&.&-&--.--.", "..-.---&&&)@&-&&&&&&&&&&)&&)&))&)&)&&)))))@@=))&@)&&&&@))@))@=)@=@)$==$&))=@$@@@@===@@)@=$==@@@=$=@=$==@@===,,+$$,$$,$,,+++,+,,+++,$+,+,,==$=$==+,$$==@====@$=$=@=$==$@@))@===@@)$)==))@===)@=@)@$@=)@))&&&&))@&))@)@)@))-&@))@&&)&&&&&@&&&&&@&&&-&&&&@&.-..--", "&&)&..&&&&-&&-&&&---&&@)-)&&&=)&&&))$$$,&&)))@&$=))@)@@))),$&=))@=,=))=$@@@@=@$@@)==@),$===$======$=$=@=,$=$$$,++$@@=,$$,$+;;+$++,+;,$,,$$==$$,+,,$$=$===$@=$=$=@)$$====@=)==@@=$))@)@==@)=,))==@=),,))@=))@))$$&&@)))@$@=@&)&&$@&&&-&@=&&---&&&&)@&&--)-...-&", "&&-&&----)&&-))&&&&--&@&))-&-@)@@&&)=)=)@@@@=&$=@=$,&$$$,)=@@=$$))$=$=$=)@+,@@@$==$$++,@)=$=$$$=@==$====$@$$$$+++++@@;;$$$+,++++++++$,,$++$++,++===@==$===$======$=$==),,,;$@@=====,=)$,======))=)=@==$=,,===@@$$@)=@@@)@)@)&)@))@-&)))))-&&&-&&&)&&&&--&&&&&&", "&&&&&...&&&&&&&&&&-&&&))))&@&&&&@))&)&)))@)=@)@@)==@=====$=@))=$=$=@===@,,+,@@===@$,,$$$,@=@@=$$@=+;+,$$$+,$=@,$,,,$++++,%;,++++++,,+;++,+,++,$,,,$=,;$;++,++=====@@)+,$,=$+$=====,,,,)@===@@$==@@===$=@@$=@=)@@=)@))&))@&@)-)&@&&-)&&))&-&-&&&&&-&&-&-..--&-&", "-&---&-&)---&&&-&&&&.&&&&&$@)&)))))))))&)&@))$@@@)@)=)@@@))@)@$=)=$==@@@$$,=$=,@@=$$$=$$$=@)@=@==,,$,,,,+;,,$=,,,$+$,,,++,+++,,++,+++++,,,++,,$$$@+,$$,,,,,+,$=$==)@@@==$$,,=@@,===$$==)=)=,=)==))&)@@@@@@))=@@)@@))))&)@))&@&)&&&&&))&&&&-&&)&-&&&------&-&&-", "&-&&-)&&&&&&--&&&)&&&&&&&&=))@&&)))&=)@@)&&&=@)@)@)@=))=)@@@@==+@==+@@&@====$============$$,$&$$$=$$,,,$,,,,+==$$,,$+,,,,,,,,,+++++,$,+,,$==$;$$=$,;+$,,,$$$,$=$@@+,==$===$==)$==$==$$$))),$$$=,@=@@)@@)@@@)@))@&@)@)@)@&@&@))&&)&))@&&&--&&&&&-&&---&))-&---&", "----&-&&&&&&--&-&&&--&&&-)))=)&&&&)&)@)))&@)@))&&)&)&)))@)@)@)======$=$=,@@@==@=,$$,@@@==,,+$=,,$$=$=,$+,,+++$$=,,+$$,,,$$+$,,+++$$,$,$$,,,++$=$$++,,,,,,$=$=$$$+$+,,+=====,$$@==@===+$$,$==@====@@)@))@)))&)&))))=&&)))@@@&&)))@)))@&-&&)-&&&&&--@&&&&)&)&--&", "&&&&&&&-&&&&-----=)&)-&&&@))@&@&))$@&@@)@@@&))$=)@=)@=@))))@@=$+)=@===$=$=@)))=$,+,,$@@@$,,,,$=$===@=,$,;,+,$,,$,,,+;,+$=+++%,,,+$,+++,,,,++,$,$$,+++,+,,$@@==,==,$$++)))=$++,$$@)&)@$======@@$$=)=@))))@=)@=))$,&@)=@@@@@@$@&&&=@)@)@)-&&&=@&---)&)-&&&)&&-&@", ")&)&&@&&&&&&&&&&&))&)@@))&))&@))@$)))@@@)@@))@@@@=,@@==@=,@==$$===$$=$=$$$@)=@$=+$$$++++=,,,$;=$$=@@=@$+,,,,$$,+$$,,,,,++++$+;;%;;+,,%+$,,+,,$,,+=+$,+,$$====$=$=,,,,,,+++$$,$$=@=@==$=====+=====$$=@====$@@=@@)=@&@$@)@)))@=@@@)))&&)&&-@)&))&-)&)---&))&-&-@", "&-)@@@&---&&--&))))))&=)&-&&@))&@))))&&)=)=&@@)@@,,)==)@@&,$==@====)==$$$=$$,@=,$$+,+$+,$,,,,====@==,=@$,,,=$$=$;+$,,+,+,++,++;;+++$+%+,+,$$;;==$$$,,,$$$)@==)=$=$$+,,,$,$=;+$,==+$$==,+===)===@$)@,,@@@==)$,@=@)&)$@@&)&))@@)))@)@&-&@=&))))&-&&--&--&@@@&=&&", "-&)&&&)&)-.&&=&&&&))&$@)@)&&))))@=))))@)))@)&@)))$@=@$@)@)====,)@@=@@=====$+=@@$$$$$$$,$,$$$+=$=@@@)===@$,$$$$;$,+++$$,++,+,+,+,+,,+,,+,$$,+,,+,$$$==$===@==@)@===+=,=$$$$,$,=$$=$=,$=@===@===)@$===$@@@,@==@=&)&))&@))&@@@@&))))&)&)))))&&))&&-&&&&-))&&)&)&&", "&&&-&&&&)&&-&&)@-@-&&=@@&&))-))))&@@)&&)@@@$=)@@)=@=)=&)@==)==@@=@==$==+@@=@=@@,$+$$$==$$$$$@$,,+$$=)@=@=@@$@,++,,,++$$,+$%$$,$$+$$,$++,,$+,+,,+;=@$====@@@$$;,,+@$$$$$$$$$$,$$$)======,====)=@)====@&)&@@@)==@=)@$=@$@)&&)@)&)))&&&)&)@)@&&&)-)))-=-&&)&&&-&-", "-&-&&&&&&)@@@&)))&)-)))@@))&))&&&@@&)&&&@))@@@=@))@)===))))@@@@))))==========$$$$$$==@=@@=@+$,;,;,$@,+,===$$@,$$,,,,$=$,+,+;+$,$@,++;,+,$$,++,,$$$=@$==,,,+@$;+,+,,==@=@===$==$,$$$======@==@@))=)@@&)@$@====@)@$@@@@)&&&)&&@)&&&))&@=))@@&)&@)&&)))))&&&-&&&-", "&--&)&&-&&&)&&)&)&))@)))))=)$@)$$&&$=$$)@@)@@==$=@)=))==@==@)@))@)@)@@==@)@),,====@==@=)@==,,,,++,$+$+,$++,====$,,,,+$$,,++++;$,%++++,,$=$$,,$,=$=$,,=++,,,=,$;;,==,==)@)====@=$$++&@==@@)@==))@)@@=@@=@=)@))@$,@@@)&)-=$&$$)@$&@=$)@@@))))=&))&)&&&)&--)).&-@", "&&@@&&&@&@)&&&&))&@)&&)====)@@@@$@=$@@@$)====$@=@@@=)@@,,$@@$$)@=@@@$$)=@==$$$$,+@@@@=$===@$,$$,,,,+$,,,+;++$@=$$$$;%;,$$,+%%++,;+;%,,,$,;;,,$=$=$,;+;,,++=;,,,+$,,,===$=@@@@@,,$,,$=@==$$@))=@=$=))@$,=@@)@==@$@=@@,$==@@=,$@@@@@@==&$=)&)))-@))&&&)@)&)-))@&", ")@&&&)&&&&&@&&))))))&&))@@@=@)@@)=@@$,=,==)==,)@=)=)))),=$=,,+==,))&$$==,+=,$$==@@+$===$,,+,,$+,,,,,,,,,+,+,+,,+++,+++++,,;++;++;+++,+$,++;+%,,,,+++++$$=+,,,,,$$,,,$,$$==);+@=$$$=$$,====@@),$=,,,=$==)@))@)=)@=$=@=$=$$$@@$)@@@@)@@@@@&&&)@&&)&&)&&&)&&@&))&", "&-&&)&&&&)&-&&@&)&)$&&@&&)@&)))&@@)@$@@@=@=)=@==$))&@@@@====,==$$==$$===$$+$=$====$$$$+=$$,,,====$+$,$$,;+++$+;,,++;;%+++$,++++%+++,+;+;++++++,++,+,,,+,,$,,,=,==@$$,$==,,$$,===@$==,===$=,==,$=$$=====$)))@@,===@@=@$@@@@=)))))))))))&))&)&&&&&)&@)-&&&)-&&&)", "&-&&&&&&&&)@&)))@&&))@)))&)&&&&&)@))@@==@)@@)@@)==@,==$@@@=@==@=$@$=,$$=+$$,@@$@+,$,$,$,;@$$$,=$,=,;,,;++%$$,,+,+,,+++;;+,+$,,+$+%+,,,+++,+++,,++,%%,%++,++,,====,,,,,,,,$$,=,===@=,$;$$+=$==)$===$==@=$$=$=@)@@@@@@@)@=@@=))&&&&&&&)))&)))=&@@)=&&))&&&&&---&", "-&)-&.-&&&&&)@))))@))))&&&&&&))=$)@@@))@@)@=@$,=)@)$=$@@=)@)@====$,=$,$$$$$$$@$$+$$$$$$,,,;$$$$,$=$,+,+,+,+;++=$$,,,+,++;=$$%+;;;+,,$%;++,,,,,$$+++,+,,,+,,+$$,$$$=;+,;,$$$,$$,$)=$=,=,==$$+,$==@@@@)@@=====@=@@$@@)))@@&)@=@),@&@&&)&&)&)@)@)&)))))&&&---&&--", "--&-&&&-)==&)&))@&@=)))===@$@@)@@@@&)&))))-@)=@=@=,,@===@))=@@=$)$$=====$$,$=$$@$$==$$,+$,,,$@+,$$$,$=$,++,,,++;+$,$++,,+$+++++%+++++,++,,+,,,$++++++,$,,$$$$$=;;@,$,,,,=$====,$,=$$$=$$=@,==$===@@))@====$,=@@==@@@&&)@&)))@)=@@@==@@$@)&@@))))&))-)=&&&&&&&&", "&&&&&&&&@&&&&&==)))&))@=$@=)@@$=))@@)@@&))),,)==@=,===$==)=)$@$@$$,=$=$=@=$$$$$@$$$,$@,,$=,$=$,,,+;$,$@$$,,,++++,$,+;%++++++;+++++++,;+++;%,+$,++,,,,$,=@$,$++,,+=$,$=$$=@+,$==,,,$==@====@+,==@@==$@=@,==$@======$@))))@&)@@)=$@@@@@@)$))))))))=&&)&)&&&&-&&)", "&&)@@&-&&&=@)))))@=@)&==$$=)@)@@&@)))@=@=$@===@$==@====@+=@===$$$=$==@@@=@==$$$@@=$$,$,,$$,+;+,$,$,$$=$$,$$$$,++%+++++;+,+,,+++++++=++,;+++,%;+,+,$$$$,$$$$$,,$$,;,,,$=,,$,,==@@====$)=@@==,=$=$$,$=@=,@=====@,====@,@@)@@@=@@@)@@)@=$@$@))@@@@))@==))))&&)@)&", "-&@))))&&&@))@)@))@@&)=@==@)@@@&@))@@@))=@)@=@=@@@=@@=@@)@=)@=======$=$===$@=@@)@@,$$$,@==@,+,,,,$+,,+,$+$,,$$$,+++%++++$+'%,,,+$,$,,,;++,++;+;,$,$==,,+++$$$++,,,,$===$$$$=@@@)===@,==@$=$,=$===$@==@@@==))=@@@=@@=@=@@@@&&)@&)@@))@@@@@)@))))))))@)&&-@))@&&", "&)=)))&-&$)&&))))@@))))@@)@&))&)@@)&@=@=)=@@))@@@@$$$$=$,++,+===$=,$,$===$=$@$=$$=$$$$$$,+$,$$$$,$+,$,;++%,+$@$',++;+%+,,+';;%$$=;%+++++,;;;,,$=@@,,+;++$$,,$$$$$$+$,;=,$,===$,+$$=,=,==$=,,,==$=,,,,+===,=$=@)@))@@@)@@@@)&))@@)@))@=@$@))=@@)@&)-)&-)&)&&&&&", "--))@)))&))=-&))))@)===@))@&)&))))@&))))====)@@&)@,$$$+,+,,+,++++@$=@@====,++++,++,,=,$++;$$++++$$,,$++%+++$+$$++;+++;;+++;;%;++;;;;%++%;;,+,%+%,,,,++%++;$$+$$,+,$+,+;=$,$,=;,,+;+$====@=@=$@+,+,,++,++,$,,,@@)@))$=$$)&)@)@&)&&&&@)@)@))@=@))&)-)@)@)@&)))@-", "&)&))))&@)))@&&&&)@@@&)),=&&@))@)&@)&&)=)=@=))@@))==$=$=$+=$=$==$)=@))@))@=+,,+$,,,,$$,,,+;%$,,,+$$$+$+++++$=++,+%+,+++%;++;;;+;';%++%;++++%+;,,+,$$,,+++,$$,+,,,,+;,,+,$,=,,,,,,$,=$@)&@)@@$)$$$$$=$====$==,))))@@==@@&)&)))@@))@@)@$))&@)@))&&)@)))&)@@)))&&", ")&)&&&))&@@))--&)&)@)@@==@@==@)@===,=)@@)=@@+,@)=)==$====,==$==$=$=$=$==$=,,+$$,,$$,=$$,,,+,+++$,+,=+,,$,$$$+,+$,++,++,;+,;;;+,+;+++;;+++++++,,,,+$,,,,$$+,$$%,;++,,,,,$,,,,$,,$,,$,+@$===,=,$====$==$$$==@=$==@$,=@=@@&@),,=@@)@$@@@)$,)@))))--&))&@@&)&)&&)=", ")&&&@&&-)&))&&))&&))@)@@@@@$@$=@)@@$$@=$@@$$==$=,==$==@@@==@===@=======$==$$+$==;;=$=$$$$$$,,,,%+=$,$$,,,$,+$%%$,,$$,++++++++;%';+;+++++$,,=+,$;%$,,,$,,$,+$=$;+,,,,,$$$=$$=,;=$$,$$,$$$$========@$==@=$@=$=$,=$=$@$==)==@,,@@=),=@=@@@$)@@)&@&&@&))&@&-=)&&&&", "&&-&&))@&@&&)&)))&&@))@@@@@@@@@==$=====,@@=@=$$==$=@=@)=@@@)))=$=$$$$$+,,,$$,$@,+,,,+====,$=$$,,+++%,$$,$$$+$;++;%,,@$++,++++++;'+,,,+,+,$,,%++++$$,==,$$$=;++++,,=$,====;,,,,,;@,,,,+,,$=,$,$==@@)))@@=@@===,$===,)@@&$===$@=@=@=)=@)@@)))&&)&))@=)&&&@)&)&&)", "&&&)&))@&@@@@@&&@)=@=,@&))))@@@@=@$@======))$=,,,+,+,+,=$$$,,,$,=$$$==+,++,,,+++,,,,,,+%$=+$,+,+++++$$$$$+,;$+++,++,+,$,,++,,%;%;++++;+,++,,$+,++++,,,$,$$,++,+,,,$+$=,;+,+,,,,+;,,,,++,==$$,=,$,$,,$,,$,,++,,++==,@=@$=@===)=@@=@))@)))@$@@@)@&=@@&)@)&)&&&&&", "&&-&&&))@))@@)@=))@)@@)@@&))@@)@@)@=====$=$,==$$$$$=$$+$====@=++;++++;+++$,$$$$@$,+,,;,++++$$$,,,,+++++%+,;+++++++$$+;,,+++++;;;%%+++,+,$+,=,+++;+;%%$%;;++,,,,$$,,++,+,;;,,,$$,,=$$$,+;;+;,+++++$=@=@$,+$==$$===@,$$,=@$=@=@@=)@))&)@))@@@@@@)@)@)=)@)@)&&&)&", ")=@&=)@==@)&@)@@)&))@@@))@@@)@@=$@@)@@@===@====)@=======$======$,$$=$$+,$$$=$=$=@,$$$,+$$$+$++$$$,,++++,+;;++,,$,+;,,,,,++,,+++++++,+,+,$,;'%$,++,++;++,+++$,$+$$,+,,,$$,,,$$=@$===$$$,,=$,$,$=$,=====$$$====$=@@=@==$=@@@@@@@==@=@@))&))@@@))@@@))@&)@===-&)=", "))@@@)@)))@)&$=@@)@)))&)@@)===@=@==@))@)$@==@&=@@@===$$=@====$$$=$$=$$$$=$$,$,,,,$$=++$$$+$$,$,$==%%$+++%%+++++$$%%;%%,$$$+$,+,,,+$,,,=$,;;;%+$,++++,%;+,++%$$$$$$$,+,,$,+$=$,,,;,,$,+==$=$@=$,$,$$===$==$$@$@@)&@@$@@@@)))@@=@@=@=@@)&))))@@@@)@$&&@@)@@)@@@)", "))=@@)))@)@&)@)@=))&&&)&)@@@==@,,@),$=@==@=@@))))@======@==@=,=+===$=$,$@,$,$$,,$,,=,$+,+,$@@$=@=$;+++;+;+++++%'+++;;;%,,$$,,+,+,$,,,+,%+;;+++%%++++,++%+;++,==$==$==;+,,$$$,,$,,$,$$+=$=$$$$==$,+====$,@==@=@=)@)===@=@@),,@=,==@=@@=@)&&&&)@@@)=&@)@@)@)&)$@", ")@$&))&@))@)@)@@))@)=-&&&))@)@)$====@=$,)@=@@$==@)====@,=$=$===$=====$$@$=$,,,$,,$$,$$,+,$@==+,=@=+++++$++$,,$%+;;%;+;;;+',$,$;,;++++$;%+;;%;;+;+$,,,++;+++,+$==@,$=$$,$$$,$$,,,,$,==,==$@==@====,==$=$,==@==)@===@@@@&$===$@===&@@)@)&---@@@@@@@&@=@))&)&)&@)", "@)@)@&&&)@=@)&)@@)))$@=$))))))&)@@===@=@=)@)=$===,$$$$=$=++;;+=,==$$$,+$$=,,$,$$$,$,$,$,,+;+;%@+$,$,,++,,+++,=,,,++,++%++%%%;%,;+;;%%%$,++,,+',++,+,+,,,,,,$,+,,,;+%+++$,$,,$=,,,,,,,$$$$=,=$=$=;++++$$,=,$,,,@@$$@@@@==@==@@@@=))))))=$@@@)@@))&@@)))@&&$@)@@", "))@@=@@))@@&))@))&@=====@&&&@&&@))=)@@@@@))$,,,,@======+,,$=$$@$$$$,+;+;++,===$$===$=$$+$+%+,+;$$=,,,++%++$++;+;%;%$,,++++%%%,,+,%;%+%,++,,;%;+;+%,,,+%%++,$,$,,+++%++,$$$$$===$==$,,++;+;$+=,===$=$$$$;@=@==,@,+,$=@@)@@@@))))@))&&&@@====@&&&)@)&=)))=@)))@@", ")&@)@@))@@@@))&&)&))@@@@@=@)$$&)==&))$=&)@-==$==@======$$,$===@@$==$$+,+$,$,$=$$$==@@@=,,++++++%+%%=,,+;%+$,+++++++%%++%;++;%+,+;%;;++%%+$;;++++,+,,,++++,=+%$'%+,++++$@=$===$=$,==,,,,,,,====@=$$=$$$=,=====$@===@=)))@$@@@)=))@$$@=)@@@@@@)@&&&@$@)&@)@@@)))", "&)@=&&)@@&)@@=)&$@)@@))@@@@=$$,,@@$,@$@$=,$======@=@=@)==$====,,+,+,$+$$$$,==@=@@@@@@@$,$,,,,,,'%%,+++++++%;+++,,+++;;;,++%++++;+;;;++++++;+++++++%;+;++++,;;%%%,,,,$$,===@@@@@====$,,,$$$,,$,,$,@$==$=,)@)==$=====$,$==@=)$$)$,@,,@@=@@@)@)&$,&=@)@)))@))&)=)", ")@)&)@)&)@)@@@@=$=$$@@&)@))=$===,=$=@@$===$$$$$$=@)=)==$======$,,$$,$,,$$==,$$$+++++++++,+$$%%%;%+;%%,+,+,%%,,,+;+++++;$,,++%%++;%,++,,,++++,+%,++$'',,+,%+;+;,%'%$$,++,+;++++;+=,===$$$,,,,,$$$,===@$$,===)@@===$$$,$=@=$=$,=$=@=,@))))@@=$=$,)=@@)&)&@@@))@)", ")@))))&)@-&)))@@===@,=$@=&)$====@$@=@@@=@====$=@=@=,,=,======,,$,,,$$$$@=@=,$,,,,,,,,++,+,$=;+++;++++++$,,;+;;%+++++',,,$+,++++;##;,+$,$,,%+++++%;+;;+,++,+++,;+;+,=$,,,,;,+,,+,,,$@@@==,$$$,,,,+$,==@=$$=$@==@$$==$$@@=@@==@@=====))$$@=@$=@==@@)))))@))&&)))", "&@)@@@)@@@))))=@@@@@)====,@==,=@====@===@)=@=@===$,,,=+++++==$$,$$$$$++;;;,%%;;%+++++,,,,,+$;++,+,,++,+$$++++;,+;+++,'@,++++''%%%+%+%++$$+;,,++,++;++,=$+,+++,++,+,+;,+,+;++++;%;%%$;;;;,=$$,=,$+$==++,;+$$$$$===@=@$@@$=@@==@===,==,=$===)==@@)@)))&@@&@)))@)", "&&))&@)@@@@&$@=$@)@@@)====,=$+=$$@))=@=)=$=@=@)@,+++++,$$,,++;+,,,$@@$$,%;;;;,+,+,,,,,$,,$;,+++$$$$,=;;%$+$$,+$,$++++%%%$+;%%%;'%%%;+,=%%%+++,$=+,,$$$'%+%,,,,,,,,+;+$,$,,,$,,,++,;%;%;,$=@@$$,+++++,$$$+++++,+@@=@$==)@==@@@@$=$,$=$=@=@@@)@)@=@@)&))@))@))&&", ")&&)&)))@=====@)@&)=,)@@@,,@=@=@$==))@=),@=))))@$$$$$$$==,,,$$$=$$$)@$@$,,,,,$,,$,$=$=@===,,$$$,$$=,;;+;+$%,$;'%,%%;%%;%%$+%'%'%%#;%+'%;;++'%%;;;+=%;,;;+;,=@,,$$$,,+$=@==$=$$$,+$,$,,+$=)@@$$==,,$,$$==,=$$,$,))))@@=@@@@@@=$=@@==$,=@=)$=))@&@===))=@))@&))&", "@$$=$&&@$@@@@@=@@=&====$=$===,@==$$$,+)@,$$$,$====$=$=@===$$$$@$===,=$$,,$+;++++$,$,,,=$$@,,,$$,,++$+,;+%;+++;%;%%;%%;%;;,++%%%%+%%;,;;%%%';;%%%%+++%%+++++$+$,,$,,,$===$,,,$,++,,++,,+,==,,=$$=$$$====@$=$$$,$==$$$$$@@,,$=$==@,$===$,=@@=)=@=@@)$=@@)=&))$=$", "@@=@=@=&@$$@@@@@)@)==@@=@$@===@=,===$=$$,=$=$,+$,,,,,,=$$,,,,,,,,$$,,+,,+,++,,,+++++,,+,,%+$,,++++;%+++++%%%#'+;;;;%%%%++%;+%++;;++,+#+%;%%;;+;+;'+''++++,+%++;%+,$$%%,,,,,+,+,%,,+++,+++,,+$$$,,,+,$=$=$,$$,$,,$$=$=$$=$====@,$@==@@=)=@===)@@@@@@$==@@$$@@@@", "))@@=)@==@=))@))==@=@=@=@)@@@@==)@@===$,$====$+$$==,=$$$$,+$,,$$=$$,+,,+,,,,$,,,,,+,++++++;++%;++++,$$,,,+;;%%;+;+++;%+;;;%,++++%+++++%'%;;;,++%%;;;;++,,,=++++,+;+++%;+;+,+,,,+,,,$,++,,,+%=$=$$,$,$,,$$$$$=$=$$@$==@$$====@@=@)@@@)$,@=@@@,@)@)@@@==@@$@)@)@", "@@$)@=@@@@@@@=@)@),=$$=,=,=)=$,=,=,,+$$,$===,+,$,=$,$$=$,$,$$,,;;+%;;%+;+$,+,,+,+++;%%+,;++;;+;%+%;%'$+$,;%%%;'%+;$++;''%+%+++++++,+#'%%+++++;+;;#%%%+=,,+%;;++;++;;++,+%%%++;,++,,,,,+;%;;;;%;,+,,=$$,=$=$==$$$+$$$==$,,+$+==@,$$,@,$$,======))@)@=@)==@@))@@", "@@@@=@@@)@)=$@$,==@========$=@=$=$$=$$=$)====,====$,$=$==,$=$$;+;;,,,,,+,,$=$=,$$+,,+,$$+,+++;;;;%;+;;$,+%;;;;;%;%+=,+;;%%'+;+,+,,++%%%;%+$,++%%%;;;%++,,;++;%;';+++,,$$+,+,,$+$$=$$$+,+,,,++;;;;$$$$=@===$$$===,=,==@==$==$$=$=$==@==@===,@$@@,=$)))@=)@@==$)", "&=@@)$=)@)))=@=@=)@)=@==@====@=@$=$=$,)@=@===$@)@@@=@)))@$@)==,,,,,,$,,$$====$$@$,$$,$@=$$$$%%++,++;;+++;+%;+++;+;;$++++;%%+++$++;++%%;++,,+%++++++;%$;+,;;;+;+;;%,,$,$@$$,,$=,=$===$$$$$,,$+,,$+$=@@@))))==@@@)$$$=$=@@$,==$=$=@@@)==@=@@=@==@=@==))))$$)@)@@", "@&@@@=@@=-)-@===@$)@)@)@)@@=$=$@$=====,$,,$$$$=====+,,,,$+,,,+$,,$,$=$$$$$$$=$,,$,$$$$@$++@,;;;;%++;++;%'++;++%,#%;+$+++++++;++#+++++,+%+$%;+#'++;++++%%%++++';+;+,,@+;@=,$$$$,+,$=$,$,$$$=$,,$,,,,,,,,,,,,@=$==$$$$$+=$======@@$$==@@@@@)))$=@=@)@)-@=@==@@)@", "@@&@=@@@=@,&@@@@@=@&&)=@@@=)=$=@$@)@===$==$$$@==@$$,,$,,$+,,$,=$$$=$@=$$=$$$,$++++,,,,;+++;,+,+++,+;,;%%%++++,$+;%%'#%;++$$++++%++,,,%;+$+'%%%%$+++++;%';+;+$$+++++;;+;++,,,,+;+;$$$,$$$====$$=$$$,,,$,,$,$=$$$@=$$$$=$=$==@@@@@$$@@=@)=@))$)=@=@=&&@=@@@)@=&@", ")),&)@@)==@@@))@=@=&@@=@=@$==$=@$+$=@@=$$$====+$,,,,+,$,,,,$,,,,$,,,++,++++%+++++,+++++;+++,$,,,,,;;+%%;%;++,,,+;+;;+%%%+;'+$+%+%,+%'++%'%%;%++,+,+++++'%++;+,,,,=++++++++++++++++++++;++++++,$$$+$,$,$,,,,,,,$,@=$@$=$$=@@@=,$=$,====@@=&@)==@)@@==@@@)@))@)@", "@@=@=)@)@@@=@)@&@@@,,$=$===$$,==$)==@)===,,,,++,$$,$+,$$$$+,,+;;+++,,++,++++,+++,++++,;+,+++++++$=$+++%%;+++;,,,,%;%%;%;%;%'%%,++++%%%%%%;%+%+,,$,+;++%;+;++,+,+,+,+;+++++++,,++++,+,++,,,,++++;++,+=,$=$$=$$,$,;$,$$$@=@@=$=$===$$===@$===@)@))))=@@)@)))=@$@", "@@=@)=)&@)))@))))@@$$===$@,$$=$===@=,,,;++++=++,,$$,,,,,,@$$$$,+,,,,$,,,++,+,$,$$,=,,,++,++++,,+%%+;+++;+;+++$#;;%;;%#;+%;%+%+;;+%;%;;;++%+%;++;+,,+++;%++++%%+;++++++,$,$$$$,$$$$,,++;+,$,$,,$+=$$$=,,+,,,,$$+,+=;+;;;+$,@@@@=$===$======$$=)))@@@)))))$=@@@@", "=&@=@@)&))=)))@))))+,)@@=@==@)====,,,,=,,$$,$,$$,==,$=,$$$,$=$$$@==$=$$,$,,$$=@@@=@@@=,,+++''+%;;++,,,$+,+++$,%%;+;+%%%+;+##%%%#'%+%#;+#%'%+++%%%,,++,++,,,++;;;+;%,;+,,,$==@)@=$=$,+$,,$==$$$==$$$$=$==$$=$==$$,$,$$$$$$$$;+@=$@@===@$@@$,$@))@@)@@&))&@@)@)=", ")@@@@@=@,&@@&,$=$,=,+==,@)====@=@=$@$$,,=$=$=+=@,,$,=$@==+,$$$@;,+,$@$=$$$$$;+++,$$$@=''+;+''%+%%;%$$+'',,$,###+++;;%%%'+##%';%%;#'%'##%%%;;;++'##;+$+%#,,$+;,'#%%;+;%;%=$=$$++++;=$$$=$=@,$$,,=$$$,,=,$==,,,,+=$==$$,$$$$,$,=@=@==@@=,==,,=)+,@=,)@@)=,$@)@@@", "))))@@@===,@$=$$==$$,=$$@==)=@===$=$===,=$$=,,,,,$,,,,$$$,;+,+,+,,,$,,,+++$,++,+++%;;;;+%%%''%;;;;%'%%%%%;%;##%%%',++%;%'%'%''+%%%'%'''%%;+;#%%%%%;#%%;;%%%%%%%%%%%',#%;;;++++++,,,$++++,$,,++,+++,,,$,$$,$,$,,,,,$$$=$$==$$$=@$=@@@=)+=$=,===,==,@)$====)@))=", ")=)))=@=,=@@====$===@===)==)=@=)@$$)===$===$$,$$$$$$$=$@=$+,,,++++,,,+,,+,,,,,++++;++++++%;%+;;;%+++%%++%%%;';%%%;+,%;%%%%%'%;+++''%%%%%++$=,'%%;%%,;%%;;%;;++;+++;+;+%+++;;+,+++,,,,,,+,,+,,,,,,,,,$==@=$$$,$$$$,$$=$@=$@@,@==)=)@)=)&=@==$=====@,=@@@)==)@@&", "&)@)@@)===,=@====@@=@=@=,=+=,+==$=$====@,,+,$$,=$$$=$$$+,,,$+,,,+$,,+++,,+%%++;++'%''%%%++%;%'+++++++;+%;%;%;;;;%++#%;%++#%%#'#%'%'%%+;+';%$++;;;%%%;%;;+;;%+;+;;'%;;+,''%%#%+;;++%%;+,,++$,,,+,,,+$$+,+,=$=$,$$$$,+,,,@@===$=$==,===,@=)=@===@===)@==,@)@@)@@", "@@)))@====@@)@@@)@)=)==)$,$$$==@=,=@=@@+=$$;+++%$$$$$$+;++,$,$,+%;%%%%;%,+%'++;+,+%+%++++%%++;;+++%#+,%+%%;++++++,;%%'';,%%%%'%#''%%;%%%%'#'++++++%;;%;;%+;;;+++;;+;%;%+++%+;,++;;%%++,%%%%%%%+,,,,,+++;+$$$$$$;;;+%$$,===@=$==$$,,$,=$==@@@@=@)=)=$====@))))$", "=@,,=@@)===@@)@=,=$,)@==,===$$$=$,===$++=$=+,$,$$$,,,=$,++$$$@=$;,+,++++=++%+;+;+,+,+++++$%;+++++++;;%%+++%+;;$$+#%''%#;%+;;#;'%%#'%;%;#'%%%'%$$;;+%;++;%%;;++,++,;%++;++$+,++;+++;+,+=,,+,+,,$$$@$$,,,,$=,$$,,$,$$+==$,=$@===$===$=,,==@@$=),,@=@@=@@)==@)===", "@@====@)@@===@@@+,,=$$,=$===,$$,@===@@+=,$,=$$$$$,$,$,,,,++,,$,$+,,$+,,+++++;++,+++,+;+%++;+;+;,++;%;+++;%%+%+%;'%;%%%%%+;;%%##>#%%+%;%%%%%%;'%;+;++;%;;%'+%++;';++++%+,+;,,,+;,++;+%;++,+,,,,$$+$+,++,+,,$$,$$$$$$,,$$$$@@==)$+=$,@=$=+=$=$=,+))$==@=@@@$==@@", "@@$,===)@===@=====$=+=,$++====,$+@=@@=$==$$$$=$$$$,,$,$,$;++,$$+$,,$,,,,,,++,++,,,+,,,+++,,+++'%++++;++++$+++;%%%;;+%%+#'+%%'%'''%%%%##+%;;%;;%%;++++++,$#%+++,'%++,,;+,,,++;$,,++,++,+,$,,,,,,$,$,+,,$,,,,$,$,=,$,==$$@,$)===,,==,=$+@++=,=$=,@=$==$=)=====,=", ")$,@===@===,=@,,====),$$,$$,,=$$@=$)))$=,$=@==$==$$==$,++++,,+,,$$=$$,+,+++,,,+;;;;;;%;;+,+++,;+%;#,%++;%,+;,+;+;;++%>+#%'#%''%;'%%%'#''++;+';+;%+%;,$%++%;+'%%;+,++++,+%;;%;;%+;$,++;+,,$$,=$$,,+%,+,++;==$,,=====$$$,==&@)===,=,$$,$$,,==$==@=@==$@@@=====@)", "@===$@@@$)===========$=$$$=$$=,$,+$++=,$,,$,$$$$,;+,$,,,,,,,,,++++++++;+;;,,,,,+++;;++;+;+$$+;+;;%;;;;%%++%'#;+,$%%%+%##%#%'%%%%'%;%%%'''''%%#++;#'%%,%%;;++%;;;+++$,;+;;++++++++,+,+%+;;;+%+;,+,++,,,,++,,++;+,$=,,$,$$=+,,+;$$$@=$=$$==$@=@==$====@$@)=@==,=", "@=====@=$))@=@,=====,$+=$=$$,+=,,++$,$,==$+$$,$=$,,+;;;;,,,,,,,$,+%'%%;,++$%+++;$,+,++;+;;+,,+;++;;;;%+;+%%%%%;+'%';#%%%#+%%;%%';;;'%#''%%;'#%,+%%%%%+;++;;;+%+++$,+;++++;,,,,;;+;+,,,+,%%%%%,,,,$+$,,;;%;+$$,==$,$$$=$$,,,,+$,=$+,,$==,+$====@@$==)=),=,=====", "=$===@===$)))=@$====$$$======,$$,,,$,$,$,$%%$,,==$=++++,$$===$$=$=++++,$$,,%+++++$=$,$+%+'%++,,+++%+++;;##,+;%+##%'%%%;%%+;+%%;%;%;;;%%%+;%%%%'#%%+;%#+;+;+,+++,+++,##;+$+,,$,+++++$,$,$,,,++$=$$=$==$,,,+,==,@$,$+;+$=,$$$,,=,,,======$==,===@==))))=====)@@,", "=====)@@)@==))@===),$====@=,$$$==$$,$,+$$@,,,,+$==++,,$$@@@@=$$,%+++,+$$%%@++%;,++;%%+,,%;%%%#;+,,++++++'%#%';''''%+%%';++++;;%;';+++,++%;%;''%%+>'%%%;++,+++,+++'%%;%'+,,'',+,$#%,=+%$$,+;+;+,,=$@@@=$$,,,+;==;,+,,$=$+,$$=$$$,$$=$==$=$$$$====)@@==)=@@@====", "==@===@@)&))@@===$=$=$$$==$@==@@=@=@$$;;$+$,,,,$+++,,,,,+++++,,,++,+++,%%;+;;;%;;';;;;%'%;;%%%,#%%;;$%##;;%;%++%%%'+'%%%;,$,'%##'%+,+%'%%%#'%'%%;+%%%;''%;++++##%%;%;;%%%;;%;%;+;%%;;+%',+,+,,,,$++,++++,,,,++$@,$$,+;+++,===@@@=$=$$=+==$==$=@@$@@)&)@@,=@===", ")=@@@$=$)=)@)==+===@$==$$==)=@=@@@@$$=+,,=$$$,,$+,$$$$$$,,,,,+;++;,$,,,++;++;++++,%+;+;+;++++;%%%%%#%%';%%%;;%%%;%%'''%;'%'%;%###%';%''%#%';'%%%;$%%%%%%%%+#%%%'%;;++,+;+;;++;;+;,++;++%$,,,+;+;+%,,,,,$$$$,+,,$,,,=$+,,,@,=)@====@========$$==@=)$&=@====@=@@", ")@@======,),$$$$$====$@=$==@=@@,,,=@$$$,,$$$$@$++%+$$+$;,++++%+++++,,++,+++++++;+%;,++;%+;,+;%%%%%%+%%%+++%%;%;%%'''%#'';';%%%'#'%;%'%#%%%#'%;+%;%%;+++;%;%%%%;%%++++;+;++++;+;+,+++++,++$,+,,++%;+%++++$+,$%++;$=$$$,$$,$@@==,$@@)&====@===,=$=,$$$))==,===)@", "))))====@=$$$=$,@,=$$$,===$,,+=$=@=,,+$=,=$==$+,+,,,=@$+,++++++,,,,,=$,$$$+,$,%%%'+,,++;;%+,+%;+;+;;%+%%%++;'%#;;;'''#''%%;,;%%%%;+;%%%';#%'%%%;#';;%%%%;;;%;+;;;;+++%;,%,,++';;++,+,,$$$=,;,,+++++++,++$==,,,,,$==,$$$=;,,+===,$+,,===$$$$===@$$,=$,,===@=)@)", "&&=)@@==$=$=$=$$===$===$=$,,+,,$$=,$;;%=@$,+,,$+,$+%=$$+$$+$,,+,$++%'$=$%%$,+$++;;;;,$,+;;%$;;++;+++$#%;;'%%%'%%'';%%'%''+#''+%%%+%%#>#%%'%%';%+%%'%%%;+##,$++++++%+;+++,+$;%;++;+$=+%$$=+%%;,$,,+$$=$$+$$+;,,++==,+=@@+;;,$==$$=;+,,$$==@$+===$=$======@@)&))", "$)),,))=$@=$=$$=,====$+,=@=,,,,,;=,,++,+++,;;,,++$+++++%%$$$=,$=$$+%;;;%%;%;%$++;%+++;%++++;%,++,$+++%##+%%%%%;,;%%'%%%''>###;,+;+##''##;;%%%;;+%;%%;%'#%#+++;$++;;;;+++;;%;;%+++';;;;%;;;++,,$=$$$,,+%%;+,,,,++,+%$;++,+,,,=,+,,,+$$=@;+,=,@$$=$$,=@==@))$,@,", "==,=,=@=)@,===$)=+$==$,,,,+$,$$,+==,,$,$,,,;;%=,,,$+,,,%++,+$+,$+,++++;+;++;;+%%++;%%%$+,,++++++;%%%%%#''##;;;%%%+%%%%'''#'%'#,#%#%%##'';%%;%+;+%%;###'%%%%'%+;+,+,+++,++'+#;++%+;;%+++++++;;+,,+,+,,++$,+,,,$+,+;+,$,,,$,+$$,,$$$,=,,$,,==$,@=====$@@=),==$$=", "=$$$=,=@)),=$=$,==@)=,===$)$=$$$;,=$=$$,$+$,++++%$=,+,,,++++$$$$,,,,+++++++;++++++%%%%''%$$+++%+%;+%%;;%''''%%;'+;%;+%%%###%%'##%%%;'#%%%;%++%+$#+#'%';%%%%%+%,+;+++=;%%'%%%;+++,+++++;;+++,+,$$=,+++,,,+,+,$%+++,,+,,$$$=,$=,,,$$$@$=$=$=@===$$====$@===$==$=", "$=@===$@+@)====+,====;$====$@=$$=,,$@@@$@==$,,,,+,,,+,$+,,,++'+'+$$,,++,,,,+$;+++++;;%+%%++'%'#;,#%#%+++%;%%%;%%%%;%%%+%''#%%%'%#%+;#%#*%+%%+%%;''%'%;;++;%'';+;%'%;;+%;%+;;,,;;;;++,++;+$,=$,,%%%+++,+,$,+,$+,+,,,$$,==@=@,,,=$=@@@$$=======$$=$==,=@=$=,==$$", "==,=$=$@==$=$==$=$===$,,$=$===$=,,,$+==$$+;,,+,,,++$,,$,,,+,++;+%%+$=$,+%++%+++++++++;;;;%+%%%#%'#'#%%$+++;%'%#%'%%+;+###',+;%;%;+;%'##';+%'%;'%'%%;;;+,+%%###'##%%%+%;;;;+++,+;+;+++;,+,,,,+%%+++++$,,+$,,,;,,,,++++$,=$$=$,,,==$=@@$$,,,=$==$,=$=@@=,,==@@=$", "$=$,,==,,$=$@$,$+,$@,=,,,$+=,$$,+=$$+$$+,$+$,$,,$,$,+,,$++,,,++;%+;',+;%;+++;;%%+$,,,++;+;%%;%%##%'%#'%,++'%+'%'%%;;%;''##>%#%%%%%+%###%';%'%%;''%%%;+,%##''%%##%;;%+%;++++,,+;;%%+;+;%%,+%;+;++;+,,$+$,,+,$,,$,,$,++,,$$++$$,$=,,,,,+$,$==,++==$===$@$$==$+=$", "=@$=$,$=$$===@$$,,=,$$=$,+++,=$$$$,+,%;$+$++$$$$$%%$$$,+;+,++++,+;;;;;%%%%;%+%%+++'++,%%+;;;;%'%#%'##'%%';%%'#;%##;%'>>%'##>>%'#%%###'%'##%%>#%%%'#%%%'%'%'#'%%##+;;%%%;+,,%+++%;%;%++'#;;;;+;+,+++++++,,$$+%,$$=,,,++,+;,%$$$,$$$+,,$,$=$$,$$+=======,=,$$$==", "@=@===$=)==$$=+,+,$=$,$,,,,+,$,;;=,;+;++++,,,$$$,+;++%$,++,,+,,++++'%+;;;;;#++;;;;%''%'%%%++++%%%%';''%%%%%%'''+'#'##'##''###>';>#%#''>#'####'%+#%%+%;%%#''%%%%%%++,%%%%';##%+;;%%+%%;+%%;%+;+++,,,,,++$%+;++,=+,,,,,+++,=%;,+;,$$,,,+,$====$$,++=,==@=$===@$@", "@@@=@===;@===$,$$,$$=$$$$$,$,=@;,,,++,,;,,$,,,++$,++,+%=$,+++$$++,,%;;;'++;,;++++;+%%%%#;;+++%;;;%+;%%'++;;+%'>';%##''%'##*%''#%#''%%##'%'%##%%%%%>+;++'%%;%%;;+++++;;+'%%%;+++++,,;+;';;;%+,+,,$;++,+$%,++++++,,,,$$$$++++++,,$=+,,,$$$$=,=+$,,,$=$)=@===@=@&", "))@$====,$,,=$$$=,$=$,=$$$+$,,,$,,,,,,%++%+%+++++++,++;$,,,,$,,++$%;%'+;+++,+$,,,+%%#'%,+++;+;,;+++>;%;;%$,#####%'%%'%'%''>>#'#%#%>>>#%%%;%;'%%#>##;+;%;;%+$;+++,++;;;+%##'%',+,,,,,++,;;';;$$+++++,,$,;+++,+;++;++++%++,,$,$$$+;,$$$,,$,,$,$$==,==,,$,===@@)@", "$=@==$$,,$$,====$$$$=$,$,$+,++,,,$,$,+,,+,+,+;++,;+;%$+%++;=,,,,,%;;;%;+%+;'+%#%#'%%%%''''#;++++++,%#'%+%%%%%####;;;%%%%'###>###>>>#''%%%%;%'>%#''%%+%;%%'''$++++,,#%#'%%%%%%'%%+%;%%+++;;;;%',,$$$$;+;%,+;++,+++++;++,++,,,$$+,+$,$,,,$,=,==$$====,=,$,,==$$@", "$@$=,$=$$,=$))===$@$$$$$,$,,,,,,,+$=,=$+,+$,,,,++++,++=%%'+%;$$,+,;%++;+,++%%;%%;%;+;##+'%%%++;+++#;%'#%#+%%;%###%+%';%%;%'###>#>###%''%%'%;%''##%%%++###%%'%;;,++'%%%%'#+;+++%%%;;+,,+;+;+;++$,+$%'%%;%,+++++,+$$$,+,$$+$$=@+,,+,,,,$$==$=$$===)=,,=$$=$====,", "$,$====,+$,$@==)=$=,@@$$$$$$+,,,,,;+$$$+$$$$,$,,$+,,+++%%++%;%;'+++,+++;++;;+,+;%++#%'%%%#%%##%%;;;%'''%'%;;%%''#%+;%#>%+%%%##%'%''%%+++#%%%###%%%;+%'#%'';%;+#%;'>;#'%%'+##++;+%+;+%++%++++++$%+%;%;+;+;++,,+,,,$,$$,,,=$=%;,,+,+,==,,,==,=,=@==@$$$$,+=$=$$,", "$=$===$$$,$,=,==,,$,$$$=$=$=,$,,+,+,++;==$$$$$$+$,+++++%',;++++$$$,+,+;++##$+;+;%,+%%%%';%+'%%'%%%'%%%%#'''++;%%'#'%%#>#;$+;%#;'#%;;++*>#%'>##'%;%;%'%'#'%%%%%%'''%%+%%%%%%%,;++;%,%'+;++,+,,,$++++++%%++++++,,,$$$$$=@$+++++,,,,$$$$=@=@=,,,=)==,$=,$=$)=@=$$", "==;@=@===$$==,,,$=$$$$==$==$$$$,$+,,,+$$$$,$,+$+$=$$,+,%+%++++;,$+$$+,+,+%;%%%+++%%%++;+;;;+>'%'%';%%'%'''''%;%%%###>'###;++;%%%;'++%####'###''%;;;'%;''%%%%'%#%%;+;+;;%+%%%+;;+#%%;%+,+,,,$++=+;+%++;;+++,,$$+$,+,$$=$$+,,,,$$$$=$===,=,,$$$$,@,$;,$=$==@=@==", "+=$$$@@==$$+,$;,$$,$,,$$,=$@@$,=%+,$,$$++,=,%+++,++,$+%;;;,+,;+=,,;,++,%+;;+%;+'%##%;+%%%,,+%##%;;''%+'%%++;+%%%%%#*##'''*%#';;;+%#*++##;#%%%%%%%;'*%;'#'%'%%%#%#''$,;;++;%%#%%++%%+;%++,+,;,,@@%+$,+;+%,==$+,++,,+$+,+$,++,+$$=$==$$$;$=$$=,;$,,,,$$$=@=),,,+", "=$$$,=@@=@$$$,,++,,,,@=+,+,===$$,+;+,,,$$+,,+,,,+$,,,;;%+++++,+++$%+++;;++%%;;;%;%%%;;,;;';;%%''%;%%'''%#+>%'%+;;;;#>#%###*####%%#'#>>#%'>#>%%+;%%%;++##'%'%%'#'%%%+%%;+%%;%%%%'+;;%+;+++,+;;+$++,$++;%+;%+$=,,,,,++$,$,,,,$+++=$=@=;+,$==,+,,,,+,$,===@$$=$,$", "$$,,+$=@=,;$$$,,,,,,+=+,,,,++==,++++$,+;$=%%$,,$$==$;,+;++,$+,+$$%;;+;%+++%+%+,+;%%%+%;%''%++%%%;+%%%%%%*#%%%''%%%%##>>%##>>>%#%#**#>##*####;%,;'%%'%##''%%;+%%%%+;%#%%%+++%%+;;,%%;;+++;;;;%'$+++++,;+;+,$$=$,$,,;%,,$++,%+,++$@=,,,,++@@,,,,,,$$$$$,$$,,,,,$", "$,,,$$$=,=$,$,$$$,,,$@++,+,;%$=,,+,+,+++;+;++;%$+'$$+,+++,+,++;'+'%;+;+;##,;+#%;%+++;;%%%%;,++;%%##+;%;####;'%%'##%'##>%''###>>+*###'''##>'%'%*%''%##'#''%+;##%%+++++'%%;%;;,++;#%;+''%%%++,'#+;+++;,++++$$$;%,%+;+++;+++,+,+,,+,,+%,;+,,=,,,$$=$,+$$==@,$$+$$", ",=,$,$,=$$,$,==$=$$,,=$+,++,+++$$,,,$,++++,,++++%'%+;,;;,+;,++++;;;;%#++'%%%%%++++,+++%+%;%%;,+;%''#%;;'#%'#;>>##%'%##'>'%''#>>*>###''>>#'#''%#%#>#''%##;+#'''+,$$%#%%;+;+,,,++;%#%%%%;;+'%%;%%;+,,++,+;,;%%%++$+,,,;++,,,++,$,$+,,+++,+$=,$$$$$=$,$,=,$,,=$$,", "$=@$=$,@==$=$@===@$$$,,$,,++$,+@$$,,$$$,,,+$,,+,+%;++++++;%+;,,;%++++=+++#;%%;%%'#,,,++%;;#'#%,,%;'''+%'%'%%###>#%%%%'###+%!###>##%*;###%'%;'%>###%#''%%'#'%%%%#%#''++%%;+'=+;%%%+%%++;+$++++%+;,++';;+++++;;+,,,,+++'+,,==$$,$++,$,,,$$$$,$,=@==$$$$$=,$=$$==", "=-===$$=)@=$$$;@=,$$$@=$$$$,,,,=,$$==;$,%+;++;,+,++;+%+,,+;,+%+;+,++'%'#+%%%;+;%;#%#%++%++%'%'';%%'%%%%%%''%%'#%';;;;;'%#'>>*#%###>>>%'%'%%+%'%#'%%''%'%*%%''%%;%''%#+%%;'''%';+;++%%';#%%;+++++%;,,++,++++++;++,=,+;,,,=@%+$$$=+,,,+@$$==+==$@==$==@@$,,$@=@$", "@$=)===$,=@@=$,+,$$,,+,@$$$,,,,+@$,%++++,+++%,;;,,+++,,,+,%+,,+;+;+$%;%%%%;%%$+;'%%''%'#%%%%'%#;%%'%####%'%%%'#%%''++;%%%>#>#*#'#>>>>#%'+++'#%%%#'%%;'###'%%%%;%#%%%%++''#''%%%;,#%%;%%%%;%+,,,;+,+%+++,+++,,,,%,+;+++++%+++$=+++,$$=,==@+,$$=,,+==@)$$$$@=@==", "==$@@=,+,,==@,$$,+,$,,,$=;%++++,+;,++++;+,+++%+;;$$$,$$,,++%,++,'%++;;;%;+%;%'+%;%%%%%''++%##%%##;%%%'###***#%'>*#%'>%'%%#>#*>#%'>#>#'%%;%''%#>>%*>%#>##'#%;;>#';%##;%+'%%'%;%%%%%;+;%;%;;+%;',+++%;+,$$,,$$,%+++++;;+,,;;,+$+,;;,,%+;=$,,,;;,,$,==)=,+,$=@=@=", "+,$==$,$,,+;+$,$$+,++++,+,++++++;++,++$,,++++;;++,+;++$$,++%%''%%%%%;;++++;;%%'%%;+;;%'#>##%'#%#''#+%%%#######>###'%>*#%%%###>'%#>##''%+>*##>######>###'%%;+##%##'###%'>%%%+;%+%%%%++;++++;'%%%'%'%;++$+$$++%;+;++++++,,+,+$,+++;,++,+$,,+,,,,$+$;+;,+$,$$=,+,", ",,,+,$$$,$,+,,+,,+,,,+$,,$,,+,+,++$$$+++,,+,,;+;,;;%;++++;++%%'''%%+++%;++++%%'%;+;,+%'''#''''#;%%'%+%;%'####%###>#%*>#%%%'##>*>*###%%'#*>#>>#'##>###%'%%++#''%#'%'%##''%+++;;%%%;+;,;%%+,+%'';''%;+;++++%;+;++;+;+$,,,,+,,$=+++,,+,,,,,$+,%;$$,,,,+,,$$=,+$,,", "+,,,,,=$$,,$$,,,=+,,+,$$$$,=$,,,,,$$=$$,,+$++,+++;+++%+,##+,;';%%%%';+%+%'$$+++%%%%$;+%''%'%%%%%;%%*++;+%*'#';*%%%##>#!%%%;%>>#*>#%%'%%'*>>%'#;%;+##%%+,,++%%;;%%#%#'%'%;+;+%'%%+++,%%;+%;%%%%%;%++%+,,;;;;+;+++,++,,+$,$$$$$+,$,$$$$$$$=,+,,+=+,,$,$$$$,$,+,+", ",,,+$,,$===$,,,,,,,,,++$=@,$$$,$,,,,$$$,$,$'++,,+,+%++++;%%%;#;%;;;%%%;+%%%#;+,+;;%+++;;%;%%%%;%;#%###+$%##>'%#>>'#%'*>>%;;%;#'##%%+%%#*>#''##>##'%>##++;###%+%;+%%;'#%%,$++%+++++,$%%%%%+%%;+%;+;%%%%%++++++;+++,+$=,$,$=%,$,,$$$=$$$=+$,,+$$@,,,$$$$@,,,=+,,", "$,,,,$$@====$$,$,=$,+$++$,,$,,==,+$%;+,+,=$++++;+,++++$;%%%%;%%%;++;++%%%%'%'%,,++%+,$+;'%#%%+'#%;#%#>#%%'##>%###>%'#'>>>%#$+%'#%;,+%;*##'#'*#>>#*###'%>##'#%'%#%+%#%%+++;+;;;;$+''#%%%;+;%+,++'%%+%%;%+=++;,+;+,+++=,,,;;;,$+$$+,,,,$,,,,,$$+,,$,=$@=$,$=,,+$", "=,,,,,=$$$,;,=;+$$$$+;$,,+,+++$$;%%++++%+$+$,+++;;+%;%;++;;+;%%;%++,+,+%;;#%'%#,++%%;+++;%''###'#;''###%#####%>##>#;%%###*%;$+%+%++#,>>#';%;>####>#'%#####'%'##%+%#''%;,+%;#+,+#'%'%%;%;+$+;;'%+'%;;;++;%;++%;+;++,+,;,;++++;%,,+,+$++;,$++,,$=+,=$+$,=$$,,,$$", "==$=$+,,+,,+,,,,++$,,+++$$+,+,$+++++++;+%++,;,+++%;+%%,,,+++;%%%%;+;%+%+;%%%#%%;%%%%%+#'%%''#'#'%%###'%%'''#%####'#+;''#>*'*',''+'*#';##%%+#'>#'#%#'#'';''##';%>###''+;;#%%%++%%%%%%%;++++;;%%%%;%+,+,,,+%+;;;;+,,++%%,+;,%++++%+,,$,,$+++,,$++,+++;++$@,,$,$=", "==@$$,,+,++,+++,,+$$+,++=$$$,,;,+,+++,+;;,++,%%++;;%;'%$$,+,;;%;%%+%%+%++##%;'%++;%+;'%+%;%%%#'#;#%%''#%%%%#%%'**#%>#+#'****>#%%***!**##'%*%#**%'##'%%%''%'%#%##%%%%%%;;#+++;+;;%%;+#'++++%%%%%%;;+$$,,#';%;+;+,%%++++;+++++,,,,+,+$$$,++,,,+++,+,,,+,,,$,$$==", ",)=$$+$$%,%,,+++,,$$,,+,+$,$$+,,=,,,+,,++%$+%+;+++;;%;%%%==,+++;%+%%'+;+;%%%%;%%%>++++;%%;;;;*%%+;%#%;%%%%;%''#'#*##>'#*>>>*****#>*>>*!%#>##*##>##%%%#'%%+#'%%;%%;%+++%%%%>;;+;'%%#'%%++%;%%;%++++;=$+%%;%%;;+'%;+++;;;+,$,,,,,,;,$$$,+,,,$$@,,,+,+,;,%,;$$==,", ",++=+,++,+++=,++,$@$+$,$$$+$,+$$,;$=,,,;++++,,%%;%,+;+;;%%;$++++%+;%+;;;%+%''+;'%'##'#+%%%++%*##+;;'';+#%%%%%%'###>'#>***####>***##*#***>>#**##'%%%%%%;+%%%;;$+>'%;$%%;+%#'#'#''#'%%;;;++;%%;%%+;++$;%%;++++%%;;+,++++,,,$,,,$$,$,,++$=,$,+$+,$=,,,+,+,,,,@@;,", "$+,,=$,,,,,++$$==+=+,,$,$,$,++,$,,++$,,++%++,,+;;;%'$,+;;%',$,+;;%+;+++;+++;%#'#%%%##%%'%%%%%##>#++%'''#'%;'%+;'##>%####>*#''##>>'%#**>>###>'#'%++;'+'#>'#%'+>#>###%;%;'###''%%#'%%%++,++++++;;+++++%;;+,,$%%;;;+,+++++;,,,,,%,,%+,,$$,$$,+,+,$==,,,,,,+$$$,,+", ";+$$,$$,+,,,++,$,$+,%;;++,,$,++=++;;+;+,++%+;;+++%;;;+++''%+,$++%%;$;%%,$,+'#%%%%##''''%+;%;>###>%*+;'##>#>;%*'%##%#%#>#>****;##'!**>*>>####'#%##%%*'####%;;>>>##'#%%;$%''#';%''%%%%+,,+%%+%'+%,,,+'%%#+;=+;;;++,+;%;;,,;%%,;+,;++$$++%%;%,,,,$,$++,,+,,,$$,,,", ",+,$$,,,@=,,+++;++,+++;++%;%+++$;+;;;++;+;+%;$+%%+%%#%$%%%'%$++%#%%%#;;;+,;;'#%;%%%%%#%#%'%%###'##'%*>'#>##%''#'%'>##''>>#'***%%***>*>>##%%'>##%#'+#>###**+%####'##%#;;%%#'%'%;+#%%%++#;+%%'%%%++%'%%%%++';+%%%+,;%;;;,+;++++++;+,,;+;+++;+,,+%++$$,$=$$=$,$,,"}; mtink-1.0.16/xpm/metal.xpm0000644000076400001540000000717010376041214013510 0ustar jjfuse/* XPM */ static char * metal_xpm[] = { "52 62 12 1", " c None", ". c #B9BABA", "+ c #BFBEBC", "@ c #C1C2C2", "# c #C6C6C4", "$ c #B5B6B4", "% c #C6CAC4", "& c #D0D0D0", "* c #D7D7D7", "= c #CBC9C9", "- c #DEDEDC", "; c #E3E3E4", "..+++@@+++@+@+@@@@++@@@@@@@#@@@@@@@@##@@@+++.@+@+..@", ".....++++......$$.$.$............$$$$$$$$$...$.$...$", "%%%%&&%&&&&&&&&&&*&**%*&&&%&%%%%%#%@@@@@@@++++++@+..", "%%%%%%%%%%@#@%%%%#%%#%@@#@@@@@+@+@@@+@@@@+%%@@%%@%%%", "%#%@%%&%%%%&%%%%&%#%&%&%&%&&%&#&#%%&%&%&&%%&&%%%%&%%", "=%%%%%#%#%##@@##@@@@@#@@@#@@@##@#@@#@#%##%%@###%%#%#", "&=&#&=&&=&%&&&&&&=&&*&&&&&&&&%&&&&%=%#%%%%%#%######%", "+.+++@+@#@#@@@@+@#@@@##@@@@%#%@#@@@%@##@#@@##%###%#@", "@@@@++++++++@@@@@#@@#@@@@@+@@@@@##@@@@@@@@@++@@@+@@@", "%#%%%%%%#%%%#%&=&%&&%%#%==%%#%%%#######@#@@#@@@@@@##", "@@+@@@@@@###%#%%%%=%==%#%%#%=##%#%%###%#=%=%%@%#####", "&&&&&&=&=##%#%=#==%%&&===#=##@@@@@@@@@+@@++..++@@+++", "@#%=#######=##=%%=##=%&%=%===&==&=&&&&&&&&&&&&%=&&&&", "#@@@#@@@##@@+@++@##@@+@@@@##@##%###%%#==&====%#%####", "==&#&&&&=&%&&&&=&&&&&&&&&&&&&&=&&%=&==&#%%###=%#@###", "@@+@+..+#@+++@#%#@########%#####===%&&%&=&&=&&&%&%%=", "&&&&&*&&&&&&&&&=&&=&==&=#=====&==&#=%&=&%#&#####@@@+", "@+@+#@#@#%###@#%##%######@#%%%%==%&&==&%&=&=#&=&&&&&", "=%&=%=&&#&=&%=&#&====%=&&====#==###%%#####@@+@@@@+#+", "#=#%&=%=&&&&&&&&%&=%##&==%##==%&=&%==%===%=%&&&=&&&&", "#%=#=#=%####%@@@@#@@@######%==%%#=&%==%%=%=##=%#@##%", "&=&&&&&=#&===&&&=&&&&&&&&&&&&&&==&=&====%&=#####=###", "@@++@+#@####==&==&&&&&&&&&&&&=&&&&&&&&&&=&&&&&&%&%=&", "@@@@@@##@@@@+@+#@+.++++..$+..+.....+@+@##@@@@++.+@++", "=&=&&=====&&==%&=&=&&%===#####@@###@###%=====%#=##%#", "=###%#%@##@@###@#@#+@@@@#%=%%=&===#&=&=&&&&&&=&%=%=#", "&&&=&&&&&&=&&&&&&&&&&&&&=&&&&=&&&&&&&&&=&%==&&&=====", "==%%#==#@#=#######%##=##&####%######=%%===&&&=&*&&&&", "%##@@@##########%##=##@########%%#==&#=&&&==&&=&*&=&", "*&&&*****&&&&&&&&&&&&&&&&&&&&*&&&&&&&*&&&&&&==%%%==#", "&&&==%====&=&===##@==&=&%&=&&&&&*&&&&*&&*&*****&*&&&", "+#=====%&=%=#==#=#=&==&=&===&&&&=&&&&=&&&&&=#&=&&&&&", "==%==&=&&&&&&&&&&&&&*&*&**&&*&&&&&&&==#@@###@##=##==", "&&&**&*&&&&&****&**&&&&&&&&&&&&&&==&&=&&&=&=&====#%#", "====%%&&&&&&&=&*&=&&&&&&&=&&&&&&*&&&&&&&*&&&&****&&&", "#=##=#####=##&##=%=%=====&#======&=&==%===&=%###==#&", "&&&&&&&&&*&&&=&&&==&==&=&&&&&&&&#&=&==&&%%==&#==####", "&=======&=#=#%###&###====%==&&=&&#&&&&&&&&&&&&&&&*&&", "--*****&******&*&&&*&***&*&&&*&&&&&&&&&&&&&&*&**&**=", "*&&*&&**&*&**&*****&****************&&**&--*-*-*-&-*", "*-******-*-&-***-*-****-*-*****-******&*****-*-*-***", "&&&&*&&*&&&*&*&&&&&*&*&**********&*****-*-*-***-*-*-", "&&&&&*&&&&&&=&&&&&=&=&&&=&=&=&&&*&&&&&&&&&&&&&&&=&=&", "*--**---*-&-*&*&*&&&**&&&**&*&&&&&&&&-&&&&&&&&&&&&&=", "**-;***-&-******&*****-*-****-**-*--*-**-*-*-******-", "*&&&&&&***********&&&&=&==&===&&&&&&&&*&&*&&&****-*-", "-*-**-****-*-**-&*-*****&*&&&&&&&&&*&&*&&****&*&&*&*", "**&**&-*---*--**--**--*----*--*******&*****&&*&***&*", "**&&*&&&&&*&&**&****&***&***&*****&***&&&&&&&***&***", "*&***&*&&&&&&==*&&&&*&&&*&&&&***&**&&&**&&*&&&&&*&&-", "*&***&***&&***&**&&****&-***&*&*&&**&&&**&*&***&**&&", "*-***-****-****&**&&&&**&*&**&*&&**&**&&&&&*&*&*&**&", "=&==&=&&&=&&&&&&&*&&&&&&&&&&&&&*&&&&&*&*************", "*&*&&*&&&*&*&**&*&&**&**&**&&*&*&*&*&&*&*&**&&&&&&&=", "&&&&&&&&&&=&==&==&=&&&=*&&*&&*&&=&&&&*&&*&&*****&*&&", "=====&==========&====&&=&=&&&===&=========&=======&=", "=&=&=&&&&&&=====%==&#===&=&==&=&=&==&=&&&&&&&&&&====", "####=%==##=======%=&========#==###=###@@+@#+##+#=###", "=%===#====&&%=&&==%==%=%%#=##@#@@@@@@@@@@@@++@++++@@", "++@@@@#%%#######%##=&#%===##%=#%#####=############@@", "@@+@@@@@@@@@@+@++@@+@+.++@@+@@+++++@@@++.+++.+++++..", "#####@##@#@@+@+++++@+@@@#@@@@@@#@#@+@+@@@@@@@@##@@@@"}; mtink-1.0.16/xpm/Bluedrops.xpm0000644000076400001540000005130610376041214014345 0ustar jjfuse/* XPM */ static char *magick[] = { /* columns rows colors chars-per-pixel */ "96 96 103 2", " c #cecececedede", ". c #94949c9cbdbd", "X c #f7f7ffffffff", "o c #8c8c8c8cb5b5", "O c #efefefeff7f7", "+ c #bdbdb5b5e7e7", "@ c #adadadadcece", "# c #c6c6cececece", "$ c #bdbdbdbdd6d6", "% c #bdbdc6c6d6d6", "& c #7b7b7b7badad", "* c #9c9c9494bdbd", "= c #dedededeefef", "- c #d6d6cecee7e7", "; c #9c9c9c9cc6c6", ": c #c6c6c6c6efef", "> c #9c9ca5a5c6c6", ", c #c6c6cecedede", "< c #94949494adad", "1 c #84848c8cb5b5", "2 c #e7e7efeff7f7", "3 c #dedededeffff", "4 c #b5b5b5b5e7e7", "5 c #a5a5adadcece", "6 c #dedee7e7ffff", "7 c #b5b5bdbdd6d6", "8 c #94949494bdbd", "9 c #f7f7f7f7ffff", "0 c #cecececee7e7", "q c #94949c9cc6c6", "w c #bdbdb5b5d6d6", "e c #adadadaddede", "r c #deded6d6efef", "t c #adadb5b5c6c6", "y c #9c9c9494c6c6", "u c #b5b5b5b5c6c6", "i c #9c9c9c9cb5b5", "p c #c6c6c6c6dede", "a c #84847b7bb5b5", "s c #8c8c9494bdbd", "d c #efeff7f7ffff", "f c #84848484b5b5", "g c #e7e7e7e7f7f7", "h c #a5a59c9ccece", "j c #a5a5a5a5cece", "k c #b5b5b5b5d6d6", "l c #73737373adad", "z c #94948c8cbdbd", "x c #d6d6d6d6efef", "c c #cecec6c6e7e7", "v c #94949494c6c6", "b c #cecececed6d6", "n c #8c8c8c8cadad", "m c #adadadadc6c6", "M c #d6d6d6d6ffff", "N c #bdbdbdbdcece", "B c #bdbdc6c6cece", "V c #adadb5b5d6d6", "C c #7b7b7b7ba5a5", "Z c #dedededee7e7", "A c #c6c6bdbde7e7", "S c #8c8c8c8cbdbd", "D c #dedee7e7e7e7", "F c #ceced6d6efef", "G c #efefefefffff", "H c #c6c6c6c6e7e7", "J c #adadadadd6d6", "K c #bdbdbdbddede", "L c #b5b5adadd6d6", "P c #a5a5a5a5bdbd", "I c #e7e7efefefef", "U c #7b7b7b7bb5b5", "Y c #dedededef7f7", "T c #d6d6ceceefef", "R c #a5a5adadc6c6", "E c #dedee7e7f7f7", "W c #737373739c9c", "Q c #9c9c9c9ccece", "! c #b5b5bdbdcece", "~ c #6b6b63639494", "^ c #94948c8cc6c6", "/ c #73737b7ba5a5", "( c #94949494b5b5", ") c #d6d6dedee7e7", "_ c #e7e7efefffff", "` c #d6d6dedef7f7", "' c #8c8c8484bdbd", "] c #cecececeefef", "[ c #ceced6d6dede", "{ c #c6c6c6c6d6d6", "} c #8c8c9494b5b5", "| c #84848484adad", " . c #e7e7e7e7efef", ".. c #deded6d6f7f7", "X. c #a5a5a5a5c6c6", "o. c #b5b5b5b5cece", "O. c #9c9c9c9cbdbd", "+. c #94948c8cb5b5", "@. c #d6d6d6d6e7e7", "#. c #9c9ca5a5bdbd", "$. c #84848484bdbd", "%. c #a5a5a5a5d6d6", "&. c #b5b5b5b5dede", /* pixels */ "K K k H p @ @ k K k o.k o.k K O.o.K @ o.H 0 p K K 7 o.o.% @ p X.@ k k $ 7 H K X.K &.p J o O.J J k p 0 @ k 0 K @ k k o.k K p X.p @ ` ..7 @ k X.0 K $ K k o.p p @ p J ( $ p &.k K ! G 3 @ X.O.%.&.", "$ K k K K m k k @ K K $ @ o.K @ k p $ k K o.@ @ 7 m o.$ K ! c @ 7 K p p K K $ @ H K H &.O.@ J k K $ K k o.k k $ p p k 7 k $ X.] @ ..H X.X.p K H X.m 7 K m @ k m &.@ X.k k @ K H o.0 K O.X.8 8 h ", "@ k o.k k $ K K 0 k m K K @ k o.7 0 p p K k $ K H H , ..[ K p X.x p K p k K 7 m k @ K m X.@ k K 0 o.K k K $ p p 7 K k K K $ @ H m K k P X.k @ X.k $ 0 H K K H H P X.X.k @ K K $ P @ i ( O.S o X.", "7 k o.k K K K k @ k 7 K K k K 7 o.K 7 K K 7 p p K H K E H ] p &.K k $ p X.k K 7 $ o.k o.@ K K 0 K R p @ p 7 k X.K K m @ 7 m k H P H K K k R J $ p H 0 K @ $ p 7 p p K K @ K o.R 0 F K o.&.X.h K ", "K k o.K K K 7 $ k K K k m 7 K o.K K o.K $ @ p @ K K K ..$ $ @ O.7 @ k p @ K K o.K K H K K % @ o.X.o.x @ 7 @ K $ H K o.k K K K K m ] K @ m X.k k X.P > m @ K K $ K k @ m @ K o.$ X.@ k $ K p &.p ", "K o.o.K $ 7 o.p 0 K o.o.7 $ o.m 0 K k K $ @ p @ 7 w $ p m X.X.O.p k @ p p ] K P K $ $ t w K $ F ..K $ X.H 0 p k K k $ K 0 H $ K 7 K o.@ H p K &.F $ k H K o.7 $ p @ R X.$ 0 m 7 p p K K p p J X.", "H $ $ 7 $ $ o.K #.o.p $ p x K o.K $ m K k @ H o.p K K 7 P O.O.8 k k $ 0 K K 7 $ x 0 K @ K K 7 c P k H 7 o.k k K p @ K R o.k o.K K o.7 p ] K @ k H k $ p p K p x 6 K K $ K x o.H H k @ @ @ k m @ ", "H $ 7 o.K F K $ ..7 o.@ K H o.K K o.@ K @ m H k p &.K $ k o.H K K k k p @ @ 7 K X.@ @ @ K k X.k @ o.K R @ H K R $ X.0 7 K K K ..p 7 p K k @ @ k k o.@ @ X.m k k p O.o.o.$ ] % ..H $ K H K $ @ K ", "X.k H K o.o.k @ K X.k $ K 0 ..x $ 3 o.@ H o.$ k K @ K K K k K O.k p k 7 K K p m K o.$ K % % K 0 D G H p $ o.0 K K o.$ t , r ..K 7 K k c K o.K 0 k H $ K H J J &.J @ X.j k k @ K X.X.&.J k o.o.$ ", "p 7 $ k o.K K K K k p F r $ o.m $ ] o.K F $ p p k o.0 p k @ K o.K p k 7 m @ $ R H t E r 0 g = 2 = r % m w w p K $ m o.! H { K $ R p k k k k k K $ $ K K X.( X.O.* > h X.&.K k k %.8 J p K @ m $ ", "$ o.$ K K K k @ k @ K F x $ $ 7 $ K o.K $ m p 7 X.k K @ m @ k o.p K k K o.k ] H ) p G = = d ) ..= 0 $ o.K H p K &.K $ $ H % K K O.K @ X.k k m k m @ $ K @ O.&.O.X.X.8 O.@ @ X.k * o &.p H K H , ", "6 F H $ m &.p 4 K k K F ! K F o.K $ o.7 K ..K k K K o.k 0 0 K K k R K k o.K R ! % ! % r r [ ) r 7 m 8 @ k X.@ O.K K K H K @ +.R J @ o.p K k p @ p K @ @ @ X.J k @ X.K K X.O.X.. 8 @ J k o.m m ", "H $ o.m @ K &.@ p K x r x u o.K $ H o.m K p H K K K o.J @ p k X.0 k m K k k p @ $ $ ! , = [ 0 = ` o.@ > X.J P 7 A H @ m k $ k J c k K K K K k @ k ] H K K K k K 0 K k p k O.X.O.j O.k H p $ K 0 ", "p J X.@ K K K K $ K = x x o.k $ p K m o.K o.@ $ K K $ 0 k p K K K K o.p k K ] H H o...G 0 H , F $ X.X.> X.&.@ H K J X.K p k O.X.p @ K $ @ K K @ H K H $ m k o.7 w o.K K @ @ &.O.K m p p k @ 0 p ", "&.j O.j $ o.X.o.$ 0 2 $ , o.K H K o.o.K H o.K ..o.@ R p X.K k k X.$ @ p k o.@ P k m p H K p $ % J O.O.8 q k K H p @ m H o.o.@ K p k K k k K K K H $ 7 K o.K 7 o.% w H p k k K J K 7 p K k H 6 p ", "; %.j @ p p 7 % K = _ N p o.H 0 K $ $ K o.P 7 H X.O.O.K X.0 0 &.K H m @ k H 0 K K 3 @ @ ] K o.@ @ O.q S } J k @ k 7 K 0 t K K $ ] $ K k K $ X.H o.@ @ @ $ K o.H 0 o.$ H k k &.K 0 k o.k $ K K i ", "X.O.@ K k p w k I r x ..H K $ @ @ k k H o.p H K @ @ 0 @ p K @ $ @ K $ K 7 K o.k o.o.K ] H H @ $ h 8 & C X.k p H k k o.H $ 7 P K 0 J o.K K o.@ H k o.@ K m k k 7 o.P o.K $ K K K k P p ] 7 k k X.", "K @ @ K @ 7 @ H X ) , x H @ 7 H $ k @ H o.7 K K @ X.p k K k p p K ] K H o.K o.k K o.7 K t k i X.S 8 | +.&.K K $ X.@ @ 7 o.k K F m k K K m @ m K $ H K 0 0 p k $ x k ..0 o.K #.@ $ @ @ m X.o.$ K ", "p 7 k p K $ o.6 X @.H % m @ o.K X.K K H K H % w #.X.k k k @ H K H H K K o.K $ K K o.@ K k $ @ k 8 O.O.X.K p &.o.( K 0 0 p k H $ K K K K K F H x t K @ $ k 7 k K G H _ 0 k 7 X.K H H $ 7 p k @ @ ", "p @ P $ @ t P r x N % w k p K 7 $ p K @ K H K $ X.p k K K o.K K ] 0 $ 7 X.o.@ o.H K % H K K o.@ J k &.k H p &.o.K 0 k X.@ #.K o.$ $ 7 m o.K 7 o.k K o.p X.o.K K 0 o.m @ R m w 7 K K 7 K 0 K 7 p ", "] o.$ F $ p $ $ r t o.p K 7 @ K p K X.m K K o.o.O.k X.k p k p K o.@ X.m X.k 7 p p K $ K o.k @ X.@ k @ J $ k @ X.K H @ $ x p ..K $ p F K $ $ @ o.k o.@ p @ @ k R c m #.k $ K K @ H K 7 K k m p ] ", "] o.K 0 k , $ @ o.#.O.X.X.@ k K k $ p K F K $ K K &.k H K K K 7 @ o.X.R o.k k p @ @ o.K K $ K K k K $ $ K K k K k H K K 0 R o.X.! H r $ K K $ k K K @ K $ k 7 k $ X.k k m @ X.X.p K o.K $ k p k ", "x J @ o.( @ o.k K H K k @ k p k X.@ p @ @ o.K % K k w p @ K @ $ K K $ @ p k R k o.K $ K H $ K p $ H $ K K K 7 c K H @ m X.@ ] = r ) x p H H $ K p ] @ K 7 $ K K H k H H @ @ k p @ 7 X.$ K 7 K X.", "J X.J p &.K @ K K K k p K J K m K @ p k p K $ o.&.$ &.K @ K @ 0 7 K $ @ x K k K 7 K $ k 7 X.o.&.$ H % H K $ @ K m k X.K H ..K i p [ F K $ P O.k k m #.p k K H $ $ $ k p k X.p p J x K K H m @ $ ", "p k H ! , u H $ ] o.K p 7 X.o.@ K K K p K [ F % 6 p @.% , 0 o.m o.k @ @ k K K o.H K $ @ K 0 K O.0 $ @ ! K m $ K K k o.K o.#.R x ! w 7 J 8 h k K K x p k K @ X.$ 7 F ..R o.&.K k $ K m k K R w ", "K o.K u H ! F K H @ 7 K K $ p x K @ o.7 m m K 0 - $ p 0 % { H m p p H 0 p K K k @ K @ m m K @ #.] x k ! $ H $ K K K $ H H 7 k x K u X.* ; O.&.K K @ p K k K K 7 0 $ K H $ ] K ! k X.$ @ o.H $ H ", "K o.$ o.0 ! $ o.K @ o.m k o.k p J @ K K k m o.K K K r = F @.3 c p 7 J k k $ &.$ $ 0 K K o.0 k K K k m H p 0 K $ o.@ m 7 o.X.@ F o.$ p J ; O.%.k K m K K @ $ k @ $ o.k $ o.K $ o.K X.K K $ K o.@ ", "x K H , r H F K K o.k @ K k @ K X.k k @ J K p 0 p K F F p c K X.X.@ w K k o.k K X.$ k o.@ 0 @ K k $ p G r x ` p K $ @ k $ K p H o.K K &.p 4 K k $ @ K K o.@ $ @ o.K H H ! p K 0 K m 7 o.@ o.@ 7 ", "K P $ 0 ] K p X.K p K 7 H $ K K K H K O.@ &.X.O.X.m $ K $ 7 %.8 o @ K K k @ o.7 K H $ K 7 0 @ k $ 0 p x $ o.K k F F p c p K p K K K k R k K k j $ o.K H k k H F K H [ K ! c o.K K K K K K H p 0 ", "] o.p x p 7 k * @ 7 k w H $ K 7 p K @ O.k k * 8 7 @ @ P > O.8 f n X.k @ k 7 $ $ o.K m 7 m p K K p _ p ) $ $ K 7 K p &.H K m k 7 J k $ @ $ K K k @ $ 7 $ o.X.$ H G G = ` p ..$ p @ $ $ K ] H k 7 ", "o.P o.p $ k X.%.o.k $ K K o.o.> m @ o.k p K @ J > O.#.. 8 8 l / | J K p p K K , k $ k ] K $ p K ! F % r p ! p k p K o.H p @ H K H K K K 0 H $ X.K F K K H ! K H K , K % % Y 0 0 F p @ @ 7 o.@ o.", "K p $ p K k X.J k o.7 k 7 k $ @ K , K o.J K @ K ] K 7 X.q 8 U f %.K K &.o.o.$ H $ 7 m p @ R K X.K ) , G p P K K @ o.O.@ K K 3 K X.O.@ ! $ P k K o.H m m K $ K F , , o.! $ Y , $ F k i R k k K K ", "P k k K i i O.@ @ K o.#.K F K K 0 m w @ x 7 H o.K @ k H @ O.X.o.0 K 0 K @ ] ..$ k 7 &.K c K o.r X g r 0 $ k @ H X.p H % F o.F K J p p p k k K % k p H p &.m k p o.% o.m 6 % K , + s f O.k K H p ", "@ K K $ K p p O.$ p 7 J H K m k p @ K k H m K o.k k K H k $ K p k P $ k o.0 ` K O.@ @ K K X.u r g ) % p o.@ $ K $ K K t $ @ $ X.* k k K k $ K $ m J K @ o.@ K p K $ $ o.r K 0 - %.Q O.J H $ m m ", "k k $ &.H k p &.H H $ m K $ m K K @ K @ o.#.c H m 7 K K m K p &.K o.k o.m k m P < > k K H ! p 9 . o.H o.k p 7 K $ K u K $ k O.O.k X.K o.7 m t w $ $ o.k k K K K $ K 0 x K H m S s O.7 0 p k K ", "@ K H m $ > K $ R k k $ p K @ k @ @ K K 0 o.K o.@ K K o.@ K p k $ @ 7 K k o.m @ 7 K K H % N @.X 9 r ! T k $ 0 7 K k H $ K K k &.X.K @ ] K K ! c K $ K o.$ $ K $ p K @ k k @ K @ 8 f 8 @ k k k w ", "K K p @ 0 @ K k K $ k @ k $ 7 0 H K 7 o.K $ H $ p 0 k k @ k o.@ k R $ p p K $ K K p H , o.o.D g E , m T @ $ p R c 7 p k o.o.X.J X.K k H K K K = ` K K % K K , $ J K k K K @ O.n 8 s X.K K K $ o.", "F o.o.7 x m K $ $ 7 K K H K $ K R w K p K $ ` T 0 0 J k K $ K p ] k $ K k k k k $ t X.m $ @.X O c $ m K X.K K o.0 k k K $ K @ X.X.K $ k $ o.K H H ! $ o.$ w $ 7 m p @ @ k k @ J X.J @ K $ @ X.k ", "$ $ $ @ $ @ H K K K o.m @ K K p K 0 K K P R 0 0 K K O.@ $ k k K 0 X.k $ X.k $ k 0 K @ K K F = N N K K c @ H K $ K @ 7 0 K K k X.X.k K m K @ 0 p $ X.o.k $ K p K @ 0 k p K K @ @ J X.@ @ K $ p x ", "K $ @ K $ k H F ..F 0 k o.p 7 @ w K X.k 7 H F k P @ ( X.K K k $ k O.p 0 &.K K k @ K K p k o., { o.K p K X.H u 7 k @ k 0 k X.X.X.X.J K R H m H $ @ R k k K K K @ k H 7 K $ K $ k k @ 7 ] H $ @ O.", "0 k K o.t 0 ) 9 ) r x ] p k @ o.7 $ @ K o.o.p k @ X.J o.$ $ u p 7 w K K o.K K k K $ K X.p c p m X.k O.@ k w K K 7 K x p X.@ 7 K J K p K $ m @ k O.@ @ O.X.@ @ X.K $ K $ @ 7 o.o.@ k ] k P K % p ", "p J K K % G 0 O x 0 $ m X.#.k K o.K H F w @ 7 o.J k J @ K H o.x 7 k K $ R o.K @ R w @ k K @ K j @ k j m K K k K X.@ @ k o.K H K o.p K $ K K K p k K K $ K K $ p K @ m K K $ K K 0 K K k o.K K % ", "K k o.$ $ = { = p $ o.J J k K K H k m X.@ K H H k K $ o.K 7 O.&.$ @ k K $ p p 7 c H K K H k K m k k K &.K $ X.k X.K K H $ $ p t K % o.o.N $ k k k k $ K K k k p K K m 7 K o.7 @ K @ @ K H p K $ ", "J o.k 7 w 0 o.0 K p J O.8 8 J $ K K F p K $ R m K K K K p k J K K K H ] K $ &.m k R $ @ K p k k $ J K m k K m p K H $ $ $ [ F % , K u { $ @ t k o.K 7 K p @ K p k H k k $ K H K o.@ o.p p k 7 o.", "X.k K 0 H H o.$ @ X.8 | f 8 o.K @ m $ X.@ k o.H H $ 7 o.@ J p K k @ K K o.o.K $ K @ x @ k 7 m k K k K o.K $ @ H i R $ $ K 0 , p 0 r [ r p p K K 7 x K K K m H k m K 7 o.K K K m K ] K p K K H p ", "k K K $ K @ o.K @ ; z s O.J K K K K K o.0 K 7 k % o.m o.m @ K o.K $ 7 o.@ k p K K $ ] $ $ $ H H o.K p p 0 K o.K k K K @ P o.$ ..$ r x = $ ] p &.X.0 $ o.m @ K m 0 K @ o.K H $ $ 7 K $ @ o.@ @ > ", "p K $ O.7 X.K K K &.O.* ; @ p H @ K H 7 p @ $ 0 k K o.K = x ) , F p p k @ $ K @ $ m K 7 $ $ 7 o.K 0 H K p k 7 K k &.k &.p K $ H t % % F o.K J ; @ K $ o.m H H % 0 k o.7 K 7 o.@ K , H H 0 p &.k ", "k @ K k 3 K 0 k k J J &.K K $ o.m K o.R c m K K K 6 % % d D , ) K @ m k 7 H p P p @ _ K K K m H m p K k K o.K H X.X.z > j O.m p p K ! Y $ J 8 z H p ] o.R H o.o.k K p H $ @ $ @ p , T 0 K k J p ", "o.@ H $ K $ k m k p p 7 k p K H P p k @ H ! = 2 = = g Z 9 r F K $ J 7 K $ 0 k K o.p p $ 7 @ k K m K k P K K $ @ O.> X.k X.K X.@ > h &.K s & W q R w o.X.k K K p k $ @ k &.k o.K ) ! % $ k K k ] ", "$ k K 7 K $ k K 7 k k k @ K $ K k 0 K K , o.0 , b = O H K o.&.( k o.H o.w p &.K p @ o.@ $ H o.K p R k o.K $ K k @ @ X.X.( X.O.5 X.s W C C %.P $ K 7 p 0 K k $ 7 k k K K 7 H D p - K $ k @ K ", "p K K K p k @ $ 0 &.K K $ K $ K o.p H p H ! x , g g g 0 E % w X.@ 1 $ @ p R w K 7 k $ R @ o.@ K K K H $ p p p k k @ K p K k k K 8 @ X.o o | W 8 p H K o.K 0 K $ $ 7 K m K k ! K r o.$ 7 m J o.K ", "K K 7 K $ k 7 $ K @ @ o.k o.m @ X.o.k @ ! m H K 0 @.- 0 0 K K @ > ; p @ 7 o.k @ K o.K @ o.K o.K 7 m K 7 K p p k k @ 0 K H K K K p 7 O.C | | ( H K K o.K x 0 k @ $ $ K k p k F ) r $ p K K K p H ", "O.@ $ H K K $ @ K o.K K H K $ $ K K K o.k m $ K $ - o.r o.K @ %.f 8 K @ K $ K $ K @ $ k 7 H K p k o.x p k @ k @ K k 0 J k @ $ k k &.p p H 7 K H 0 7 k p 0 k #.@ o.$ o.@ p o.E r x % p K k $ k o.", "K H $ X.#.o.k $ k @ k 7 K % @ o.$ K H 7 H K H ..K H o.H i X.o 1 S 8 H X.F m $ w o.@ k $ K p K K K k K k k o.p H K 7 p o.k $ 7 w m K 0 K K k K K K @ P k K k o.0 K p k K p , d D K $ k @ k k o.$ ", "m k 7 w K K 7 w 7 k H K c H K H H p K o.K m X.k K K 7 K R X.%.q S y H X.H @ K $ 0 p p 0 k k @ P K o.7 @ K K p 7 K K $ k o.K o.k K H $ X.w $ k w 7 $ k K H 7 X.m K 7 X.$ K g 2 P @ o.J K K o.$ ", "H $ K K o.k @ $ @ @ K $ K H x F o.m o.@ K k K 0 p K p K J } O.f $.%.K V k K H K o.k @ K @ o.K K K K K K 0 7 w @ $ K @ K K F $ p % $ P m ..0 k w K p K o.7 K k k 0 k m K % X # o.H p &.p p o.p ", "X.k 7 K K K k @ K 0 K $ = 2 , ) X.k p @ 0 k $ ] K k K O.O.S | a o.k k k $ o.m R o.k 7 K K 0 K 0 X.&.o.K p 7 o...k o.@ @ 7 F ..K K $ k K o.K m K ] K $ k 0 K @ H o.k o.o.G G 0 b @ O.J K K k p K ", "$ p p K O.@ K H K p o.t F @.$ $ X.@ K X.K @ o.7 K @ K &.J O.* ; 7 K k o.K K K K F K $ p o.$ t $ K p k @ k $ 7 $ o.k K $ 0 ..F $ @ o.@ K K H @ $ K K K $ 7 k o.k p K $ K d ..% $ k @ k k K @ k @ ", "p K K K @ K K P $ $ m o.p p X.X.@ X.K k p K p K H o.m @ X.J K M K K 7 m 7 k o.K k R @ K o.K o.$ o.K K $ o.$ K k k o.K K H K o.O.m K 7 K H p m 7 @ K $ k @ 7 c K p @ @ $ ` K o.$ k @ k @ K K K H ", "K K $ k P @ k k o.$ 7 K p K O.O.* n @ k p H 0 K $ $ o.H K H k X.k $ K K H H $ K K $ o.K K 0 K r _ % u $ o.K $ X.K o.k k K t X.i X.@ o.$ K $ 7 0 #.K @ m k o.K K K @ k K p X.X.@ O.O.K p ] p O.@ ", "0 K #.@ p H k m K $ $ p K &.X.J J O.K @ k K K P K p m K o.K o.o.k K $ 7 K K $ K @ K o.$ H E p = x u o.$ K $ K p &.o.k k H o.o.7 K K K $ K o.k $ p x K p x K K K H p H K p X.@ X.J @ X.k &.o.O.K ", "o.K K F H K t K F K o.K k &.k K p &.p k k K $ @ o.7 m K o.$ K $ K K o.@ o.o.@ o.K ] K H 0 ..$ H $ K H K o.@ 7 K m k K $ H o.k K $ o.7 k K @ k 7 K k m K K @ @ @ o.@ k O.k J K X.J @ X.&.$ k @ K ", "K p K K % K K F F K m K o.7 w H @ k K @ K p 7 K @ K K H $ o.$ m 7 $ K $ p p K K K o.@ o.7 H K , k K X.< J K p p J $ k 7 K o.m K K K H K H o.$ K k o.k o.k 7 $ 7 o.o.o.@ p 0 ] &.p K X.k X.X.k $ ", "k o.o.H p H , K c k $ H o.! ! 0 @ p ] k p p @ K k 0 K 7 m k K @ $ K $ 7 K K k 7 k P 7 F $ H ! P O.X.8 o p x 7 j m K K o.k k $ ..@ @ @ P p @ K K @ H H k $ K k $ H p ! m K 7 K j J K @ 0 &.$ p k ", "J &.k K K o.$ ! , ! G F w K $ $ 7 K k @ k 7 K c P K m K K k $ $ K _ H % o.m K m $ x 0 k o.X.m K X.n ( X.] K K @ 0 k @ 0 &.o.p @ k u o., o.$ $ @ p 0 k K K o.@ 7 $ X.K o.] F J K K $ @ 0 @ X.@ < ", "@ @ $ p p K H K = N F K k $ k @ p p k k $ k k K $ H o.7 w k H @...= K ! K K H o.p K k @ m k K K o.X.p p &.X.K k k k k K o.k p k % F @.E 0 G ` K 7 &.X.m &.p K p k m K @ K $ m k m @ K ..K K H K ", "O.P @ &.k K $ K ..$ K @ X.O.&.k K K k $ K K $ H t $ k o.K o.p - H p ! K F H $ @ P @ p H K $ p H H k K K k k p X.@ K K K $ % K N , @.r ) - x $ m K K K $ K p @ k K K ] $ H p K p K $ H ] @ $ $ K ", "K $ K $ @ J X.J o.R k J 8 z p K K R m K K $ K $ 7 K K o.K $ @.E , $ o.$ K $ $ p p p K 7 K p 7 $ K @ K K k K p K K p k $ ! , ) d 9 O g d E r $ p . @ k k k k R K K o.K o.p p k k 7 m p p 7 $ @ P ", "% o.o.m O.X.O.X.J @ X.O.| f K K p X.k K m @ K @ o.K K k H H r r H H , c K k m p K K k @ 7 K p p K k @ K $ &.K $ &.K $ K 0 ) Z O @.@. = b 7 m @ O.p K x p K K F p k K K K p @ k K k K k o.K K K ", "F K $ k k p K &.K J | | | 8 K K K @ H ` o.$ H k K K 7 P w 0 = I $ p K H H o.X.@ p K 0 H m @ K @ $ k @ $ 7 w @ o.H H o.p , % 0 ) g E = $ K @ > O.K X.K J o.m @ o.X.$ K m k m p X.7 H K K $ $ K ", "&.o.@ k $ K p 7 X.X.o O.X.K p p X.7 x 3 K K H o.K p K k H g = ) o.K m P @ m 7 p 0 k 7 K o.K H o.k $ K H @ @ $ K o.o.#.H K $ .., - G r , o.w O.S < J @ K $ p k K $ k p x @ p K ] m 7 K o.$ k p p ", "k &.k K K 7 K o.K p 4 ] K K @ @ $ 0 ] k P @ 7 $ @ K k $ H d m F $ 7 k X.k J @ 7 K p k o.7 k H @ R $ m H p X.K 0 u p m m 3 o.0 ..% % k j 8 ; @ p K p J K R p p K K ] X.K o.R 7 c K 7 c K p k ", "H k o.@ K 0 k $ k p K p K K K $ K p 0 K m R m k p w o., X X @.- K H o.K K K H $ K H $ &.X.O.K H p K k K P ` $ K $ K m K K p H k % o.m L O.f | z O.X.&.@ H $ K $ K o.7 6 ( 7 K K 0 7 $ K X.@ $ k ", "x K $ o.p H o.K $ p K K k @ 7 w @ K $ X.X.@ @ H k m ! b g O , $ o.K k $ @ o.p K $ $ &.K X.X.K K &.k o., o.0 m o.o.0 7 p K K K K H F c J z z ; Q 8 K $ k H m $ K m o.@ 0 ( w p H K K p H K K K $ ", "p $ H ) = ..@ o.p K k R @ o.k K o.k K m @ $ k ] H p 0 g X O p ! p K o.K o.K p @ $ k k X.O.O.@ $ K $ m F ) O H H m p k @ @ @ m k K K k 8 S ' 1 | @ 0 J K $ P K $ m K @ K @ p K p O.k 7 o.o.K 7 m ", "K $ , = = K K @ @ $ K 0 p @ m K o.0 K o.K 7 K o.m X X r ! p m K K x 7 w H 7 K K p &.X.k K H t o.o.G .._ ! o.K 0 k X.K p k K K m 8 z 8 ' f 8 p &.m H @ 7 0 @ K 0 @ K k K k X.p p p k K 7 K $ ", "X.P % b , K X.> k $ 7 m k K 7 T o.K K 7 K K m K o.m r X g b @ k H @ m K K H K P $ k k X.O.J $ K $ K % r [ p m 7 k K &.@ K H K % K k X.; ; * J : K m k H o.p H @ &.K K K p K p K p 7 K k $ @ k $ ", "K $ r ` H $ 8 S P K 0 K 7 o.k H X.H $ o.x K m H K H E r { 7 @ j p k 7 K m k o.@ K K 7 j X.k K 0 m $ K r 0 H @ k 8 O.k o.k o.$ o.o.K K J J &.K &.F $ K K o.K @ R w k 7 m K K p $ K @ k k K o.K H ", "] o.K @ ( ( | 8 k ] p X.m @ 7 K m 0 k K 0 k 7 p X.7 $ t R m X.J p @ @ 7 w K 7 $ o.@ k @ @ k k o.X.k K o.@ @ ( J 8 X.c p K K H ! ! K K k K H K O.u m @ $ $ K 0 H K o.K u = = [ ) 0 K K 7 K k H K ", "K t K K X.%.%.J J K m O.k H K m p K X.p X.< 0 @ K K K o.K &.O.e @ k K p K $ k p H K p K &.k @ @ K H 0 K 7 k o O.8 h K K p K 0 o.% o.o.K k 7 w 7 $ $ K F $ O.K X.$ @ 0 $ 9 2 b d p p 0 @ K k K o.", "K k &.@ p K H $ p , K K , K K K K K K K K o.H o.K 7 @ K k i X.K K k O.k O.X.o.7 c k K $ K $ $ % k p X.K o.k K K p k k 7 k X.X.m X.k k p k o.K $ K o.o.$ m > K K H t ! o.G ..F F X.X.X.@ H u @ P ", "k @ $ K k o.H o.H $ u m K @ @ o.0 K $ @ o.$ H o.@ @ @ K K @ K p O.&.k 7 J K H K K o.K $ , $ $ $ @ p K 0 k o.K 0 X.@ k $ k k p 0 @ p p ] $ @ $ o.$ @ K 0 p p K K 7 X.% $ _ K ! m J O.@ @ 0 p p 0 ", "o.k K 0 k K F K $ m @ k K K 7 K H m K m o.H , o.0 p p H K k K K X.p k J m K p k H , H % - $ % , $ $ m K o.k K 7 k K p K k K 0 K @ K K K X.m K $ $ o.! $ @ @ 7 @ K w K t p $ K p h | X.O.&.K &.K ", "$ K K H m $ @ @ p &.0 K p k X.$ H o.K o.$ K o.o.K @ k p k @ K @ K 0 k k k k k @ o.w % K x , F @.r 0 $ $ K K H k o.k @ 7 m K 0 #.p K p k @ H x ` F g K K $ m x p J k p K p @ X.8 | o J X.&.K k @ ", "o.$ $ $ o.H 7 K K k K X.@ k $ x K @ $ 7 K K o.F K X.k 0 K k o.@ X.k @ $ &.k @ @ K 7 K K 0 K H p $ $ $ o.$ @ H K o.7 k K K p x X.p @ 7 @ o.F , K $ F o.K K o.0 @ H &.K @ k o.J X.o h &.&.K k K @ ", "k p 7 @ $ p m % K K ..0 ] p @ @ k k $ K K ! $ ..H k K p K k k K $ H K K k k k h @ R k o.K 7 H p H &.@ i @ X.o.X.$ p H H o.k p X.x k K $ K E F - H p % K F T K X.K @ k k K F c K J J k o.K @ K K ", "J K p k , F g O Z ) % K K p M k $ k K o.o.` r X.#.J @ X.$ K 0 K p k k X.k &.X.X.O.V O.J X.> > 4 O.8 | 0 H ` K K H p H o.k H o.H m p P o..., H 0 K K $ K K o.@ 0 k K $ o.K m X.0 K p K p @ $ % ", "X.%.] k , @.I 9 Z Z 2 ) K m O.&.k K K F o.o...o.i J H K $ p J @ K $ 7 p j X.J 8 > y %.s X.> O.X.^ $.z & &.m K o.K K ! m m @ K m o.m x k $ = H , ! K ! $ $ m K p p @ K $ ! H $ K k P ] K $ o.o., ", "K 0 K H G x G ) = = H K K %.O.$ $ K , @ X.$ K #.K P @ @ 7 p K o.m @ X.$ @ 7 P X.K 0 0 p J O.8 @ S S ~ X.X.k K $ B g % F X.$ $ K 7 p k $ d g % Y K $ K K K 0 K K K $ @ K @ 0 K $ K 3 $ R w K K J ", "K $ $ $ 0 % F , ) H K J %.( 8 k o.o.7 k $ K H o.K @ o.7 m k K K H $ k p K K $ 0 7 K k k K K @ &.o 8 o K k K $ $ t d - K i K k $ k o.k $ ) u $ K o.$ K $ p K k K r H p K K @ @ k K X.o.K @ @ k ", "$ K o.7 , % 0 r 0 H k %.* f * 7 K k K H K K K @ K k K H $ k K 0 k @ k k K K H 0 O.$ m 7 K K @ p X.&.K 0 k $ o.K E d m X.| p p p K 7 K 0 E D H 0 H o.$ K k K @ R o.p X.. K k k K J K @ o.K o.o.k ", "@ o.@ o.K $ 0 x $ o.X.; S | X.K o.m $ K $ R @ m K o.7 0 p k K K 7 w 0 7 K K ! o.o.x K p w 7 O.p j k p p k K % ..d - ( X.X.H J k k % r E E - t $ ] $ $ K K $ k @ $ p O.* 0 J $ o.K H $ K % % K $ ", "J p k K $ t K K $ &.; v S z L K k $ K K K K p K H k $ p K o.k o.7 @ K o.K $ w K $ H m @ @ K @ 0 p p 0 7 o.$ t ! K X.8 J J K @ K o.K 2 6 $ t K $ m R K $ @ k $ K K J O.&.@ 0 H K K $ 6 , o.m K ", "O.K k K $ $ ] 0 o.X.S | a s X.k k K $ m 7 K k m 0 @ K K k o.k K c k K m @ o.R m @ o.o.o.K K 7 p J k k @ $ K $ K o.X.@ X.8 K K 0 k % X X - K H H H K $ H p k K K K J O.8 J k $ $ #.K r X 0 K $ H ", "@ H J K @ m @ $ o.O.8 o * %.o.K H F K o.H 0 K k H P $ @ @ K o.K @ @ 7 m k x H H , H 6 H F m K k m p &.@ K o.K k K $ p j X.K $ $ K , d g u o.K o.H H K H $ @ K K k h 8 O.J c R m u X X d K , J K ", "X.4 k p &.$ K ` c k X.J &.&.7 H ! K ! X.p p k @ ] P k @ $ ` o.@ K k o.k o.0 o.7 K u H m $ O.K K X.K K $ 0 @ K K K m K K o.p 7 % $ , D 0 o.K K $ o.$ $ $ @ @ H K j O.X.%.J x O.K # d 0 , P m +.K " }; mtink-1.0.16/xpm/Ultrafina.xpm0000644000076400001540000002364510376041214014340 0ustar jjfuse/* XPM */ static char *magick[] = { /* columns rows colors chars-per-pixel */ "32 256 55 1", " c #a3a3b0", ". c #a4a4b0", "X c #a4a4b1", "o c #a4a5b1", "O c #a5a5b1", "+ c #a5a5b2", "@ c #a5a6b2", "# c #a6a6b2", "$ c #a6a6b3", "% c #a6a7b3", "& c #a7a7b3", "* c #a7a7b4", "= c #a7a8b4", "- c #a8a8b5", "; c #a8a9b5", ": c #a9a9b6", "> c #a9aab6", ", c #aaaab6", "< c #aaaab7", "1 c #aaabb7", "2 c #ababb8", "3 c #abacb8", "4 c #acacb9", "5 c #acadb9", "6 c #adadb9", "7 c #adadba", "8 c #adaeba", "9 c #aeaebb", "0 c #aeafbb", "q c #afafbb", "w c #afafbc", "e c #afb0bc", "r c #b0b0bd", "t c #b0b1bd", "y c #b1b1be", "u c #b1b2be", "i c #b2b2be", "p c #b2b2bf", "a c #b2b3bf", "s c #b3b3c0", "d c #b3b4c0", "f c #b4b4c0", "g c #b4b4c1", "h c #b4b5c1", "j c #b5b5c1", "k c #b5b5c2", "l c #b5b6c2", "z c #b6b6c3", "x c #b6b7c3", "c c #b7b7c3", "v c #b7b8c4", "b c #b8b9c5", "n c #b9bac6", "m c #babbc6", "M c #babbc7", /* pixels */ "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM", "MccMMccccMvvvMvvvvvvvMvvvMvvvvvM", "xxxxxxxxccclvlccllxxvcclzzvvllll", "xsxxsxxxlllllllllllslllllllzllll", "ssxssssssssslsssssddsssslssddddd", "eeesaesedesessseseesesssss0sss0s", "eeeeeeee0ews0s0ews0seeww0wws00s0", "eewweeww000000000000000000000000", "0w0w000000000000w00w00w000000000", "0707070000w77ww77007707w7w7w7070", "7w7w7000000w7w7w0700w7w7w7w70700", "w7w7w7000007w7w770007w7w7w7w7w00", "70700200022070700200022007070200", "07020202000007020202000070200202", "20020020200220020020200220000020", "07702000207707702000207707022000", "77020077002207020002007700220702", "77000277200077000200027720007700", "22222022202022222222202220202222", "20022220202220022002222020222002", "72720022022722202727002202272220", "27272220227200227272222022720022", "72722220202022022727222020202202", "27220022202220257272702220222025", "22222222533322222222222333332222", "22222225333322252222222533332225", "22222222>333222222222222>3332222", "22222222233322222222222223332222", "22>3>22222222222223>222222222222", "223322222222222222>3222222222222", "33333>3>3>3>3>3>33=33>3>3>3>3>3>", "33=3>3>3>3>3>3>33333>3>3>3>3>3>3", "7*7*7*7*7*7*7*7*7*7*7*7*7*7*7*7*", "*7*7*7*7*7*7*7*7*7*7*7*7*7*7*7*2", "7*7*7*2*7*7*7*2*7*7*7*2*7*7*7*2>", "*7*7*7>2*7*7*7>2*7*7*7>2*7*7*7>2", "2>>>>>>>2>>>>>>>2>>>>>>>2>>>>>>>", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>2>>", "*2*2*2*2*2*2*2*2*2*2*2*2*2*22*2*", "2*2*2*2*2*2*2*2*2*2*2*2*2*2**2*2", "*2*2*2*2*2*2*2*2*2*2*2*22*2*2*2*", "2*2*2*2*2*2*2*2*2*2*2*2**2*2*2*2", "*>*>*>*>2>>>*>*>*>*>*>*>>*>*>>>>", "*>*>*>*******>*>*>*>*>**>**2****", "2*2*>>**2***2*2*2*2*>>****2****>", "*******2***2***********2*2**>>**", "**2*2***2*2***2***2*2******>**>*", "*2*****2*****2***2*****2*2***>*>", "**>*>$=$==>$=$==>$=$==>$=$==>$=$", "******$>>$**$>>$**$>>$**$>>$**$>", "******$$$*****$$**$>$*****$$**&&", "*******>$*********$&$*******$$>&", "**>$$*&&&&$=*>$$&&>&&&&&**$&&>$&", "$$&$&$&$&&&$$&&$&&$$&&&&&$=$$$=$", "$&&=&=$==$$==$&=&&&&&&&&&=$=$=$=", "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", "$$$&$$$$$$$$$$$$$$$$$$$$$$$$$$$$", "$$$+$$$$$$$$$$$$$$$$$$$&$$$$$$$$", "$$+%$$$$$$$$$&$$$$$$$+&+$$$$$$$$", "%+%+%+%&$$$$XX=X%++++%+%++$X$$$$", "++++$X$X$X$X$X$X++++++++++++X$X$", "++++X$X$X$X$X$X$++++++++++++$X$X", "++++$X$X$X$X$X$X++++++++++++X$$$", "++++X$X$X$X$X$X$++++++++++++$X$$", "++++++++++++++++++++++++++++++++", "+++..++.+..++.+..++.+..++.+..++.", "++ + +.+ + +.+.+ +.+ + +.+.+ +.+", "+ + +.+.+ + +.+ +.+.+ + +.+ +.+.", " + + + + + + + + + + + + + + + +", "+ + + + + + + + + + + + + + + + ", " +.++. +.++. +.+ + + + + +.++. +", ". .. .. .. .. ........... .. .. ", " ", " ", " ", " ", " ", " ", " ", " ", ". . . . . . . . . ..............", ".+.+.+.+.+.+.+.+.++. ++ + ++ +", "+ + + + + + + + + ++ + + + + + ", " + + + + + + + ++ + + + + + + +", "+ + + + + + + + + + ++ + + + + ", " + + + + + ++ + + + + + +", "% + %% % + %+ + + + + %% + ", " o %oo o o % % + + % oo %oo o %", "%+++++++++++++++++++++++%+++++++", "++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++", "++++++++++++++++++++++++++++++++", "+%+%+%%o+%+%+%+%+%+%+%+%+%+%+%%o", "%+%+%+%%%+%+%+%+%+%+%+%+%+%+%+%%", "+%+%$$$$$$$$$$$$$$$$$$$$$$$$$$$$", "%+%+$$$$$$$$$$$$$$$$$$$$$$$$$$$$", "$$+%$$$$$$$$$$$$$$$$$$$$$$$$$$$$", "$$&+$$$$$$$$$$$$$$$$$$$$$$$$$$$$", "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", "&&&&&&=&=$=$$==$$==$$=$=$=$=$=$=", "&&&&&&&$$=$$&&$=$&&&=$$&=$&&=$&&", "&&&&&&>$&$>&&&&$$$>&&&**$=&&$=&&", "********&&**********************", "********>&**********************", "********$*********************$*", "*******$$**********$**********$>", ">===*>$==$>*>===*>$==$>*>>==>$&&", "$===*>>$=>$*$===*>>$=>$*$&==$$>&", "*>>***>*>**>*>>***>*>**>*>>$*2**", "***>>***>**>***>>***>**>***>**2*", ">*>***2**2*2***2***2*2***2*2***2", ">***>****>**2**>2**>**2**>**2**>", "******2*$**$**>***>*>***$**$**>*", ">>>>>>*>>>>>>*>*>*>*>*>>>>>>>*>*", ">>>*>>>*>>*>>$&>>$>>*>>$>>*>>$&>", "**>2>**2*22*>>2*>2**2*>2*22*>>2*", "2*2*2*2*2*2*>**2>**2*2*22*2*>**2", "*2*2*2*2*2*2*22**22*2*2**2*2*22*", "2*2*>>*2*2*2>>>>2*2*>>>>*2*2>>>>", "*2*2>>2*2*2*2&>>*2*2>2>>2*2*2&>>", ">>2>>>2&>>>>&22&>>2>2&&2>>>>&22&", ">>>>>2&2>>>>22&2>>>>&22&>>>>22&2", ">2*222$22&&22&&22>22&2$22&&22&&2", "2>7*2*2222222222>2*2222222222222", ">7*722222*2*222$2222&2222*2*222$", "2*7*2*2*>2222&22*2*222$2>2222&22", "=222222=22&111112&112&112&112&&1", "55==2=52=22111112111211121112281", "2=55=5=5221111112211221122112211", "55=5=522=21111122=11111111111111", "33332222522222222222222222222222", "33>32222222222222222222222222222", "22222222222222252222222222222222", "222222222222222=2222222222222222", "2252533322252525525=55=528,88&22", "222533332222525225255555288&8828", "22522533222225255252255=2282222&", "25255252822w52522525555582228288", "2w2e252522w228282828252822998222", "22225252822222828282528282222288", "2w25222e2828w2282828282822222922", "5252e552828282828282828288882882", "555582888288,8,82022208282852888", "55558282882888882020522228558828", "88888888228989,82222588888889282", "88882w22888222887007e2888888928w", "822w2w2w29999992002777778282w2w2", "88w2w2w2992292992007777088822w28", "8888888898888888200002028888w888", "88888888888888880022007088888888", "88888888888888880707020707070707", "88888888888888887070007070707070", "9999999999999999w7w70707070707w7", "99999999999999997w7w707070707070", "99999999998e9999w7w7w7w707w70007", "9999999999989999707w7w70707w0000", "e8e8e8e8e88q8q990000w00000w00000", "8e8e8e8e8eq8qq990000000000000000", "e8e9e9qq99e9e999qqqq99e9e999qqqq", "qe9e9eqq9i9e9e9iqqqq9i9e9e9iqqqq", "e9e9e9e99999e9i9e9e99999e9i9e9e9", "9e9e9e9e9p9p9e999e9e9p9p9e999e9e", "9e99i9e999e99e99e9e9i9999e99e9e9", "ieee9eeieeeepeeeeeeeeeeepeeeeeei", "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", "eeeee9eeeeeee9eeeeeeeeeeeee9eeee", "9pep9ppe9pep9ppep9p9p9eeep9p9pep", "p9p9peeep9p9peee9p9p9ppep9p9p9p9", "9peepeep9peepeeppp9pepeeeeep9ep9", "eepepeepeepepeepeeeeeeepppeepeep", "ppeeeeeeppeeeeeepepeeeepeepeeeep", "eeepeppeeeepeppeeepeexeeepeeppee", "eppeeppepeeepeeeeepepeeepeeeppee", "eeeeeeeeeepeeepepexeeepepepeeeep", "ppepppepppppppppepeeepppppeepepp", "epppeppepeeppeepppepppeeeppppppe", "pppeeppeppepppeepeeepeeeepeeeepp", "peppeeexepepeexeppxeppxeppexpppe", "xeexexeeexxexeepeexpeepepeeeexpe", "epeeexexeepeeexeppeexeexexxeeeex", "exeexexeeeeexexeeeipexexexeexexe", "eexeeexexexeeeeixxeeeeeeeexeeexe", "iiiiiieiiiiixiiieiiixeiiiiiiiiei", "pppppppippppeppppipppipppppppppi", "pppepeeppppppppepeeppppppppepeep", "xexepxexexxexexepxexexxexexepxex", "epexeepxeeexepexeepxeeexepexeepx", "exxexxpexexeexxexxpexexeexxexxpe", "exexpxeexexeexexepxxexpxeexeepxx", "xeeeexexexpexeeexpeexeexexexxpee", "xpxeepxpepxxxpxexepeeepppeexxepe", "eppxxpepxpepeppxpexxpxxexxpppexx", "pxppxexpppxpppxeepppppexepeppxpp", "xpxepxexxxeexppxxxxpxpxepxxxxpxe", "expxxexeexxxxpxexexxpxixxpxeexpx", "xexeexpxxpexexexexeexexeexexxexe", "xexixexiexixexxexixexxexxexixexi", "ixexpxexxexexeexexexxexixxexxxex", "xexexexexixxxixeippiexexexxeexxe", "ixixixixexiiiixxxixxxixixiiixipi", "xpxpxpxppxpxxpxppxpexpxeixpppxpx", "xixxexxpxpxxpxpxxexxxpxxxpxxxxxp", "xepxexexpxxexixxxxxepxexexpxxexi", "xxxpxxxxexxexxxexexxxpxxxxexxexx", "exxexxxeixxxixexxixexxxeixxxixex", "xxxixixxxiexexxxxxxixixxxiexexxx", "eixxixexxxxxxxxieixxixexxxxxxxxi", "xxxixixxpxipxiixxxxixixxpxipxiix", "xppxxxpxpxxxxpxexppxxxpxpxxxxpxe", "xxxxxpxxxxxpxxxxxxxxxpxxxxxpxxxx", "xxxipxxpxppxxpxxxxxipxxpxppxxpxx", "xpxxxxxxxxxxxxxpxpxxxxxxxxxxxxxp", "xpxxxpxxexxxxpxxxpxxxpxxexxxxpxx", "xxxxxxxxxxexxxxxxxxxxxxxxxexxxxx", "xeixpxxpexxxpxxpxeixpxxpexxxpxxp", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "xxxxpzxxxxxxxpxxxxxxpzxxxxxxxpxx", "xxxxzzxxxxxxzzxxxxxxzzxxxxxxzzxx", "xxxxzxxxxxxxzxxxxxxxzxxxxxxxzxxx", "xxxxMxxxxxxxMxxxxxxxMxxxxxxxMxxx", "MaMaMaMaMaMaMaMabbbabaabbaababbb", "aMaMaMaMaMaMaMaMaabbbbbbbbbbbbaa", "MaMaMaMaMaMaMaMabbababbaabbababb", "aMaMaMaMaMaMaMaMbabbabbbabbabbab", "mzbaaMazmabcamaabbbabbacccccabbb", "ammmMzmzzMabMamMbaccabccccmcxbba", "mazzaMMzMzmmMMaMcambbbbbbabbbxbx", "zMzmMmamamzzabMMmbbbbbabbbbbxbxb", "MaMaMMaMaMbMaMbabbbaMaMbbxbxbxbx", "MmzMMaaMMMaMabMaabbMbbabxbxbxbxb", "aMaaMMMMbaMaMMbMMaMabbMbbxbxbxbx", "MzMMaaMaMaMbMaaMbbbbaMabxbxbxbxb", "xxMaMxaMaMbMMaMaababMbbabxbxxbbb", "MMMMMMaMbbMaMbMbmMmbbbMmbbbbbbbb", "aMaMaMmMbbbbbbbbMMbbbbbbbbbbbbbb", "MMMMMMzMbbbbbbbbbbbbbbbbbbbbbbbb", "aMaMaMMMMMaMMMMMbbbbbbbbbbbbbbbb", "MMMMMMMaMaMMMaMabbbbbbbbbbbbbbbb", "MMaMaMaMMMMMaMMMbbbbbbbbbbbbbbbb", "MaMMMMMMMaMaMMMabbbbbbbbbbbbbbbb", "aMaMMMaMMMMMMaMMbbbbbbbbbbbbbbbb", "MMMMzMMMMaMMMMMMMbbMMbMbMbMbMbMb", "MamMMMaMMMaMMMMMbMbMbMbMbMbMbMbM", "MMMMMMMMMaMMMMMaMbMbMbMbMbMbMbMb", "MbMbMbMbMMaMMMMMbMbMbMbMMbMbMbMb", "bMbMbMbMMMMMMMMaMbMbMbMbbMbMbMbM", "MbMbMbMbMMMMaMMMbMbMbMbMMbMbMbMb", "bMbMbMbMMaMMMMMMMbMbMbMbbMbMbMbM", "MbMbMMMMbMbMMMMMbMbMMMMMMbMbMMMb", "bMbMmmMMmmmbMMMbMbMbMMMmbMmmMMbM", "MmmmMMMmmmMMMMMMMMMMMMMMMmmmMMMM", "MmmmMMMmmmMMMMMMMMMMMMMMMmmmMMMM" }; mtink-1.0.16/xpm/Wood.xpm0000644000076400001540000002454010376041214013316 0ustar jjfuse/* XPM */ static char *magick[] = { /* columns rows colors chars-per-pixel */ "100 100 4 1", " c #ffffbaba5959", ". c #ffffc3c36565", "X c #ffffb2b24141", "o c #ebebaaaa4141", /* pixels */ " .oXXX .oXX ..oXXX oXX ..oXXXXX .oXX ..oXXX .oXX ..oX .oXXX .oX ..oXX ..oX ..oXXX .oXXXX", " ..oXX .oXX ..oXXX oXX ..oXX XX .o ..oXX .oX ..o XX .oXXX oXX ..oX .oX .oXX .oXXXX", " .. .oXX ..oXXX oXX .oX X X .oXX ..oXXX .oX ..o X .oX oX .oXX oXX .ooXX .oXXXX", " ..o .oXX ..oXXX oXX .oXX XX .oXX ..oXXX .oXX ..oX .oXXX .oXX .oXX .oXX .oXXX oXXXXX", " ..oX .oXX ..oXXX oXXX oX X X .oXX ..oXX .oX X ..oXX .oXXX .oX X .oXX .oXXX .oXXXX oXXXXX", " ..o .o ..oXXX oXXX .oXXX XX oXXX ..oXXX .oXX ..oXXX .oXX o X .oXX .o .ooXXX oXXXXX", " ..oX .oXX ..oXX oXX oXX XX oXXX ..oXXX .oX .o X .oXXX .oXX .oXX ..oXX .oXXX oXXXXX", " ..oX ..oX ..oXX oXXX .oXX X oX X ..oXXX oXX .oXX .oXXX XX .oXX .oX .o X oXXXXX", " ..oX ..o ooXX oXXX .oXX XX oXXXX ..oXX .oX .oXX .oX .oXX .oXXX .oXX oX oXXXXX", " ..oX ..oX .oXX .oXXX .oXXXXX oXX ..oXXX oX .oX X ..oXX .o X oXXX ..o .oXX oXXXX ", " ..oX .ooX .oXX oXXXX .oXX oXX ..oXXX oXX .oXX ..oXXX .oXX ..oX ..oXX .oX oXXXX ", " ..oX .oXX .oX oXXXX .oXX oX ..oXXXX oX .oXXX ..oXXX oXXX ..ooX ...o .oXX oXXXX ", " ..oX .oXX .oXX XXX .oXXX X oX ..oXXX oXX .oX ..oXXX oXXX ..ooX ..o .oX oXX X ", " ..oX .oXXX .oXXX oXX X .oXXX .oXXX ...oXXX .oXX .oXX ..oXXX .oXXX ..oX X ...o .oXX .oXXXX ", " ..oX .oXXX .oXX oXX X .oXX X .oXXX ...oXX .oXX .o ..oXX oXXX ..oXXX ..o oXX .oXXXX ", " ..oX .oXXX .oX X.oX X .oXX .oXXX ...oXXX .oXXX .oXX ..oXX .oXXX .oXXX ...oX oXX .oXXXX ", " ..oX .oXXX .oXXX..X .oXX .oXX ...oXXX .oXX .oX ..oXXX oXXX .oXX ...oXX oXX .oXXXX ", " ..oX .oXXX .oXXX.. X .oX X .oXX ...oXXX .oXX .oX ..oXX .ooX X .oXX ..ooXX oXX oXXXX ", " ..oX .oXXX .oXXX.oX X .oXX .oXX ...oX .oXX .oXX ..oXX .o .oXX ..oXXX oX .oXXX ", " ..oX .oXXX .oXXX oXX X .oXX X .oXX ...oXXX .oXX .oXXX ..oXX ..oXXX .oXX ..oXX oX .oXX ", " .. X .oXXX .oXX. o .oXX .oX ...oXXX .oXX .oX ..oX ..oXX .oXX ..oXX XX .oXX ", " . X .oXXX ooXX..oX X .oXXXX ..oX X ...oXX .oXX .oX ..oXX ..oXX .oXX ..oXXX oXXX .oXXXX ", " ..o .oXXX oXXX. oXX ..oXX ..oXXX ...oXXX .oXX .oX ..oXXX .oXX .oXX .oXX XXX .oXXX ", " .. X .oXXX oXXX. oX X ..oXX X ..oXX ..ooXXX .oXX .oXXX ..oXX ..oX .oXX ..oXX oXXX .oXXX ", " ..o .oXXX oX. . oXXX ..oXX ..oXX ..oXXX .oXX .oXXX ..oXXX ..oXX .oXXX ..oXX oXXX .oXXX ", " ..oX .oXXX oXX. .oXXX ..oXXX ..oXXX ..oXX X .oX .oXX .oXX .oXX .oXXX ..oXX oXXX .oXXX ", " ..oX .oXXX oXX ..oXXX ..oXXX ..oX X ..oXXX .oX .oXXX ..oX X .oXX .oXX .oXX oX X .oXXXX ", " ..oX .oXX oXXX..oXXX ..oXXX ..oXX ..oXX X .oXXX .oXXX ..oXX .oX X .oXXX ..oXX . .oXXXX ", " ..oX . X oXX..oXXXX .oXXXX ..oXX ..oXX X ..oXX .oXXX ..oXXX .oXX .oXX ..oXX .o .oXXXX ", " .oXX .o X oXXX.oX .oXXXX ..oXX ...oXX X ..oX .oX X .oXXX .oXXX .oXX ..oXX .oX .oXXXX ", " .oXX .o .oX.X.oXX oXXXXX .o XX ...oX X ..oXX .oXX .oXXX .oX .oXXX ..ooXX oX .oXXX ", " .oXX .o .oXXX..XX oXX ..oX ...oXX X ..o X .oXX .oXX .oX .oXXX ...oX . X .oXXX ", " .oXX .o X .oXXX oXXX .o.XX X ..oXXX ...oX X ..o X .oXXX .oXX .oXX .oXXX ..oXX o X .oXX ", " .oXX .o .oXXX oXX ..oXXX ..oXX ...oX X ..oXX .oXXX .oXXX .oX .oXXX ..oXX .oXX .oXXX ", "..oXX .oXX .oXXX oXXXX oXXX X ..oXX ...oXXXX ..oX X .oXXX .oXXX .oX .oXX ..oXX .oXX .oXXX ", "..oXX .o X .oXXX oXX oXX X ..oX ...oX X ..oX .oXXX .oXX oXX .oXXX .oXX .oXX .oXX ", "..oXX .o .oXX oXXX oXXX X ..oX X ...oXX X ..oXX ..oXXX .oXX .oXX .oXXXX .oXX oXX .oXXX ", "..oXX .o X .oXX oXXX oXXX ..oX ...oXX ..oXX ...oX X ..oX .oXX .oXXXX .oXX .oXX .oXXX ", "...oX . X .oXX .oXXXX .oXXX X .ooXXX ...oXX X .oXX ...oXX ..oXX .oX .oXXXX ..oXX .oXX .oXXX ", "...oX oo X .oX .oXXX...oXX X .oXX ...oXXX ..o X ...oX ..oX oX X .oXX X .oXX .oXX .oXXX ", "...oX oXXX .o .oXXXX .oXXX X .oXX X ...oXX ..oXX ...oXX ..oX .oX .ooXXX ..oXX .oXX .oXXX ", "...oX oXXX .o .oXXXX .oXXX .oXX ...oXXX ..oXX ...oXXX ..oX .oXX ..oXX ..oX oXX oXX ", "...oX oXXX .oXX .oXXXX .oXXX .oXX ...oXX X ..o X ...oXX .oXX .ooXX ..oXXX ..oXX oXX oXXX ", "...oX oXXX .oX .oXXXX .oXXX .oXXX ..oXXXX .oXX ...oXX ..oXX ..oX .ooX ..oXX oX oXXX ", "..oXX oXXX .oXX .oX X .oXXXX ..oXX X ...oX .oXXX ...oXX ..oX ..oX ..oXX .oX oXX oXXX ", "..oXX oXXX .oXX .oX .oXXXX ..oXXX ...oXX X .oXXX ...oXX ..oXX ..oXX ..oX ..oXXX oXX XXX ", "..o oXXX .oXX .o X .oXXXX ..oXX ...oXX X .oXX ...oX ..oX ..oX ..o ..o.X. oXX oXXX ", " .o oXXX .oXX .oXX .oXXXX ..oX ...oXX X .oXXX ...oXX ..oXX ..oXXX ..o .oX . oXXX oXXX ", " oX X oXXX .oXX .oXX .oX X ..oXX ...oXX .oXXX ...oXX ..oX ..oXX ..oX ..oXX .oXX oXXX ", " o X oXX .oXX .oXXX .oXX X ..oXXX ....oXX .oXXX ...oXX ..oXX ..oXX ..oX .oX.. oXXX oXXX ", " oX X oXXX .oXX .oXXX .oX X ..oXX ...oXXX oXXX ...oXX .oXX .oXX ..oXX oX oX oXX ", " oX X oX .oXX .oXXX .oXX X ..oX ....oXXX ..oXX ..oXX ..oX X .oX ..oXX .oXX. oXX oXX ", " oo X oX .oXX .oXXX ..oXX X ..oX ...oXXX ..oXX ...oXXX ..oXX .oX .oXX oX . oX oXX ", " .o X oXX .oXX .oXX ..oXXXX ..oXX ...oXXX ..oX ...oXX ..oX X .oXX ..oXX .oXX. oX oXXX ", " . XX oXX .oXX .oXX ..oXX X ..oX X ....oXXX oXX ...oX X ..oX .oXX ..oXX .oXX. oXX oX ", " .o X oXX .oXX .oX ..oX ..oXX ....oXXX .oX ...oXXX ..oXX .oXXX .oX .oXX oXX..oXXXX ", " .oX oX .oXX .oXX ..oXXXX .oXX ....oXXX .oX ...oXXX . XXXX .oX .oX .oX oXX. oXXXX ", " .oXX oXXX .oX .oXX ..oXX X .oXX ....oXXX .oXX ....oXXX oX .oXX .oXX .oXX oX.. oXXXX ", "..oXX oXX .o oXX ..oXXXXX .oXX ...oXX .oX ....oXXX .oX X .oXX .oX .oXX oXX..oXXXX ", "..oXX oXX .oX .oX .oX XX .oX ...oXXX .oXXX ....oXXX .oXX X .oXX X .oX .oXXX oXX. oXXX ", "..oXX oXX . X .oXX .oXX X .oXX ...oXX .oXX ....oXXX .oXXXX .oX X .o .oXX oX.. oXX ", "..oXX oXX ..oXX .oX .oXXXXX .oXX ...oXXX .oX ....oXXX oXXXX .o X X .oXXX .oX.. oXX XXXX ", "..oXX oXX ..oXX .oXX .oXXX X .oXXXX ...oXX .oXX ....oXXX .oXXX .oXX X .oX .oXX..oX oXXX ", "..oXX oXX ..oXX .oXX .oXX XX .oX ...oXX .oX ....oX .oXXX .oX X .oX .oX . oXXX oXXXX ", "..oXX oXX ..oXX ..o .ooXXXX .oXXX ...oX .oXXX ...oXXX .oXX ..oX X .oXX .oX.. oXX oXX ", "..oXX oXX ..oXX ..oX ..oXXXX .oXXX ...oX X .oX ..oX X oXX ..oXX .oXX .oX . oX oXX ", "..oXX oXX ..oXX ..oX ...oXX .oXX ...oXXX .oXX ...oXXX .oX .oXXX .oX .oXX .oXX oXX ", "..oXX oXX ..oXX .oX X ...oXX ..oXXX ...oX X .oX ...oXXX .oXX .oXXX .oXX .oXX. oXXX..XXXX ", "..oXX oXX .oXX .oXXX ...oXX ..oXX ...oX .oXX ..oXXX ..oX .oXXX oX .oXX oXXX..XXXX ", "..oXX oXX .oXX .oXXX ...oX ..oXX ...oXXX .oXXX ...oXXX ..oXX .oXXX X .oXX .oXX oXXX..XXXX ", "..oXX oXXX .oXXX .oXXX ...oXX .oXXX ...oX .oXXX ..oXX .oXX .oXXXX .oX .oXX oXXX oXXXX ", "..oXX oXXX .oXXX .oXXX ..oXXX ..oXXX ...oX .oXXX ..oXXX ..oXX .oXXXX .oXX .oX oXX..oXXXX ", "..oXX oXXX .oXX .oXXX ..o .oX ...oX .oXXX ...oXXX oXX .oXXX .oXX .oX oX .oXXX ", "..oXX oXXX .oXX .oXXX ..oXXX .oXX ...oXX .oXXXX ...oXXX .oX .oXXXX .oXXX .oXX oX .oXXXX ", " .oXX ooXX .oXXX .oXXX ..oX X .oXX ...oXXX ..oXXX ...oX X .oXX .oXXXX .oX X oXX .oX oXXXX ", " .oXX .o X .oXX .oXXXX ..oXXXX .oXXX ...oXXX ..oXX ...oXX ..oXX .oXXXX .oX .oXX .o oXXXX ", " .oXX o X .oXXX .oXXXX ..oXX .oXXX ...oXXXX ..oXXX ...oXXX ..oX .oXXX .o .oXX oXXX oXXXX ", " .oXX .o ..oX .oXXXX ..oX X .oXX ...oXX ..oXXX ...oXXX ..oXXX .oXXXX ..oXX .oX .oXXX oXXXX ", " .ooX . XX ..oXXX oXXXX ..oXX X .oX ...oXX ..oXXX ...oXXX .oXXX .oXXXX ..oX .oX oXXXX oXXXX ", " ..oX oXX ..oXXX oXXXX ..oX X .oX X ...oXXX ..oXXX ...oXX .oXXX .oXXXX .oX X .oX .oXXX oXXXX ", " ..oX oXX ...oXX oXX ..oXXX .oXX ...oXXX ..oX ...oXX .oXXX .oXXXX .oX .oX .oXXX oXXXX ", " ..oXX oXX ...oXX oX ..oXX .oX ....oX ..oXX ..ooXXX ..oXXX .oXXXX ..oX X .oX oXXX XXX ", " ..oXX oXX ...o oX XX ..oXXXX .oXX ....oXX ..oXXX ..oXXXX ..oXXX .oXXX ..oX .oX oXXXX oXXXX ", " ..oXX oX ..oXX oX XX ..oX X .oX ...oXX ..oXX ..oXXXX ..oXXX .oXXX ..o .oX oXXXX oXXXX ", " ..oXX oX ..oX oXX X ..oX .oXX ...oX ..oX ..oXXXX oX .oXX X ..oX ..oX oXXXX oXXXX ", " ..oXX oXX ..oXX o X ..oXX X .oXXX ...oXX ..oXX ..oXXX ..o X .oXXX ..oX ..oX oXXX .oXXXX ", " ..oX oX ..o oXXXX ..oXX X .oXX ...oXX ..oXX ..oXXX ..oX .oXXX ..o .oX oXX X .oXXXX ", " ..oXX oXXX ..oXX .o X ..oXXXX .oXX ...oXX ..oXXX .oXX ..oX .oXXX ..o ..oX oXX X .oXXX ", " ..oX oXXX ..oXX .o ..oXXXX .oXX ...oXX ..oX ..oXX ..oX ..oXX ...oX .oX oX X ..oXXX ", " ..o oXXX ..oXX .oX X ..oXXXX .ooXXX ..oXX ..oXX ..oXX oXXX ..oXX ..ooXX ..oX oX ..oXX ", " ..oX .oXX ..oXX .oX X .oXX X ..oXX ...o X ..oX ..oX .oXXX .oX ..oXX ..oX oX XX ..oXX ", " ..oX .oXX ..oXX .oXX .oXX X ..oXXX ...oXX .oXXX ..oXX .oXXX ..oXX ..oX X .oXX oXXXX ..oXX ", " ..oXX .oXX ..oXX oX XX .oXXX X .oXXX . .oX .oXXX ..oXXX .oXXX ..oXX .o .oXX oXXX ..oXX ", " ..oXX .oXX ..oXX o X X .oXX X .oXX ...oXX .oXX ..oXXX ..oXXX ..oXX ..oX .oXX ooX X ..oXX X", " ..oXX .oXX ..oXXX oX X .ooXXX .oXX ..oXX X .oX .oXXX .oXXX .oXX ..o .oXX .oXX ..oX X", " ..oXX .oXX ..oXX oXX ..oXX .oX X ..oXX .oXX ..oXXX ..oX .oX ..oX ..oX .oXX ..oXX X", " ..oXX .oXX ..oXXX oXX X ..oXX .oX ...oXX X .oXX .oXX ..oXX ..oX ..oX .ooX .oX ..oXXXX", " ..oXX .oXX ..oXXX oXX X ..oXXXX .oXXX ..oXXXX .oXX ..oXX ..oXXX .ooX .ooXX .oX .oXX ..oXXXX", " .ooXX .oXX ..oXX oXXXX ..oXXXX .oXXX ...oX .oXX ..oXX ..oXXX .oXXX .oXX .oX ..oXX ..oXXX ", " .oXXX .oXX ..oXXX oXX X .oXXXX .oXXX ..oX X .oXXX .oX ..oXXX .oXX ..oXX .oXX ..oXXX ..oXXX " }; mtink-1.0.16/xpm/paper.xpm0000644000076400001540000004204510376041214013515 0ustar jjfuse/* XPM */ static char * paper_xpm[] = { "128 128 33 1", " c None", ". c #D5AE8D", "+ c #DCB495", "@ c #D5B395", "# c #DFBDA1", "$ c #D4A886", "% c #DBAE8C", "& c #CEAE90", "* c #D9BCA0", "= c #D9C2A9", "- c #D9C7AE", "; c #E1C7B1", "> c #E7C9B1", ", c #E0C2A9", "' c #E6C2A7", ") c #D2A280", "! c #C49676", "~ c #C29071", "{ c #C99E7D", "] c #CC9573", "^ c #D19D7A", "/ c #DBA987", "( c #CDA888", "_ c #E5CFBC", ": c #E6B696", "< c #EBD0BC", "[ c #E7BDA0", "} c #EBD6C5", "| c #E6D6C5", "1 c #DCCFB7", "2 c #EDDACA", "3 c #DED6BC", "4 c #C19F82", ".++++++.++++++@.++++##++.$$$.%%.&@****=-*==;>;;,**;>>;',#@.++.$$.+#++##@@@@+*********=,;,,,,;;;;;>>;***#*###.)!~{]]]^)//////$$$.", "++++++++++++++++++++#+.(.$$$$%++@@****=-;;;>;;##**@@@+##+.$.%.$$.++++######**###****#,,,,;;;;;,,;;;;,,,,###+.$$$)^^^^))////$$$.+", "++++++++++++++++@@++#+@$$$$$$.++******=;_>;;'##+##+@.@++%$)$%%$$%$$.@+#>;',,,,,,**,,,,,,;;;>;;,,;;,,;;;;>>#+..@+$$)))))^///$$$%+", "++++++++++@@@+++*@@...@@((.@@++#******,;;;#**+++++::++%%$))$%+/$%$($$(.#';;;;;;;,,,,,;;>>>;;;,,,;;,,;>>;;>>'#*++++++%/))//$$$$%+", "+++++++++@@@@+*#,#*@(((((.+##+##***==,;;;#@.$$$$)$/%%/$)$)$/+:%$$))$$)(@##,;>;;,;;,,';><;'####,,>;,,;;;,#,;>;','#[[[[+%/$$/$$/++", "++++++@@@@@++*###,;,#*@@@@######**=,,,,,,#@$(())))^^^))$$$%+::+$$$$..$$@@+#,;;,,;;',''>>#*@@@+##;;,,,,,,,,;;;;;;##[[:%/$$////%++", "++++@@@@++**#,,,*;><<>;;###,,,,#**,,;,,###+..$$)//)^^)$$$%++++++%++%.++@@@**##*#,'',###+@@@@@*##,,,,###,>>>;;,;;*#+@$($$$/%%%%++", "++...@@++*#,,;;;;>>>>;><;,##,,,,#=,;;,#*+++::+/$//$))$$$.++@@@*++##%.+++@@@@@*####[[#+.(.@@*######,####,#,;>>>>>;,*.(($.$/%+++%+", "++++@@@@###,;;>>;>>;;;>>>>;;,,,,*,;,####++++::+%%+%$((.+##,,,,=,+++++++++*#+@@@#+++...@@+*###,,>>'##,,,,;;;>>>><*@&@@$($%++++%%+", "[[##++**##,;>>>>>>>;;;>>>>;;,;;;;,######++.%++++.@+###;<>_<<____;#+++##+++++++@@.....@@+@*';;;,,###,',#***=,;>>_;*@@+$$%%%%%%%++", "#+++##';,;;>_>>>>>>;;;>_<>>;,,;;;,#####++.$$.@+++#,;;>_<<<}}}||_<>#####++@@+++@($$(..@+**#;>>;,,#######****,;>>>>#...$$%$%%/%++#", "+++##,>>>>____;;>>>;;;>_<<>>;,,,###''#+.$$$(.+##,;>>>>>>______11<>,#,##++@@+++.$..@@@+**;;;,,;;;,#***,;>;;>>>_>;#@$($$$%$$%%+++#", "####,,,,;>____>;>>>;;;>>>>>>>>;;####+.$$$..@*#;;;>_<<<}}<_______>><>,*@@@@.$$$$%.@@@+###;;,,,;;;;,,*#;><_<<>><>,.$($$$$$$$%++++@", "++#####*,;>_____>>>;;;;>,;;>>>>>;,#.()(..+##;;>_<<<<<<}}<<<_____><<<;*@....$))$+.@@+##,,;;;>>;=*,,;>>>>>><_>><>#$$$$/%/$$$$+++.(", "$.@+##,,,;;>____>>>;,,,,######,,,#+.$$@+##;>>__<<<<<<<<_<_________<<>;##@@%//%%+++*##,;;;;;>>;=**,>>>>>>;>>;><>*$$$$/%%//$.@++@.", "++++*##,;>>;;;-;_>>;,,,,#*@@&.@@+@@+####'>><___<<<<<<}<<<<<________<<<<>+@@+:[:+###,,;;;<>,=-;;;;;;;,;><>_>;;<;+%/$$/%%/%%%++#+@", "@+####,;;;,==;>>>>;;;,,,#****+.((.+###,;;><___1__<}}<<<<>_______<<}<<<<}<<<<<>'##,';;;;;,;;;;,**,,,,;>___>,;>>#+/%//%++$$.+++@@+", "###,##,;;;;;;;;;;;;,,,,,#**###+@+###,,;>>__<____<<<<>;>>>>>>>___<<<<____}____>;,,,,,,;;;;;;;,,,,##,,;>>_>>>>;#+%%%%$%+%$$$$$.@##", ",'';,,,,;;;;;;,,;;,,,,,,****####';;;;;><__<}}|}}}<_;****,;,;;;>>>><__>__}__>>>>>;;,,,,;;;;;,,,,;##,,;>>>;><>#+.%$%%$%%.$.$((@*#,", ",;;;;,,,,,,,,,,,;;;,,###****#,,,;;>>>>>_<<}}}}}}<_>=*@@******==#,;;;>;>___;;;>>>>;;;,,,;;;,,,,,,##,,;;;;,>>;*.$$$$$.%..$(.@*####", ",,,;;;,,,#***,,;>;;,#********=;;;>>_<<__}}}}<<__>>;,***@@@@***+@*#,,;;>_;;;;;>>>;;;>;;,,,,,;,,**###,,;;;;;;#@.$.$$.......+,;;,,,", ",==,;;,,#****#,;;;,,********==;>>__}}}<_}}<___>>;;;;;,**@@@@++@.@+###,;>;;>__>>>;;;>>;,,=,,;,=**####,,,;;;#*@..%+@@+@..@#,>>,,,>", ";--;;;;=*****#,,,##******=,;;;_____|}}}_<__>>>>;;;;;>>;,*+@@@@+.@@+****=,;>>;;;>;;;;;;;;;;;,,***#####,,,;;,#+.....@@@@*,;;;;,,;>", ";;-;;;,=**######*********=;>__}22____}}___>;>;;,;;,;>>>;'#@..+++@@@+@@@*,;;;--;;>>;;;;>>>>;,****######,,,;;#+$$.$(&@+*,<;;,;;;;=", ";1___>;>;;,=**#,******,,;>_____}|______>;;;;;;;;,=,;><<>>;##++%......@@@#,;;==-;>>>;;;;;;;;;,#**#######,#,'#+.$$.&.@#,,,#*,;>>;=", "-;>_____>>_>;,,,***,,;;>______}2}|___;-=;;,;;;;;,,,;;>;,''###:+++++#####*#,;;;>>_>>;;;,,;,,*****###########+.$$$..@+#,,,;,**,;>>", ";;>______<<<<>;,*=;>>____<}}<__<<___;-=*=,,,,,,;,,,;;,#*##########'''''###,;;;>>>>>>;;,,;,#**#######+####[#+$)$.@+##,;;;;;==,;__", ";;_____<__<<__;-=;>______<22}_>;>>>;;;,,,,,,,,,;,,;;,#**@*##**##''''''[###,;;;>>>>>>;;;;,#######++++++++###+$$%+##>>>;;>,,;_<_>;", "________________________}}}<_>;=;;;;;;;;;;,,,,,,,,;;,,******++#,;,####++++##,;;>>>>>;;;,####+++++++++++++:[:+%+###>;,#,;#;<<}<>;", "_____________|}|2}}}||<}2}_;--;;;;;;,;;;;;;;,,,,#,,,,,#,,,****,;;,*@++@...@+#,;;>>>;,########+++##++++++%+::+++#@+##@@@*;><<<<_<", "<__>________||}|}222}|__}_;=,;;;;;,,,,,,;;;,,####,,#**,,,,***,;;;#*+*+@...$.@*#*,*#*****##+++++%+@+...%%%%%%%%%..@@@@@@*;>>>>_<<", "<<>>>>______|||__|}2}}__;;;>>>;;,,,#,,,;;;,,##**#,##**#,#***,,,,,***##+.+.$$.@@@@@@@+++#+@$$$$$$(($$$$%%%$$$$$$$.@+@++#,,;<<<>><", ">>'#'>;>>>>_______>>>;;;;;;;>>;,,,,;;;;;#,,,',###,,#***#,###,,#+#####*##++++.$$$((.@++++$$$$))^^{{]{^)))^))))$/%%+++++###,>>;,'>", "+++#';#*##,;;>>>>>>>>>;;;,##,,,,,,,;;;;;,,,,,,####*@@@@****####*########++++%%/......+%+%%///$)^^^^]]^^)^^))))///%%.@+######,,##", "...+##*@@@*=;;;;;;;>>;,,,*@@**,,**,,,,,,,,,########+@@@*####*@@@+##'#####*++%%%%......%%+%/%%%/$$$)^]{^^^^)$$$//$$$.+#,',*@@##+.", "++@@.@@@@***=;>>;;;;;,#***@@**,,****,,,,,,##########+@@@*#,#*@@@+#########++%%%%...+++%%%$$/%+%%%/$$$$))^))$$%%+$$.+#>><>#@.@@.(", "##+@((@*#****=;>>;;,#*******#,,,########',######++@@@@..@+*#****@++########++%%%..+++++%%$$$%%%$%$$%:[:%$$$$$/%+$$.#'>>>;#@&$.++", "+#'#+@*,,#****=;>>,#*******,,;,,,##***##,,#######+.$$@+#*##,**@@($.@##,,####++%%%.++++%%%$$$$$$$$($+[>'[#+%$$$$$$.+#,;,##*+@.+#[", "##;>;;,,,,****==;;,#******#,,;,,,,#***#########+#+%.+###;;;;,*@&...@+########::+++%%$$$$%$$$$$$$$$.+#''>>'#++.$((@#;>;,,**####[[", "'##,;;,#,,,,;,=*,,,,##**#**#,,,,;,,***########*+$$%+:##+,,,>>>,*++@@@***###'[[[:[:%$$$$$$$$$$$%+.@@@@@#'>>'##*@&&*;<<<<>**#,'[#+", "@*#,;;;,,;;>>>>>;,******,,,,,;;;,,,#########+@.@$/%++##+**#,>>>;#+@.@+**#*+++:::[%{!)$$$%%%$$$..@@@@@@*##>>>;;,***;><<>>;,##>>[#", "**#,,;;;;;;>>>>>,,****##,,,,,,,,,,,,,,,,###+.(($$%+++##++@+*,,,##++@@+@@@.($$$$$$$)$%%$$$$$$$$$@@@***####,;;;>>;,;;>>>;,>;;,,,##", ",=*=,;;>;;>>>>;;,#***#,,;;,,,,##,,,,,,,####+@...+++++++...@@+***##++++@@.(())))){)$%+%$$$$$$$$.@@@*,,,,,#,,#,>>>>>>>>;;;><>;#*#'", ",,==,;;>>>;;>;;,#****,,,;;;,,,,,;;'',###+*###+++++++%..(....@@@+###+++@@.&((($$$$$$$$$$$$$$$$$.@@**###,,,,#**,,,;>><>>;;;>>;#*#,", "===,,;;;>>;;;;,,#***#,;;;;;;,,,;;;;',###++++#####++++..$@@@@@@++###++*##@@.$$$$$///$$$$%$$....++******#,,###****,,>>;,==;;>;;,,,", "=====,;;>;,;;;,*#*#,,;;;,,,,,,,,'',#############[#++++@@+++@+@++###++*#,##+++%$$$$/$$$$$.%...++####***,,#*#,,**##,;;****==;>_>;=", ";==***,;;,,,;;,*#,,;;>;,,,,,,#####*++++##########+++++++++++++++++##++*######:+%$$))$$$$%%++.++#**,,##,,#**##**##,,#***=;;;>__>;", ";=****,;;,*,,;***=;>>>;,,,,,#***#+@.$$$$%%%++#++#@.++@++++++++++++##+@@@+*###[#:+$){^$$.%+++.@++@*#,,,,,,****@@*#,,***;_>___>>_>", ";,**@*,;,***;;,**-___;,=#****@@+$$$){]]^^)$%++#+++++++++@@+++++%+:##+.@+@+####++#+$)))$$$++@.@+###,,###,#******,;;>>;;;111>_>>>>", "#,;>>;;;,***,;,=;;==***,***+++@@$)^^^^]]^^^^)$..+%++##++@@@@++++++++...++*###*@+++%$$($$$.@.@+#########,##***#,,*,;>_1__11__>>;,", "#;><<>;;;;;;;;>>;,@@@@+++++%.$$$){!{^^^]]]^^)$$..%++##+@@@..$$%%+++@@.@+++#*++++++++%.$$($..+###############,,,,;;>>>;;_;>_>>,##", ",,,;,;;;>>>>;;;>##+++++%+%%/$)^^){!]^^{!~]^$%%++%+++#*+@+@@.$$$$++#+@@..@@+*++++++++++....@@#''############,,,,,;>>>;;;;;;;;,##+", "',#***###;>;#*++#:::[:+////^^^^)^^{{{{)({)$$$/+:+++++++++++++++++*###@.(.@+##++++++++++++++*#',######,,####,,,,,#,,,,;>_;,,#####", ",####**+*#,,*@..%$$$$)))^^]]]]^^^^$$(.+##+.)^)/::###+@**+*##'''',;;>;,#@@+###++++#+##########',######,######,,,;,;;,,,;>;,######", "######*+#####+@.$))^{]^^]]]]]]]]^$%+*#,><>#${^)/:####****##,'>>>>>><<>;'###+++++++#######,;,#,#*#############,;;>>>;,,,;;;,,,,#,", "'#+@+########++@$/%/)^^^^))))^^{)%:';>>>>;#.{!]^+##,#***,,####';>;;;;>>>>'#@..++@+#####*#,;,#####++*###*#####,;>;>;;;;>_;>>;;;,,", "'#*+##,,#''#*#*@.%%%%%%%%%%%$$/%[[[';;>_;,,##%)^(&@#,,,=,,=*####,==,;>;,**+++@+@*##,###,,;,,,,,####++*#####,,;>>_;-->___<<<_>;;;", ";#####'','#+@++@++++++++++++%++:[['',;;>>;,,[:+%(((&@***=*********,;;,*@@@@@@+###,,,,,;;;;;;,,,,####****##,,,,,=;;1________<<_;=", "',###,,,;,#@@@@@**********++@+####,##=,;>;,,,'[[@@&@*,=====*******,;,#@@@@@@@#,',;;;;;;>;;;;,,,,,,,#******;>;;==;11_____<<_<}_;*", "',,,,,,,;,*@@@@++**+++++*+@@@*#####***,;;,##,''',,,;__>;;;;,=*****######****##';,;;,,,;>;>;;;;;;;;,,,***@*=;>;;-_11___<<<<<__>;=", ",,,,,,#,;,******++++++++*+@@@*#,*****#,;###,,;,,,;>________>;,,#######,;#,,,;;;;;;;;,;;>>>>>>>>>;;;;;;,,***=;;;;___<<<<>><<<<;;,", ",,,,,##,,***#***********#*+*###,****##';',,;>;-=;;>;-;_2}}<<_>;,##''#####,;>>>>>>>_>>>__________>>>>>>>>>>>;>____<<<<;##+[><>,,,", ";;;;,=,;,***=***#############,##=-;,##['>;;;;--->>;,=;_}|}}}}<<>>>>'###,;;>><<<<<<<<<_<<________________}}}__|}}<<>'#.$$$$+:###'", ";>>;,,,;,*@*#**,*###+*+*#*#####*=;;;,###>;,;;;--_>;;--==__}}}}<<<<>,##;<<<<__<<<__<<<_______<_<<}<____<<}}<<_||}}<#.{!{){{!{(+#>", "=--;,,;;*****##,##*####+@@+*#,,,,,,,,,,,;,**;;;=__>>>;;;;_<}}}}}}}}<<<<}___||___||||____}}||||}}}<<<<<__>>____<<<[${{{$%$$$$($+#", "=---,=,,########',#,,,##****##,,,,,;;;;;;,**,;;;>>>>>>;;;>_<<<<<<<}}2222||||||||||||||___|||||__}<<>>;;;;;>>_<<<#%((%+#[[[##++##", "=-;;;,##+####,#,''#,,,,#,,##,,,,;;;>>>>;;,**,;;;;>>>>>;;;;>>_<<<__<}2222||||||||||||||||__|}|_____>;;;;;;;;>>>_<*.(@#''#''''####", "-;>_>;,########[+++++*****#,;>>>;>><<<>>;,*,,;;;;;>>_>;;;;;>_<<<<<<<<<<_<}|}}||_<<___<<}______1>>>>>>>_<>>>>>;;;#@@#;,#**###**#,", ";;__<>'#[[+.$$$$$&&(&.@@@*,;>>>>>><<<<>>;;,,,,;;,;;>>;;,,,,;><<<<<<<>>>>__<<_____>>>__________1_>>_<<<<<__>>>>;;**,;>;,;******,;", ";>>>>;##++$$))))((((&.@@*,;>>>;;>>><>>;;;;,,,,;;,;;;;;,,,**,;>;;,,##*#,,;;;;>;;;;,,,;;>>_>>;;>>_>_<<<<>>>>>>>>>>>>>_>;;>;;,=**,;", ">;;;'#+%$))))$$$$...@@#,;;>>>>>>>>>>;;;,,,,,,;;>>>>>>;;;;,,;;;,*@@@@@@@@##############,;;;>>>______<__>>>>>>>>>><>>>;,=,;;;,,*,,", ">;,,#+.$)$$//$$$.@@@+#,;<_>>>>___>>;;,,,**,,,;><<<<<____>>;;>;**++##*+@@+***#**++++++###,;>___>>>>>>__<<>>>>>>;>;**,;;,,,;>;;;',", ",,#+@$$$))$$$/%+++##';;>>_>__>>>;;,,,,,,>;,;><<<<>;,,,,,;><<>;,,##++##++++++++++#++@+*#',,;>>>>>>>>>>>_<<_>>>>>>*#,,##,;,'>>>>>>", "'#@($$$$))$$$%+++*##,,;;;;>>>>>>;;;;;;;;;;;>><>;;;,,,,,*,,,,,,;>',####++@@@+++##+++++###,,;;>>>>>>>>>>>_<_>>>>>>,''#+.(($$.+:['>", "@())$$$$)$$$.+++###,,,,,,;;>>>>;>>>>;;;;**;><<>;###,,,,*#####,;>;;',###*+@+++++#+++###++,,,;;;;;>>__>>>><____>;;####+$){{!!{$%::", "!!{$$/$)$$$%%++#,,;;;;;;,;>>>>;,>>>>>>;;*,;<<>;,***,,;,,,,,,,,,,;;;,,,,####*++++++###*+@###,,;;;>>_<_>>>_____>;,*##[#+%.${!!{)))", "~!^$))))$.+++###,;;>>>>>>>>>>;,,;;;>;;;;><<>;,**,##,;;>>>;,,,,,;;;;;;,,,,,###***####*++++**##,;;;>>____<<<<<<>;=,''[##+++$))))^!", "{))^{{)$%++###,,;;;>>___>>>;;;,,,;;;;;,,;;;;,,,,,,,,;>>>>,*@*,><>>>>;,,,,,#########*****@@+*##,,,;>>>>_<<<<<<>;,,#######+%.$%/$)", "%//$))$%++###,,;;;;>>>>>>>;;,,',,,;;;,,,*****,;>,,,,;>;;,#**#;><>___>;;;=,*###,,####****++++*###,,;;;;>>>>>>>;,***@@####++++++++", "++%%+::++##,,,,;;-;;>>>;;;,,#''>,,';;,,####****#,,,;>;,#**#;>>;,;;___>>_;,==******#####***+++***,,,,=,;;;,,,,,**##**##*+*##+++++", "['''',,,*#,;;;;;;;____>;,,,'[[[[[:++++####++++@@@******#*#,>>>;,;;_____>_>,=*====***######******###**##,##,#*+**####*#*@,@@#''';", ">>>,,#,,;;,,,;>_____>>;;;;'##+++$$)$/+::+++++++@@*,****#,,,;;;,,>>________>;;-=****####+###******##########+@@++###++##*,**#,''>", "#####,;;;;;,;>>_<<_>;,,,'##+%$$$^^)$%+::+++++@+@**,,**#,;;,,,,,;>>>>>__<_____>-=***####+###******#####++++.$($.++##*******##,''#", "*##,,;;>;>_____>>>;,###++%$$))))))$%%+::++++++***,,;,,,,;;,,,,,;>>>>>__<>>__<__;==*****+###******####+@.@.$()$$%.+###*@&&*''['[:", ",;>>>>>><<<<___>####+@..$$)^^^^))$$%%++++++*####,;;;;,,,,,,,,,,;;;>>______>_<<<__>=*****##*******++@@..$$$$$$$/$.+#+@@@&+,'#+:[:", "@+#,';;;<>;==***@@+@.$$$$$)^^^^))$$%%++#+######,;;;;;;,,#,,,;,,,,;;>>>>><<_>______;==***##*******@@((((($$$////$+++@&@@*''+$))$/", "{{($.@+#+@@@&@@@@+.$$)))))))))^))$.+++##+####,,;;;;;;;,,,,,,,,,,,;,;;>>_<_>>>>>>__>>;;,*##****##*+@.((()$$$$///$.@*@@+##,+.${{^)", "$$){!{{){)(.@@@@++.$))))^^^^))))$$....+#****#,,;;;;;;;,,;;,,##,,;;==,;><>>>>>_>>>>___>;*######,,##++.$$$$)))///${.######+..+%)^^", "^^^^^^^^^^$+##@@.${{)$$)^)/////$$...+#+@@*####,;>>;;;;>>;,######*=,,,,;;<>;;,;;;;;--;>>_;,##,,##+###+$$$$$)$////(&@*###,#++%////", "^^^^^^^^^^/['#*+$$$$$$$)%%/////$$@+@@@+@+*#,,,;;;;;;;;;;,,,,,,,#,,=**=;_>>;;;;;;=-;;;;;;;,,###++++++%$$$///////${.*,#*@@*+++%//)", "^^^^^^^^^)%[''##++++%%++[:%/$$/%.++@.@##',;;><>>;;>>>;,,#,,;;,,,,,,**,;>>;;;;;;;*=,;;,==,,,##++++++%$$%+%%%%///$.#;>#@@@+###:%$)", "))^^^^^^^/:'',,,,#####'>##++++#[.@@.@#'>>>>><<_>>>>>>;,#,,,,,,,,*,;>>;;;;;;;;;;;,,,,,=***###+%%+++%%$$%%%%%%$$%%'''#*@*#####:+$$", "$$$))))$$+[',,;;,#*#,;;'######''++..+'>;;;;><_>><<>;;,,#,,,#*##,#;><<>;;,,;;;;;;;,,****#*##+$$)$%%%%%$$$%%.$$%+[>#+@@**#,,##++%.", "..$$$$/$%#';=---,,;><<;*#,,,,,,,'#@@*;;#,,;>_<__<_;,**#,,,,#**,;>>>>;;;>,,;;;;;;;;,#**####+.)^^^/$$//%$$%++..+#'#++*#,,*;,#*++++", "@@@.$$$.#,;;--1-_>_<<>,**==,,==*'##+#',#,;;>>>>>>;,***#,*#,###,><_>;;,;;,,;;;;;,,,###**##+.$)^^^)))$/%/$.++@..+#+++#,,,,,,***+++", "*@@.....#,;--111_<_;********===*#####';,#,;,**********##**,,,,;<;>>_>,=*,;;;;;,,##,,,###+.$$)))^^^^)//%%$%++$((.$%++###,,###**++", "##+@@@@@,,;---13_<_;*******##,,,##';;,,#,,,**@******###***#,;;;;>>>>;=;;;;;;,###*==,##+++/))//)^^^^^^^^)))))^{{{{)$$$$+##[##+++#", "#++@@@+##,;11111<>,***,,########,,,,,,,,,,#****###++***@@@*,;>>>__>>;--;;;;,,###*==*##:+/)))//$$))^^^^]]]^^^^)$$$$$$)))$$%++:#['", "###+@@*#,;;______,*@*#,,,,######;,,##,,;#****#####+@@+@@@@*,;>>><>;;;;;;;;,,####==**+++%^^)///$$))))^^]]]]^^)$/%++%%$$$)$.++++++", "+###+@#;<>>>____=***##**,,####,,;,,###,;**@**##*##*+++@@###,,,,,>;,;;>>;;,,#####,,##+%//))///$$$))$$)^^^^))//$%%+++:::+++++++...", "$+####;_<_>>>>,#**#,#***###*##,;,,,,,###**@@****########;,#****#;,#,;>>;,,,#####,,##+/)^)////$$$$$$%%/$)////$$$...++#[[#+++++++*", "+####*=;;>_<>#@(+####*#,****##,,##,,,#**********#####,,;,,#***,,###,,;;;,,#**######+/)^^^)//$$.%%++++%/$$$/$$$$.$.++##[#'#######", "'[##**==;>>;#+$)@@##############*#,,,#*@********##';'';;,,,,,,,,#####,,;;,#**####:%$)^^^^^)$$$@++++++%%$$$$$$$$..+######>',#,,##", "[#+@*=>_>>,+$$//(.+'>>#@#######**####**@@*##**#,##;>;;;;,,;;;,,##['##*#,,,#####[:%$^^^^^^^))$$..@+++++%...%..$...++++@+#####'',#", "+++*#;>_>#@$$/)^$($+[>#*########**####**@**########,'',,;;;;,,,##########,,##[#++$^^^^^)))$$$.++++++++++.@.@@@...@++@@++####,#*@", "++##;;;;,*.$$//)$($.+[[#########*******#****#########,,,,,;,,,,,########*#**#'#+$^]^^^^)$$$..@@++++++++@+++++++.+++@..@@+@+*##*@", "++##;;',+@$$$///$$$$$+['######**#*@@@*#,,,#**##,#######,,,,,,,,,########,####[%^^]]^^^)$/%%+++@++++++@+@@+++++++++..$....@@@@@@@", "####['[#$$)))$/%/$$))$+##########**@@**#,,####,,##*+*###,,;;,,,#####,,,,''##:%){{]^^))$$%+++++@+++++++##@@@+++::++$$$.$$.@++@@++", ";;''[[+/^^^^)$.%$$$$)(.++#########*******##,,,,,##*++*##,,;;,,**##########:+%$^^]^^)$/%%%+++++@@%%%++###*+@.$%%+%.$$$%%..+++++#[", ">>>>[%^]^^^)$$..$$/$$$$%+++#####**##**@@**#,,,,,###**###,,;;,,***####*###++$^]]^]^$$/+++++++++@+.$$..+##,#+.$$$$/$$$%%+%$.+++#'>", ",;,#$^]~]^)/%.@@$$/$$$$$$.@@++++@**********#####',########,;;,,*,=*****#+.)^]~]^$%+%%::+++++++++%%/$.@++##++%$$$$%%%%%%+%%%%+#['", "**@)~~~]^)/%+@@@%%%/$$()($..@@@@@@+***#####***##',,####,**,,;;,,,=*****+(!~~{^/::[[#+##++++++++#:+%...@+###:++%/$%+++%+++%$.++++", "+$))$)^)$$%+++..+...%.$($()$+++..@++++++#@@@*##*#,,****,***#,,,;,**,#@(4!{($+[[[',,###**#*+@@@+*##++@@..+#[[:+%%%.%++..++@((.@++", "$){$$$$%++++++++@.....$()($%++$)))$$$.%+++@@++#*##,##***@****###',##@(44@###'>>',;,,,####**@@@@***+++@...+[[:+.$+++###+###++**+@", "$))$%+++:+++++++@@.@+...$.%++$${{{{{)($$..+%@++++*####+++@@+++*##:+$){(+>>>;;>>;;;,,,,,,,,##****+*##*@@..+['#+..++.+######'''#@(", "$$$%+:++++++++++@@@@+++@+++%$$$$$)){{{)$$$%%$$%+.++##++++++@@++++/){!)+>';>>>>>;;,;;;;;;;;;;,,#######*+@@+#['##+#+.@+######[#+$)", "$$$%+:++++++++..@@@@+++++++%$$$%$$)^{^))$$///$/%$/%%++%%++%%%/$//)^^^$+##,;___1;>;;>>>>>>_<_>>;;;,,##**#*@@+'>'#'#+@+###+++++.({", "$$%%+::++++++++@@++@..++.%++%$$$$))^^^))))//))//$$$$////%%%//$))^]^$%%..#,;__1-;_>>_<<<<<<<<<_>>;;,,*##,#@&@*,,#,,*@@++@+++%$$$$", "$%%%%::+++++++++@++@..++.%%%$$$$$$))^^^^^^^^^^^^^^^^)//)////)^^]~~{/:[++#**,;;;>>>>_<<<<___<<___>>>>>;;;,*@@@*###,*@@@@.+++%$$$$", "%++%%+:++++%@++++++@...+:+%$$$$$///$)^^^^^]^^^^]^^^^))^^^)))^]~~{{)$+##[#*+#,,;<>>>>>>>>>_______<<<<<<>>,,,*@@**,;,*@*+++++%$))$", "$%%+%%++++%...@+++@..++#++%$$$%%%//$$)^^]]^^^^]~^^^]^)/)^^^^]~]^(@#;>>>>+++++##,,,;>>>>>>>___________<<_,;;;;>>>;,*@&@+#+++%$$//", "$%++++++++++@@+++++@++++:+%$$$$$$////$)^^]]]]^^^]]]]^)///^]]]^/+,><<<;##++++++::+*##,,,,>>>>____>>____<<>>>>>>>;<<>,*@..#+%$)$//", "%%++++++++++++++++++++++++$$$$$$$$$/%/$^^^^]]^^^^^^]^)///^~~^/%:,-;>;,*@+++%%%%%.@@+****,,,;>>_<_>>>>___>;;><<<<<<<>;#+.+.$$)$$/", "%%+++%%%++++++++++@@++++%.$$$$$$$$$$/$$)^)$)^{^^))^^^)$$^^^)/%%.@&@****@@@%%%//$...@@++*@****;>>____>>__>>;><<<>>><<>;#+$$$$$$/$", "%%%%%%%.%++++++++@..++##%.$$$$$%$$$$$$$$$$$$$($$)))$$)))^$+:::+.@@@@**@@..@+++%%...@@@++@@***=;>_______<<<>>><>><<<<<>'#++$$$///", "+%%%++%%..+++++++...+###++%$$$$$%$$$$$$$.....++#++++$){!.:'[[#[[###*++@@@@@@@+++%%%@+@++@*#,,,;>>>>_____>>>>>>><>;;><<<<>[%$$$%+", "++%++:+%++++++@....+#[#++%%$$$$$%$$$.%%.++++#,;>>'[#+.((#''#+##':::++++*@@@@@***++++++++*#;;;,;;;;>>>;,,*******,@&&+'><<>#.($$..", "++++::+++++++@....@+[[+..$$$$$%%$$.%++++++#'>>;,>;'>>,#'#''*@@++:[[:+++#**@@@***[[#:++##*#>;;,,,;>>;;**@***&4444(44(.+##+.$($$$)"}; mtink-1.0.16/xpm/Greysea.xpm0000644000076400001540000001273410376041214014007 0ustar jjfuse/* XPM */ static char *magick[] = { /* columns rows colors chars-per-pixel */ "65 65 55 1", " c #d2d2d2d2d2d2", ". c #f1f1f1f1f1f1", "X c Gray79", "o c Gray91", "O c #c0c0c0c0c0c0", "+ c #dfdfdfdfdfdf", "@ c Gray84", "# c Gray96", "$ c #cdcdcdcdcdcd", "% c #ecececececec", "& c Gray77", "* c Gray89", "= c #dadadadadada", "- c Gray82", "; c Gray94", ": c #c8c8c8c8c8c8", "> c #e7e7e7e7e7e7", ", c Gray87", "< c #d5d5d5d5d5d5", "1 c #f4f4f4f4f4f4", "2 c Gray80", "3 c Gray92", "4 c #c3c3c3c3c3c3", "5 c #e2e2e2e2e2e2", "6 c Gray85", "7 c #d0d0d0d0d0d0", "8 c #efefefefefef", "9 c Gray78", "0 c #e6e6e6e6e6e6", "q c #dddddddddddd", "w c Gray83", "e c #f3f3f3f3f3f3", "r c #cbcbcbcbcbcb", "t c #eaeaeaeaeaea", "y c Gray76", "u c #e1e1e1e1e1e1", "i c #d8d8d8d8d8d8", "p c Gray81", "a c #eeeeeeeeeeee", "s c #c6c6c6c6c6c6", "d c Gray90", "f c gainsboro", "g c #d3d3d3d3d3d3", "h c Gray95", "j c #cacacacacaca", "k c #e9e9e9e9e9e9", "l c #c1c1c1c1c1c1", "z c Gray88", "x c #d7d7d7d7d7d7", "c c #f6f6f6f6f6f6", "v c #cececececece", "b c Gray93", "n c #c5c5c5c5c5c5", "m c #e4e4e4e4e4e4", "M c Gray86", /* pixels */ "OOOnw 7p 6zuuz+qMMig$X:9:$@fzmd5u,+,,qMffMxgp2XXrvw,,=w-izz+q6wvX", "OOOyj$vp7@q,z+,qMffMxgp2Xjv xquz,6xiii=MMMM6xgp222 zzzf6fuuzzz,i<", "OOOO4ns:r7<@xxii=MMMM6xgp22$7@fq6mzqfuo05,qM=", ",6gvj:Xj27@qz5*5u,@7r$vv-w6fz55+=666*z5>0ddzq=", "z+qi00d*+", "z+qfq=@ 7ppgM50o>0f jjr2vp<6Mumd,x wM+,6f v2rpfzq,,+=x-p7@,u**f<7$2r2$-gwgp- xq*okodm", "vp7@umz,f,f=i<@q08eh%5x7$vxu*zM@<=i0m", "::X$@+z,=xxxxi@@qkhc#.oMw7wfddux xMq=i=fzm005=7jXXvx@ v2r$v7 6ud0", "999:v6u5,xw- x@wxz%e11hk+b.h%*MqMi@=,=g7-w6qq<2jwf62lOOlXxud*qittm+6=M,,+qqM6gvv$rjXX:n4lOOOOllllys9s9:XXj$wqu+", "v@u>>*fwv$$r$w6q*mu6w--g6MM==M=6xw -77 pr94llys:9nspvXX::Xj$gf*d", "j$x5t3k5M@-$$pgiq+Mw7$2p>dm*5*5+qqumd+qm*dmz,zuuzu5033*6-v22v", "=<-$r2p@zkkq7jss::Xrgiq*>t3k>dm*5***5u5*5Mw@fu*z++,++,,+dk0qigvrr", "M6xg7v$pwqd+x@7jX::Xrv =5k3t>5zzuu5**md5,@7p iq+,f6xiii=,u5f6xgp2", "xxixw7$22pm+=x<k+ :jjjXXX:XXrv7 7pv$222r::9s99999", "9:999sss4yOOOOl&:-x>", "==6xw -p$r9&ylOOOOOl:$7<@g77-- <@xxi==6xw gtt", " wx66ixx@ $9&ylOOOOl&9r-m+f6@<", "om5m>0d*uq@79&yllnrg5%%tm+umdm*uum>o0u=w wM0a83m@pXj2wfz0%aaa%>u,", "t3tkkdddd*,=7Xs&&nXpf%;.8>m0dmm***>kkkmf<-@,k8.bzw2jrgf0k;he1h8td", "kbbkoddm*u+zfw$X:9:jgdbhhb>0ddm*uz*>t%kz8e#c18od" }; mtink-1.0.16/xpm/Dry.xpm0000644000076400001540000005625210376041214013151 0ustar jjfuse/* XPM */ static char *magick[] = { /* columns rows colors chars-per-pixel */ "100 100 146 2", " c #52525a5a3939", ". c #a5a5adad9494", "X c #4a4a4a4a3131", "o c #7b7b7b7b5252", "O c #cecececeadad", "+ c #6b6b73735a5a", "@ c #b5b5b5b59c9c", "# c #636363635252", "$ c #8c8c8c8c8484", "% c #9494a5a58c8c", "& c #393942422929", "* c #84847b7b6b6b", "= c #8c8c94947373", "- c #b5b5bdbda5a5", "; c #5a5a5a5a4242", ": c #848484846b6b", "> c #5a5a63634242", ", c #a5a59c9c8484", "< c #deded6d6b5b5", "1 c #adadb5b58c8c", "2 c #a5a5a5a58484", "3 c #9c9c94948c8c", "4 c #9c9c9c9c7b7b", "5 c #efefefefd6d6", "6 c #737373736363", "7 c #94948c8c7373", "8 c #9c9ca5a57b7b", "9 c #e7e7dedebdbd", "0 c #73737b7b5252", "q c #bdbdbdbd9494", "w c #c6c6ceceadad", "e c #6b6b6b6b4a4a", "r c #bdbdc6c69494", "t c #adadb5b59c9c", "y c #525252523939", "u c #a5a5a5a59494", "i c #8c8c8c8c6363", "p c #d6d6d6d6b5b5", "a c #cecec6c6adad", "s c #6b6b6b6b5a5a", "d c #b5b5adad9c9c", "f c #efefe7e7c6c6", "g c #94949c9c7b7b", "h c #6b6b73736363", "j c #8c8c8c8c7373", "k c #b5b5b5b5a5a5", "l c #52525a5a5252", "z c #b5b5bdbd9494", "x c #63636b6b4a4a", "c c #848484845a5a", "v c #adadadad8c8c", "b c #424242423131", "n c #63635a5a4a4a", "m c #7b7b7b7b6b6b", "M c #9c9c94947b7b", "N c #7b7b84846b6b", "B c #737373735252", "V c #9c9c9c9c8484", "C c #c6c6c6c6adad", "Z c #6b6b63634a4a", "A c #9c9ca5a58484", "S c #e7e7dedec6c6", "D c #63636b6b5a5a", "F c #adadadad9c9c", "G c #c6c6cece9c9c", "H c #949494946b6b", "J c #e7e7e7e7c6c6", "K c #84848c8c7373", "L c #525252524242", "P c #dedededebdbd", "I c #d6d6ceceb5b5", "U c #a5a5adad8c8c", "Y c #c6c6c6c69c9c", "T c #949494947b7b", "R c #bdbdbdbdadad", "E c #cecececea5a5", "W c #c6c6d6d6b5b5", "Q c #6b6b73735252", "! c #94949c9c8484", "~ c #b5b5b5b59494", "^ c #adada5a58c8c", "/ c #84847b7b6363", "( c #4a4a4a4a3939", ") c #8c8c94946b6b", "_ c #848484846363", "` c #d6d6dedebdbd", "' c #7b7b7b7b5a5a", "] c #cecececeb5b5", "[ c #9c9c9c9c7373", "{ c #63636b6b4242", "} c #8c8c94947b7b", "| c #5a5a5a5a4a4a", " . c #848484847373", ".. c #c6c6cecea5a5", "X. c #5a5a63634a4a", "o. c #a5a59c9c8c8c", "O. c #8c8c9c9c8484", "+. c #adadb5b59494", "@. c #525252523131", "#. c #a5a5a5a58c8c", "$. c #c6c6bdbda5a5", "%. c #dedededec6c6", "&. c #d6d6d6d6adad", "*. c #7b7b8c8c7373", "=. c #bdbdbdbd9c9c", "-. c #6b6b6b6b5252", ";. c #949494948484", ":. c #bdbdc6c69c9c", ">. c #e7e7efefcece", ",. c #8c8c8c8c6b6b", "<. c #52525a5a4a4a", "1. c #adadadad8484", "2. c #d6d6d6d6bdbd", "3. c #4a4a52523131", "4. c #f7f7f7f7d6d6", "5. c #7b7b7b7b6363", "6. c #efefe7e7cece", "7. c #636363634242", "8. c #7b7b84846363", "9. c #8c8c8c8c7b7b", "0. c #ceced6d6adad", "q. c #bdbdb5b58c8c", "w. c #c6c6c6c6a5a5", "e. c #b5b5bdbd9c9c", "r. c #5a5a5a5a3939", "t. c #63636b6b5252", "y. c #adadadad9494", "u. c #ffffefefd6d6", "i. c #84848c8c6b6b", "p. c #a5a5a5a57b7b", "a. c #dedededeb5b5", "s. c #7b7b84847373", "d. c #a5a5adad8484", "f. c #737373735a5a", "g. c #9c9c9c9c8c8c", "h. c #bdbdb5b59c9c", "j. c #6b6b63635252", "k. c #9c9ca5a58c8c", "l. c #73737b7b6363", "z. c #bdbdbdbda5a5", "x. c #e7e7e7e7cece", "c. c #8c8c84846b6b", "v. c #bdbdc6c6a5a5", "b. c #84848c8c7b7b", "n. c #525252524a4a", "m. c #b5b5b5b58c8c", /* pixels */ "-._ m y : x.w.O ] =.e.@ ~ =.v.a ] w.w.C w.e.z.v.w.#.@ +.y.+.y.e.~ w.] =.~ =.] ~ +.~ v.e.=.e.@ V =.C , K ~ =.v.=.=.~ 1 @ T ,.V ] a ] =.e.~ ~ +.y.~ =.z.z.w.~ y.~ 1.=.= m ,.4 @ v V 4 f.; m : f.# ,.y.4 ' ", " j. u 6.w.a O v.=.=.y.~ C ] O a a C C v.C =.y.U @ =.e.y.v =.@ +.~ =.@ +.w.w.y.+.v v v.@ U V , ] =.V 4 V U ~ @ U , V ,.g , O e.~ v ~ e.~ U #.~ #.=.w.=.w.=.w.z w.a U ' + 4 , V _ y 4 p $.2.C +.T B r.", "=.y.K * ~ 5 P a a =.v.=.U @ w.C ..a O v.w.e.@ #.+.@ v.C =.. #.=.V v e.C a e.~ ~ e.4 y.e.@ V g : ) w.w.=.k.g T : j : T = T 1 1 ~ e.U v +.~ ~ v v y., C a e.=.w.=.w.1 y.v y.V ' Q -.-.H ] 2.a C w.~ e.=.=.", "a v.: f.s P J O U v @ @ v @ =.e.w.w.=.y.+., k.4 e.C ..v.@ U y.v.4 =.w.=.e.~ v g 4 m g ~ +.U V f.8 a z w.#.k.: j.| x f.8.i +.m.d.] ~ v U ~ =.t v T , a v.m.=.=.~ ~ +.=.@ e.V B V m.~ J O Y a :.a w.C e.C ", "e.e.V N @ P C v @ w.v.~ ~ ~ =.w.=.e.v ~ . ~ e.@ v.C C +.v e.v V =.@ v #., U v v.+.e.@ +.#.K -.m.O d.y.V 4 6 | r.6 f.m 0 T m.1.~ = m _ 4 +.4 m c ~ w.~ ~ m.v Y :.~ =.u T m -.1 v y.E a z z z z C a C a ", "#.U 9.K ; -.] O C ..C v.=.=.@ v.=.=.h.e.=.#.y.t ~ v.w.v.V , +.g , e.~ =.~ +.e.z.~ +.=.y.#.= m -.[ , ,._ f.f.x | @ p C w.V g d.i + B ' 8.,.4 ,.' g ~ , 4 =.=.v =.~ =.@ #.k.' 8.w.d =.w.a m.d.q E w.v.C 1 ", "U U K V N X v.4.a e.y.@ =.=.e.a e.h.=.v.=.y.+.@ +.e.e.v g 4 +.d.=.C w.C e.~ e.=.. V @ . g .f.+ ' ,.j = = 4 +.C ] ] =.=.d., =.+.v w.] a :.y.v U y.d.T H ~ w.z z w.a e.#.u m T w.y.@ w.=.e.=.O E v.v ~ +.", "e.U k.y.9.3.B P ` =.~ =.e.@ =.] v.~ ~ v ! : T T i.4 +.v v +.~ @ :.v.@ =.v y.1 y., V g N / t.-.k.C =.] ] C v.Y =.:.1 , +.V y.v.=.v.a w.C C :.=.v.=.=.w.v , z Y O O w.y.. ;.+ =.=.;.C =.k w.E a O ~ @ +.~ ", "@ v @ k.j # X t J :.y., e.~ a C 4 T T , +.v U v y.~ =.=.~ U ~ ~ @ e.@ +.k.v U #.g j ' # _ 4 y.] =.z.=.e.+.@ @ V ~ @ +.y., +.v =.~ e.=.+.w.=.e.h.=.~ C .., g ~ a 0.Y +.@ T T C y.4 ] w.=.w.C w.e.e.@ e.=.", "y.y.~ y.U N ; l.~ v v.E a #.^ T T v e.e.=.=.=.~ ~ e.=.~ v V :.=.y.. V g M V = _ m B # T p 2.] =.@ @ +.t =.e.=.+.@ =.=.@ , e.~ v.=.@ =.C v.@ =.e.=.w.v.w.~ ~ d.) d.w.~ =. .,.y.T ~ C :.w.=.C ] ] e.=.=.=.", "@ =.e.=.e.k.T l.8.T v ` ~ , T 4 w.C v.~ @ e.@ ~ U ^ +.1 , , v.=.k.V g V = ' # 0 -.7 v a p =.C =.. y.U @ =.=.e.=.@ z.v.~ U w.w.C ~ ~ =.] w.~ C e.w.w.1 ~ =.:.=.4 4 4 +.;.m V T 2 a w.e.=.e.w.C ] ~ @ @ e.", "] C =.e.y.k.e.. T ,.' g v w.v @ w.e.~ @ =.@ ~ v.v #.~ U , g V T , ! j m B + ,.=.C ] w.=.e.@ e.g.v ~ . ~ R =.e.R v.] v.@ ~ ] a C ~ C C ..=.@ C ~ ~ :.~ v.=.~ w.v.1 T K f.m T v w.a v.e.h.+.w.v.w.@ ~ e.=.", "] ..z.C y.U y.. y.= f.-.C ` z.d.=.=.=.=.v.e.@ =.y.v e.y.~ ~ V g 4 K : m T v v.] v.~ =.e.@ @ v #.t ~ y.+.=.z.C e.=.w h.y.y.~ +.~ C ] a ..=.=.C 1 v =.C O ~ d.+.~ ~ g B t.' V P E C v.=.e.=.C v.w.@ ~ ~ =.", "] w.] C e.y.k.+.t ! N r.y.p w.U z.C v.@ =.v.=.@ v.~ w.e.] ] 1 V : f.4 z.] ] =.~ =.y.=.=.F e.U @ @ +.#.y.z.] C =.z.] =.e.~ +.v v ` a v.w.C w.e.+.=.=.e.d.4 1 @ 1 y., K ; j 2.] E C w.e.@ =.C =.v.~ ~ @ v.", "] :.w.e.v U +.e.t g.: x : ` ~ d.C w.=.@ =.=.e.@ =.@ e.~ a C +.T c.f.y.P ] w.z.z.@ +.e.=.u +.#.@ +.y.#.+.C C C v.=.z.v.=.@ v v T w.:.v.w.v.w.v v e.v v g , ..~ =.+.y.8.# V P =.Y a C ~ @ ~ :.~ =.=.=.v.a ", "] =.~ =.@ +.@ e.F . F 8.t.v.v v w.C =.e.@ e.=.C =.e.~ e.C w.~ = f.: ] 2.=.w.a y.~ @ =.z.y.U @ v.y.@ v @ C e.e.C C =.=.=.e.@ U ' , v.a ~ =.v.T , z , ~ ~ v.a d.~ +.: + -.T v w.E C ..@ ~ e.=.=.C e.w.C ..", "w.=.=.=.C e.+.e.y.. ! 9.-.T #.v C z =.~ =.v.=.v.=.C =.w.w.e.. ,.-.T ] 2.C C z.#.e.e.@ @ . y.e.C +.@ e.=.e.y.e.=.C v.@ =.=.w.#.T o :.w.~ v T g d.8 d., g T ] ' ' ' T d.~ e.,.+.p w.1 =.=.@ w.C $.v.w.v.] ", "=.C =.v.C =.@ e.U . #.T + j U T O v @ v.w.@ =.v.z.w.=.e.=.t V : B v P ] v.C =.y.e.@ y.e.y.y.t @ @ ~ e.R =.e.=.F ~ e.~ e.=.@ , V m.v d.z 4 g d., 4 p.e.+.v V , 1 w.O w.z ~ V g j O < w.v =.C C C =.e.z.w.", "=.C w.=.w.=.e.=.=.e.t y. .f.V , d.= v w.C =.C e.=.w.=.=.=.@ V m ' a ` =.=.R @ t =.F V +.F e.e.k =.t @ e.t y.+.#.+.w.v.k ~ #.V 1 E m.4 =.~ 1 e.w.~ :.w.w.e.B ~ ] O < =.~ y.~ , ' ~ J a +.] ] w.z.=.@ w.=.", "w.w.=.=.v.=.e.=.t e.t g.: | d.` a :.@ , g ~ C =.=.=.~ @ y.U T ' ' ] ] =.e.=.e.=.R U T . y.e.R w.C +.=.=.. , . y.~ C =.v ~ +.U y.E ~ v :.v , U +.~ +.e.#.' -.Y O Y w.=.:.=.e.U 8.c P ] ~ =.=.w.=.~ ~ e.=.", "w.z.=.z.C e.@ e.+.e.t .-.; =.>.w.v.=.g ,.g y.e.=.y.v U V g j f.' P p C C e.F @ =.t V +.y.@ e.=.z.@ v.=.#.k.v +.@ w.y., e.=.v #.E a ~ w.~ 1 U v.:.+.=.K 7.~ P r ~ =.Y e.] +.4 _ 7.= [ ~ w.~ ~ v v y.+.=.", "=.=.=.C a v.+.y.e.t u f.| ,.p p C ..w.=.V _ K ~ ~ v 4 #.T T V = f.P 2.] ] z.. =.z.e.y.@ y.t =.z.=.@ e.F V y.@ +.@ w.e.v ~ y.1 v.=.Y m.~ v.=.U w.e.=.k.7.T J E m.~ =.~ , ] ~ 4 V , = / 4 v d.=.Y =.y.v e.", "h.e.z.C C :.@ +.e.U } 6 t.#.C w.] O v.=.g f.-.T 4 = c.T i.K v 4 m < 2.` a z.U F z.R +.@ y.t z.w C z.=.y.U @ v.+.~ v.=.~ ~ 1 =.` Y ~ z =.~ +.1 V ~ y.+ ' p J z Y E O =.U ..e., +.+.=.=.1 4 d.=.O ..~ y.v.", "~ =.z...w.=.e.@ U k.: m : C C P C ..=.e.V ,.B _ 7.-.+ ) _ f.T ' f.a P p z.z.y.. e.@ y.@ . +.@ e.=.C e.@ +.y.@ U =.=.~ v C ..e.~ m.m.~ 1 v v y.d.e.K ; C p =.O G =.E w.=.=.e.d.+.z.=.~ ~ 4 H i m.=.U ~ ] ", "=.=.w.=.e.z.e.. ! ! f.' C =.=.Y 1.z ~ 4 = 4 =.t T d., T ,.} = N ' U x.C v.e.~ v @ e.#.#.t y.@ z.w ] z.+.y.y.e.y.v U T a P =., K U y.~ 4 g v e.=.4 r., p w.=.z w.Y w.w.v.y.~ U v +.=.v +.=.~ V ) T [ Y ..", "w.=.v.=.z.z.t b.! l.-.V ] 1 2 =.=.m., 1 +.~ @ v y.w.=.+.~ t ~ k.B . P =.=.+.v y.@ =.k.U @ y.t =.. #.V V y.+.=.e.h.+.+.a ..T ~ g v v.+.4 U , +., B ,.] ] ~ Y ~ a Y w.a :.y.+.v e.=.=.1 ~ e.=.z w., g T 1 ", "~ @ v.@ @ t ! N + -.~ v.z.] E =.1 U =.w.@ v +.=.C =.e.=.e.+.k.-.,.t =.@ ~ v +.y.=.. #.#.! V #.U V U U @ v.C ] =.@ =.] v , v.V +.=.#.U v U :.= ; =.` =.z =.=.=.Y ..w.=.v U v +.=.v.~ =.~ +.v =.e.V _ @ ", "U #.#.k.y.#.8.# f.. ] w.] < ~ d.U v @ ~ v U =.C =.~ t ~ . y.V 8.-.= z.v e.=.v e.R #.V U #.y.+.=.#.#.+.C ] C ] v.v =.e.4 v.e.v v.~ V d.V , A x M ` z.~ w.=.w.~ a a Y ~ U ~ +.v e.=.=...v.z y.1 y.V l.#.", "K T j m K # ; T a ` J ] :.V V +.h.e.y.~ =.v.a w.e.v e.+.+.t U T B 4 ] , +.=.+.y.@ U V v . v @ e.k.#.~ C C e.C w.v =.V +.=.@ =.C =.A 4 . U f.; ` a w.v ~ Y =.w.O O :.~ +.w.=.+.v w...a :.=.~ , k.! m : ", "K ! j + 7. : ~ C 2.] a =.y.V +.@ v.=.#.y.w.w.e.v.~ y.e.~ +.t #.g j T +.4 +.=.=.+.=.e.U v V U e.y.v t @ e.~ k.=.C =.+.~ e.v v e.w.+.v U @ . -.t.] Y =.=.~ =.E w.E a =.~ +.=.=.@ e.a v.1 T g , 4 . T N f.", "K s.6 -.t.m ] x.w.w.a w.+.t e.+.@ =.C =.v.a w.e.w.=.+.@ e.+.y.U y.4 : 8.j v v.=.@ +.V 4 U U #.~ +.y.y.+.@ @ V +.e.v V w.y.~ e.C Y +.~ +.+.;.# l.a =.=.C w.w.] E w.w.m.~ v y.+.e.=.=.~ v ) 4 d.V V K m x ", "K m K } : 4 >.a O p a ~ +.e.e.e.. u C ] p ] C ..=.w.y.+.~ +.U . @ #.V ,.K T v ~ y.U V U :.=.U ~ . v . @ v.a e.C =., O ` =.e.a ..=.C +.+.@ j | T ] =.~ =.w.w.E w.w.z v ~ +.v ~ v.e.d., +.1 ~ +.8 U j 8.t.", ",.C t g.-.#.P E 2.O z y.y.1 e.=.@ 1 =.] ] P a :.=.w.U ~ d., ~ ~ =.e.v v , K 8.T v , v.P I =.@ y.e.#.y.+., e.] e.C v.#.~ C e.=.C e.=.v.y., K X k.&.=.m.=.=.O a v...m.d.y.~ e.e.v.~ U y.~ e.U ~ #.k.9.m ; ", "~ ] . : 6 C a +.=.w.=.~ @ v.C @ e.y.e.C P ` w.=.~ e.~ ~ V d.1 =.w.=.v +.e.y.4 : 8.v J %.a =.y.=.@ V U y.. w.] C C a U y.w.=.=.=.. ~ +.#.U g ; y.] E z =.=.a ..e.=.1 v +.1 y.~ w.e.~ @ U U U , g m -.m j ", "C e.9.,.g.J C :.=.w.z.~ =.C C ~ e.y.+.w.C w.=.=.w.e.:.v d.=.v =.+.@ =.y., U y.4 B 4 I p 2.] h.+.T U C C v.=.v.v.w.C v v e.e.~ . +.#.~ y.g K V E O w.=.z :.=.y.d.v ~ e.~ +.e.w.@ V V , A T 8.B 7.= P C ", "] @ ,.@ C ] C ..] O w.=.=.v.v.1 @ e.=.=.v.=.=.a a e.=.+.~ v.~ ~ =.@ z ~ U @ e.V -.#.a C w.4 4 v y.@ C =.e.e.=.R e.=.+.@ =.@ +., w.U C v.. V ; V E O =.=.~ =.y.v v ~ v.=.@ +.+.v +.V 4 8.B ' B m U a C 1 ", "C #.: p ] :.C ] w.Y =.v.=.=.=.+.@ e.e.~ @ w.=.O ..v.=.=.~ v v 1 =.y.~ =.=.@ k.j ' T ] ] ~ f.T ] v.~ e.R v.=.@ y.e.=.=.=.=.=.v.~ d.y.e.k @ T 7.U a E =.z ~ ~ U v ~ e.~ +.~ +.y.V g _ ' -.,.e.C ] a U g m.", "] V K C w.v.z.e.~ ~ ~ =.=.e.=.t v +.@ ~ @ w.w.w.a w.~ :.e., 1 +.=.=.a ] v.v #.+.B T J w.~ a a C =.k.y.w.=.@ +.@ =.z.C e.y.=.C ~ U =.+.@ ;.t._ ~ p E =.z ~ @ d.y.+.+.v +.~ t , } _ _ j v w.] z.~ y.g _ O ", "R V _ ..w.] C @ w.=.=.=.y.y.~ +.e.e.w.v.=.w.w.a ..e.1 ~ =.~ ~ +.=.v e.w.@ y.+.@ V ' @ P ] a v.=.@ V , t @ t ~ e.=.C w.~ +.=.e.y.:.v k.u 6 # ~ 1 a E =.z y.z y.~ ~ e.e.@ ~ U j ' T a ] a e.h.=.v u ._ ..", "g.V ,.` ] a ] ] =.~ =.z.e.y.=.=.C w.C C v.z.Y ..w.~ e.~ v.~ d.T m.#.~ =.=.e.+.#.v B T a C a ] =.V V U @ +.@ +.t @ w.=.=.C C ~ +.z , U 3 l.6 v.1 Y w.z ~ v ~ =.@ =.v.v.=.+.V _ + y.] w.w.~ y.~ , ! m ,.p ", "@ : #.< a p ] =.@ e.w.+.h.e.e.a C w C ..=.@ v.w.e.e.e., U :., g V ~ ~ =.=.@ ~ v ! : j C :.J w.4 V +., U @ . , t ~ =.C C C v.y.V =.#.: j T = =.e.w.=.h.v ~ +.h.=.:.1 4 y.v T 6 m p E =.#.y.z.~ 4 o.V ,.P ", "y.V a O w.C w.=.@ @ =.+.=.C w.:.=.v.v.C v.~ =.z.+.U U +.+.v e.m.~ =.+.C e.y.~ +.V j ' V ] w.U e.~ +.V U =.@ +.=.=.C O C e.@ ~ = @ u K 9.4 4 ] =.v.~ v U ~ #.v y.~ 1 g , U j f.j a =.v , ~ =.y.4 y.#.,.] ", "g.y.J w.w.C =.@ =.+.=.e.a ] C v.] w.~ v.w.e.+.+.e.y.V +.=.+.a C =.e.=.C ~ , +.e., U V _ g , v.w.=.=.. y.=.z.C w w.] w.v.~ @ U : .T f.j 4 V w.v +.=.=.y.v +.=.~ d., g V V : f.y.=.y.v +.~ y.4 7 : T H P ", "y.@ %.=.w.a =.v.=.y.e.C ] C O a C C ..C e.U v y.e.e.~ U =.+.+.~ w.~ U =.=.~ U v +.v ~ g ' ' v.2.e.C e.~ e.C ] a C C =.e.#.V g : + T m 8.T , v K ~ w.w.=.e.h.w.e.~ :.e.=.U ,.5.a w.d.4 M 4 4 T T :.=.= z ", "=.=.J ] a ..=.C h.. =.C w.w.] ..e.v.=.+.v #.e.v.=.e.+., e., d.~ a v.~ e.~ U 4 V ~ ~ +.v } B m e.w.=.=.e.=.=.C C a v.w.e.V V ,.8.c.~ , ) v ] ` ~ v V 4 e.C =.v.=.+.@ e.v 4 ' f.] =.4 ,.j , ~ =.=.C :.T , ", "g.#.C p Y #.v @ @ v t e.=.v.a e.@ ~ V V d.@ C C C e.V +.v.4 e.a :.~ 1 4 ) ,.i.[ +.:.e.+.V K t.m ] C =.C ] w.v.a v.O v.y.E w : m z ] ~ 4 y.C =.y.d.#.,.g y.~ =.y., U U V T ' ' 2.w.~ ~ =.a ] =.=.~ +.T V ", "j V ^ a :.~ ~ C @ ~ +.~ =.=.C 1 v +.+.v y.+.v...C U V e.1 T ~ +.1 4 g 4 d.w.~ =.~ d.U U V g K f.w.a ..a a w.w.C :.I ~ v ] C m 4 w.:.~ ~ +.e.#.T T :.#.g 4 e.=.v V U = j V ,.m O E w.I O a C @ ~ U V K K ", "* T ,.v.w.w.=.C =.@ @ @ v.=.v.~ =.e.U y.+.+.=.C e.= U ~ K T ~ d.=.d.~ ~ ~ w.~ :.~ U 4 g V ! T + = a p ..=.w.C w.w.e.@ ~ T i.' ] z :.=...@ ~ #.' = ] C ~ +.~ y.4 } V _ K v 4 _ ] ] O ] Y =.=.=.z.=.k.m s ", ": T f.~ J =.~ ~ =.] ~ y.] e.^ w =.=.V ~ ~ e.@ =.= T ,.4 ~ v.=.C ] z =.+.=.e.=.v.e.@ w.U 1 k.K l.j.a w.~ :.=.Y e.=.=.y.g.: m =.w.~ =.e.w.@ #.V f., P E C w.=.v U T #.#.T 4 , d.C O ] ~ y.e.=.C C v.#. .t.", "m B 7.c.a ] :.~ @ +.v =.C v.=.y.k.V i.T ,._ = #.~ , d.@ +.=.C w.=.v e.=.=.=.=.v.@ @ w.e.@ +.;.K 7.,., :.Y w.m.y.z ^ k.j m T ] Y :.=.@ =.@ #.T l.d.O z z.~ =.~ V =.=.=.+.y.~ ~ e.w.v y.=.=.e.w.C e.#.} s ", "~ #.T c.e.P =.@ +.C e.=.t T T V 4 e.2 V , 1 =.=.C U V =.v.=.C :.@ +.=.=.=.=.C ] C v.w.=.v.=.k.! j T 4 d., 4 4 v 1 v g : m ~ ] :.@ ~ +.y.y., } -.8 w.~ =.~ =.v.~ =.e.@ y.~ =.e.=.v.~ =.e.@ =.=.v.e.g.! .", "C =.@ = T e.~ w.] w.~ V _ K v =.+.w.=.~ v.y.~ ~ e., g =.C =.w.C a v.=.e.=.@ w.] a =.e.~ =.e.V } j e.v d., g g T =.=.j ' j v.w.=.e.=.=.=.@ t 4 -.y.O w.w.=.+.y.e.=.=.y.U @ =.=.C v e.C #.~ ] w.C @ ! j N ", "C =.e.^ V V #.e.] v T K 4 =.w.@ ~ w.w.e.=.v v U v.v v v.=.e.a ] C :.h.+.=.+.=.C v.=.=.=.=.+.V } m ~ =.e.~ v , 8.~ v 8.T ~ a v.~ =.=.C v.=.@ T m Y w.=.h.=.=.@ C C @ +.@ y.=.C w.V +.=.+.w.P v.=.@ k.j j ", "w.e.@ t U V } m , 4 +.v ~ C e.4 =...w.v ~ =.=.1 =.=.~ +.=.=.] ` w.e.~ y.=.~ =.v.h.z.w.E v.~ y.y.} g C :., A d.g j ,.T q O O v.y.~ =.e.~ t M N T P z.=.=.@ =.=.v.=.e.y.~ =.w.C e.w.@ C ..C ] v.^ . .,.U ", "e.+.y.@ t y.;.x B =.] ~ =.=.U C p Y e.=.:.~ 1 v #.+.#.V v.w.w.p C v.~ y.=.+.@ e.h.w.w.w.z =.@ @ k.j e.w.U 4 U #.8.T ~ Y ..:.=.=.e.=.~ U v .m =.p z.w.z.y.@ =.R v.C @ =.] v.=.=.C a C C v.a v., g.m v C ", "=.U +.@ . #.K s r.V C :.=.C =.v.~ v 1 ~ v 1 v v = j 4 v ~ =.C ] ~ ~ v y.=.+.~ @ =.a w.E =.w.e.d z.V T U ~ 1 +.#.: v ] Y ..z ~ @ e.~ @ U , K c.2.@ =.=.y.y.~ @ z.w.@ @ a C ~ =.C ~ ] :.+.=.w.e.V 9.K a v.", ", #.v y.V j m m -.l.C =.w.a w.V ,.V ~ +.g 4 v +.4 ~ ) ] =.1 C :.U ~ v.w.=., ~ +.=.=.a C +.~ @ v.:.@ 4 = u =.e.v = =...=.~ ~ +.~ =.~ +.U : : #.] +.@ ~ ~ e.h.w.w.=.v.=.C v.w.v.v.~ v.w.y.+.=.#.@ g m z =.", ",.j 4 V j K 4 e. .l.U y...=., v g ~ e.~ V V d.+.~ v 4 p e.~ w.~ =.O :.w.~ d.4 1 a e.v.=.e.~ ~ e.a +.#.= T y.v.=.,.v ~ ~ ~ +.1 y.1 y.#.g * g u @ e.=.=.y.@ =.w.w.~ =.=.w.v.=.~ ~ V =.e.v v e.V T m Q =.~ ", "_ m c m ,.+.@ k.T s ,.+.] Y U =.V e.e.v U v U :.v T d.a e.:.w.~ w.:.e.a d.e.4 e.p v.~ =.e.=.e.z.:.V e.y.= T V ) _ , 1 v +.d.4 4 V V T ,.T k., t @ e.R ~ e.=.=.=.e.C =.U ~ =.+., U @ v V +.=.#.K ' f.=.V ", "a E w.=.e.@ y.g g.f.K ~ a ..=.h.+.v.~ V V d., ~ V H 1 ..v.w.v.z w., ..] =.:.,.1 p a =.@ +.~ =.a e., e.#.T K T 8.4 =.1 g T ) ,.g 4 v V U ~ =.U =.t . @ +.@ ~ e.@ v.=.y.4 #.4 T g ,.v U y.=.@ V K m 8 I :.", "~ =.w.=.+.#.U #.#. ._ U w.a v.=.=.v.~ #.4 U d.U 1 ~ =.C O C =.1 =.=.:.=.C 4 ) w.] a v.~ ~ +.:.a :.1 y.! 4 K 4 d.v =., ) g 4 , 4 V ~ v.=.@ v.@ =.y.k.. v t @ =.=.y.~ V 8.' + B f._ y.w.C v., T K i =.=.~ ", ", ~ v #.U y.1 #.@ k.K , ] Y y.=.=.=.t +.v e.~ ~ v w...w.C ~ =.~ =.=.U , 1 ,.v.J ..O C :.v.=.w.=.+.v V } T K , +.v ~ d.V ~ v.m.g V V e.w.v e.=.~ . g . y.e.=.z.v.#.V 8.-.f.' ' x v @ v V g j ,._ ;.a d.d.", "] E C w.y.d.. @ F #.K d.P w.~ @ v.v.~ v U =.e.1 v ~ e.~ ~ v ~ v.~ ~ 1 +.,., P ] ....Y w...w.e.~ v g 8.: m ,.e.=.e.:.+.m.~ ~ +.8 #.T 4 v.a ..~ :.. k.y.. t =.t #.4 ' m , U @ C =.y.= ' K : j K v ] E O ", "~ =.=.U T , ~ e.. V : , p :.@ , :.@ , g V +.v d.v.d.#.1 d.v +.~ ~ ~ ~ ~ _ ..` ~ :.=.~ =.w.~ ~ 1 d.,.f.} ,.g a U ~ ~ ~ ~ U , ~ :.d U : T ..] ~ E t . e.t y.. T B f.K T w.C w.] C v.=.=.=.=.U v +.h.w.=.=.", "z ~ m.V ,.+.v.w.#.g m d.] =.+.: y.. T 8.m T = 4 4 v , :.#.y.d.~ v.+.~ ' ) p Y :.~ d.~ z ~ e.d.U #.g j ,.,.] :.~ y.=.e.~ +.v +.=.U 4 = -.9.P ` v.=.y.y.#.y.= m d.v w.w.w.=.C z =.=.=.=.C =.+.@ ~ m.a ~ ~ ", "~ z z v ,.T v U @ d.T =.] @ U : j , 8.j 4 = _ m [ ~ d.U ,.T ) V ~ 4 B ' 1 ] :.m.m.z =.z =.=.v +.V g j K , ] =.@ 1 =.@ +.=.v.=.=.~ y.T : m V O w.@ U y.: x B V C w.a a w.=.Y y.=.C @ +.@ =.@ v =.E O E =.", "Y E ~ ~ T T ~ @ +.4 j V v ) m B r.4 U =.a ..w.1 g m.T 8.' _ 8.T 4 = B ) ~ d.[ ~ =.z =.w.a v.d.U #.#.T ,.C O =.~ @ =.~ @ w.C :.@ +.v y.v f.f.d.w.=.! _ f.j #.e.] ] O ..w.w.w.~ ~ =.V , 1 e.~ 4 ~ E ..] ~ ", "E w.~ ~ v U w.v.V T T 4 U T T g ' d.` P ..w.:.v d.=.~ ~ w.a v.=.=.+.~ y.d.H i.m.E z w.Y C :.v ~ . y.4 ,.` w.@ z @ =.=.e.w.v.=.@ =.U ~ u j K / V , 8.: , C :.@ C < P O w.=.=.~ v +.4 U @ w.:.y.~ Y ..=.@ ", "=.q w.e.=.=.+.#.4 U @ :.w.v.=.C , ) v.P :.=.z m.~ e.~ ~ e.~ v @ C ~ v.=.~ =.d.d.w.E ] ..:.e.~ V U #.= K I :.z.=.v @ =.e.=.w.e.~ v ~ @ V 8.j g , = T :.` =.V ~ C P P ..=.~ =.~ ~ , U #.=.w.~ :.=.q =.v a ", "Y w.O :.=.=.+.#.+.=.v.z.C a ~ +.v K _ =.e.~ z , 4 4 ~ v.=.~ +.~ e.~ e.=.z a Y 4 H , E a ~ v +.~ T K 8.,.C w.a w., e.=.~ e.w.@ , V :.y.V f.8.a ~ U w.` z.~ U =.v.O a ~ w.=.w.=.~ V :.~ =.:.v 1 m.d.~ =.] ", "w.O ] Y =.e.=.e.=.C =.=.=.v.v . , = f.e.C w.a 1 :.~ w.=.=.=.=.e.v ~ e.=.=.:.E :.m.g i d.~ e.v 4 K f._ U w.w.] ..@ =.~ ~ e.=.e.U ..] +.u ,.m w.g =.` a V 1 ~ @ =.=.w.:.a ..=.z ~ ~ w.e.=.Y ~ ~ ~ m.w.a w.", "m.O E w.C @ =.+.e.] C v.@ v , +.y.j f.C 2.p v.=.v.w.] Y v.C v.@ , U =.w...=.d.~ z z 2 [ = U , g 8.f.= C =.=.] a :.~ y.~ e.h.e.=.~ ~ @ ~ #._ e.w.] a ~ U ~ e.=.@ m.=.=.a w.w.w.z ~ +.m.v ~ :.w.O &.a :.y.", "~ C ] w.e.~ +.y.~ ~ @ =.~ +.1 +.@ f._ x.O ] =.z.] C =.=.=.w...U v +.v =.C =.v d.=.z.~ ~ T _ = j ' 4 w.=.~ =.a =.~ @ =.v.=.=.y.:.w.y.=.+.h.g ,.2.O q d.U 1 v h.=.@ v.w.a ] w.=.=.=.4 ~ ~ w.=.a p O v.~ v.", "v.w.=.+., 4 g T h.=.w.C =.+.~ 1 . m : ` < :.w.w.h.=.=.v.w.w.:.~ ~ e.y.=.=.1 U m.~ ~ v +.v j : m [ w.a ~ ~ w.:.=.=.C =.] w.~ +.y.~ e.h.v.=., + z O 1 U 1 v ~ =.w.=.e.@ :.w.e.@ =.w.~ m.y.w.m.=.O v.v ~ =.", "=.#., V V V v =.] w.=.C e.e.C ~ ! s ' ] O d.z =.~ =.=.a E ..Y :.~ =.e.~ 1 #.m.v ~ +.v +.v V T 4 ..w.Y e.~ ~ y.w.w.=.e.w.=.+.@ ~ ~ v.=.C ~ 1 ,.U =.U ,.4 v V , w.w.@ 1 =.v.@ ~ +.=.z., [ ~ U z =.v.v @ =.", "U 4 U , 1 +.~ w.w.=.=.a C a C d.$ D j.+.4 z Y m.~ ~ z E q ..:.1 v #.4 g 8 ~ =.v 1 ~ w.w.e., g V O ~ ~ w.v v =.E @ ~ =.C e.=.~ +.=.@ a v.~ @ =., ' x 7.U @ m.C Y C e.~ =.=.e.~ #.~ =.d.T , m.h.~ v.~ ~ y.", "4 U ~ U =.a C v.~ =.=.C v.C e.V m s t.' e d.E ] G E O E ~ ..z 4 4 T T 4 m.:.w.~ :.1 =.w.+., 4 U =.v =.=.d.h.] w.v +.=.C e.=.=.=.@ =.O v.=.@ =.g g V m 4 v v.w.=.C =.e.=.@ U v v ~ ~ ~ ~ m.=.=.w.@ ~ V d.", "v =.e.=.C O v.=.~ ~ C v.C v.T m ;.] ..~ , T i ~ E O :.~ 1 V ) ,.4 1 ~ ~ z Y 1 w.d., 1 ~ 1 ~ v., d.=.=.y.=.E w., e.@ C ~ ~ C =.e.a v.=.=.~ U v u U V ' # w.O =.=.w.C v.v , +.+.~ z a O =.w.~ w.~ +., +.", ", w.e.w.C C =.v.=.=.w.C a @ N | -.` P v.=.~ g n H m.] E +.g T = ~ w.w.Y ..a ..m.~ 1 1 z w.v.~ ~ 4 4 , z =.~ =.w.d.=.=.] :.#.e.~ =.C =.e.y.v +.=.! F e.m { J O z ~ C w.e.v U v ~ w.w.:.a z h.v ~ e.~ +.~ ", "g ] w.=.v.a O P =.w.a ] C #.6 y U 4.....C I C ;.-._ E C v 8.: T :.=.~ :.w.Y :.1 d.=.q ~ ~ v.~ v 4 T , ~ m.=.w.w.v @ w.` =.y.+.w.@ U a e., V ..#.y.y.F 8.7.P ] z =.=.~ , V U v ~ =.=.T ~ w.~ ~ w.~ +.~ V ", "w.w.=.=.w.C p C w.w.C W % b.+ S w.Y 2.< ..z 4 : ; k.u ,.# -.; c P Y :.] e.d.v d.a ~ v +.v.=.=.K f.#.U =.C w.@ ~ ~ w.] a :.y.~ +.w.v.~ +.w.C ~ y.U #.j r., J 1 a 1 V g v = 4 #.v v v v , +.v =., v v [ ", "=.w.w.y.v C J =.Y w.@ . *.s # 7 f < P < O a E v V ' _ ; 7.-.} V ' Y w.=.~ U g = v ~ v 1 @ w.e.U m -.y.+.@ +.~ =.e.y.w.a ..h.~ =.~ @ e.~ @ =.~ +.@ =.@ +.= -.1 =.#.' _ ,.= T =.+.v h.g ,.T v , v 4 v ~ w.", "d.=.~ v =.a ] =.Y @ t O.s.t.7.S P ..w...w.w.~ 4 , +.@ 4 v.a ..=.v ; B v.@ U #.g , Y +.T T g = T B ; V , k.v y.v.=.y.w.a =.~ e.~ z.=.~ e.=.@ ~ ~ =.C C ` =.T K M 7.+ v =.+.~ ] v =.] w.@ ~ ~ U ~ v ~ =., ", "d.z ~ m.C O ..w.z v.b.K h n h.u.:.h.w.a ~ v v ~ 1 z :.~ a ..=.U ^ V ; m =.=.! B B i B r.r.+ ' ,.X.m ~ e.v e.w.] ~ ~ w.w.v.w.z.=.a C ~ +.h.e.=.=.=.v.=.@ U =.= -.r.v.P z.z =.C =.=.a w.=.~ ~ @ w.~ v g ' ", "a E :.v 1 ..] w...k.+ s ( # %.&.a a O v.v , =.a w.~ :.w.Y =.=.v V t U -.# ,.x + c ' ,.4 T [ g f.-.w.v.@ @ e.w.=., v ~ @ E C =.w.C w.~ v +.=.e.z.C v.~ V V . @ s @.] < ~ @ ~ ~ a a :.~ @ =.w.w.@ E =.~ ~ ", "O w :.+.v +.v e.V + # ; m =.9 a p C v , 1 +.=.e.~ ~ e.w.=.+.~ v k.e.@ . ' ' 4 a O O < p C O ] U B x.v.~ @ =.O e.v , v =.C =.v =.w.e.~ @ ~ e.=.w.v.e.U U . . ! X.B ] w.=.w.=.~ w.a w.@ =.w.w.=.~ =.w.a ] ", "e.v.=.=.w #.m T 6 ; ^ >.2.P 2.e.v V 1 @ ~ +.@ :.w.=.C +.v +.v U t y.1 #.Y O O Y w.:.~ e.e.v K r.` =.y.+.~ :.C Y y.=.O a ~ v =.C ~ =.v.=.@ v.a ..e.+.v.t =.b.L 7 P w.] O a w.w.] a ..w.=.w.C ] a P O w.", "@ v.C ] w F f.X.n. .I 2.O O P e.#., U =.C =.#.U z.C =.w.v #.~ +.t U U , d.G Y q.a ~ ~ ~ e.@ d.+ ,.2.~ #.~ w.v :.w.#.w.] =.v ~ =.w.e.=.v.@ ~ w.C e.=.t @ y.! ;.& T 4.a a w.w.=.z.~ w.a C w.w.w.w...a ~ v ", "a +.a ` ~ k.b.l r.5 P w.a p v.y.=.@ =.@ +.w.z.w.I w.:.w.w.v e.w.+.v V z =.d.=.E O a =.~ Y =., ,.8.J +.=.v., ~ =.v v ~ w.w., =.=.P =.y.y.=.z.=.- =.e.e.d.+.y.9.L m.P =.w.=.:.C , w.z.] ..#.v.~ =.a U U =.", "U w.:.w.e.9.6 l ' >.2.O ] ] ~ v v.@ @ v . v.] ] ] E w.w.a ~ ~ ~ U , v :.~ 4 ~ O O a ~ ..w.~ v = y 4 e.=.y.+.w.=.z.=.=.=...v ~ a ` =.y.~ =.t e.C =.+.+.v d.j K ( 7 O w.:.=.=.=.+.e.C U v @ w.~ C v.~ w.=.", "w.] w.v.@ N t.b M >.p P ] Y v v @ @ e.@ y.v.] P P O w.=.w.1 ~ +.4 V =.a :.2 ~ G w.:.=.w.Y @ z v ' x =.=.U ~ a =.w.=.=.=.w.~ ~ O O E h.~ e.@ e.C y.v +.w.=.y.#.L d.9 ..h.=.~ U @ C =.y.~ +.@ =.a e.y.w.k.", "C ] P =.. j X.( C P =.w.a ~ e.=.=.v.C =.y.@ w.] P E =.~ =.~ ~ , U , e...~ z =.=.~ ~ a Y =.C =.=.4 ; +.+.v ~ w.=.@ v w.=.w.=.Y w.< p Y 1 ~ =.1 U , v.w.v.z.@ 9.X w.a :.h.=.v.y.w.C ~ t =.#.=.] ..v U =.#.", "C O C U V t.| g 5 ] ~ =.a w.=.=.C w.=.+.y.~ C ] E @ w.w.Y e.~ 4 v.e.=.=.m.~ ~ 1.~ =.O w.w.O w.~ = ' e.#.~ =.=.~ ~ V ~ =.=.=.z =.O E ~ 1 ~ e.v U U C a e.t ;.-.m J a w.v.h.w.e.C =.e.y.v =.] v.=.=.=.C C ", "=.v.@ F } ; ! ` J ] a p ] :.=.=.=.v.y.+.~ =.v.w.h.z ] O =.~ =.1 C =.e.=.=.~ z q.a a =.w.a O O =.4 V e.v =.y.v , =., U ~ a w.=.O E z v v ~ v U =.U +.@ . g.f. R P ] O =.v t =.=.z.v.@ =.] v.v w.C ] w.w.", "=.] @ t m # P C a a O ] w.~ C a :.=.~ @ =.e.~ v w.w.O w.Y =.:.=.y.+.v =.w.Y ] < a ..1 h.O O a w.e.v U v +.v , ~ ] :.=.a a :.w.=.v V 4 , +.y.@ C ~ U . #.9.6 t.J @ h.=.~ ^ t =.z.C e.=.] C ~ =.C =.C v.@ ", "y.C #.@ } X.] w O v.w.~ =.~ w.~ @ =.v v +.~ e.=.z.=.] E a v.~ e.4 ~ +.=.E w.O O w.~ =.~ a p ~ w.C =.+.~ V v.Y v.w.~ w.] Y ~ a 4 T T T T g y.t @ ~ +.#.9.j.D 6 p =.w.@ y.@ =.=.w =.=.@ v.v.=.C =.~ C w.e.", "1 w.e.g.m | O p ..C e.w.C e.=.y.1 @ ~ @ =.v.w.w.v.Y a ..~ 1 =...~ v +.w.v :.] :.v v v.w.v.:.~ w.w.w.~ 4 ~ w.=.w.y.v w.C =.=.. } T K = j ! e.. g #.d m s | | j.C ] w.=.~ ~ =.C w.v =.e.w.=.w.~ +.y.@ v.v ", "=.=.g.h s x x.< ] P a v.=.=.v.~ v @ =.w.C w.C :.=.w.C :.=.~ ~ w.=., g 1 v +.w.:.@ ~ =.@ ~ =.1 ~ w.=., d.=.~ =.w.~ ~ a ..=.F : 6 ! 8.f.t.m T V k.: # j.; f.f.; T z =.E a C E C ~ =.w.=.+.v ~ #.U , v.~ y.", "~ e.l.t.<.8.>.O P O v.v e.=.@ ~ ~ v.v.w.a C ..=.@ v.w.=.e.y., U =.1 T d.v ~ =.:.~ +.=.U =.=.~ =.=.=.4 ] P ~ =.w.=.C ] O v.T L X.-.# j.-.-.# 7.; X ; y T a @ ~ B 7 d.=.] P E =.=.@ e.v j V T K 7 g ..=.=.", "~ = + s <.2.] a.a v.~ +.=.=.v w.v.C w.v.w.v.w.=.@ v.C y.y.v . =.1 =.v ~ :.v.=.:.@ +.=.~ w.e.z a Y , > Y P w.w.~ C =.w., = f.| .@ y.~ h.@ y.V c.f.f./ p p E y.y.,.B Z 4 < ] :.=.@ U T # -. L m i.:.E =." }; mtink-1.0.16/xpm/craters.xpm0000644000076400001540000003363410376041214014055 0ustar jjfuse/* XPM */ static char * craters_xpm[] = { "115 115 33 1", " c None", ". c #72769A", "+ c #757CAD", "@ c #7E85B2", "# c #6B7197", "$ c #5E5E79", "% c #565D84", "& c #666F93", "* c #636883", "= c #5A6286", "- c #5D6788", "; c #737BA1", "> c #6D76A5", ", c #636A8F", "' c #7983AE", ") c #7276A5", "! c #4C5570", "~ c #6B72A4", "{ c #6D769B", "] c #59627B", "^ c #5E6286", "/ c #515B76", "( c #535671", "_ c #575D79", ": c #818AB6", "< c #858FBC", "[ c #6E7AA2", "} c #5F627B", "| c #484E6C", "1 c #424E64", "2 c #667698", "3 c #3C4860", "4 c #7A8AB4", ".+@+#$%%&*=-#;;>&#######&,&++;;'+;>>)###!%=-&;~=~&&&~>#&+';##;{#&&-]]-#{#&,&#{#&#&&&####-,##&&#{,&&&&&#{{#,,#{;;##{", "##++.^%%*,&{;)#&,,&&&&&&&,&;+>>+;)>){#&#!/=,)+#=~&&&####;{#,,&#&&&---*&##&&&&&###&&&###&,&#{{##{&&&&&&#{&&##{{;;###", ",,#+.^/%*&{{{&&&-,,,,,,,&,&>;>>;;;;)&-=,//-;'+&-&~~#&&#{#&-%%-,,*&&&&&,,###&,,&{#&&&##&&,&#{;;{#&&####{;,#{;;;;;..{", ",,#;&/(^,&&,--,&,,,-,,,&,,,#>>>;>);{-/!_%=#@:),,~~#&&&#{&,=%%-,,**&&&*--&&&,,&####&&&&&&,,&{++{&&&###{{;&#{+'++;.{#", ".#..,(/,&,-==-,&,,,,,,&&&,,&##&#,#{#=!!_-&'<:#,#)#,,#>{{,-===-,,*****--=,--,###&&&&&&&&&,,&{+;#,&&#{{{{{###{++;{&&,", ";;;#-/^&,*--,&,-,,,,,,&&&,-,,,,--,#&=!/=,#':+,,{;#,,#>>{,-=----,**-----=-==,#{#,&&&&&,&&,,&{;;#,&&#{;;{##&&#{{#&&,,", "..#*_^*,*--,&&,-,,,&&&&&&,--,&&,-,&&=!%-,&[;#,,{)~&,&#);#,=----&***--------,&#&&,&&&,,&&&&#{{{&,&&{;+;#&-&#&,--=*,*", "&&^(/**_,*--,,,-,&&#####,,--&{{#&##&=!/-,&&&,,&#>~#&,&{+{&----,&*****-----,,,,&#,,&&,,&#&##{{#&,&&{;+;#,_,#&=//___]", "(/_***-^]---,-=&&,,&&#{{#&,&&,,#&&#&_!_*&&&##&&#,,,&);;{{&--,,,--*-//_---,&&&,,,-,,&&&##&&####&,#,&;#%!!=&#,]/%__//", "_/(/},##-*--,--&&&&&#{{{#&&&,-,&&&#&-/%--*&&#&&#&&,&{;;{&-=-,&&,--=%/]--,,,,&&&&-,,&&&&#&##{{#&&#&#;&/!!-,#{-!!_/!(", "}/(/*#..,,--,,-##&&&#{{{#&,,,,,&#&&&,]__--&&&&&&##&#>;{#,---,&&&]]]__]-,&,--,###,,,&,,&&##{{{#&,##{;,!|!,,{;&!|/!!(", "}}}*&##&&,==,--###&&#{##&,,,,&&&&&&##,]_-,&&&##&{{{;;{#&,,,,,,*-]]]]]=-,&,=-,###,,&,,,&&&####&&,&#;;,!!%&{;;-!1!!/_", "_*,&&&&&&,=_---###&&&##&&,,,&##&&,&{{&--&##&&##&{);++{&-&&&&,-------==-,&,-,&##&&&&,,,&&&##{##&&##;;&%/-#;;&/!!!(/}", "^*,,*,&.&,=_---&&&&&&&&&#&,,&##&&&#{{#&&#{{&&{{&);++;#,-,,&,---*-------,&&&&###&{#&,-,&###{{;{{##{;;#-=-&;{_!/_!_**", "******&##&=%,,-&&&,&&&&&##,,&{#&&#{;{&#{{{#,&{;#;;;{#,------]_-**-*&*--&,,,&&###;{&,-,&{##{;;;;{;{{{#&,-,,-!!_]_}#.", ",,,*,,,,#&==,,-&&&,&&###&&,,#;;##{+;#,#;#{#,,;;{+;{&,-*-^--]//]-*-*&&-,&=---*,&#+;#,-,#{&#{;;;;{+{##{#,]-_!!/_]*-&.", ",,,,--,&{,---=-##&,,,&&&,,&&#{{&,#)>#&#{&#&,#;;{;#,-_/_*}]}-}_^&&##**,,,^-***,&#{&-=-,&&##{####){&,&[{*_!/!|/*&-*,&", ",,,,-,&#[#&,--,#&&,,,&&&,,,,&##&,&>>#&#~&&&&#[{&#,*}_/_--}}-]_*&&#&**,***,,,,,#{#,---&&#{##&&&#{#&,&#&-/!||!]&&&^-,", "&&,,-,#>;;{,-,&#&,,,,,,,,,,,,##&&&#####&#####{#,-]__//_]*---^^,#&&*-*,,*&&&,,&#{----,&&#;{&,,&##,,,&&*]//!|]2;{&%^-", "#&&,,&{;;+;,-&{#&,,,,,,,-,&,&#&&&&&&#~#&>>{{{#&*_/(((/_-****,,&#,*^^,##&&&&&,,&#%=--,&#{+{,--,&#,&##&-]_]//&;[&,=^-", "##&&,&~;;+>,,#[{&,,,,,,,-&####&,#&,&#~#&;){#&&,-//!!!_-**&&&&###&*^*&{..##&&,,&#==-,&#;++{,--,&#&#{{&-]]_/_&#*--**,", "&&&&##>>+;#,&{;;#&,-,,,,,&{###&,#&&&#~#&;{#&,=]]//!!/-***&&&##{#{&,,&#{.##&&,,&&-,,&{;+';{&,-,&&&#{{#*--/_-**--,&&#", "-,&#>>>;@>&&{;;+#&,--,&&&#{#&&#&##&&####{#&&,_/_////]*&*&&&,,#.#{&&&&&#;###&,,&#--,#;++;##&,,,&&&#{{#,--_-----,,###", "%-&{[;;;:>,#;;;+{#,--,&&&##&,&##############&_//!/_]-&&-&&,^*#).#&,&&&{+###&,&&#==-#;+{#&&&,--,&,&###,-]]--]_-*-##.", ",,&{>{;'@~,>'+{##&,--,#{{#&#{{#,-,,#######&{&!3|_]-&&&&&#&&##{>#{#&##&#;+&&#&,,--&{;#&,&-,,,,,,,,&##&-=]*]_--=-,&#.", "{#&#>[;+'>#;+{&,&,---,&&{&&&{{#,,,&&####&###,!3!]-*&&&&&{######&{#####;'@{&&--,-##{#&,,,,,,,,,,-,&##&,--]__-,--,,&#", "'[#{;;#&#&#{#-%=-----,,&#&,&##&,&&&&&&&&&;{,=!|/-*-&&&##{#&&#{#&{{####+::[#&-,#&{#&,,,&#&&,,,,--,&##&,*-]_=&&,-,,&#", "';;+;#=!==-&,=_=,---,,&&#&,&&#&,##&&&&&&#+#_/__]--&&&###&,,&{[{#>>#&&#+::;##,#;[#&,-,&#{&&&&,,--,&&&,,,***&#&-=-&##", "[;;[&=!!-==-,---&,---,&###&&&#&&{##&,&&&;'&!!--]--*&&&&&&,,&#{{#&&&,,{':'{##&{;{,,-,&#{{&&&&&,,,,&&--,&,&&&&,==-#{.", "&##-/!/%,-%=----&,---,&########&##&&&&&&;+,!%*-]--,&&&&&#&&&##&&--,,&;@:{###&{{&,,&&&&&&&&&&&&&&-&,==,&&&&,-==,&;.{", "-&-/!!%--=%_=---&&,,,&&#{{{{{{###&&&&&&#{;,_=&-]--&####&&###&&&&-,,,>'@'&,&&&{{,,&##&,--&&&#####,&,=],#&&&,-=-&{;#&", "]--/!!%==--=-&&&########{{{;;{{#&&&&&###&{#-**-]-,&#{###,&##&,&#&&&#;'';,-,&&{;&-&{{&,--&&##{{{{,&,=]&{#&#&--,{;.&*", "*&*/!!^,%=,&#{{{##&&&&##&{{#&#{##&&,,&&,,#{&----=-&########&--,&#~>+'@;,,&#>.##&&.;#&&##&&##{{###&=/]&{{{#&&##&,,-=", "*&*]/_-,,,&#{{{{{########{{#&###{{######&###,===-,#{[>{##&&&&&&&~>>+@@+&&&&###&&+'';{{#########{&*=%=&{#{&,,&&&,-==", "*&**-*,,&##>>>##{{####{{#{{###{#....{####&#{&=%-&&{;;;{###&#{{#&>;;+@:+~>~######:@';{{#&&&&&**&{&-]_-&#&{&,-,,&,===", "****,&&,&###{##&{{####{{#{{{{{>>{...#&&&#&&;{-=,##{{[{{####{[;{~+++'@@+~##&&&#..'+#,***]-***-}*&*-]]*##,&&,,,,,,=--", "**^*&##&##~~~##########{###{[;;+{)){&,--#,&;;&,#[{{{{{##,&#{>;+'++++''+#,,,,&#..;#=!!/_/_]--]_]---]]*&&-*,&&&&,---,", "*}=*&###>>>>>>>>##&&###{#&&{;;;+;;;{&---&,&{;##{;[{{{{##=,#{>+@:;+++++;#,,&&&#{.&*/||!/!_]--]]]]-----&*---&&&&-----", "=_=&####;;;>>>>>##&&###{#&&#{{>[;;;{&-,,,,,&####{{#{{{#,-,#{;+''~~>>;+;####{##&,__(!!_]_----------*-------*&,*-----", "//^&)>#&;;;>>>~###&&##{{#&,#{##~>>>~,-,&-,,,&##&&&##{#,=&&#>++>#,&#~)+;{####&*__!!!(_*&*&*******]-&----------------", "/%-&>;;>>+'+>&&>####&#&&,,,&###&,+@>-&##,&&,,#&,,#[{&,,&##>+'+~,-#>>)+;.##&,*}//|!/*&-*#,*---*&&]-*----*---***--=]]", "%=,#>)>>>+'+[>>[>>>{####&&&&&&,,~'@>&>)#-*,,,##&{{&,-,,&,,#[;>&,~)+;)).&**}_/(!|((]&&-^,,***,&,*=-**---&***&&**---=", "%-&#>>>;>[++[[[[~~######&&&&&&&&[''[>+;#^***&...;2&-,&&,=-&{>#&&+++;;.&*^__//(((__]**==,,,,&&&,*-,,*--*&&&&&&*----=", "/=&##{>+>>>>[>{#~~######&&&###>>+'@+;+;#*,*,&##{&&&&&&,-=,#>>>>>+;;).&*^_}}}}}}}///_%%,#,,,&#&,*&&&,,-&&#&&&------=", "=,#{{>[+[>>{>2#&>>>>{{##&&###{>;+@:'++;#,*******]---]]=-&#{;[[;+####&,^__}^}*}}_(/_=^*&.&&&&&&&&&&&,,,&&&&&*-=--,,-", "#{[;[>[[+[[[{22&>>~#########&&~[':<4'+;{-=]}}__/!//!|!]&{{>>>>;+,,&&,^_]^*^}$_/((],##&&&#&&,&#####&&,,,&&&,-]]-*#&&", "{{[;[[>>[[[{22&#####&&&&##{##&>;4::4@'{&%//}$_((!//!|/,['+>{{>;;*,&#,__}**^$_/(/],#..#&,#&&&&#####&&&&,,,,,-=]-&{{{", "###{>>>{>>>2&&&#{~~#####&#>>~>;':@''@'#-/(/}}_//!/_]]-{+:'[~~>;;,&##*//}*}_(((__,&##&&&#&&&&#~{###&&&&,--,,-==*#{{{", "{,*{+;>;~>[{&&2;[[[[[>>>>&&>;;':@'++@@.}!_}]____//%-{;'@<:')>)++;.#,}(_*#$(_}_},##~>>>>>########&&&&&&,,,,-==-&&+;>", "#*^#;)~~>>>#&&{[{>>[>>{##&&>[+@::@++++,//_-]_]--//%,{>;+::';>+++)#,^_($**(($*}*##~>>>~~~########&&&&&&,,,,,---&{[>{", "&^%,))#&>##&&#{{#{{>>{#&~>>~>+@@'++;;;,__}*}]-*-%%-&{;;;@:@)>++>##*/(($}_(($**&{#~~>)>>~~~######&&&&&&,,,,&,--&{{{{", ",^%*.;{##&&,&#{###{{{#&&~[[~>+'+'+;).#,}_**---&&]==,#;++:<@>~;;##&^!|_}}(!(}&,&{&&~>));)~##########&&,,,-,&,--&{{{>", ",^%,.;.##&,,&######{##&&#>>~>+';:')#,^_/_}-}-*&&-==-&;'':<@~&~>&#&^!|_}}/(_*&,&#&&~>)))>########{##&,,,--,,,--,###{", "&,*,#..#&&,&##{#########&~>>[+'+@;&*^%__}}]_]*&&&&&&>'@:@';#&###;#^((_$$__$,&&&#>>>>>~~###########&&,,,,,,,,--,&,&{", "#&,,&#&&&&&##{{{{{~#~~~~>~>+'++'+#^%^-****_(/*{[[+++'@@+~&&####{;&}_______^,###)+;)>~#####&&#&&&&&&&&&&&#&,,,&,,,#{", "##&,,,,*####{{[[[>>#~~~>+[;''[[+@{^=^**&&*/!!-['{+@@@@;&-=-{;{{++&]]}/(((_^,#~)++;>~####&&&&&&&&,,,,&&##;#&&&#&,&{;", ".&&&^-&&#&&&#{{{[##>[>>[++++[[++'&%/^*&#,}//*[;;{++;~##&,#,{;[';;&]/__/(_}*&#~~~)>~&,,#{&##&,,&##&,&&&&{{&,&##&,&#;", "+#,,^,&,&&&##{{{[##>[>[++++'@@+{;,//_**&**]^#'';,&###&,,,#&{;{+{&,-}}__(_}*&&&#~~~&&,,#{&&##&&&##&&##&#;{&&#{#&&~>+", "+#,,-,&*&&&#{>[>[{#>;+'':'>>+@@'{-//_^*****&;';#==-#>#,&,#&{[#;{&&,-_/_$}*,&&&#~##&&,&#{{&&{{#&#&&&##&&#&&&##&&&;+'", ")&&&,,&,&&&#{;>>[>>>+'@@@;~#['''&-__}-**}^*,#{&=/!={+#,&&{&{{#;[{#*_!!_**&&&&#~~~##&&##{#,,#{&&#,,&#&,-,---,,-,&'++", "#&))&,#&&##{;;>>>{>>;'@@~>+'@+{&&]__^-}*^^-*&#,%//-;'{&&&>&{{#'+[&](!(}*&&##&##>>#######&--&#&,&&&{{#-%=%%%==-&>'++", "##++&,####{[;;>~#{>>;''+++''+{&,-]_]-}}}***,#{#&,,{@@+#&&>&{{#+'&-=__]-**&&#&&####&&&&&,,,,&&&&&,&#&-/!/%/%-,&{++++", "))++&&##{>;;;>~&>[[[+@'+@'+~&,&&-]]-*-}}*,,,#;;#{;''+;{#,>#[{#;;----*****&##&&&##&&&##&&,##,,#{#,*-=/!!!==-&##{+++>", "'++)&&~&;;;;;>~,;'''':@'+[>#&,,*-]-*&*--,&,&#;{#{;+[#&&,-{#;[&{#,,&**--**&#######&&#{{#&,{;&,{;{&,-_!|!=&&&{{#&&+)>", ";::>,#>&)>>;;)~#+;#>':'>+[&-=,,-]-*&&-^*&&,,&{){{###&&&,->;&&++#&##&*-*-**&##&&,,&##&&,&,#{&,#;'#*_/!!/]&,&#&,&~+++", "'@'#,,&&>####&,-{#&&;';&#{#-=-&&---*-==--,,,#{>{####&&,,-&#,#;{,#{{###&-^,##&&&&&&&&&&&&&##,^-&&,^/(!!/-&,&&&,&>+++", "@';&--,&&&,,,,--#&,,#;#,,#{,=-&{&*--]_=--,,,&{{#&&&&&&&&>>;>[>,=&,--*&*__^,&,,,&&&,,&##&,#&*%%=^^_//!!_*&&&&,,&)''+", "@;&,-=-,,,,--,-=,--,&#&,&{{&--,&&*--=]-,-,,,&#{#&,,,&#&&>;+''>&,&-(!/--__]-,&&&&&,**&##&,,&,^^^--^}_(!_*&##&,,~;@@@", "+&,,,==,=--====%-==-&#&&&##&,&&&&--**-*&&&&,,#{{&,-,#>#,-&;'+>{;*^%/=&#&]]^,#{#&,*^*,##&*,,,,*,,,**}/!/-&&#&&#;'@@@", "#,-,,==-%--_/%/!-==,&&&&&&&&#{2&---&&&*,&##&,&###,-,{[>&&~+';{#{(/%^&;.&___-,&&,,***,&&&,,,,,-*,&,*-_(/^,&##{+@@@@@", "&,,--==-/-,-]-]_&,,##&&#&###{{{&-]-&&&---&#&&##&&&&##>>>++++;;{&((%-{;#^/_]-**,&,,,,&&&&&,,,,--,&,**}_]*&##{;@:@'''", "&&,-==--!-&&&2#&{##{{##{#{{{{{&*]]]*&--]]*####&,&#{{##>;;;>>;'+#,^%*;'{]/-&&**#.,,&&&&&&#&,&,-*,#,****,&{{{{+::'[[>", ",,,,-%_==**--&2{{{{#&,&#,&#{;;{-_/-&&&-_,#{###{{&&&##>;+;>~~>;;;+)#++#-]]-**&&*-*,,,,,,,&&&&&&##.,^***,&{{#{;'''{##", ",-%_%=,#&&&--*&&&###&,,,&{;##;{&]-&&]]&{,,,,#;;{,,&#~>>;>>~~>;+++~&{#,%_^****&&,,,&&&,&&&&&&&&&&{&,&&,,&&&&{+''+{#&", ",]//_-&[&,---&&&,&##&,--&;;&,{;#]-&-!/#;&,==&{{&,&&#>>>>~~~>;++++#,&,=/_-**-}-*,,&&&&&&&&&##&&&,&,&&&,,&--&{+'++[2&", "]//=--,&,,--,&&&,&##&,--#++&&++#--*-_-##,-==&{{&&##[;+;>>>>;+++++)&&*%//-&&*]]^^,,&&&,&&&&###&,,*,,,,--,-,&>+++[[2&", "//_-,---#&,-,,,-&&&&&&&&>++#;@+&,,#&=-#&-,,,&>){##{;;+;);;;;+++++)#&*%((]*#&*--^,,&&&&&&&&###&,,*,,---,&&&#>+++[[2&", "//_---,&&,,,&,,&##&&&#~~~~~>+'>^=&[,!/#;;+;{&####{>[>>;;++;;;++;){#&,=/!/-&#&&&,,&&#&&&#&####&&&&&,--&~~~~>;++;[[&-", "!_-&,-&#,,,&##>;#&&&#>>>~#~)+),%=&;,/=;+''+#&&#~{[;[~~;'+;)>>;;;{#,,,,=//]*&&#&*,&&&&&&###########&,,~)~~~>+'';{2&-", "!_&{#,,&###>~&~;&&,&#>)>;>;'+~,-&#;{&+@+{{&,,>'@[++;~~+@+;>~>>;;{&,,&&,]_]*,,&*%,,&&,,,&########&#&,#))~#~)'@';#&-]", "*&&&--,&-^,~~&&~~,>>&>#>>~;:@#,&####&&-=#&&&#{+'@+{>'@@+~>;;;;;.,*==*,,,-^/_&#,,,,########);;)>)~~&&)~&~;;+;>&,-=_/", "*&&&,,,&,-&>;~~~;&;>&>>++[+'[&,&{#&&,,,,#&,,&{+@'[{[+'+>########----*,,&^^/=#.&&&&##>>>>);++++++~>#~+>~>+'';#,--*-]", "**,&&&&,--,>)~&,>&+>,~>+'''+[#&&&&&&,,&&#&,,&{+@;{{{++#,#&,,&&&,_=,,**,&^-%-{;####&#>;;);;++;)>>~>~>+;>;'@'>-%=-*--", "&*-,&&,==-&>~,--&&';&>>+'@@+{#,-%-&##&,,&#{;;;{{{{#{{>&,#&,&##,-/=,,,***,&*,{.###&,&#))>>>>#&,,,>;>>+;>+'+{,=%=----", "&---&&-%-#;;>&,&>>@+~+@:''+#,,,--,{;{#,,#{;;;{&&{#####&&&&&#{#*_]-*,&,-=#{&,##,&#&,&#>{##{{#&,,,++>>;>{++#-=-,----*", ",---,,=%&;+;~#~>+[@[&':<:'{&-,&{#{;{#&&#{{#&&,,,##&&&&&#,&#{{&-/-**&,,-^;;#,&,-&####{>##>);;;;;;++[{[##+{&==,#&-_]-", "----,,-=&{{##>)>+[@[#'@@'[##&,#+&#{{#&#{&&&,,,,&&##&&&&&,#{;{&-_-*&&**,,;;#,,,-###>;;{#&{>))));+#{{#{&&{&-==,&,=__]", "-----,,,##&&#++;;;<@+:@+&,,{{,-#/=&####{=-&###&&&&#&&,,,&{;;{&*}]*#&*-,#{.&-,-,)&#;;;#&,&&&&&,&&-&&##,-&====--=_]}-", "----===-#,&##);>''@+#,#'[{&,,&#&=-&{;;#,-,&#####{##[;{##{{;;{&*****--&#&;.##,--,&&&&&&&,&,,&#{&-,&&&,,&&,,*-**]/]--", "--,&&#;+;#{;#{;#'#,#''#-&##&--&{;+++;#&&&&&&&##{#&&{[[{{;{&#&-]]}-*,&..#&,&#)&-^,&&&&###&,,&###,,&&&,,**=^=_]*-]***", ",,,&&{+';#{;###&#&&{[>##[#&&#{#&{>{&,-,&>#&&##{{#&#{[++'+#----__]^,#;'+#&**#+;,^,,,&&#{{,,,,,&,,*,&&,*^^_===^,##,,,", ",,,,,#;+;##{##{&&[+{--{@'{,&2{&,)>{#&#{;;{##{;>{###{[+'''#%%--^_^,#;'';##,-&))#,,&&#####--------^,&&&,--/^,**&{.&,,", ",,,,&#;+@{##{;+#+[#&&#[+#{[#-%-[+;>#>>##;)>;++)#&&&&&{;++&%%-,*-,#;+;#&,&&&##,,&&##{#&,-,,---,,,-,&&&,*^_*&&,,&&,,*", "&&,,,,&#@{&##{{,{{##{[[#&&##,-&+{###>>#,>>;+++>#&##&&#[;>,%=-,,,#{;;#*^*^&..,%^,#{{{#,-=&,,&####,&&&,*^^*&##&,,****", "&&,--=-,{&&#&&#,,{+[#&##{&&{[{#{##)+++;;#>;++;>##{>##>;+&,-,,,,,#&&&*=^,-&;#^(%&{{#&&,--#&,&##&,&&,*^^^^,#.#,,,*,,,", "-----,&#,,#{&&#&#++[&&,,&&{+{,,#-&#>#&&&&#);;>>##{{##>;+&,,&&,,,#,^^^^-,&{.&/!^;{#&,,-,,#&,,&&=/,,*^^^*,,&&,***^,&&", "*--,,-,#--#{#-,{+''+#&#[{###&,-,,&&&,*-,.&&&#&#{##&&#;>&&##,=-&&#,%//=&;'{#&%%{:+#,---,##&--,&,-&,--,&&&&{{,^-*,&&#", "&*-*--,#&,#;;&&{;;;>####,--,,-==,&##&&&##&&&&&&#####{+;#,&&-=,&#,---,,#{@;;;#{':&,,&&,--&,,,,,,,&&,,&&&,&##,-,,,&&&", "*----,#;{&#;+{#{;)&&#&,^-^-,,*-*-,####{;{####&#{####{[#&,&,--&##--,&###;#,,&,#{,==-&#&-=,,,,,,&#&&##&,,,&&,-,&&,###", ",--=-&{;{##;+{##;#,-,,^%**,&&,,,-,&####{{##{###{#{{{{#,-,,,,&#&&,-,&&&#;&&&&,##%,--&&&,,,,,,,&&#,&#&,,,&{&,-,&&&{##", "&&,--&#>>{{;;{###&-^%^**,*,&&,*,&&##&&&&####&,&#{{;;[#,-,,&#{#&,--,&&,&#&&#&,&#=#&,&&&&&#&,,&&&,-,&&,,&{;#--,&##{#&", "---,&)+;>>;;;{#&*^^%%^,#&,,&&,*,{{{###&&&&&&,-,#&#{;{&,,,&#{{&,,=-,#&,--,-,,=-&-#&&##&,,#&--&&&-,&#&&&#;{&--,&&&#&-", "%=-&>''+;>#{;{#*^^^^^*,###&##&&#{{{{{{###&&,-=,#,&{[{,,&,&#{{&,&=-,&&---{&&#&&##&,,&&,,,&&,,,,,,,&###&#{,--,&,,&#,=", "-,&#)++~;#,&{;&_^^^^**,,#&,&&&&####{{{{{{#&&--&{&#[;{,,&,&#{#,,#,,----,#;,,#&,,,&-==---,,,,,-,,&,&###&&&=%=&&,-,{&=", ",-&'+~&;#&&##&=/***^*,,,##&&&#&&&#{{####{#&,,&#{{{[[{{{{####&,&&,,,,-,&#{#,--,&&-====-,&&&,,-,,&,&#&-=-,,---,,,-&,-", ",,#+;~~;>>#&,-=_,,*=^,&&##&&&#&&&&#{#{{[{{######&#{{{#&&####&,&&-,,,,&#{#&,--,&&,----,&&&&,,-,&&,&&&,--,,---,,--&,,", "&##{>#~>>#&,-==-&&-=-&####&&##&&&##{{{[+[{{{{{#&#{[+;{#&####&,&#,,-,&##{#&,-,&&&&&,,&&&&##&&&##{&&&&&,,,,,--,,-=###", ",#{##;>#&,---,&&#&,-,###########{{{{{{[[[{##{{#&;;;++;{##{{#&&#{#&,,&##&#&,,&##&&&&&&&&&{####{{;#&&&&#&&&,,,,,,-;[{", "-#{{{+;&^==-&{#&###&#{>###~>{{##[>>{>[[[[{###{{#;{{{{{#&#{;{&&#{#&,,,&###&&&###&&&&&&&&&#&&&##{##&&&###&#&,,&&,,;{#", "-#{[;+;&==-&{{&,&{[[{>~&#>>>>>>>>>~>[[;;>>~###>>>##&###&#[+[#&#{&,--,&#{&######&&&&&,&&&#&&&#{###&&&#{{#{#&,&&&&;[#", "#2[;;;{&=,#{#&,,&[;[{##&~>[[[[[[>>>>[;[>[;+[>~>[>#&#~{&&#[+;#,&#&&-==,#;,#{{#&&&#&&&&&##{###{{{##&&&##{{{#,,,&##;[#", ";[{;;[#&=&;;&-,&&[+[#&&&~>;+[[[[[[>[[[>#['@'[>>[&&,&~~&-&>+;&,,&##,=%-&{,#{{&,,&##&&&##{{#&&#{#&&&&&&#{;{#,-,&##{#&", "{;;;;{##/&#-%,{{>[;>&#>>>[>>>[;[+[+[&>+[';++>{{#&#&&&&&,&>+~~>=,-&&=/=&#&#{#&,&#&&&&&&#{&&,&##&&,&&&&#{;{&&=-{&,###", "{;+'+{&-=&&--#;>&>>~~>>[>;[>>;;;+[;[&>+;+;++~#{####&&#&,#>+>>>=,,##-%-&#####&,&#&&&&,&##&&,&&#&&,&&&&&{;#&&=-{&&{{{", "{;'@+{-],&,-&+'>,~>>~>;;>;[>>;;;;[[>~>'++[++##{####&&##&>;'>>>=,&{{,=,#{###&,,&#&&&&&&&#&&&&&#&&,&&&&&{;#,&=-{#&{{{"}; mtink-1.0.16/xpm/ground.xpm0000644000076400001540000002530610376041214013705 0ustar jjfuse/* XPM */ static char * ground_xpm[] = { "100 100 33 1", " c None", ". c #D7BDA2", "+ c #E7D0B9", "@ c #E4CDB5", "# c #C1A18B", "$ c #FFFAF0", "% c #FEF6E9", "& c #FDF4E7", "* c #FAEDDD", "= c #F8EBDB", "- c #FCF0E2", "; c #FAF0E0", "> c #FCF3E4", ", c #F6E5D4", "' c #F7E9D7", ") c #F4E5D2", "! c #F3E2CF", "~ c #EAD6C0", "{ c #DEC6AD", "] c #EDD8C2", "^ c #F2DECB", "/ c #D6B69C", "( c #E3C9B0", "_ c #D1B699", ": c #EFDDC9", "< c #CAA98D", "[ c #FFF7EB", "} c #DCC0A6", "| c #CFB095", "1 c #FFFCF4", "2 c #FFF7EC", "3 c #FFFEF7", "4 c #BC9A8B", ".+@#@$%%&***=*-&&&&;-*>>&,'*))***%%;*;>;'*-=>-=!-&!~,->*===*~~!&%>***==='*---=,*';~{]]-)^^./(@(_:^:+", "<<.<'$&>[>;*'*>&%&%>&--*))'-*'';,'****-&;'''*''^^&*!^!,'*)!^+^)&-='==')!''->-*-;'>>!+}]^){|]&%&&!:@_", "-!~{*1$[-;;*'=>&&>&->=',,*--*,)-)';>>;*=*^)'*!](~&&-^:~]~@]]]*,=',)'=''',)*>*-&*%';''^@}|.!%2&;>**='", "2-~}}2$%)'**'=**&;*''!)!*&%>=),;!*>-**,::@^=*,!(,%->,)(//.{{@'''%-,,=*=':'>-'=-*;!;'*^{~=*2&*&&&->&&", "'=:+<'$>=*--==*=-*=,')''=*%&',*'!'*'!,,)-'**':~_'-!,:^{|<{{+@!*')~{@^,:@@*>==''>='&!:{/-=,&%-*'*&&&&", ")^:+|}&%>---**---*;*;'**;*&-^!=!''*-='=-='*=)]~}!']~.}._=%--^~:@{{(~]:~(]'!:->'*>*=:!@{*,'&&')*[&>-=", "=!:](<*3%*=***-&-*-**!,'=*;':!'!**>&-==-,,=!:{{}}@@]~^*-22*-!)**,-%&*',)'':]*&*=>-='!(^*,>-**-&>====", ",*:,:#(22*'***->-=*,!~]:@)','==**--=,,')!:]+@/{:&&&&>-&**'!,!'=--&&>----*--')'-%%>''~.*>:-**>>%&*=''", "=)=^+_#'$%!!*,&%]]:)='!,''-*=)=====,!,,)!+{.+^!%->*'*=','*''!'=-'*-=->'**;%>!]'%2>-']]>,!-&&>%;*=***", ")'**){|{*'*>2,,]!'='*-*===-=')->',^:^^]@}..]&2&-'*==**===-=')=***=->>*'*->>-*=,~,***+],]=&--;%%[****", "=>'-*:]{(^,$,)]^*>-*****''*,!^=*^::^]{.(}:)>%->-)''=;-***-**'>>>==;%>*;;>-'=---::!),(~!^&%***>>[****", "&%'*')-!~]{!!&)'&-***''-!!',!:!:)^~({}~*-&--*''!,'''---**&-*'&&&*>>>*;%=**=>;'>-,]~{(+*-&&***;*>=***", "[>>>')=,'~(|&%-'>-=*-**-',*=*')]:]@(]'->&**=*-'!*','->-;;&-=)***%[&>*;&,,;>%*!==*:{|@,%%>>=;;>;>==*;", "%;%%=)!=']~<*2*'->-*->*'-=**&>*]@{~-2%-=',>*'=,**=)'>&--;>;*,*')[%>&>;;'*;*,!'*'=)(.~2[>&>*;;>*>=**;", "%*>>=,,-*^@_+$=!-&-**-*=-=**&&*]+{)$2**--'**'''==',=>>->->*;=*):;;>>>-''-'']:>-*,!(}:$&>%%**=;*;*;>>", "%;=*='=-'!=@/-=)>-*=**;%*'==&-=~}~>2*-%'==*>'!;;'''*--;>>-*-**:+);&**-!:=:;*;%'''~{|:=*%>&**=>;>;>>&", ">-**-;==,):~_:!'%**;*;&**>**>*)~.]%1*>-^*'**,)=-==*-****>>==&-!]@*-*!:]':'!~][}@(]*'-:'[-'>-=>>--;>%", ";-;->;=*'')]{]^:&,'>;*---&**-=^@{'[$*>;)-''',,'=*'*;***=*-*'*'!!'==*^!!,)!*==!!'&&&*'::]$%-'*--2;*->", ";>-->;*-*=*!+{:!):'>>--*--**-=^(@>[>*-==*)!,'=*=;=*;*''',>>*'!!'>)!*!'*-='--=.*[2%>*'*)@*1&'%2-=**--", ">>-;-**-*=*^@<,2>;=):,--**'==)]{([[**>';*!:)'*---***'),'=--=*'!)%*'>','*-**,{{>%->>*-*!@@$%=----'=;>", "--;;>;===''+.|>3&>*!~]'-*=)!^]]{{22*>>,--,!),=**-***)!,=-;,)**,!%>=>-'!->'=+|*$**>-'%':~_~^*&',,',=;", "*;;>&-',**!}_+&2-;-*!+~)*,^^]]!]{2$&&>!*>='','*-;;;=!)=*=-*,''=>->'*--'>**)_:1%**-=^$*^!!]@]!'->;''*", "=*->&-''*']{.'&-$%>*:}.~]~~:~]!:(%$%&-!'-===''->;;;')=*='>-=''*%>>=*'*,,'=((2$*>>&*,&=!,'*>=!!*$>''>", "=*-->;=*':@@(&&2>>-*!@}+..{~((~((>$2>*!,*''=,,=*->;',**,-;''>&*=''**!'=)-@#&2*[>-%&-*='=-=')!~@*;)'[", "-'&*-&-,!]{(>-=&'-=:]!=':)!]~]]@}*$>&*,)==)!'''>>%>''''',']%2=!~)*'::,*;^-&>>''),'-'=**:]:]&-", "%'>**-'+:}.)%')-*','===='**==*=!},%>*,'===)!'''*),!!'*;--'*&&!'],-')!,*)}@2&'-'>-&>-'='=*-'==*=>!]!'", "*'&*',!+}|{'*>&&*)!->=,'->----=){+,-'=*'**)!)!!',!:!*>>%-'-&),*)'-!)))*~|>%-*'>--&>*)'''--=*=='-*^+=", "!!!:'!@_<(,%>$%'','**',*&-===')!(}]-,**)=*,!)!^'*')=>&>[*'*-^-*=-*!!!)!}]$='>=%*&%-*)=''*-;&-;)!=:{,", "+^]{~}||:-[1%;!!,**',*->>*''==',~(^&!'-'=*'!,),-',)*>--%&'-!=**=%=,^),(<2&-,*&*-&&**'-**'->&*-'!!](+", "{:]/|<@*-$[&;):*=-;,'>&;;*'***''!+],:'-*=*,!,))*',,*;',=&='!=*'*&'=)',._2->*'-&>&&**'-***&>=]!)!)]+{", "]+{..+%$=%%**==*=;-*-&>*;****'))=]++],-===!!',!'*''*;')'*',&'*=&*=='*:.(--=&**$>&-'=,''*--=)~:^:!+(/", "~}+]+:1%2%&'*';;!'>[2%&>>;*''=''=)^@~]''',^!**'=,))*>>-&*!&$>,&&-&*='@.~%='->>&->;'=,'=>=)!',*=!,+(}", "~>*!_!$%2>*')';;*'=&$2&>*>==,!*=-''':+~]':-2%*===,,,,;&*&;'=--*-'&*=!~'*;[&>&*)'==*>)='==,=!^~(<", "'%:+(-2'>;**=;>;='*&2%>;-**,),'*%=,'='^@(,3$%**=','')*%%%;,,*-*-!*)!!]#'%&*-;&-;*','***>**',!^!^(}+(", "&&@~)2%'>--;;>>=='*>&>-;>=;''*'-=*-'!,'!{]>21>'=:!-&;;>;&;,,==''*!'*^~|!%%--*>*=)'*****;'!!!!:(}/]%-", "&=@*&%&%%>>**>>'*****;->>*-***'*===')''!.,2-=^:'''->**>;**==**,!-!-%,~_:&&;-=;'''*;**=='*!:@}{}@)-2=", "&!~%&->&>-;**--'====**>%>&*;=)''*'*--=!]{:2%={~2-=*>**;=';-*--*=,****~|=%&**'*',=**==='!~}}.~=-%%,]=", "%!+&->>'*******','***->&&&'*=)='**&%-)!'.:%>--&&*)'>-;*);>-==***,=,,:{(=%%**'*',==='''!]~~:)-2-''~@%", "*!@>&&-=**;-*'===*---->>>*'**=''-'=-*===:@*2%>&-*!!''=;*-&-'=*==-!!,}.',&&**'*===***=)]@~*%&*=*=^~~>", ":^~%$%-2;*;-='*>&&&>-->>&'**-;::','-*=')'.]-%%2'!]);*'*==;-*>&*)*'^!}}>=->**'*=*;;--*^@}=2&-===:!@~2", "=@!$&2%-**>==*>>%&>>;=*>***!'='~:==&*'',:+~*&$-!!,))''''*;;2***:*!{]]~-*>>',**;*-'!,,:}(2&=!'*=:^,~2", ",!>2>&***=;*;;&-*-&&*'*%=!,,='-***)***='!]@:&-)=*'!)***;*%&%=*=+='~:^!&-;*)''!'**):!!]}]>*',=*'^^)~%", "!'$&->=**'*-%&%>%-*->;='*)''*'->*-*>'!,*)::~:!-&-*,';>>%>[>-'*,+{]{@:)-,'>;'''**'):!:+})-=,,=,:~~:]$", "'=$>-&--;'*>[%%>&&&-=,)'-**'*''*-*'>-*,'')=:{@-%*-*=;>&%&%*=!!]~}^+{]!,~,>-*;>>***=*)+(>-,]]:^::*=]*", "-'1%---;*,*;%>%>;-*=,,=---'!-'!*%-'*')]:*-'']}{---**-->&>%;*)^(+@':~,%2*',^=>;;-=*=*^({%-!~~^'*-%-:)", ")!%$*,=**,=*>;>;*'!!'*>&%=!)-!,&>*,!~~~!**'*^+}@2>*>%>;%&%**&&~{-%*!'->)!!~:'*;=!,^^]{{%-=,*>&--=):)", "~])%-'=-*'*';;>=,'',!,-%%!)=,:=;':~:!-'**''':!]_>&&&%>>%>&''>-~:--=''=']]*':!*-!^!]]^~+2&&&%%&*'=!+(", "@:~*%--&;=*';->';=,,';---~,=~]-!='*;*&*-*'!~,^~{]>$>*>>>*>;':@{&-*->-=!(:&&='==^]:@~!:+&%%&-**--=^(}", "(]},$-='*>**%-'&-=)'*==-]~~!=*;>%-*';=;-,*-=,!~{.-['*&-*>'=:@@=&;**&=!!{'2>>-*,!^)^:!^)&&2',**>&-)~|", "@(/+%$*=*=)'&-'=!:~~~~]!*,!';;;>*'**>*>&*--**=^+.])*%&,)',)~{:&&;**;'!:}^&*-**',*'=*!,**>''-==&-*!]}", "=^]@=2'===->':]^!))!!)'->'!*>>;>='-;>*>%&-;--*)]~::!'!:='':({=%-**==')]/^>--**'=*-*'***--,*;';>-=^:@", ">**]:*=%%**)@@)*=>>;**=*=!!*>>>%>--*;=>%&-**-=!]]'*,^:]:-=]@+>&'*;*=*'].=&--**=**>,^*-*&,--!*%---^]@", "--*):^)*2)~~:=>='--*=')!-''*-;>[%**'*'-&-**--'!]+,>*,,^@=!~^'%-'*>>*-=]@-&-*=-*->=''';&;!*-)-$-**]~+", "&*,=,:]{^!,'*&;!;>-**;='>*=**;%$%*='*=*;-->>-*,)~!--)!,:]~]*%%-**--**!@:%&-*'-*--*=*----;=>&>%>)!+:!", "-')*=):.{=%*='=-%&-***',')),*;%[&**=-=*=;>&&-;*=^:=&'!)!@]'>%-**=**,,~(*%>-*,*=-=-=*[>'&&>>%>>-^:+'>", "*,==!^].<,&*>>*>==,,==''~]:)*>&>*'''*'**;>&>-;**&::''==!+'%>>=**=*=)!@@$*'**!*'>>*;%>;;-*2;';;*)]+*%", "!!,'^]+(.@&*-%*!+,'':!!=!*+[-)>;!--&>:;'>-->*'=->')~!*==:=>-=''*-*''@+)%,'*'=*&*>>-->>;-=>-''*=):{,>", "(~!^++:)+{)=>-),]=*=!)!=''^[**>*->-&)','>-;-*==*&,,~]'-*+)***=,,!*!]+:^';*-==*>-';-->;==);;''=!](.*-", "~({+:,=)].~'%-';!**=!''*'],%=&;=>*;%!-:'%>*****>*^=,]:!~+)=,)!^::)~~!,:=;*-===----*'**,!,',!'*!~{{-:", "%>-*='):]{+)2&;-';'):),*!]'&*%;**=-[*;~'$&*''*-%-)=!~+:@:=':~::]!):)=*'>',='='****'^^!::]!,'*=^~(!%*", "=-&-'!)!!~~!%>;**>=):,!,!*;%%>****;;>^]>[&-*'=-&*''::~^!,=)]:!!^^=--'-;*'!''='**==!+{}}}+,&&-,]+@-**", "!!)))==,=^+)2***;>*'';'',&*>%*=;*;'!'];1&&&>-;--'):]:]!'*=)!=*,::!*&=**=)!,,**>-=:{.}{{}'=,^:]+@:%^'", "%22-)!''=!@)$*-**-'''>*==*'**'=;*='!~,$2>>>>>-*=*:@{@+=***''**,!!:]*>-=>)!',***!]{/{^==*-'~(@++~,2;2", "=*=):!=*))@!2-*!--!^^=,)-),'))'**=*>{>$'-;**;;=,,+(~~]>='**',)'-=,+:>2;>''*'=):}{+:=&>>%=->-*','*>**", "*'*^~'->)]{!%-)~)'~({]:]^',-,'!=**,@]&%-*'';-',')^~+]&*==**'''';']:}+$2&-',!)~~:=>>>->**->=>>'=**-*'", "***,~:'!*,:*%*^+:!~:^]@+],^)]!]^*:}}*$-='*;*->*!!^]+,%*='**=;;;--,]+@)>-'*=~}.:%-%>>->**-='*-=,*&&>-", "-&*'::*'!^]!,](}<]!*>&*=!']@.++])](@',~==*>&>*'=!!^+&&*=';**->-*)'')(}!&-:(.]!-&%2&>;-''-!,'**!=&&&-", "--*=,'>-::]^!:]]{=21&&-'!**>-&--'=*='~+*%-;&%;',',^@2>*==-;=;>-=*,*)+@~^!++^>*->$$&>*-'''^!=-*,*&-**", ";*>-**''!)'*>>-&]]=$-*-=*-=*'',*&*****')*&2&-*=),!]@2--*)**=;>;=''':@]!:+^>%&!,>22>-*-'=^!!-&**--*=-", ">-%-*-,,'=--&>=*'~]-'=*::!,;>*'=-,=**%>!]'->*===:~@~&-&>)***--=,!&,^{{>=,-%**,**&%;-;-=*)*'->'==,=>%", ">%%-*-**--&-**!!!~@'-%&)->;*;;;;''>>->-*':~!;-'!+{@,--%&=*==;;',-2!!~@-!>%&!,=--*>;>>>**=-***==*'-&>", "'[%>-*-'>>&*=*)')~{-12*-;&&;>&-*),*->-'***,::!!:({~&*-&>-*,,*-**'*=*:~*-2&*!=**'';;%&&**''*,=&-%2%*,", ";-%>*==,''*-=,'**}($$%=->>>;;>>'','->*',*;*':++]@]->,-%';';&*-'--=*=>]]$%-),=)*-*->%&>-;>^==--&2%-=*", ";;;'!:::;*->*===)(]%[;%-;*;>>>>*''*-*=''=''=,]@@^-&='->*->*%-=*==>*--!{*-*!'*'--;**->-*=-*',>*-&*''*", "*='):!,*>>>>--*'!.{22!;**'*&&>>;***'''''*''',:]:&>**='=>->*&*'*'=-*-*'~)>'~!!:'*>*'*-;='*&!:*,=**==*", "!!:!,=;&;->>>&-'+}_,!*>'**;&&>-*''!:)**'''-&-!:^2'*>)!->*=--'-'*;'&-;=*!{._)*=>&&*=;-='''-!]),*--*''", "!,,'->;>**;>>&*:((}(.'&%>>%>;;*!]:::'->****-*!^!*'--!*%-''->=>*-*;&;>**:~~+!)*>*>;;-*))'''*',-->*'!!", ",;-;%%;;=*;>>;!(#+&&'!~+*&2&='!]]!'=->-*>=))''*-^'*=*-->)*=%*'-;=$;*;*)=)':{.&$;;>>-'!,=-=%&=>**='),", ":->*>&->**>&>'+|}%3-==^.~'%%':]~'*->&&-='''*->;=::!=-==&)**2*,***%**,'=;:=={_$['*>>*,)'=>-*&**,=*=''", "!&%*-%%$-;&%>){#'3->&2*:_~-%,~~]&-*-&&-*'*-;**='^~!=)*%*''%2**)>*!>%!]&!,'*@_$[-*;*,!)''*-:=-='&*=,!", ";;-;;&%&&-&%^~._1;>$[%;!@_!)~_/|~$--%-:''>*!'---~})'>-%='*-%%*,*=-;'=>>*',!~|!$,>*!~=]:)!=',!''-^)):", "*&>,,%2->&*'@..@3[$1[>;,]}(']{'*!{@+]~*'==:]~!!,:,*-", "'**'*%%->=,~+{_$$>;&>>*:,=*:->--)..->'!:,-=:]:::{<:^'*'>>'>%*=-=-******';>>[-]~^.{,-='&)*&-*'*,''*')", "'==*>%&>->+~{|=3*;&>,)'=,->'%%*)'~|@=-~{}@{|<.(+|(=,,=*2;';&-->*%-*=***;*%**'*:}<-$>-*&*>%--=-=-*']{", "-2>)'&&>>){}4_1&%%%-,,*&**-*---,]>!..+}{(~]]:!:+.>&*'*>>!)';&>--%-''==*>;-*~:,=_#$2''=*&&-,'*>='--*'", "&%-''='*,|_|@>&2$>,!'*;;*'-&*';))=*!{@]>&%2%%%-:}$-'*&&=),';%-'*>*=***;>%=''^,,__%>>-***&&*->&---&&&", "***>&!+]._.:1$22',!)'''*>;;&=)*'=)==!&2$&--='='~/$-''*;%*'*%>''*-;*;;*;&&*)&'*]#]$-%&>>>&%>>*->$%2&-", "=>&&%){_|{%$&%$*,!!*&-,);>*>=)''=))!!&**&*'=*-)}+2',=-)>-,-2*)*---;***>%;*-''!~4~3>%&>*-*>>%&&;>&&*,", "&,$2'!]<|12->%&'=**=*--*[;>>;';>*^!**,*2%>**--!~($'&-:**''';>)*-%-''--;>*;=!'!]<'$>>*;>!*&>-'**;&,,-", "==-->~}|(3$%2&*!=*=,'-%2[>>>&**='!'-*!'&%&-*-*!]_!'=,'&'***;>)*&2-,=;=*%**,'']]4][>>;;**>*)*=;;>-=*-", ";&%>=@}4]1$2[*''=**='*%$$&>*;**,:^*&-'*&-----*')(.*='*&->=>->'*%$&**;==>'='-*!!#)2>***!*>*,='*;%'=*'", "&2$-!{.#-$--&=*----*'=>%$>>=***)!)*&*=*-'*->&&-=]|*'''--*)-->**&[2>***=');>&-,:<&%-=*>'>>>=',->>''='", ">&-,).|:1$'*%-**&-*''*>%>-&->*=!-*--='')---&&&-=](*!*=-,=:=*-;;-%%;'=*')'-&*']/{1%>;'&;>-*)'*%>;--;-", "--*!~.:%$2&&2;-->-='=*----%>>**'>***=**=&>--&%&-!^',-''!-!=*>->>&*))=='*='=)^(<-$>%>!*=*>*'>>>*>&>->", "->*'(.$%>&[&>=>>-*=****'>-%>-=-;''=;-&[[>-**&%%-*'!'=!!,&=*>&;%*=!]!''=>=)!^~}}1**;*)*;>>;;%>;*>;>-=", ",%!=]|2&%--=**>=-*''=***;;%%&*-*!)*>->%2-*=*>%>*&&',!---&*-%&=>)]]]]!,'*='):.|{2*&*=';;&*;*-;&--'%>=", ")>-!(_%[&&;-&;*='=**;>>>-&>-*=*&==**'>2*)'>*>-*-&-':'>--')&&*-,]]++]!=,]'!(}<|.%2-**';%;'*;*->'',-=,", "*>:{.|1$$[>>>;*='*;>>>>;*>>-*''**)^'',--=*>*;*=*-*'=;*;>*'%%-,+}^@}.{]!!{|{<{{|@--&2&>-*;--===,,!-*'", "*=(__~1$[%;*;***=;>>&&>;=;>;=,,=*,:)',*&==-';**--']>[=;;;;%>'~/////////<<|/~&,=(]:'%$%****']~~+]:--*", "']{}|%%[%;*'*;*>->>>>>>>*>-=,),='-''----=';';*;%-).-1;>=>->,:{<{''=*=,:+{}(&2&=!@{{!2[*;',]../|(~-&*"}; mtink-1.0.16/xpm/Greydrops.xpm0000644000076400001540000002361710376041214014370 0ustar jjfuse/* XPM */ static char *magick[] = { /* columns rows colors chars-per-pixel */ "96 96 23 1", " c Gray61", ". c #94948c8c9494", "X c Gray42", "o c #424239394242", "O c #9c9c94949c9c", "+ c Gray45", "@ c #6b6b63636b6b", "# c Gray29", "$ c Gray71", "% c #84847b7b8484", "& c #848484848484", "* c #7b7b7b7b7b7b", "= c Gray32", "- c #b5b5adadb5b5", "; c Gray55", ": c #7b7b73737b7b", "> c #5a5a5a5a5a5a", ", c #52524a4a5252", "< c Gray58", "1 c #8c8c84848c8c", "2 c Gray39", "3 c #a5a59c9ca5a5", "4 c #a5a5a5a5a5a5", /* pixels */ "%&*;&:**&:****%X*&:*;1&&1***&:&::**&*;%:*%&*2X:**1&**;%****%&&:&:<<*:*:;&%&**&&:1*2%;**&*4<::X:*", "%&*&*:*:**&%:*&:*&**%**:***%&*;:*&&&%&&:;*1*X:*:&&&****&1&*%**:;*.;::&&1X:&%***:**:*:*&.*.&@X22+", ":***%*&&;*:&&:**&1&1&*&%;1;<;&1:;;%&*&*:*:&*::*&;:&*&%;1*&*&&%*;:&:XX*:X*&;;%&;1X:X**1&*+:X2:22+", "%**%&&&*:*%&**1**&%&&*;&&&1<.;&*&*%;:*&*&*%**&&;&:&*1&*:&*:*%**;X;&&*:*&&;1**%&*1&&&:&*+;;&:*X+*", "&**&1&*%*;&*:*&*&%*&*:&*%&&<&%*X%:*&:*;:&&&&&&:::*;:**&&1&**&&%&:;&:::*::X::**1&*&:::&*&:**%&&%;", "&:*&%**;;%*&&%*:;&*&%*&:*%*;:::2&**1&;%X&&%**&&;<&&+&;&*&*&%;&&%*&::;&&*<%*;&**&;:::*;:*1&&&&1:X", ";%&*%**&+*1*&<&:&%:&*:;*&%*%XXXX**%;&&*&;1**1&%;X*;%**%*1:&:***&&*&&;*:*;*&&&%1<<&*&&<*;1*:::*:*", "1*%*;<&*<*%*&1*&&*:&::&*&&&&**&%&**;::*;::*:**:***%::;&:*:;*&1&.&*1&%::*%**::***&:***<&.&%&;*&*&", ":*;&**:%*:*%&;<<% *:&*&%&:&&&*&X%;*%&&&:*&&&&1&222%&&%:*****&<**&&:*:&&1&;1;**<*O;%*::***:X*%&", "1**;1&*34<;&:**&:*&&&1&*XX***:&&;;&&:&*&%**1*%*:2XX+&&%:2&;1&*;%%&&%&;;<:**%*%*1 ;O;**:*;;&*;%**", "&*:*:*:;<&%**&%*&;%*&;&%:&%&&*&&;1*&X*:*;%&;&&**:**:1&&*&1*:::&**%*:*&*%*&*;:*&&;*:*::*&&%*&;&%&", ";*&;&1*&<*:&1**1;*::&%**X*+*&*1&:*X::*&&1&*&:**::**:**::*;*&;&<%*;<&&%:**::&:**:&:X**&&:;&*1*:&;", ";:&1*;&*:XX:X:*&%*&&;;%&&%*;%&&***::***1**:&*&%&*;*&1&***.&&;:*:&;<&1&&*&&*&%*&*&:*&:*X:&%*&%*;*", ";***+:**&;%*:*&*::&:**&&%**&:&*%&&**&*:&:&&&1&%&&1*&&%*;%;:X::;<<<<%;&*&1&*1**&&&*;1::*&*&:*&*%:", ":::&*%*%&&*1&:&:**;*&&%**%*&:&:;*&%*;&*&*;**%:**&;%;&**&:*:*;;&X;1<&&:X%*:X&*&.*&%%&*:&;:;&&1::*", "&*;*;*;%;*%&&:*:&&&1&;<& ;;.&;;*:***:*%&*1&**&;%X;**%&:*&&*&%*+:.**%:2X*&&.&*&::*&;<:*&&*%&:*&:*", "&*1*;%;&;:*&%&&<**:***&.1*;;&&;:&&;;&&%*:**::&*X.;%&&1&%&&%;&*%;;::XXX*&%*&%*&&*;&&;%&&**:***1*;", "%*&*;&&:;:*:***&:**&%:*&1&*&%**%&%;:&%;**%;;<&%&*.;1&;*1%&**:&%**&*&1**;<&;1&&1&&1&&1&;1;", ";*&.&**@:***;*&*&%*X:*X@*:*XX:>>2X***&%**&:**&&&;O;;&*&*&%*;&:*&:*%*%&&*:%*&::*; O<&<&&:*&&&&%*", "*:*;%*:X*&&%&**+:***&1::XX:@22=#>:&&&%&;*%*;&*1*&.&O;*&%&&*;&*;&1&&&;&&:&;;&;*&1;&&&&<.;.&*:****", "&;%;&*:***%**%**;&1:***&;&*:2@=>:&&***&;%**1*:&:&<; &:&**:X*&&<&:2*%&::**1::&&&.;&%*&<;&.*2:**&1", ":**&@X+::&*:&;&&;:**.*;*&:*;:X::;*.&:;<&*%*&&%*;43<;%:*&:&;&;*.&*%;&**1&&*;&*:*&*&%*<&&1*2>X%&&&", ":*&%*;&X*&**11:*&:&*;:&*%*&;*&&;%:*&*.<%X:*%&:*O4<&1**&&*&&:&:*:2**&*&1&:***:*%&&&**<&.;:2X*1***", "**&%;*&%;;%*&*:*&*&:*+&1:*&*:*1*&****%*X2:*&;*14 1*;**1%&*&:&**XX*:**%::*&&**%&&&%&;.&&:22+%;&*&", "*1;:*:&%:***&&:*::&&;*&*:&%**&1*&:*&*:*:*&&;%*<44<*;%*;&%*;*&&*::**;&&*&&%&*&%&%&%****%:2>2:**%*", "&&&:;:&**&*:*&&;;&**%&;%&;%*:**:*:&1&&&&1&;1** O;*.*%&:;*1****::&*;1&& <&1&1&;&***&%:X2X2:&&&**", ";:*&<:*&&&&&1&*&:*&1*&<.;.**&&&;;*%&****%*X:*<- ;%:*:*&*.**%%**+X&&:**&1;*****%**&::**:*X:*%&:::", "%*&:**;1&**::&*1&;%&::;;&&@:**%&1:**:*%*;&**&; %*&&;*;&&&:*;&%*X:*1:&*;1%:**%&1&:&*1&&:::::*&&&<", "&%*&&*;;.<;**1**%&:**;;*::2*&%*&*X&.*&&*:&%&&*1&*&&&+1*%*:&1*::X::&X;:;&:X%*&*&:*;*1*;*****;;*:X", ";*&*:<.4>@*&*+*X***;1&**:*&&*:&&**&%&*.*****%*&*&%:&X:*&&;;1;<;<1&&&*.%&&:&*:&*%&&&:&1&1&&&;", "*&&*&:*&:X22+:&&&%&*.&*%&*:*:*&*1***:%&&&&;%*&11**;1;&*;*%&::*&<&<=##:X&%*;;%*%**%&&&1 ;.;%&:&", "&%&&1**&1*&&*&&&:&;&1*<; 3; &*::>%*&:*&**&::*:*&&;%;&&*%:&&&***X::2>>#X1&**1;&&&%&:&:*&<*%*::**", "&&*&**%&&:*****::****:;&;.&;;&*:X:**%***%*&:*&*&*:&*&&&*%:;;;%&&&*X=>>@&1*%&<1**%&&*&*<.<&1&&&&;", "X:*;%;*:&**&1&%&*1&**:&&%;%<*1::>2&:&%&&&:**%;%&**.&*:*:&*;:**&**%;%;*&1;**1;*+:***:&*O<<&&&*%**", "&1*:X**&:*%*&&**&&&%;&&<%;:;X:>>2X1:;:***:*&*;&&&*&%**;;%&&**%**:*;%&*%*&:X*&:*;&;*&;;3 &%****%&", ":*&*&1*%*&&&1&1&;&&*&::**;*&:X:X>X&:&*&&;1&.&*::**%*&%&*&&**:&*%&;%**%*&*%*1&*::&*:%& >:***&;&**:&:*&*1&&%;*&:*1**1<*;&%::;;*%&&&*&&**;%X&&4.&%&&%&&%&", "::*;&&**&;&&< ;<+*&*;*%;%*%XX22,**%*&:::**&&&;&1:**%&&:<****%;<&&**&*&:&;&*&1**;**%*4 ;;:X*%&*&&", "&&&&X:*1&&**.<%&+:*:&:*&%*&*:XXX%&**&&*&;%%&*%**&&***&*&*%&*;<.***:&&;:*%&%&****1*&&4O&%*:**&*:*", "1&*%:&&X%***1&:X::**1&&&;*:*::&<&&***%*&*::&*&:&%&&%*&&*%*&%;&*+:*&&1&:&:&***%&&1*:&<&*&*:**%&&1", "%&&%X**%*&%&&&X+X2**1;;%&%*;&&*:*&%&;1&%&**&1;;< &:&*&%:**&:&::XX**%&**;:&::**&&%:*&&++:XX%&;&::", ";%X*;;*:&&&&%*:::X**%&*:&&:&*&%:*&*%&&*&:&*%;<;.<**1&&&&**%*;***&&&%&*%*&.*;;&%&1&;&&:::*:X*&:X&", "*&&;;&:&;&:&*&:&&&1**1*:*&:&*%&&1&*:**:*&;1&;<&;&&1**:*&**&*;**1**&*%:**&*:*&:*:**:::**:*::*&*:&", "&;%1&%&<;&:&:&*;:*&:&;*;:&*<**&:*&%&;&%*&***:;&1*%:>*&1&*%&*&:*1&1;&;*&1*&****%****:&;;*&*:*:X*%", "**%&;;&%;*%;*&*.:&;*1&:**;%*:*&:&&%*&&*&*+*.&;*:XXX21;*::&**%*%<:*:X&:&&:;1*&&%*;;%*&*&::**1*&;*", ":*&&%*&%;& .*&%**&*:*&&;:&:&*%&&;O;&*:&:&;.&:::*:>2:;&%:;*:;**&**:*;*%&*&1*%&***&X&*.;:&&&*;*::2", "::*&&&;&<&;&%***&1**&%*&%&*%**;.<<&%&&;*&%*::*&&*:&&%:**&%*&*%&*&.<<. <%*&::*&&;%:&:&&:*::&<*&1*", "XX*%*%*&O&%:X:*%&&%*&&%&*&**&*;;;1*&;;%::*&;*&1&;:&&**1::*&&&&&1&<<.;<&:*&*&&1:*&&;*1&&&&*;1*%&&", "&&1*::::*:**22&&*:*&&%&*%&&:&%<<;&*%&%*;&&&&&&&*&:*&*&;*&&*&&1.443 4 <%&X**%*%*&%*&:;&:*%*1&*%*:", "&*%*X:X:*X:X>>%*&:*&:*&**&&*;1<<;1;&1**&&%*:*&1&%**&%*%**1*1;<<4.;;O&*:*X&&;1&*;&*&&&&:&**&**&*&", "<%***&&**:>=>X%&&:&;*%;*&&*:*;< %&&1&*::&&;1::**&**&*%**;1:&;&.<; O&&*+X%:***:**:*&:*:&:*1&%&%&", "%*:*&&1&:X2X:&&&:*>@X:**;&&*1** @*&&;*&&X:&*", ".&%*1;%*&&&%**%**&%X:*:&**%;43&%*&*%*:&&*%*&:X&1***;*;:**;*;&%&&;;;:2XXX2&%*;:&&:**;2%&1%&1;%&&*", "&&;; <**&%*::**&%*&::**<;&; -4&&&&*&*&&:&**:2X**&%:<<3;&:;*:*::*1&:22>2>:;*&*+&%:&:&:&;&X*%**%**", "&%;;<<%&*:&&;&::**;&*&&&*:;44<%&*%&<*%;%&%&*:*&&:*& O<&*%;*:*&*&&*222>>@&%:&*%;**;:*&*::&;1*&%&%", "::&;;1X+*%***%*<*%&*&&:&:*O4 1*:&*+%&1&X&**:X*%&*;&<;;:**%*:&;&%%*:X+@:;*:*;*;&:*&*&1&&&&%&*%:**", "**<<1*@2X&;%*%*;:&&*.&:&&1<<1&::&**&::*:;*%:X*1;:*&<.;:*XX***%**:&&::*&*.*;&:&::*&*:&&&&&:*&&*1&", ".*&*@22@*.&*:***:;*&;:&&:*&*::X*&%:*&&*&*:**:*&*:*&%::2:2:&1&&;%*&&%*;%:*:***&&;&*&*O<.<;%&*&*&&", "&:&&::X:*&:X*&&:&&:&:2;:*&&*&*X:**&1*&*&;&%&**::*;1&**2X2:&*&%;*&**&*&%*&*1<*:*:*:;&4O;41&;*&*&%", "&*%*&*<*1;&&;%&&&&&%&*;*&%*%*X:*&*X*++:&;:&&&&&1*;X&*%&1&****:X*:**1%*&&1**&::*&;:%& <.;+:X:;::X", "*:*%*&1*;%*:&:*:;%&:*%;*:**&&:&;X%*&:*;&&:&&&%*&:&&;**&;::*%*&&;:&&;**%*&:&;&&&%***& ;%*:X::&;&.", "**;;*1;&%::*&&*&&:&:*;&*;&&1&*&%:***:&&*;1&&;&&;%&:&**%%*&&&*1;&:&&%:*&%&**%****&*&*1*&%:>XX*&*&", "&&&1:**:&&;&&*:*;:&*%&**&:*&**%**;%**&*:*&&1<;;.<;%&&%;*:**%**;X&&&**&<.; &&*:<%*%&&&::2>>:X*1*:", "*&%&*;*&&*&+:*&.**%*&&%.&:*;&*%*:*:***:***&1;&;;&%&*&:&&*%*;&&.:&*%**;1;&.*1&*;:&&%****+>:*&&:**", "*&%:*1:&&1<;.&:***&&1*&<&*&1*%*%&;&&*:*+*:**%*;&1*:2*:*:&&&;**1:;*1*&O;;;1&&;;&:*:**1;;&:***1*&&", "*&;*;<; <<&&&&<%&*&**<<++:::*&;&&:*:**++@*X::X+*XX>&;.&&;1&*%;*1:&:*<;;;&1&&1*:;*1&*&::;*&&&*%&", "++1*;2,%:**1&%*:*&:**;*%<;&*1*%*:&&&:&&%;*&::;&*%*;", "&;&;O<4.<<;%&:X%&&1::*&X&+:**;&%:*:***::*;;&*X@:>2oX:*&&& &<:**;*;*&4 &O&*&&&;&&&&:&:;&*&<%:*&&:", "%&*&.&<;<;%*:22&**%*&&;:&:****%*;**&&%&;*&**&%**22>&*&%&*4;&2&%****&<;:%&%&*&1&*1;;&&%::*&:*&::*", "%**&;&;<.1*:2>@*1*&&&%&:&*&;%%&;***%&&1;+%:*&&:&:*&;*&*&O4:X21&1&%&:**:&&*:**%**;&*&&*%;*&&***.&&*%X;:*&1*1&O4;X+X1***&. O;*%;&&&&&*:*1:X;*%*&1*&&1&%", ":&*&%*&&&%XX2@*&*%&&&%&&;*%;%***&:&*&%&&%&:**%*1&;;%*&:*&:2::**%*& ;%*&&::*&:**&&:2&:;;&*& ;:*&", "X1*&%*;;::>>=2::&&&:*&*:;*&&**%&1*&::*::****&&*1:***%&&**::XX&&;%&4-;;1&;&&;1*&1&:X2***&X&O4.&*;", ":&*&::*&:X22@:*&1;&:;;&*1:**:&*&::***<&;;;O;;:&*:&**&:&*1*&::&%&&;4O**&*;1&;*:&&*XXX*;:*&4$4&&:%", ":**&&*1<;*::***;*1*:&&:*;X%*&;*:&**%*;*%&*;:&X&&:&%*;:&*1:&**1*1&; .*&%&*%%**:&&:XX:*;+%&3<&::2&" }; mtink-1.0.16/xpm/Desert2.xpm0000644000076400001540000002473710376041214013726 0ustar jjfuse/* XPM */ static char *magick[] = { /* columns rows colors chars-per-pixel */ "100 100 10 1", " c #b0b092927878", ". c #b9b99a9a8080", "X c #a5a586866d6d", "o c #c8c8a9a98d8d", "O c #c3c3a4a48888", "+ c #adad8e8e7575", "@ c #cbcbadad9090", "# c #bcbc9e9e8282", "$ c #d9d9baba9d9d", "% c #cfcfb1b19494", /* pixels */ "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO", "#ooooooO#OoooOOoO#OoOOo@oo@o# .#Oo#..OO#..#oo#OO#OooooOOoo#### .#O#...OOOOo@@OOOOO#oooOO######O##OOO", "#o@o@@oOOo%$%%oOOOoOO####OO##O##O@o#OO###OOoOOoo#o@oO##Oo%o###OoOO##OO#.O@%@oO#Oo#Oo@@oOO@@OoO###O#O", "O####OoOOo@@oO@oOooOOoO##..OooOooO#O##O@@OO##OO...O..OoO##OOO%%@O#OOOoOoo@oO#oOooooOOOo#OooO...OO#OO", "O# OO.#O###...#####.#OooOOOOooo%@##OooooOOoOoO..o####OO X+..#oo.O@oo@oo@o. ###OO##. .##o@@OoOO@%o##O", "OoOoO. #oooO#...O##OooOooOOOO%%o#OO.oo##OOooO###oooo@oo#.##O#..#O@@@o#OO####OOO..##O#.Oo# OOOOOO#.O", "#OO.#oO##O@OOO#.OoOoOOOO##OooO#.#oooO###...OoOoOO@OOoO#o@oo@o.#o.#oo#O#..OO#Oo#. .@%@ooo .##OO.###OO", "OOOOO@%@o.#.#OOo@oOo#.O#.oo##. .Oo@@O#@@oO##OOo@ooO...Oo%o#OOOO. #oooOOOO####O#Oo@@o#OOOOoO#OO#OoO", "@oo#.#OoO. #ooOooo@OOOOOOOO##OOOoooooOO##OoO#OOOooo# .#oO..OoO. .#oo##oO#O#OO@%oOoO##O@%@OOOo@@@@O", "@oOoOO#.#O#@%@@O.###O##@@OO@ooo@o. .###O@%@oooO#O##OooOO.#@oOOO@%@oO#.OoO##ooOOooO++ #O#OO##OO@@@ooO", ".O#O@@Ooo#oooOooOO##.#OOO##OoOoO.#oO###OoO.O@OOoO##Oo@@O#Oo@o#.o%@O#Ooo@O#O@@o@@oO..OOOOO##O##O#OOoO", ".####oOo@@@#.###OOOO@@@OO##OOOOO#####OO###. ###OO#OOo@@@ooOoO##.OoO#..####O@oOooo@@O#OOO#OoOoo##OO#O", "%oo%o.#.#oOOO@o.#OooooOO##O#.#OOo@oO#O%%oOo# O@OooOOO#.O@@O#O@%o#.o%@O#.#O##O#OOOo%o#Oo. #o#.#oO..XO", "OOOOO###OoO#OO.##OOoOOoo##O#OoOOO@oOooooooooO#Oo..#OoO.#@oOO@@@@# O%%@oOo%@OO@# .#o@@oO.#O#OO#oo# O", "###.o@oOO#O#...#####.###OoO#O@ooO#OoOO..#OOOO#....ooOOOO##OO##OO##. #OOooOO###OO#.#oOOo@ooOoo#Oo@@O", "#.#OO###...O##OOOO# .. #oOOooOOO# #...#OOooOOOOOO##..oO..@@#..OoO# + #O######OooO##OOo%@oooOo#.#ooO", "#OoO##OO#.OoOo%%@@O#OooO#o@OOOO#Oo..O##@O###oOooOoooo#### .##..#OooO@o@@O..#OOo@@@ooOOooO##@%o#.#OOO", "@oO##ooO#oooO..Ooo@oOO@%@oOO###O#O@@OOoOOO #o#OoooooooO#. .#o@oOOOoo..##O#..OOOO#O#. .#OOO###OoOOO", "OOOOOoooooOOoo####OoO##Oo##OO#.OOOoooOo##ooO...#o@@##ooO..OO@oOOo@oOOOo##OoO.. #.#ooO#..OO# .OoOOOO", ".OooOOooo@oooOoOOOOoo@#.###O#...OO#O@%o##O@@O#o%@OO#.#OOo@@@oooO.#OOOOooo@o@@o...#OOooo##O##.O@oO##O", "oOoo#####.#. O@oooo@oo#.OOOO#Oo#....OoO#OO#OOO#oo##O##oo@%oOOO..OoOOO#Oo##O@%%O.oo#+ oooOOo@@%@OOOO", "OOOooo###..OooOOo#.OoO#o@@@OOooooooooO.#o@oOO@@#+++.O.+.#OO#o%O.##ooOOOo#.#. #ooO#ooO##oo###oO.#Oo@O", "##OOO#.#o@@@%@OO#...#..OoooOO@@@o@@oO#Ooo##O@oO#. #OOOO#oo###OOoo#..### Oo@o##o@O#O@@OOoOO##O..#OoO", "OO####o@%%@oOOoO..O#..#Oo#...@%@OOO.#o@oO.##. +.Oo@@o@$%OOO. +.o@oO#OO###OO@%O.OoO##@%oO#OooOO##OO#O", "O@O##o@@o. +.OOOOOOOo%@##OOO##.#..OO#.#OOoO###.#oooO@oo# OoO..OO#.oOo@%@O##OooOO. .OO# .#OooOOOOO.O", "OO..#O#. .#. .#o@oOoO# #Oo@O ##o%@oOO###o@oooOO##Oo# #o@@oooOooOOo@%%ooo. O@oooo# .Oo@@@%@O#OOOOO", "..##O. .OOOooO##.O@@Oo##OOOOoOOOooooOOoooO#o@@@%@OOoo##OOO#.#Oo@o@@..##OooOOO##OOOo@oOoooOO#OOooO##O", "###O#.##o@@oo@@@@oOO#.Oo%oOO##OO#O. ...#Ooo#..OoOOoo#..o@O#.OoOooOO#.#.###.#O#Oooo@ooOOoO#...O@@O##O", "%ooOO%@OOOoooooOO#. #. #O@%o.##o@o. .###ooOO###..#.OoO#.#Oo@@O. .#OoO#.+ #O#.#O.#OOOooOO. . +.OOOOoO", "@@%@@o@@o#..OO#O#..##....OoOO@@oOOO##OooooOOoo#OoO##ooooooo@O.#.#O@@oOOooOoO.O. ...###..##.oO..o%%O", "#oooO.#o##.#.#OOOOo@ooO.## .#Oooooo@@O###OoOOO##OOo#.ooo@OOO##@@O#.#@oo@@@oO##OOo@O.....#O#o@o##@oOO", "#O#.....#O@@oOOOOo@oO@@o@O.O##.OOOoooO##.#OO#OoOOO##..##.++.o@@@@oO#OooOOo##ooooo@@o#O@OOo@@ooo@# O", "oOOOOoO.#@@@@oOOooOo%@%%oOOo@oo..OOOOo@ooOOOOooo@oO###oo..#..ooO#OO##OOOoOOo@%%@#.#oOOoo@@oO#OoO #O", "o##ooooOO#.#OO#ooooOO##. #o@@##OOooooOOO@@O##OOOOOooooO##o%@O.#...###.#oOOo@@oooO#OOoooo@@oo@oO##OoO", "OoO#OOooOO##o@O####O# #oOooOO#OoO### ...OoO.#OO##O@o#..##oooo##OOoO#.#########o@o##oOOO#Ooo#OOOoOOO", "##Oo@oOOo#.#Oooo##Oo@oOOooo##OOOO##OOO##. #o@OOoooO#oO##OO##.#ooOOooOoO####OO. #O#o@oOooOOOO#O@@oO", ".OOOoo# .#OO X+.#O#.#OOOO#. .O#.#@%%%OOO##oooo#.##O%@oOooO..#oooO.#o@@##. ... .O%o######.###..Oo#O", "#.#####. O@o#. .#O. #O@@oOOOOooo@# #OOo@@O .OO#OOOOOo@@o@@@@OO#oooo@O#OOoo. Oo# ###OO#. #..OO# .OO", "oOO#..OoO##O@%@@oOOOO##Oo@@o###oO#OOO###OoO###OOoooO.#o@@oO##O#.#ooO.#OooooOOoOOO. #O### Ooo@@oOoOO", "o@oO..O@@o.#Oo@oooo@oOOO# .##OOO#.o@oO##OOooOooO#ooO#ooO#. .#O#... #oO#o@@%@@@@OooOOoO##OooOOooOO", "oO.O@ooo@#..#oo#Oo@@%@o#..#O%@oOooO.OooO##ooOO.#OOooO# ++#OO@oO@oOOo@oO.#Oo%%@O@%@@OOoOo@@O.###.+.oO", "O##o@@@oOOOOooOO#.###O#.O@@@@ooo@@# .Ooo#.####o@#+.OO###oo@@oooOo%@@%@Oo@oOO#####o@oO##Oo@@O #o@@oOO", "#######OOOoooOooO. .Oooo@oO##OoOOoO#OO#O#.#oOoO. #OOO@@ooOOOO#OoOo@OO@oO#. #o###o@oooOOo@@o.Oo@O#O", "#OOO#... #O..ooO##OOOOO%o####OoO.O@@oooo@oo@@OO@@#.#oooOOooooOOOooO#OoO #oo#OoO....OO#.#@%o#. OOO", "#o@OO@@oo@oO#OOOoo@oO#..##. oo##OoOOoOooo@@# .O@%@#O@o O##O.#O#.##.OO#Ooo#OO#..# .OOOO +.OOOOoO.#O", "@O#O@@@o@%@#.#OOooOoooooOoO### +#@O..OooooOOO#O#.##Oo#.OoO. .#O#O#.OO# .%@oO#o@o..o@o@@OOO#..#oooO#O", "##### .##O@oOO@@O##o@o#...#oo..###.O##OO.. .o@O#.#OO.OooOooOO###O#Oo#...Oo@o.#oooo#OooOo@oOO@oO#ooO", "#O#. .#..#o@O####ooOOO.O##ooo@@o#OooO..#OoO##OooOOoO#Oo#.OOOOo@O##OOO#. .#Oo. O%@OOOO##OOOOOO#ooOoO", "oooO#OOO#+X#o# .Oooo#O@o#OoO#OoOOOOOOO. .@@oO##.#O#.#Oo@@o@%%@OO#OO#oOOO# .OOOOoooO####.OOO..OoooO", "O@%%%oooo#.#OO.#OO +OOO@O.OooO#O#OoO#O@oO #Oo@#.#O#OOO#O@%oOO# #@@@ooo@@ooOo@o#.. +#o@@oOOOOOooooO", "OOo@@oOOoooO###..##. O@OO@@o#.#o@o#Oo@%@ +.oO#oo@%%ooO..##. #OOo@O#Oo##Ooo##### #Oo@oo@@o.#ooO", "OOOO#.O#O@o##o@o##o@##.#Ooooo###oo######O@@o@o#O@@OOOOO#...#.#o@%%o#..#O #OoooO#Oo@@o..OoOOoo#+ ##O", ".##OoO.#oo@%@o@@@@oo%%o#.OOOoo@@OO##o@@O#O%@o#o%@o#. .# #OOo@o@oO#.#OoOO@@O.O@oo@@$$%@oO#.+ #..#O#O", "oO#.#oO..o@OO#.#o@@o@@@o###..#OoO.#OOOOO##oo#OOOoo@o.#O@@o@@%%ooo..ooooo@oOO###o@@@o##ooO.#O##OoO#oO", "O.#O#o@O##OO##.#..Oo#.OOoo#####O@oO##. .###O%o.+.OooOo@oooO#O#OOOoO#OO#o%O##OOO#OO# .#O##Oo@o@@oOOO", "..#OO##oo#.#ooooOo#..#OOooO##OO#O@%@ooo@oO#oo# ++##O@@O##OoO#.O#.#.#oO#O@@##..#O## #O## .#O@ooooO#.O", "OOOOOO##OO..o@@oooO#.#OoO#OooO.+X#@@@o@ooO##.#oo..OooOO#OOo@@O.#. .OOOoO.o@O. .OoO@%@oOOooooOoO##.#O", "oOOo@ooOooO..OOooO#OoO#..Ooo@oooOO.#Oo# .OO .O@@%o..##OooO....OOoooO##..#OO@%@O#O@o#Ooooo@o##..OOooO", "OOOOo@@@o@ooO#OooO.#oO##..#OOo%%%O .#...#oO#..#Ooo#.##.OO. .O##o@oo@@OOOoo%%o.#O#. .###oO#..##OoOO", "ooO +o@o##o@oO##OOoOoooOoO#.#OooO#oo##OoooOoo#OO.#O@O....#oOo@oOOooOOoooOOooOooO..Oo##O##OOOo@@oO#OO", "##..###. +##.. . #OooooooO##O# ##OOo@ooo@@@ooo##oo@oOOo%@@@%ooO# .##. O#.#oo#.#o@oo@oOOoo@oooOoO", "#OO@o .##. #Ooo# #.#o@ooOO# X.OO#OOOOo@ooooooOOOO#Oooo@@OOoo#...OoO....#....ooOOoOooOoO. ## .#oOO", "ooooo#.O@@oOOOooO..#oOOoo@@O###.OoooooOO#.#oo@@O##OOOOooooOoO.#oOOoOoO#o@#..#OOO##OOO@oOO##O#..#.#OO", "oOoOO@@ooooo##..Oo@oOO#. O@@ooooooooOOOO#.#O#..O@@oOOOoo@oO#.. OoO##O@oOOoOOoo###OOO#OOOOOoOoo@oOOOO", "OO##o@@OOoOOOOOOOoOO#OO.. .o%@%%@oO##oOOOO# +++.oO#....##o#..oO#OO#Oo@@O#o@%@# #oOO#.OoOooo@@@oOO#O", "O#OOO. .#...Oo@@oo@@oOOoo@O##o@oOO#.####O@O##ooO#######OO##OO#oo#OOO##.OoOo@ooooO#OOO#..#OoOO@ooOO#O", "O#OO#Ooo#.#OoooO@@ooooOOoo#..## .#OO...#Ooo@%%%@O#Oo@@oo#.##OoooooOo###.OOO##Oo@oO##OOO.o%o#OOOOOo@O", "OoO###OoOOo@%oOOoO##OOOO#..O##O#OOoo#.#.##ooOOOooo@ooooO####OOOOoo@o##OOO@o.OOOo@oOoooooooOo# OoOOO", "OooOO# .##o@ooOO#OoOOOoooOOoOOOoo#Oo@@@@# . .#.##o@O ####O@o# .o@oOOo@..###O@oo@@@@@Oo# .... #OoO", "OoO@%@oooOOOOO#.#OoO#OOOOOooo##OOOoOo%%oo#.OO####. .####O#OooOOoo#..#OooO .#O#.#o@Oo@oOO#OOOO#.##OO", "#OOOOOOo##OO##..###OOOO#Ooo#.##OOooOOO##o%%%o##..OOOOOOOooo##O@%%o#Oo%oOoo#.O# ##oO#OoOooooOO@@###O", "#.###oO#..#O###. #OOOOoooO#.Oo@@O..##.#o@@OOO#OOo@@OOO##@@oO@%OO#.o@oO###O%%O..## O%@O#OoOooOOOO", "#. OOoooO#...@@oO##.#OOO##oo@@ooO####OO#.#. #@@@o.#oO#.#Oo@oO.#. .O# ++ .#OOooOOO###...## +..#OO#oO", "Oooo..Ooo@@OOo@%%@oOO##O. #ooO###OoOO#OoO#O@oo@oOOOoO#..#OO#..OO....#OoOoO..O@%%%oOOo.XX.o#O%@OoooO", "o%%@O...#OooOoOOoOo@ooOoOOooO..OOO@%@o#OooOOoOOOOOOOOo@%oO##OO..#Oo..o@%$%@oOOo@oOOooOOO###o%@OO@oOO", "@@@OO####O#...#.#..#OOOOooOOoo#.#OOo@oO#OO#..OoO##OOo%%%%O..#O#.#o@@OOoooO@oOooo# #oo@%%@@oooO##oO#O", "# .OooooO+ O#.O@@o#####oooooO#.#oOOOO@O## O@oo@oooooOO@@#OOOooo@@%oO. X ####O. .O##O@@o@%o. ..#O#O", ". #@@@@@@@oo@@Oooo@oO#.#O@o#O@@O## .#O.#ooooO.#O..#. ..o%%%@o@oO#.#. + #### ..Oooooo.#O#O%@oOOoo@O", "O##OoO#OooOOOOo###.o@@o@@oO##O@@oOOO..#OOO@%o##. .#.. .#O@%@@@ooOoooooo@oO##oO##ooO##OOOOOOoooO#O", "ooOOoo#.#. .###O##.#OOO#O. #OOOO##OooOOoOOOoO..oO###.#O#.++ .####Oo@@o@%@o@@O#OO##. .O#OoO OooO. O", "oOOO#oO. .O##OO##.O##....Oo@o.+.# O@%@oo# ####o%@oO##o@@o### .. #O ##O@%oOOO.+.o@o. .#oOOO##OOO#..O", "###. #@@OO@oOO .#o%%OOOOooO#..##..OOoo#.OoOOOOOOOOO##@@@%$%@O#OOoOoo###O##ooOo@oOooo@@o####oO### OoO", "#ooooOO@@oOoOoo#ooO#OOooOOO..##OooO#OOooooo@@o#..Oo@OooooooooO#O OOO## . .O@%@O.O@@O# +#Oo# #ooooO", "OO@%@O.#oOOoooo@@o#.###OO#Oo@@oo@@oO..OooO##OoooO#OooO######OoO#...#oOOO####OoO#O####. .OO@@@OO#O@O", "O#.. #####oooo%%o#.#OOO##Oo@@@@@@O####..#OO.##O%%oOOoO#O@OOo@@@o@@oO@@@@o#.##OO#o@oO#.Ooooo#O@@@oo@O", "%o X #OO#OOo@ooo. .oOooOO@@O#O##OO#ooo###O@oooOOOOOO#OooO#OOO.#oo@%%oooOOo@oOO#OOoO#o@@%@oOO ##.OO#O", "ooOO#OoOOoOOO. .o@oO@@O##O#OoO#.###OooooOO@@@o.++#OOOOO####..#O#OoO.OoOOOoooO##.####ooo@@O#OO#. +O", "##@@O######. .. #OO.O@@o@##O##OO#OooOo@@ooO##..#.Ooo@####OOOOOoO####O#.Oo@oO#.#O#..OOooOOO### ###OO", ". .@o.#OO# + .#OOO.oOO#Oo# ...OooOoo#.OoO#.##.#o%$%o#O@OOOo#.#OOO##O#...OO#OOOOOOO..#oo#..#O##o@oo%O", "o@O#oooOO##..OooOOooO + OO.#Ooo#........ . #OOO#...###oOOO#.##OOOO##ooO.##O@@%%OOOoO#oOO#O@%%%@o@O", "O%@oo@ooOO@%%@oOOo%@O#ooO#ooo%@Ooo##Oo..#OooO. . #oO.##.#o%%o#OOO#Ooo@OO###oO#OoooO#ooo@O#@%o#o@oO", "#o%@OOooOO@%%%@oooO##OoooOooOOO##O#.o%%o#o@ooooooooooo@oOO#o%@OO#OO#OoO..OOOO##..O@O.#OOoo@@##. OoOO", "O#OooOOOooOooooo#..##OOOOooO. .#O###O@$%oo###@%@oo%%O.####Ooo##oO##.O@o# #@o#OoO######.##.OO. #@O#.O", " OO#OOO#. .OoooO###O###Ooo.#o@@oO##OooO#oo#.... .# .OOo# .Oooo%@@oO.#OoOOo@o###oOO##..#O#ooO#oO", "#. #OOoooOo@@ooo##oO##OO.OoO##Oo@oo. .#Oo@o##Oo#..#OoOOo@#.#Oo##oo@o.#oO#Oo..Ooo@%@@oO#..#OO#OOO#O", "@OOOOOOOoo##o@oO####OoooOO#OO#OOOo##O##ooOO##OOo%%oO#O@oooo@%%@OOO#....#@@#OoO X+#@@O#.OOO##O#.OO# O", "@@@oOOO#.#O# ++ ##o@Oo@@oOOO###.#.###oo###OOoO#.O@@@%@oo@oO.#ooOo@oO..OoooO##oOOOOOOO##o@@@@@ooo##oO", "ooOOO##.####O###Oo#OO#O##o@oOooOO##O##O#OO###OoO. #ooOOoooO.+X OoOOooooo#.#ooo%%@@. ###oooooo%%OOo@O", "O# #OOOo@O##o@%@ooO##O...OOO%@O##OO####oO. .#O@@O## .##.#OO#OOoo#..##OO# #Oooo##OoOOO#...O@oOoo@o#O", "....#oooooo@ooooOOoO#oO#O##O@o@@o##OOOOOOoO@@OO##O..#oO## .o@@oOOOOoOOOO@@o#..#O#.oooooO## . .#.#.O" }; mtink-1.0.16/xpm/Arena.xpm0000644000076400001540000001551110376041214013432 0ustar jjfuse/* XPM */ static char *magick[] = { /* columns rows colors chars-per-pixel */ "92 71 3 1", " c #eb00e200cd00", ". c #f100e900d400", "X c #f700ef00dc00", /* pixels */ "X. XXX.XX XXX. .X.XXXXX.XX.. XX.....XXX.XX.....X .X.XXXXXX....XXX. XX.X.X XXX. .X.XXXX..XXXX", "XXXXX XXXX.X..XXX..XX.. .XX XX XX..X..X..XXXXX..XX.XXXX XXXXX X.XXX .XXX.X..XXX..XX.. ...X", " X... .XXX....X.X .... ...X....XXX...XXX...XX....X.XXXX.X. .XX. X.X. XXXX.. XX.X .... ...X", "...X. XX .X.XX X.......X..X ..XX.XX ..XX . ..X.... .XX XX. ...X..XX. X.X. X...... ...X", ".XXXX.XXX..X..X.X..X..... X.X.X..XX. X. ..XX...XXX...XXXX..XX. .X.XX.XXXX.X....XX.X....XXXX", " X XX.XXX...X .X.XX. ....XX.X.X ..X.XX....X...XXXXX...XXXX .XX X XXXXXX X..XXX.X.. X.. .", " X...X. XXXX....XX....X..X.XX..X.XX......... XX.... . .XXXX.X . .X..XXX.. ..XX. ..XXXX", "....X ....X...........X. X.X. .X..X. X...XX...XXXXX....XX. ..XXX XX . .X...X ........ .", "X.X.. .X X....X .....XX ...X.XXX..XX . .. XX ...XX. .XXXXX ..X... X. .X...X ...XX.X .", "..X... .............XX.XX.X. . X...... .XXX...X.. ..XX.XX ...X. .... ..X ....... XXX..XXX", "X. ..X .. ....... ........X .X.XX.X..XX ..XX.X.X.. X.X...XX .XXX....X. . ........ ........", "..X.XX. X.X.......X. ....X .X .XXXX..XX.. X... .X.XX. .XXXXX.XXX.XXX..X.XX......XX X.X...", "..X..XX.X........ XX .XXX.X... ...... X X......X..XX ..XXXXX .....X.... .......XX....XX..", " .X..X .XX.......XXXXX.. .XXXXX........XX X...X.X...XXX.X..X. . .X..X...XXX.X.....XXXX.....", "..X. X....X.........XXX.X.X..XXXXX.XXXXXXX.XX.XX ..X.X.XXX........X... X .XX.....X..XXXX...X", " X .XX. ....... X..X XX..X... .XX. .. ..X.X XX.. X X.X..X.X..X... .XX. .......... X..X..XX", "XXX..X..X .X .....XX. .X X XXXXXX..X X.XXX.X.X.X...XX..... ....X.X..X.XX .X . XXX.. .X...X", "X.X.XXX XXXX..XXX... ...XXX.XX.X.. .XXX... ..X.XX.X.XX.....XX.XXX..XXX XXXX..XXX......X...X", ".. .... .XXX .XX ...X......X .. XXX.. ..X..XXXXX...X.. .. ......X. .XX .XX. .........", " .... X. .XX .XX..XXXX.X....X.X.X. XXX.X....... ...X.XX...... . X X. X..XX.. XXX..X.XX..X..", " X....XXXX.....XX..X........X.XXXX..X. .XXX.... ......X...X..X.X X .. X.XXX....X...X.X......", "X. .XXX X.. .XX. .XXXX.X .. X... ....X...X.X..X....XX....X..XX.X .XXX .. . X. .XXXXX.. ", "X...XXX X....XX ...XXX.X. .X.XX.... ... . ..XXXXX..... .......X...XXX X...XXX. .X.XXXXX.X", "..XXXX X .. XX . ....XXX X X...X.X. .X... . ...X. .... .. .... .XXXX X .X XX ...X.X...", "XX.XX..X.X. . X.....XXXXX..X ......XX.XXXX.XX. X.XX..... XX..X.XXXX.XX.X. . .XX...XXXX...", ".X.X..XXXXX.X ........X.X...X XX....X....XX.X.XX..XXX.X..X.. ...X..X.X.XXX.X .X X. ....X...", "X. XX.. XX..X....X ..XX.X...XXX. .. X......XX..XX ..... .XX. ..X....X.X XX. X..X.....XX.....", "....X.X.X.. XX.. ...XX....X.XXX X. .....XX.......X....XX.XXX. ....XX X.X. .XX. .. ..XX....", "...X. .X....XX..XX.....X...X.X.X.XX ......X .....XXX.XXXX..XXX.....X. X .. ..X. XX........XX", " ..X. X. .XX..X.XX...XXX.X.X.X.X....X....XX ....X.....XXXX...X. ..X. .X .XXX X.XXXXXXXX...X", ".X.X. .X .XX. X. ....XXX.X.X.X.XX.. X....XX........XX..X.....XXX.X.X...XX.XXX.X. ...XX.X.X", "..... .X...XXX. .X.XX.X....X....X...XXXXX...XXX.X..XX..XX. XXX..X.........XX.XX .XXXXX.XX...", "...XXX.. .XX..XX XXXX... X..X X..X. X.. .XX.. .XX..X..XX.X.XX. ...X.... X...XX .XXX.. .XX", "X.....XXX.XX.XXX. .X.. ..X .. .... ... X.. .......X.....X.X..XX.....XX.XXXXXX .X.. .. ", "X.. . .X. .... ........X.. .... .. X. .X.X....XX...... ........X... ..X. ...X X ..........", ".. ...X.XX....X.....XX.X..XX...X..XX.X..X..XXXXXX..X...... .XX... ....XXXX.X..X..X..XX..X.", "............. .X.....XX..XXXXX.X.....XXX..X.XX.XXX .XX ..XX..X............. .X.....XX..X.", "XX.X ...XXXX.XXX. XX... .X...XX.X..X.XX . .X.X. .XX..X.. ..... .X. ...XXXXXXXX..XX... X...", "XX.XX.....XX..XXX..XX... X ...XX.......... ..X. ......... . . X.X.XX......XX..XX..XX.......X", " ...XX.XX..XXXX.X....... .XXXXX... .XXX.... .X.. .....XX X.. XX...XXX.XX..XXXX.X X...X .XX", ".. X. ... .XX....XX.... XXXXX.... X XXX...XX.XXX.X X.X.XX.. X.. ..X ... XXXX..XX. ....X", "XX.......XXXXXXX ........XX.X...X.X.X..X....X...XXXXX.......XX.XXX..X..X.XXXX.XX .........X.", ".XX ... .XXX .X..XX.XX. ....X.X.. .X.X.XXXXXX.. .XX.......XX.XX.X. .....XXX. X.XX..XX...X.", ".X.. ....XX.. .X..X......XXX.X.... ..... ..X. XX....... XX... .X.. ....XXX X. XX.....XXX", ". .X.......X. .X.. ....X.X.XX..X...........XXXXXXXX.....X..X..... .X. .....X...X. X...X..XX", ". .X. ...X.XXX.XX.... XX XXX.X.X .XX...X.. ....XXX....X.X....XX.. XX .....XXX.XX. .. .X.XXX", "X.XX..XX.X...XX.XX.XX..XXXXXX...XXXX... XX.....XX......X.. ....X.XXX.XX..X..X..XX.X...X.XXX", ". X. .X.XX.. .X...XXXX...XX.. ...XXX.XXX.. ..XX.XXX...XX X..X..X..X. .X.XX. .X. XXXX..XXX.", "X. .. .. . .....XXXX.XX. .XXX X.XX.XX.XX.XX..XX.... .X .....X... .. .. . ..XX.XXXXXX.. .", ".X .....X....X.X .X..X.X...X...XXX...X..XX..X. .X. ....X.XXXX..... .....X....X.. .X. ..XX.X.", "...X..... ... . .X. ....XXX ..X.. .X..X..X.XX.. .X.. ....XX............ . ... .X. .....XX", "........X X.X.. ..X.XX.. ... X..X..X.XXX. XX.XX....X... .. .XX.XX..X.X....X.X . ..XXXX. ..XX", "XXX.X.X...X . .....XXX..X.X.X...X..XXXXX..XX..X..XX. .. . ..XX.XXXXX........X .X. .XXXX.. . ", "XX.XXX . .........XX ..XXX.X XXX..XX..X..XX...X..X. XX.X.......XX..X........ ....XX. .XXXXX", "X.X.X....X.X.X.X.X.X. XX.XXX .XX.X....X ..XX..XX.XX..X.XX......X..XXX. ...XXX.X.X.X. .XXXX.", "....XXX .. X.X..XX.XXXX .XXX X. ...X...X...XX .X XX. X.X......XX...XX.... .XX. XX.XX.X ..XX", ". X . X..XXXX..X X.. ...XXX.............XX...XX..X..X XX. .XX.. X .. X..XXXX..X.XX. . XXX", "X.XX. ..X .........X.. ..X...X XXX. ..X..XX..X.X.XX..... .X..XX..X. ..X...... . X X .X.X.", "XXXXX..XX.... . .X..X.X.X..XX..XX.X.......X . .X..X....X. XX..X.XXXX..XX .. .X. X...X.XXX..", ".XX.XX.XX.X. .X. . ...XX.X..... ...X..XX......X. .. ........ .XXX.XX.XX.....X. . . .XXX.", "XX..XX..XXXX..XX.XX..XX..X ....X.. .XX...XXXX...X.... ....X .XX..XX.XX..XXXX.XXX.XX..XX.....", " ....XX..X...X...XX... ....XX .....XXXX.XXXX...XXXX.X.......XXXX....XX...X.......XX.... ...X", "X..X..XX X.......XX.X......XXX ..X.XXXXXXXX..XXX.XX..XX. ... .X....XXX X. .X.X.XX.X.X....X", "XXX. ....X..XX.XX.X ..XX. X X..X .XXXX.X. .XXX. X... XX....XXXXXXXX. X..X. XX.XXXX X XX. ..", "XX.XXX....XXXX..X...XX...X.X XXX....XX..X.X. ..X ....XXX.......XXX.XX.....XXXX. X X XXX XX..", ".X.XX.XXXXX....XX..XXX. .X.X.X ..XX.X.X. ..XXX...XXXXXXX.X.XXX.....XX.XXXXX.. XXXX.XXXX.....", ".X.....XXX.X..X... ...... .. X..XXX.. XXX...XX..XX...XXXX...XX....... .XXX.X ...X. X . ..XX", ".X... XX. .X.X .X. X... X.XXX.X X.X. .X.X.. .X.X.XX...XX.. ..X...XX...XX. X.X. X ..... X..X", ".X.XX.XXX ...X..XXX...X.. XX.XX...XX. ... X..X.X..X.X.X.XX.......XXX..XXX. X....X.X.X.X.X..X", " ..XX.X.X..X.X.XX.X.X X....X.XX. .XX......XX...X.X.XX..XXX...... ..XX.XX...X..XXX.X . .... X", " .X......XX........ XX.....X.X...XXX.X..... .XXXX.......X.XXXX. .X .X. .XX.. X.XX ..XX.X" }; mtink-1.0.16/xpm/Greenslate.xpm0000644000076400001540000004135210376041214014477 0ustar jjfuse/* XPM */ static char *magick[] = { /* columns rows colors chars-per-pixel */ "128 128 6 1", " c #6666b6b66666", ". c #7777b9b97777", "X c #22225c5c2222", "o c #44449c9c4444", "O c #5555adad5555", "+ c #333381813333", /* pixels */ "ooo OoooOOO oOoOooOOOOoOOooo OOO O ooooOOOoOoOOo+OoooooOoO OOOOOOOOooOOOoOOO OoOOOoOOOOOOOOOOOOoo+ooOOOoOoOOOOOoOoO OooooOoOoOO", "OOoOoOO OOOo+oooooOOOOOOooOO Ooo oo+oOoOOoOo++++OOOOoO OOOOoOOoooOOOooO+OOOOOooOOOO OoooO OOOoOOoOoOoooOoOoOooOoOO O OoOOOOOOOO", "ooOOOO OOOoooooOoO O oooO OOOOOoO+ooOOooo+++ooooOOOoOOOOOOOOo+OOooo+oooOOOOoOoOOOoOOoOOOOOOooOoooOo OOOooooooOoOO Oo+OOOooOOO", "oOOOoOoOOOoOOOOoOoOOOOoOOo.OOOOOOOo+OoOoooo+oooOOOoooOOOOOOooo+ooOooOoO OOOoooOOOOooOOooOOOOoOOOOoOoOoooOoooOOOOOO.OOooo Ooo Ooo", "ooO+O o ooO O oOoOO OOO O OOOOo OO+ooooOooooOoOooooOoO OOooooooOOooOoO OO oOoOo OooOOOooOOOOoOO OOOoooOOO+oOOOOO O OoOOOOoOOOoOO", "OOOO OOo+ooOoOOOOO OOOoOooooOooOoOoOOOOOOoOOO OooO OOooOooOOOoooooOoOooooO OOoooOoOo+oooOOoooO+o+O+OoOooooOOOOoOooO+Ooo+oOoOoo", "OOoooOoo+OOOO OOO OoOoo+ooOOOOooooOoOoOOOO OOooOOO oooO +oOooO+OoOOoOoooo OOOOo O+oo+OoOoOoOoO+ooOooOOOooOOOOoooo +oooooOOO Oo", "OOoOOOoO OOOOoOoOO OoOooooooO oOoooooOoOOOoOOOooOOOOoOooOoOooOOOooOOoOoooOOOoOooOoooOoooOOOoO+Ooo+oo++OOoOOoOOooOoO OOo ooO Ooo", " OOOoOoOOoO OOoOo OoOoOo+OOO OoOooooOooO OO OoOoOOOOOOOOOOo+ O OoOooOOOooOOoOOooOoooo++OoOOOoooooooooOOOOOOOOOoooOOOOoOOOoOO ooO", "OOOOOOOOoOooOOoooOo+ooo+OOOOoOOoOoOOoooo OOoooOOOOOOOOOooooOO oooOooooooOOO OOooOOoOooOoOOOo+oooooooOOoOOooOOOO OOooooO+o+ oOOOo", "O ooOOOOooOOooooO OoooooOoo+OO+OooooOoOOOOOOooOOO OOOO+oOOoOOOO+OoOOOOoOO o ooOOoO oOo oOo+Oo+ooOOOOOOoOOOOooOOOOOoOO++ooOooOoO", "OOoooOoOooOO oOOOO+oooOoOoOoOOOooO+oooOOOOoOoO OOoooOOooooooOO+ooOoo oO Ooo oOoO+Oooooooooo+oooooOoooOOO OoOooOOoOoOOO+OOOooOoOO", "OOooOooOOOOOoOOOOO+oOo+ooOOoOoooooOOooOoOOooO oOOoOoO++oooOooooOOOOOoOOOO OoOooOoOooooOoo+oOoooOOOOOOOOOoooOO oOOoOO+oOO OOOOoo", "OoooOooooooOOoOOOoooOOo OOoooOoooOoo+ooooOoO OooOOoooO+oooOooooooooo+Ooo+oOoooOooooOoOooooooooOoOooooOoooooOoOoOOoooooOOOOOOOO O", "oOoOo+OOOOO ooOOOOoOOo O oooOOoOoOo+oooooO OOoOOoooOOoOoOOooOo+o+o+oOoooOOoOOO+ooo oOoooOOooOoOoOooOOoo+oOOOoooooOoo OoOOOOOO O", "ooOOOoOoooOOO OOOoooOoOoooOOooOoOoooOoO oOOOO+oOOooooo+++oo+o+ooooOOoooOOOOoooooOoooOoooo+oOOOoo+o+ooooooOooOOOOOO OO OOOOO O ", "oOOO+oOoOo OOOO oOOoOoOoooOooOoOOoooOO ooOOooooOoo+O++Xo+Ooooo+o+OOOoOOOOO+O++oOooOoOooooOoOOOOOo+oOo+oo+ooo OOOO OOOOOOOOO OO", "OoooOOooOOOOOOOOoOOOOoOoo+oO+O OOOoOOoOoo O OOoOOOoooo+oOoOO+ooo+ooooOOOoo+OooOoOoooOOo+OooO ooO+oooOoOO+o O OoOooOOooo+oOOOOOoO", "ooOOoO OOo OOoOOo oOoOoOooooO OOO+Ooo+oOOO ooOo OooooooOooOoooo+o+ooOoOooooOooOoooooooooOOOOOooooooooooO+oOO OOOoOOooOooo OOOoo", "OOOOoOooooOOOO O Ooo OooOoOO Oo++oOOoOoOooOo OOoooOO++ooo+OoooOOOooOOooo+oOooOOooOoOoOooOooOoO+oooooOoOooOO oOoOoooOo+ooOoOoOooo", "OOO oOoooooooOO oOoOOooOoO OOooO+oOooOOOOOOoOoOOOooooooooooOooOoooO o+oooOooOOooOooooooOoOOoOoooooOOO+O+ooOOOOOooOoooooOOOooOooO", "Ooooo+oooOOOOOooooo+oo+o+ooOoooooooOooOoOOOOoooooooo++oooooOoooooOOoOoooO OOooOOoOOOo OoOooooo+ooOoOooooOOoOOoOooOoOoOoOooOoOOOo", "oOOO++oooOOOO oooOoooo+oooOoOOoo+OoOOoooOoOoo Oooooo++oO+ooooooo+Ooo+oOO OooooOooOOOOOOoo+oo+oooOOooooOoOOOoOooooooO OO+OoooOoo", "OoOo+ooOO OOO +oOoooooo+oOooooo+o+ooOo oooooOo+oOooo++oOo+oOoooooooooOoOOOoOOOOOoOOooooooooooOOoOooooooo oOooooo+oOOOooooO OOOOo", "O OooooOOOOOOOoOoO+ooo++OOooOOooooOoOOoOoOOooooOo+o+oooO+o+ooooooOoOoOOo OoOOoOOoOooooo+OOooO+oooo+oOooOOOoooOooo oOoOoooOOoOooO", "oo+oo+OoOOOooooooOoooOooOOoOoOoo++OOOoOoOOooOooO+o+oooooooOoOooo++ooooo oOOo+oOOoOoOOooooOoOoOOOOoOoOooOOOoOOOOOOoO+oO++oOooooOo", "OO+oo+OO oooooOooOOoooOoOooOo++ooOOoooOooo+OOOOoooOooOooOOooooo+ooo++OO Oo+ooOooOoOooooooooOoOOoOooOoooooooooOo oooOOoooOooo+o+", "OO+ooOo O ooOoOOoOOOOooOOooo+ooooO OOOOooo+OOOo+ooOoooooOooooOooooooOOOOoooOOOOOOoOoooOoooOOoOOoo+OOoOOOOOOOoOoO+OooOO+oOooo+oOO", "OooOOoO OOooOOoOoO O OooOooo+o+oOOOOOOooooOOOooooOooooOooO+ooooo+OooOoOoooooOo OOOo+oooooOoOOOooOOo+OoOOOOoOooOooOooOooOo+o+oooo", "ooOoOO OooooooOOOooOo+Oo OoOOOO OOOOOo+oOOoOOooOOoooooOooooooOooooOOoOoOOOOOoOoOoOOOOOoOoO OoooooooOOooOOoOoOOOOOOOOOoooooOOOOOo", "OOooooOoOOOoOOoOoXoooooOoOoOo ooOOo+oOoo OooOOOOoOO OoOOo+OOooOooOOoo OOoOOOoOOOOoOooOOOO +OOOoooOOOOoOOoOoOOOOOOOoooOoOOOOOOO", "oOOO OOOooOooOOooooOooOooOOo OOOooOOoO OoO OooooOoO OooOo++oOOooo+oOoO OOOOOooOO OOOooooOooOooooooOOoOoOO oOOOOOOOoOooOoOoOOOOOO", "oOOOOoOoOOoooOOoo+oO+ooOOOoO oOOoOOOOoOoOOOoooOOooOoooooo++OoOoo++OOo OOOooOoOo O OoooOoOooOooooooOoOOOOOoOoOOOOOooOo+ooO OOOOoO", "OOOOOOO OOoOOO+oo+oOOoOooOOooooooOOOoOOOOOOOoOOOOOoooo+o++OoOooo+oOOOO+O+OOoOo OO oOoooOoOooOOooOoOOoOoOOOooOooOooOooo O OOo ooO", "OOOOOoOO OooOooooooOoOoooOoooooOOOOoOOoOOOOOOOOOoooOo++ooOoooo++ooOoO+ooOoOoo+O OOo+ooOOOooOOooOOOoOOO O+OooOOOoooOooOOoooOOoO ", "oOOOooOOoO+OOO+oOOOooOOO OoOoOOOOOooooOooooOooOoooO++oOooo++o+o+oooooOOooOOO+O OOo++o+OOoooO OOooooOOo ooOOooOoo+OOOooOOOOoo+ooO", "OoOOOooooOoOo+OooooOOOOOooooooOOOOoooOoooOoOoooooOo+ooooooo+oo+oooooooooOOOoOO OOoooooOOoOooOOoooOOOOOOOOoO+oOo+OooooOOOoooooOOo", "oOOOooOoOOo+ooOOOoOooOOOOoOOoOOOOooOooOoOO oOOooOOooOooooo+Oo+OOoOo o OoOoOOOOoo oOooooooooooo+OoOOoOOOoOOOOOoOOoOOOOooOoOo Ooo", "oooooooOOOo+o+oOoooOOOooooOOOO oOoOOoOoOO ooOooooOooOoooooooooooOOOOOOOOoOOOOoO oOoOOoOOoOooooo+ooOOOOo+OOOoOOO oOooOOoOoOO oOOO", "ooOOOOO oooOOOOOooOoOoO oo OOOooOOooo+OOOoooOoOoOooOoooOOoooOoOOOOooOoooOo OoOOOO oo+oOOooo+ooooOOOoooOOOoOOooOoooOO OooOooOoooO", "oO oOOOoOoooOOOooOOoooOoOo ooOoOoooo+oOoOOooooOOooooooOoOoOOOoO ooooOoOOoOooOOoOOOO+ooOooooooo+OOOooooooO OoOOOooOOoOooooOoooOOo", "OOooOoOOoOO OooO OooOOOOooOOOOoOoOo+OoOooOooOoOo+OOOoooOoooooooooOOOOOooOOOO ooOO+O+oOoOO+OoOOOOoooOoOOOOoOoo+ooooooOOoooOoOoOo", "OoOOoOoOoOOOooo OOoOo oooOOooOOOOoo++oOO +ooOo+O o+OoOOoooo+oooooOOooooO OoOOOOOooooOooooOOO OOOoooooOoOooOoo+oOOoOOOoooOOoOooO", "OOooO OooO ooO OooooOoOooOOOOoooO+ooOoOoOO++OooOOOooOOoO+oooooOoOOoOoOOOOOOO O+oooOOoooooOooOooooOO OOO OOoOooo+OOooOOOooOoOoo o", "oooOoOoOoOOOoOOooOoOO+OOoOOooOooooooo+OOOo+ooooOOo+OOOoOooooOoo+OoOoOoOOOOO OoOoOoooOOooOOOoooooOO oOO ooOo+o+oo+oOOOOOOoOoOooo", " OoO OOOoooOo+oOOOo+ooOoooOOOooOoOOOoOooOOo+oOoOOOoOOoooOo+OooO+ OOooOooOoOooooooOoooo+oooOOOOOOOooo+oOoooooo++oooo Oooo+ooooooO", "OO OOooooo+oooOOOoooooooOoOOOoOOOOOOoOooO+OoOoOOoOooooOooOooOooOoOoooOoOooOOoo+OooO+ooooOOO OOOooOOOOOoOoo++++ooo OoooOoOo+OOO", "OoOooOOoOOOOOoOOOo+oOoOoOO OoOOOO O OoOoOOooOoOoO OOoOOOOOoOooooOOooOooOOOooooo+OooooooOoooO+Oo+++oOo ooo++++oOoOo oOOoOOOOOOooO", "Oooo OoooOOoOoO ooOOoooOOOoo OOOOOOoOoOoOOOoOoOo OOoOOOooooooooOoOo+ooO+ooo+oooooo+o++oOoOOoOO+ooOoOOOoooooooooooOO ooooOoooOOoo", "o OOoOOoOooOOoOoooo+ooOooOOOooOoOOooOooO+ooOooOO OoooooOooooooooOOoOOOooOO+oOooooOOo O oOOOoOo+oOoOoOoooO+ooOOoOoo OoOo+OOOoOooO", "OOOOO O+ooOOoooo+oooooOoO OooOOO+oo +oo+OOoOOOO Oo+oo+oo+oOoOOOOOoOOOOoOoOoOOOoOoOOOOOOoOOOooOoOOOoOoo+ooooooOoooOOoooooOooOoooO", "OOOOoooOOOOooOooOoOoOooOOo+OOoOooOoooOoooooooo ooOooOooooooooOooOOOOOoooOoooOOooOooOoooO oo+OOooOOoo+OooooOo ooOOoOoOoOoOoOoOOOo", "OOOoOOoooOO+ooooooOooooOooOooOooooOOooo+O+ooOoOooO+oo+oooOOoOoO oOOOo+ooo+OOoooOooOooOOOOoooO+OoOooOooo+ooooOOoOooOOooooOOOOOOOo", "OooOoOoOOOo+ooOOooOOooooOoOOOOOoooooOo+OoOoOOOOooOOoOOOOoooOOOOoOooooooooo oooO+o+OoOOoo+ooooooOoooooOoOooooOoOoOOooOOOooooooooo", "OOOoO OOOOooOoooo+OoooOOOooOOoOooOO +oOOOoO OOO+ ooOOOOOOOoOOo +ooOo+ooOoOooOo+o+ooOooo+oo+o+oOOOoOooOoooooO oOoOOOoOOooOoOoooo", "OOOoOOOoOOoooooO+oooooOOOoooooooOOOOoOOooOOOoOoOOo+OOOOoOooOOOOoooOOoOOOOOoo oOoooOOoO+oOOooooOOoOoooooOooOOOoo+OOoOOoooO ooOOoo", "OOoOoooooOoooOoooooooooooooOoooOOOOOoOooooOo OOoOOOOOOOoooooOooOoOooOoOOOoOOOoooooOoOOOOooooooOoOooooooooo OOO+OooO OoO OOoOOooO", "OOoOO OOOOo+OoOo ooO oOOOoooOOOOOOOOooOOoOoOoO+oooOooooooOOOO ooooOOoOoooooOoO+oOoOOoOoooo+oooOoOooOOoOooooOOOOOOOOoOOOoOooOOOOO", "OO OoOo oooooOOooOOoOoOoooOOOOOOOO+oOoooooOooooO oooOoOoOOOOOo+OOoooOo+oOOOo+ooooOOoooooooooOOOOOoOo+oooooooooOooOOooooooOOooOo", "OO ooooOoooOooo+ooooooOOooOOOOoOooo OoooOOOooOO ooooooooOooOooOoOooo+oOOoo++oooOOO+o+oooo+oOoOooooooooOooOOOOoO+oOOoOOOOOOOOoO ", " OOOOoOOoooOoo+oOooOoO oOOoOOOoOoooOoooOOOOoooOOooooooOoOoooOooo+oo+OoOOo+ooOo+Ooo+oooooooOo ooOooOooOOOOoOOOOOooOOO OoOOOoO ", "o OooooooooOooooOO+ooOOooOoOoooO+ooOoooooooooOOOooooo o OOooOoooooOooooooooooooOOooOOoOOooOoOoooooOoOOooo+OoOoooOOOoOOoooOoOO OO", "O oooooOoooooooOOoooooOOOOooOooo+oOOoooOo+oooOoO+++oO OOOOooo++oo+oOoOooooOooOoOOOO ooOOOooOOoOOOOOoOooo++OoOoOOO+ooOoooOOOOOOOo", " ooOoOOoooOoooooOooOoOO+O+oooOOooOOo+O+ooOo O+oooOOOOooO+oooooo+O OOoOOOOooOOOooOoooOOo+OOOoOooOOOOoo+ooo ooooooO OOoO OOooOOO", "O OOoOoooOOoO+ooooOoOooooO+ooOOooOOoooooo+oOoooOo+OOOOoOooo+o+ooo oOoOO OooOOoOoOOOOOOOooOOooOOOoOoO+ooooOoOoooOOOOOooOOOOooOOOO", "oo+OooooO+oo+o+Oooo+++ooOOooOoooo++oo+o++oooOooo+oOOOooooo+o+oOoOoOoOOoo+oOOoo+OOOo+OOoooOoOOOooOOooooOoOooOoOOOOOoooOOOoOoOOO o", "OOOOooOo++o++oOooOo+ooOOOoooo+OOoooooOo+OooOOOo+oooOoooo++o++OOOOoOoooOoooo+o+oOOoooo+oooOOOOOooOOooo+oO++OOooo oooOOOOoOoOOOOoo", "OOOoo++o++++++o+ooo+OoOooo+ooOoO+OOOOo+o+ooOOOoooOoo+o++oo+OooOooOoOoOoOoOOoOOO ooOooooO+oOOOOoOOoooOOOo+oOOoo oOOoOoOoOOooO OO", "OOOooo+oo++oo+++oo++oOoooooooooOOOooOooooOOOo++OoOoOooo+o+oO+ooOoOOoooOOOOoOOOOOOoOooOoooOOOO+oOOOOooOooooOoOOOoooOOOOOoO OO OOO", "OO+o++Oo+OooooooOoooOooooOoOOooOooooo+o+oOoOooOooooOooooOo+OooOOooooOOOOoooooooo+oooOOoOOOoO+oOOoo+OooooOOoOOOOoOoOOOooooOooOOOO", "OooO+ooOoo+oOOoOOOoOOOooo oOOOOO+oOoooooOoO+ooo+ooooooooooOOOooOOOOo OOOOo+ooooOoOOOOoOOOoOoooOOooOOOoooOoO OOOOooOoooOoOOoOO OO", "ooooooOoooOOooOooOoOooo OOOoOOOo+ooOOo+oOOooOoooOOooooooo+ OOOOoOOoOOO++oo+ooOoOOOOOOOOOOOoOoooOooOoooOooOOOoOooOoOO OoOOOoOOOoo", "oOo+ooOooOooOoOoOoooooOOOOOOOOo+ooOoo+oOoooOOooOooo+ooo+ooOOoOOoOoo OOooo++oOoOOooOOOoOOOOooOOoOoooooooOOOOooooOoO oOOOooOoOOOo", "oOooOoooOO+oooooooooOO OOOOoooOooO+ooOoOooO++o+ooooooO+oOoOoOOoOOoOooo+o+oOOOO oOOoOoO+oooooOOoOoooOoOOoOOooOooOOoooOoooooOOOO+O", "ooo+o+OOoOoO+ooooooOOOOoOOoooo+oooooOOoooo++oo+ooooOoooOoooOOOOOoOOoOo+ooOOoOOooooOOoooooOooOOoOoOOOOoO+OoOOo+O oOooo+OooOOOOooO", "Oo+O+OoOOoOooOOooOooOOOOOoOo OOo+oooOOo+OoooOooOOOoO+oOooO oOoo+OoOoOo+oooOOOoooOoOoo+oOO+oooOoo+oOoooOo +ooO O+++ooooooo ooooO", "OoooooOoOOOOOo+oooOOoOOoOoOOooo+oOOoOo++o++oooooOOoOoO+ooOOOOO+ooOoooo+ooOOO OOoOOOooooOoO+oOOo+ooOo++ooOOOOoOOooo+ooooo o+ooOO", "OooooOOOoO+o+ooOoOoooOO OOooo+ooOooOooooOOOoooOOOooooOOoOOoOOOOoOoOooOoooooOOooOOoOoooOOooOOoOoo+oOoooooOOOoOooO+oOOOoOOO OOOoOO", "oooOo oOoOoo+OoOooooO O OOooo+OoooOOooOoOOooooOOOOoOOOOOO OOOOOoOooooOoOoOOOOooOO O+O OoOOoOoooooooooO OOOOOOoOooo OoOOO OOoOoo ", "O+oO OooOoOoOOOOooo OOOoooO+ooooooooOoooOooooOOOooOOo oo ooOOooooooOoOoOooOOOoOOO+ooooooOoo+ooOoooOOOO OooooOOOoOOOOO O OoOoOOo", "ooo ooO+ooooOOOOooOO ooooOoooooOooOO+OooOOooOoOoOOOoO OOooO oO+Oo+O+OOOOooOOOooOOooo OOoOoooooooooOO ooOo o OOOOOOOoO OOOoOoOO", "Oo oO oOoooOOOoo+oOOOoOOOO+oooOOoOooOoOooOoOOOOOoOOoOoooo+ oooo+oOOOOOoo+OOOOoOOOO OOOoO +OOOOOoOoOooooo+OO oOOoOOoOo OOO+oooOO", "OOOOOOooooOoOOoo+o ooO oooOooOOooOoOOOOOOooOOoOOOOoOooo+ooO+oooOOOoOo+ooo OooOOOOOOOOO OOoOooooOOoOOoooOO ooOOooOOOo ooooOOoOo", "OOoOOOooooO oOooooOOoOOO+oOooOO ooOOOoo+OoooOOOoO oooOoooo O+ooo O+oO oOOOOOoOOOO OoOoOOooooo+oooooOOOOoOOOOOoOooOoooOO OoOOoOoO", "OOO oOooOOOoOooooO OOOO+ooOoOO OoOoOOoo+oooOoOOOOOooOooOoOOoOoOOOOOO oOOOOOOOOOo ooOOoooo+++Oo+oOoOOoOOO OooOOOOooOoOOooOoOoOo", " OOOoo+OOoOoOOOoooooo+oOooO+oooooOooOoOOo O OoOOooOoOoooOooOOOO oOoOOOOOOOOoOOOOOOOoOooOooOoooOoOoOO OOOOoOOOOOOOOo OOOOOOOOOO", "OooOoooo OO+OOOoOoOOooOooooooooO+Oo+oOOooOOOOOooOOoOOOoooOoo OOOOooO OOO OOOOOOOOOoOoooOOoOoo+oOOOoOOO oOo+OOO OOOOO OOOooOooO", "oOoooooOoOoOOoOOOooooo+ooOOooO OOooOOOoOOOOOOoOo OoooOOooOO OoOOOoO oO OOOoOoOooOoooOOoO++oooo OOOO oOOOoOOOOOOoOOOoOOOOOOOooO", "oOo oOOoOOoOOoooo++OoOoOOOooOOoOoOOoOoOOoOooOoOOOooooOooOO OOoOOOO OooOOOOOoOOooOOoOOooo+ooOoOOOoOOOoOoOOO O oOO oOOOOOOOoOOO", "OO O oOoOOOo+oOoooooooOOooOoOooooooO+o OooOOoOoOOOoOoOO oOOOOo oOOOOOO oOooooooOOOoOOoooo+OOoOoOOOooOOOO OOOoO OOOOOooOOoOOooOOO", "OOOOOOooOOooooOo++ooOOooOOOOoooOooooOOooOoooOOO oooOOO OOOOOoOOoOOOOO OOooO oo OOoOOooO+ooOOoOOOooOOO O OoO oOOOOOOOOOooOoOOOoOO", "OOOoooooOoOOoOoooooooOoOOOoOoOOooOOooOoOooOOoOooooOOOoOOoO O OOOoOOOOOooOoOooo OoOoooOoooOOOoOoooOOO OOoOO O OO oOOOOOO OOO OOOO", "OOoooooOOOooOOoo+oOOOOOOOoOOooooOOooOooooOOoOOoO+OOOOoOoOO O oOoOOOOOOOOOoOOOOOOOOoooOoOooOooooooOO OOoO OOOO OOOO OooOOOOOOOoO", "OoooOOOooOoOooo+ooooOOOooOOOooOOOOoO+OOoOoOOOoO+OooOooOOoOOO+oOoOOOoooOOoOOOoOOOOOoO OOoooOOO O OOOO OOoOOOOOO+oooOOoOOoOOO OoOO", "Oooo OOOOOoo+++ooOoOOOoooOOOooOOo+oOoooOooOoO ooooooOOooOOoooOOOOOooOOOoOOO oOoOOOOOOOoooOOOOOOOO oOOOooOoOOoOoooOooooOO OooOo", "+oO OOO+oo++ooOoOOOoOOooOOoooOOo+oOooOOOoOOOOOoOOOoOOOoOOOOOOoOOOOOOOOoOOO OoOOOO OOoOooooO oOOOOo OoOOO oOOOOOooO ooOo oOoooOo", "OOOOOOo+oOoooOoooOOOOOooOooooOO+ooOOoOOoO+OOOOOOOoOOOOOOOOOOOOOOOOOOoOOOoOOoOOOO oO OOoOO OOOOOOOOo O OoOOOOoOoOoOoOOOOOoOoo++", "OO OooooOOoOOoooOOOOOooOoOOo OooooOooooooOOOOooooooOOOoOOooOOOOOO OOooO OOoOo O OOoOooOoOoO oOoOOOooooOoooOOo OOO OOoOOOOOooOOOO", " OOOo+ooO O ooOOOOO oOooOoOOOo++O+oooooOOOOOoOO+++OOOOoOOOOOOo O OOoOoOooOOOO OOOOOooOoO+ OOo OOoOoooOooOO oOOO OOOOOOooOO OO", "oOOoooOOOOo+ooOOOOOoO+oOooo+o+oo+OoOoooooooOoooOOoOOoOoooOoOOoOOOoooooO OOO OOOOoO++OOoooO OOOOOooooooOOOOO oOOO OOOOooOoOoOO oO", "OOoOooo OOooOOOO O +ooOOOooo+o+OOoOooOOoOoooOoooOoOooOOoOOoOOOOOoooo O O O. OooOoOOoooOO OOO OOOoOOOOoOoOO OOOOOOOoooOOOOO OO", "OooooOOoooOO o oOoOoOOOOoOOooooOOoOoOoOoOOOOO ooOoOooOoOOoOO OoOOooOOOOoOoO+ooOoOoOoOOooOoOOooOOOOOOOoOOO OOO OoooOoOOoo OoO", "oooOOoOoo oOOOo+OOoooOO OOOOoooOOoooOOooOOoOOOoooOooOOOOOOOOOooOooOOO ooOoooOO+ooooooOooOoOoO OOoooOoOo OOoOoOOooooOooOOoOOOoO", "OoOooOoOoO OOOoOOOOoOOOoOOoo+OoooOOOoOOOOoOOO ooOooOOOOOOOOoOooOoooOOoOoOOOoooOooOoOOooooOooOOooooOOooOooOOO O oOooooOOO ooOooO", "ooOOOOoOo OOOOoOOoooOOOOOoo+ooooOoOOOOOoOoO OOooooO OOOOOoOOoOOooOOoooO+OoooOO+oOOOooo+ooOoOOoooOOOooooO O OOO OOOOOo oOooOOoOO", "oOoooOoOOo OoOooOooOOOOO+OoooOOOOOOOOoOoO OOOo+oooO ooooOO O oOO oo OOOOOO oO OoOOooOoOOOOoOO oOOoOoo OO OOOo oooOooo+oOOOoOOOOO", "oooOO oOoO oOOoOoooOooooOOo+oooOoO OOoOOOOooOoOoOOOo+O oO oOOOOOoOOOOOO Oo OoOOOoOoooOOo OOOOOOoOo OO OOO OOOOoo++O OoOOoOOo", "OOOo OooOOo oOoooO OoooOooooOOOOoo oo oo OoO oooo o+oOOOOoOoOOoOOOoOoOOOO+o OOOoOOoOOOOooOoooOoOOOoOOoOOOoOOOoooOo+ooOoooOooO O", "ooOOOOOOO OoooOOOOoOooOoooOoOooo OOOOOO OO OOoooOOoooOOoOoOOoOOOOOoooOOoooOOOOOOOoOOOOOOooOOOo ooOoOO OOoOoOOo+OO+++OOoooooOOOo", "OOOOoOOOoOoooooOOooOooOoooOo++oOOOOOooOOOOOOoo++oooOOoOoo o OoOooooOoOoOOOoO oOoooOOoooo+OoOOOoooooOOOoOoOoOoooooooooOOOOOOOOOoO", "OOOOOOOoOoooo+O ooOOOOOooo+o+oOO OOOOOO OOOOoo+OooOOOoooO OOOOoOoOoOooOOooo OOoOoOOOoOo+OO OOOoOOooOOOOooOOooOooOO+OOOOO OO oO ", "OOOooOooOoOOOoOOooOOoo+OoOOo O OOOOo+OOOOo OOoOoo+OOooo OO oooOoOOOoooOOOOOOooo+oooooOOOOOoOOoooO OOooo oooO oOOoOooOOOoOOOoO ", "o oOOooOoOoOOoOOo O+ooOOOooOooooOoOooOoOoOOoooo+ooOoOoO OOooOoOoOooooOOOOOOoooooooooOOOOOoOOOoooOOOOOOOOOoOoOOOOoooOOoOOoOOOo ", "OoooOO OOooooOOOOOooooooOoooOOOOOOooOOOOO oo+o++oOoOoOOOOOoOoO+OoOoOoOOOOOoooOoOooOOOoOO+oOoOoOOOooOooOoOoOOOOoooooooo oOOO oOo", "oOooO OOoooOOOOOoOo+OOoOoooOoOoOOOooOOoO O+ooo+OoOoOOOOOoOoOoo+oooOOOOO Ooo+OOOOoOOOoOooOoOoOoooOOoo+ooooOoO o+ooooooOoo OOOOOo", "OOoo OooooOOOOo OOoOOOOOoO oOooOOoOoO O Oo+ooOoooOOOOOO oO+Oo+ooOoOoOOOoOOOOOO+OoOOoO oOOOOoOoOOoOoOOoOO OoOooooO OOOo OOOOoOo", "OOO OoOo+OOOO OOOoOoooOo OoOoOooooOOO OOo+ooo+ooOoo oooOO+OoooooOoo oOoOOOOOOoooOOo OOOOOOOoOoOooOOOo OOOOoOo+oOO OOOoOOOOooOoo", "OO OoO+ooooOOOoOooo+OOOoOooooooOOoOOOooOoooOooOo OoOoOOoOOOoOoooOOOO OoOOOoOOo oOOOO OOOooOOOOoOOOOO OOO oooOOoOoOOOO OoOo oOOO", "O ooOoooooOOOoOoOooOooOOoooooooOOoOoooOoooOoooOOOoOOOOOoOOooooOOooO OoOOOOOoOooOO OOOOOOooo OOoOoOOOOOOo ooOO+ooO OOooOOOOOOO ", "OooOoOoooOO oOOooOOoo OoooOOOO Oo oOOoOOoOOOOOoooOoOoo+oOO+ooOoooOOooOOOOOoooOooOooOoOOooo oOOoOOO OoOOOOooOooo O OOOOOOO Oo OO", "OoooOooOoOOooOooOOooOOOooOOOO OOOOOOooOOOOOoO+oOoOoo+ooooooOoooOooooooOooOoooOoOoOoOOOooO OoOOO OO OO OOOOooOoo OOOOoOoO O OOOOo", "oOoOooOOOo OOOooOoOooOooOOOOo+oOooOO OOOooOooOo OoOoOoOooOoooooooOOOOOOOOooOOooOoOoOOO Ooo OOOOoo ooOOOO+oOOOOoOOOOOoOoO OOOO", "oOoooOoOoOOOooOOOoooooo oOOOoOOOoOoOOoOOooOOOOooOoOOooOOOOOooOOOooOooOOoO OOOoOOoOooOOo oo OOo ooOOOOOOOoooOOOOoOOoO OOOOOOOoOo", "OoOoOOOOooOOOOOO OOOoOOooOOOooOOOOOOO OoO O ooOoOOoooo ooooooooO+oOOoOoOOO+oo+oOOoOOOOooOo OOOOooOO ooOoooo+OOooOooOO oooo OoOOo", "OOooOOOOO OOOOO OoOOoOOOOoOoooOo OOOoOOoOOOOOoooooOoOOooo+o+ooOoOOOooOo OOooOoOOOOoOO+oOOOooOoOOoOOOoOoooo+oOOoooOoOO ooOO OO oo", "oOoOo ooO ooOOoO+oOOooOOoOOoOoOOOOOoOOOoOOoooooooOoOOOoo+ooOOOOooOOOOO O oOOoOOO oOO+O OOOOOOoooOoooOooOOO o OOoOoOOOOooOOoO++oO", "oOoOOOOO OOOOoooOooO OOO oOOoO oOoOOOoO OOooooOOOOOOoo+ooOOOOooOoo OOOOOOOoOO OoOOoO OOoOOooOOooOO+oOOOOoO OOOOOOOOOoOoOOooOoO", "ooOO O OOO+oOOoo oOo O Oooooo OOO OOOoOoOoOOOOoOoooO+ooooOoOOoOOoOOOOOOOoOoOOO OOOOOOOOoooOOoOoOooOooOOOoOO oooooOooooOoOO+oOOOO" }; mtink-1.0.16/doc0000777000076400001540000000000010665176047012441 2htmlustar jjfusemtink-1.0.16/LESE-MICH0000777000076400001540000000000010665176047014410 2html/LESE-MICHustar jjfusemtink-1.0.16/mtink.spec.ORG0000644000076400001540000001132710376041214013477 0ustar jjfuseName: mtink Summary: View status of and tune Epson printer ink cartridges #Icon: Version: 0.9.54b Release: 1 Packager: Keith Amidon Copyright: GPL Group: Applications/Publishing URL: http://xwtools.automatix.de/english/startE.htm Source0: %{name}-%{version}.tar.gz #Patch0: mtinkc.patch BuildRoot: %{_tmppath}/%{name}-root #BuildRequires: gimp >= 1.0.0 %package gimp-plugin Summary: Plugin for gimp to access Epson print cartridge maintaince functions Group: Applications/Publishing Requires: mtink = %{version} %description gimp-plugin Plugin for gimp to access Epson print cartridge maintaince functions See documentation in mtink package. %package mtinkd Summary: Server allowing ink status read while printing on Epson printers Group: Applications/Publishing %description mtinkd Server allowing ink status read while printing on Epson printers See documentation in the mtink package. %description The Epson utilities allow to display with the Linux kernel 2.2.x the remaining ink quantity, to perform a nozzle check, or to clean the head. # ------------------------- prep ----------------------------------- %prep %setup -n mtink-%{version} # ------------------------- build ----------------------------------- %build ./Configure -p %{_prefix} make # ------------------------ install ----------------------------------- %install rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT%{_prefix}/bin mkdir -p $RPM_BUILD_ROOT%{_prefix}/sbin cp mtink $RPM_BUILD_ROOT%{_prefix}/bin/ cp mtinkc $RPM_BUILD_ROOT%{_prefix}/bin/ cp ttink $RPM_BUILD_ROOT%{_prefix}/bin/ cp mtinkd $RPM_BUILD_ROOT%{_prefix}/sbin/ mkdir -p $RPM_BUILD_ROOT/etc/rc.d/init.d/ cp etc/mtink $RPM_BUILD_ROOT/etc/rc.d/init.d/ mkdir -p $RPM_BUILD_ROOT/usr/lib/cups/backend/ cp etc/mtink-cups $RPM_BUILD_ROOT/usr/lib/cups/backend/mtink cp etc/installInitScript.sh $RPM_BUILD_ROOT%{_prefix}/sbin/mtink-installInitScript cp detect/askPrinter $RPM_BUILD_ROOT%{_prefix}/sbin/askPrinter if [ -f gimp-mtink ] then GIMPPLUGINDIR=/usr/lib/gimp/1.2 mkdir -p $RPM_BUILD_ROOT$GIMPPLUGINDIR/plug-ins cp gimp-mtink $RPM_BUILD_ROOT$GIMPPLUGINDIR/plug-ins/ echo $GIMPPLUGINDIR/plug-ins/gimp-mtink > gimp-plugin-files.lst else echo> gimp-plugin-files.lst fi mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib/mtink cp utils/printer.desc.bldin $RPM_BUILD_ROOT%{_prefix}/lib/mtink # ------------------------ clean ----------------------------------- %clean rm -rf $RPM_BUILD_ROOT # ------------------------- files ------------------------------------ # remember: %config, %config(missingok), %config(noreplace), %doc, %ghost, # %dir, %docdir, %attr(mode,user,group) %files %defattr(-, root, root) %doc html/* CHANGE.LOG %attr(2555, root,lp) %{_prefix}/bin/mtink %attr(2555, root,lp) %{_prefix}/bin/ttink %{_prefix}/bin/mtinkc %{_prefix}/lib/mtink/printer.desc.bldin %files mtinkd /etc/rc.d/init.d/mtink %{_prefix}/sbin/mtinkd %{_prefix}/sbin/askPrinter %{_prefix}/sbin/mtink-installInitScript %{_prefix}/lib/cups/backend/mtink %files gimp-plugin -f gimp-plugin-files.lst # ------------------------- changelog -------------------------------- %changelog * Sun Dec 28 2003 Jean-Jacques Sarton [1.0.0-1] - Version 1.0.0 * Sun Oct 19 2003 Jean-Jacques Sarton [0.9.57-1] - Problems while ink low fixed. * Sun Jan 12 2003 Jean-Jacques Sarton [0.9.54-1] - Translation of resource into danish (Mogens Kaeger). * Sat Dec 07 2002 Jean-Jacques Sarton [0.9.52-1] - New version of mtink. * Sat Oct 19 2002 Jean-Jacques Sarton [0.9.51-1] - Change for rmp 4.1, new mtink version. * Thu Oct 03 2002 Jean-Jacques Sarton [0.9.50-1] - Add for rpm packages * Sat Sep 29 2002 Jean-Jacques Sarton [0.9.48-1] - New version of mtink * Sat Sep 28 2002 Jean-Jacques Sarton [0.9.47-1] - Rules for gimp version modified as proposed by keith, but setting of the directory via a script. * Fri Sep 27 2002 Jean-Jacques Sarton [0.9.46-1] - A few modifications. Call Configure with the option -p /usr * Thu Sep 26 2002 Keith Amidon [0.9.44-1] - New version ? (maybe old version was really this one, this is correct version number now at least, obtained from CHANGE.LOG instead of website.) - Install askPrinter executable as part of mtinkd package, as the only place it seems to be used is in the mtink init.d script - Determined location of gimp-plugin dir using gimp-config - Updated build/install dependencies * Wed Sep 25 2002 Keith Amidon [0.9.39-1] - Original package mtink-1.0.16/pyink/0000755000076400001540000000000010376041214012201 5ustar jjfusemtink-1.0.16/pyink/pyink.py0000755000076400001540000000210110376041214013702 0ustar jjfuse#!/usr/bin/python import os import sys import socket import SocketServer import BaseHTTPServer import pyinkHTTPHandler from pyinkHTTPHandler import rdRes from pyinkHTTPHandler import readConf # set these two variable according to your needs prefix='/usr/local' pyinkHTTPHandler.gl.confDir=prefix+'/lib/mtink' pyinkHTTPHandler.gl.tmpDir=prefix+'/lib/pyink/tmp' workDir=prefix+'/lib/pyink' pyinkHTTPHandler.gl.devfile='' pyinkHTTPHandler.gl.model='' defPort = 8000 os.chdir(workDir) # a few definitions for the objects we use protocol = 'HTTP/1.0' HandlerClass = pyinkHTTPHandler.pyinkHTTPRequestHandler ServerClass = BaseHTTPServer.HTTPServer hostname = socket.gethostname() myIp = socket.gethostbyname(hostname) print hostname, ' with IP ',myIp if sys.argv[1:]: port = int(sys.argv[1]) else: port = defPort rdRes() server_address = (myIp, port) HandlerClass.protocol_version = protocol httpd = ServerClass(server_address, HandlerClass) sa = httpd.socket.getsockname() readConf() print "Serving HTTP on", sa[0], "port", sa[1], "..." httpd.serve_forever() mtink-1.0.16/pyink/pyinkHTTPHandler.pyc0000644000076400001540000004536410376041214016062 0ustar jjfusem Cc@sdZddddgZdkZdkZdkZdkZdkZdkZdkZdk l Z dk Z dk Z dfdYZ dZ dfd YZd Zd Zd Zdeifd YZdS(s0.1tpyinkHTTPRequestHandlertgltrestrdResN(sStringIOcBs>tZdZdZdZdZdZdZdZdZ d Z RS( NsCheck
NozzlesClean
Nozzles Align
HeadsReset
PrintersChange
CartridgesState:t PreferencetOKs Port Choice:( t__name__t __module__tchecktcleantaligntresett cartridget printerStatetpreftokt cfgDevice(((t//home/jj/mtink-1.0.12/pyink/pyinkHTTPHandler.pyRscCs)tid}t|djo|d }nd}|dd!i|di}tdd}xto|i }|djoPn|d }||dd!joj|GH|i d }|d |!}||d}xJtoB|i d }|d joPn|d|!d ||d}qW|djo |t_q|djo |t_q|djo |t_q|djo |t_q|djo |t_q|djo |t_q|djo |t_q|djo |t_q|djo |t_qqiqiW|idS(NtLANGiteniis Pyink.restrtit:is\ns
RR R R R R RRt cfg2Device(tostgetenvtlangtlentuppertlowertopentftTruetreadlinetmtfindtcolontidtretbrRRR R R R R RRRtclose(RRR"R&R$R'R%((RR"sT!     "                 cBsPtZdZdZdZeZeZeZ eZ eZ eZ dZ dZdZRS(NR(RRtdevfiletmodeltmodelTypR tenChecktenCleantFalsetenAligntenResett enExchangetinittconfDirtworkDirttmpDir(((RRXscCstiitidottidd}xvton|i}|djoPn|i }|i d}|i djo!|ddjo|dt_q|ddjo|dt_q|dd jo|dt_q|dd jo t}nt}|dd jo |t_q|dd jo |t_q|dd jo |t_q|ddjo |t_q|ddjo |t_qq3q3W|indS(Ns /htink.confRRt=iit deviceFilet modelNameR+R RR R R texchange(RtpathtexistsRR5RRR R!tltstriptsplittwtcountR)R*R+tstR.R,R-R/R0t enSxchangeR((RR<RAR?((RtreadConfis<        cCs`xto|i}|d }|i}|djoPn|djoPn|id}|di|d<|di|dR?RR,R-R0RR5tcftwriteR)R+R/R1R(R2(RDR<RER?((RtsetOptss4           c Cs|i}|d }|i}|i|id}t|}d}d}xS||joE||}|djo||}n|d||}|d}qVW|ddjo|t _ t t idd }xto|i} | djoPn| id} | d } | id }|dd jo0|di} | |jot|PqjqqW|indS( Nit iRt_itStyluss /printer.descRiRs.name(RR!R<R=R>twsRtctitnR?RR+RR3RDR tpltwptpnRGR(( RRLRMR<RNRDRKR?RPRQRO((Rt StoreConfigs@              cBsHtZdeZdZdZdZdZdZdZ RS(Ns pyinkHTTP/cCstidjodtid}nd}|idjo d}n|idjod}tdd}|id|i d d |i d t t i |i d |i|i||i|id Sn|idjo:tt_dt_t iidot idqnk|idjo+t idti|dtidn0|idjo8t idti|dtidtidn|idjo d}n|idjo d}n|idjo[ddti|dtidGHt idti|dtidtidnI|iid}|idjo&|d d!jo|dt_qnt idti|d"tidtitjoyt iitid#o.ttid#d}t||iqCttid#d$}|id%|inttid#d}|i ||ittid&d}|id|i d d'|i d t t i |i d |i|i||i|id S((sServe a GET request.Rs -m RHt/s /spacer.gifs spacer.gifRis Content-types image/gifsContent-LengthiNs/Configs htink.confs/Resets ttink -u -d s -r >s/ttink.response 2>&1s/Cleans -c >s/ttinkx.response 2>&1is/Aligns /exchanges/Checkscall: s -n >it?iis/DevSels >s/ttink.responseR?sNo answer from ttink!s /ttink.htmls text/html(!RR+tmodCmdtselfR:tnocallRRt send_responset send_headertstrRtfstattfilenot end_headerstcopyfiletwfileR(R.R2R)R;tunlinktsystemR5ttimetsleepR>tcmdsR@RRRFt buildFile(RVRWRRdRU((Rtdo_GETsr  )    +'  #''     ) cCsti||dS(N(tshutilt copyfileobjtsourcet outputfile(RVRiRj((RR^7scCsttidd}tidjo|i|dSn|i}|d }|i} | d } || jo|i} | d } nd}| i ddjo)t i| d}t i|d} n|id}xUdoM|i}|d }|djoPn|i ddjot i|d}n|di}|di}|djo|} |} n|djo|}|} n|d jo|}|}nu|d jo|}|}nX|d jo|}|} n;|d jo|}|}n|d jo|}|}n|d}qW| djot|i!ddddddddddddddddddd dd!ddd"d#dd$d%d&d'd(|d)d*d+d,d-d.d/d-d0d1d2d3d4d5d6d7d8d9d:d;d<d/d-d=d>d?d@dAdBd,d-d.d/d-d0d1d2d3dCdDdEdFt"i#dGd8d9d:d;d<d/d-d=d>d?d*dHdIn| djo|d t_$|i!dJ|i!dKti$dL|djo|i%|| | dMt&n|djoO|i%|| |dNt'|i%|||dOt'|i%|||dPt'n|d jo6|i%|| |dQt'|i%|||dRt'n|d jo|i%|||n|i!dSt"i(dT| dU|i)|dVt"i*dWdXti+|i)|dVt"i,dYdZti-|i)|dVt"i.d[d\ti/|i)|dVt"i0d]d^ti1|i)|dVt"i2d_d`ti3|i!da|i4ndS(bNs /ttink.htmlR?RiRiiiiiiiis sJ s s) s! s/ s s s s# s s"
s

s= s s_ s sP s sO sR s s
sA s sC s s
s. OK s
s
s
sD s$ s s
ss s

s#000000s#00ffffs#ff00ffs#ffff00s#a0ffffs#ffa0ffs>
sH

ss

t18RtCheckR tCleanR tAlignR tResettextExchanges,
(5RRR5RAR)RVtaskDevRR!tt1tstatusRNR#tstringR>RKR=RMtstblacktblackntcyantcyanntmagentatmagentantyellowtyellowntlcyantlcyanntlmagentat lmagentantgreytgreynRFRRR*t printColorR R.R t printButtonRR,R R-R R/R R0R R1R((RVRR}RR{RNRR~RRwRxRzRtRRRKRARyRMRRsR|Rv((RRe:s                          uU        #""""" c Cstt|}tdt|}d}|o d}n|id|d|d|d|d|d |d dS( NidtBlacktWhites$ s
s$%
( RZtlongtvaluetval1tval2ttxtColortinvertRARFtnametcname( RVRARRRRRRR((RRs  cCsd}|tjo d}n|id|ddddddd d d d d |d|o1|idd|d|dd|dn|id|id|d|dddddddddddd dS(!NRtGreys s; s s\ s sM s sL sO s
s> s s< s s
s> s s s
s
s ( RtactifR.RARFtszR%tcommandttext(RVRARRR%RRR((RR/s  E 1 cCsti}tid|idddddddd d d d d dddddddddddddddddddddd|d d!d"d#td$d%}xIt oA|i }|i |d&joPn|id'|d(qW|i |id)d*dd+d,d-d.d/d0d1d2d3d1d4d5d6d7d8d9d:d;tid#d<d=d>d?d@d3d1dAd3dBdCd.dDdEdFd*dGdHdS(INsP(ls -c /var/mtink/*;ls -cr /dev/lp*;ls -c /dev/usb/lp*) >deviceFiles 2>/dev/nulls sJ s s) s! s" s s) s s s s
s s<
s2 s s s& s s
sA s sT s s sT s
sO s sV sF sV s s
s s
s
s
s
s(RRRsRRaRARFRtdR R!tdfR=R(R(RVRARRRs((RRrQs  '    ( RRt __version__tserver_versionRfR^ReRRRr(((RRs  Q  ! "(Rt__all__Rt posixpathtBaseHTTPServerturllibtcgiRgt mimetypestStringIORuRbRRRRCRGRRtBaseHTTPRequestHandlerR(RRRgRRRRRRRRRCRbRRRRRRGRu((RRTs2            4 ' ( (mtink-1.0.16/pyink/Pyink.res0000644000076400001540000000354010376041214014010 0ustar jjfuseBy.check: Düsn\nprüfn By.clean: Düsn\nsaubamacha By.align: Kepf\nausrichtn By.reset: Druckr\nzrucksetzn By.cartridge: Patrona\nwechsln By.printerState: Schtatus: By.pref: Wos eigschtäit is By.cfg2Device: Port zum Auswäin: Da.check: Check\nDyser Da.clean: Rens\nDyser Da.align: Indret\nHoved Da.reset: Reset\nPrinter Da.cartridge: Skift\nPatron Da.printerState: Tilstand: Da.pref: Indstillinger Da.cfg2Device: Port valg: De.check:Düsen\nprüfen De.clean:Düsen\nreinigen De.align:Köpfe\nausrichten De.reset:Drucker\nzurücksetzen De.cartridge:Patrone\nwechseln De.printerState:Status: De.pref:Einstellungen De.cfg2Device:Port Auswahl: En.check: Check\nNozzle En.clean: Clean\nNozzle En.align: Align\nHead En.reset: Reset\nPrinter En.cartridge: Change\nCartridge En.printerState: State: En.pref: Preference En.cfg2Device: Port Choice: Fr.check:Test\nbuses Fr.clean:Nettoyage\nbuses Fr.align:Alignement\n Fr.reset:RAZ\nimprimante Fr.cartridge:Changement\ncartouche Fr.printerState:Status: Fr.cfg2Device:Choix du port: Hu.check: Fúvóka\nellenõrzés Hu.clean: Fúvóka\ntisztítás Hu.align: Fej\npozicionálás Hu.reset: Nyomtató\nreset Hu.cartridge: Tintapatron\ncsere Hu.printerState: Állapot: Hu.pref: Beállítások Hu.cfg2Device: Port választás: It.check: Controllo\nUgelli It.clean: Pulizia\nugelli It.align: Allineamento\nTestina It.reset: Ripristina\nStampante It.cartridge: Cambio\ncartuccia It.printerState: Stato: It.pref: Preferenze It.cfg2Device: Scelta port: Tr.check: Üfleç\nkontrolü Tr.clean: Üfleç\ntemizliği Tr.align: Başları\nAyarlamak Tr.reset: Yeniden\nyerleştir Tr.cartridge: Boya\ndeğişecek Tr.printerState: Status: Tr.pref: Ayarlamak Tr.cfg2Device: Port seçimi: mtink-1.0.16/pyink/README0000644000076400001540000000420010376041214013055 0ustar jjfuseThis is a little http server which allow to show the remaining ink quantity as well as the printer state and furthermore to perform a few maintenance operations. Aligment of head and exhange of ink cartridge are at this stage not implemented. This version is a very early work and work at least for my Stylus Photo 890 Dependencies: ------------- Python must be installed the mtink package, see http://xwtools.automatix.de, must be installed Configuration: -------------- The default installation is performed under /usr/local. I you want an other top dierectory call ./configure -p Note that the top directory for mtink must be the same as for pyink Installation: ------------- call, as root "make install" The directory /lib/pyink will be created and the required files are copied to this location. Lauching the pyink server: -------------------------- call simply "pyink.sh" which was installed under /bin Calling the server from a browser: ---------------------------------- enter the URL "http://:8000" Your browser shall now ask for the device file. After selecting a device file and clicking [OK], the browser shall show the remainink ink quantity, the printer state and offer a few printer commands. If the printer was not found the browser will show an error message which can be aknowledged by pressing of[OK] oe which allow to reconfigure the server (choose an other device file) by clicking [Reconfigure]. The configuration datas are stored by the server so you need not to configure the server after a restart. Internationalisation: --------------------- The Browser must be able to printout the textes with UTF-8 code. If this is not the case for you browser. A few text resoures are necessary for ttink, there are derived from the mtink resource files. The other text resources are from ttink wich was modified in order to work with utf-8 and non utf-8 code. uninstallation: --------------- issue, as root, the commands: rm /bin/pyink.sh rm -fr /lib/pyink Author: ------- Jean-Jacques Sarton jj.sartonqt-online.de http://xwtools.automatix.de mtink-1.0.16/pyink/Makefile0000644000076400001540000000115410376041214013642 0ustar jjfuseprefix=/usr/local DIST_FILES= pyink/pyink.py \ pyink/pyinkHTTPHandler.py \ pyink/README \ pyink/spacer.gif \ pyink/Pyink.res \ pyink/Makefile \ pyink/configure \ pyink/pyink.sh all: @echo nothings to do install: mkdir -p $(prefix)/lib/pyink cd ..; cp $(DIST_FILES) $(prefix)/lib/pyink cp pyink.sh $(prefix)/bin/pyink.sh chmod +x $(prefix)/bin/pyink.sh chmod +x $(prefix)/lib/pyink/pyink.py mkdir -p $(prefix)/lib/pyink/tmp chmod 777 $(prefix)/lib/pyink/tmp tgz: @cd ..;tar czf pyink.tgz $(DIST_FILES) clean: rm *.pyc mtink-1.0.16/pyink/configure0000755000076400001540000000172410376041214014114 0ustar jjfuse#!/bin/sh prefix=/usr/local pSyntax() { echo Syntax `basename $0` '[-h|--help]' echo " " `basename $0` '[-p|--prefix installPath]' echo echo "Default install path: $prefix" echo "Chemin d'installation par default: $prefix" echo "Default Installationspfad: $prefix" echo "Percorso d'installazione di default: $prefix" echo "Alaprtelmezett teleptsi tvonal: $prefix" echo } # Check for args while [ $# -ne 0 ] do case $1 in -h|--h*) pSyntax exit 0;; -p|--p*) shift if [ $# -ne 1 ] then pSyntax exit 1 else prefix=$1 fi;; *) pSyntax exit 1;; esac shift done sed "s:^prefix.*:prefix='$prefix':" pyink.py > pyink.py.tmp mv pyink.py.tmp pyink.py chmod +x pyink.py sed "s:^prefix.*:prefix=$prefix:" Makefile > Makefile.tmp mv Makefile.tmp Makefile sed "s:^prefix.*:prefix=$prefix:" pyink.sh > pyink.sh.tmp mv pyink.sh.tmp pyink.sh chmod +x pyink.sh mtink-1.0.16/pyink/pyink.sh0000755000076400001540000000007010376041214013667 0ustar jjfuse#!/bin/sh prefix=/usr/local $prefix/lib/pyink/pyink.py mtink-1.0.16/pyink/spacer.gif0000644000076400001540000000006110376041214014142 0ustar jjfuseGIF89a!,T;mtink-1.0.16/pyink/pyinkHTTPHandler.py0000644000076400001540000006077410376041214015721 0ustar jjfuse __version__ = "0.1" __all__ = ["pyinkHTTPRequestHandler","gl","res", "rdRes"] import os import posixpath import BaseHTTPServer import urllib import cgi import shutil import mimetypes from StringIO import StringIO import string import time """ Class res for storage of internationalized textes """ class res: check='Check
Nozzle' clean='Clean
Nozzle' align='Align
Head' reset='Reset
Printer' cartridge='Change
Cartridge' printerState='State:' pref='Preference' ok='OK' cfgDevice='Port Choice:' """ Function rdRes, read the external resource files and store the values into the res class structur """ def rdRes(): lang=os.getenv('LANG') if len(lang) >= 2: lang = lang[:2] else: lang='en' # capitalize the first char lang = lang[0:1].upper()+lang[1:].lower() #print lang #open the resource file f = open('Pyink.res','r') while True: m=f.readline() if m == '': break m=m[:-1] if lang == m[0:2]: print m colon = m.find(':') id=m[3:colon] re=m[colon+1:] # substitute \n with
while True: br = re.find('\\n') if br == -1: break re=re[0:br]+'
'+re[br+2:] if id == 'check': res.check=re elif id == 'clean': res.clean=re elif id == 'align': res.align=re elif id == 'reset': res.reset=re elif id == 'cartridge': res.cartridge=re elif id == 'printerState': res.printerState=re elif id == 'pref': res.pref=re elif id == 'ok': res.ok=re elif id == 'cfg2Device': res.cfgDevice=re f.close() """ Function gl, some global variable """ class gl: devfile='' model='' modelTyp='' enCheck=True enClean=True enAlign=False enReset=True enExchange=False init=False confDir='' workDir='' tmpDir='' """ Function readConf, read our configuration files and store the values into the gl class structur """ def readConf(): if os.path.exists(gl.tmpDir+'/htink.conf'): f=open(gl.tmpDir+'/htink.conf','r') while True: l=f.readline() if l=='': break; l=l.strip() w=l.split('=') if w.count > 1: if w[0]=='deviceFile': gl.devfile=w[1] elif w[0]=='modelName': gl.model=w[1] elif w[0]=='modelTyp': gl.modelTyp=w[1] else: if w[1] == 'True': st=True else: st=False if w[0]=='check': gl.enCheck=st elif w[0]=='clean': gl.enClean=st elif w[0]=='align': gl.enAlign=st elif w[0]=='reset': gl.enReset=st elif w[0]=='exchange': gl.enSxchange=st f.close() """ Help Function setOpts used bay StoreConfig, after the printer was found, we have only to read a few description lines and to write this to our configuration file """ def setOpts(p): # read up to end of the printer description while True: l = p.readline() l = l[:-1] l = l.strip() if l == '.END': break if l == '': break w = l.split(':') w[0] = w[0].strip() w[1] = w[1].strip() # At this time exchange and align not supported ! #if w[0] == '.exchangeFlg': # if w[1] == 'True': # gl.enExchange=True #elif w[0] == '.passesNb': # if long(w[1]) > 0: # gl.enAlign=True # all is parsed, write configuration file gl.enCheck=True gl.enClean=True gl.enReset=True cf=open(gl.tmpDir+'/htink.conf','w') cf.write('deviceFile='+gl.devfile+'\n') cf.write('modelTyp='+gl.modelTyp+'\n') if gl.enAlign == True: cf.write('align=True\n') else: cf.write('align=False\n') if gl.enExchange == True: cf.write('exchange=True\n') else: cf.write('exchange=False\n') cf.close() gl.init=True """ Function StoreConfig, write out our configuration file """ def StoreConfig(f): # check anwer l = f.readline() l = l[:-2] l = l.strip() l.strip() ws = l.split(' ') c = len(ws) i=1 n='' while i'+gl.tmpDir+'/ttink.response 2>&1') elif self.path == '/Clean': os.system('ttink -u -d '+gl.devfile+modCmd+' -c >'+gl.tmpDir+'/ttinkx.response 2>&1') time.sleep(5) elif self.path == '/Align': nocall='' #print 'Call Align' elif self.path == '/exchange': nocall='' elif self.path == '/Check': print 'call: '+'ttink -u -d '+gl.devfile+modCmd+' -n >'+gl.tmpDir+'/ttinkx.response 2>&1' os.system('ttink -u -d '+gl.devfile+modCmd+' -n >'+gl.tmpDir+'/ttinkx.response 2>&1') time.sleep(2) else: cmds = self.path.split('?') if cmds.count > 1: if cmds[0] == '/DevSel': gl.devfile=cmds[1] #os.unlink('ttink.response') #os.system('echo RE:;cat ttink.response') #if self.path == '/Reset': # print 'modelTyp <'+gl.modelTyp+'>' #print 'call: '+'ttink -d '+gl.devfile+' -m '+gl.modelTyp+' >ttink.response 2>&1' os.system('ttink -u -d '+gl.devfile+modCmd+' >'+gl.tmpDir+'/ttink.response 2>&1') #os.system('echo RE:;cat ttink.response') # if model typ not set, collect all informations and # put this into our configuration file if gl.init==False: #print 'Not initialized' if os.path.exists(gl.tmpDir+'/ttink.response'): f = open(gl.tmpDir+'/ttink.response', 'r') StoreConfig(f) f.close() else: f = open(gl.tmpDir+'/ttink.response','w') f.write('No answer from ttink!') f.close() f = open(gl.tmpDir+'/ttink.response', 'r') self.buildFile(f) f.close() f = open(gl.tmpDir+'/ttink.html', 'r') self.send_response(200) self.send_header("Content-type", 'text/html') self.send_header("Content-Length", str(os.fstat(f.fileno())[6])) self.end_headers() self.copyfile(f, self.wfile) f.close() def copyfile(self, source, outputfile): shutil.copyfileobj(source, outputfile) def buildFile(self,f): st = open(gl.tmpDir+'/ttink.html', 'w') #print 'buildFile: devfile='+gl.devfile if gl.devfile == '' : self.askDev(st) return t1 = f.readline() t1 = t1[:-1] status = f.readline() status = status[:-1] if t1 == status: status = f.readline() status = status[:-1] n = '' if status.find(':') > 0: ws = string.split(status, ':') status = string.strip(ws[1]) f.readline() # color name and % value i = 0 while 1: s = f.readline() s = s[:-3] if s == '': break if s.find(':') > 0: ws = string.split(s, ':') n = ws[0].strip() s = ws[1].strip() if i == 0: black = s blackn = n elif i == 1: cyan = s cyann = n elif i == 2: magenta = s magentan = n elif i == 3: yellow = s yellown = n elif i == 4: lcyan = s lcyann = n elif i == 5: lmagenta = s lmagentan = n elif i == 6: grey = s greyn = n i = i + 1 #printButton(self,st, text, id, command, actif): if status == '': st.write( '\n'+\ '\n'+\ '\n'+\ '\n'+\ ' \n'+\ ' '+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ '
'+t1+'

\n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ '
\n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ '
\n'+\ ' OK\n'+\ '
\n'+\ '
\n'+\ '
'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ '
\n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ '
\n'+\ ' '+res.pref+'\n'+\ '
\n'+\ '
\n'+\ '
\n'+\ '') elif status != '': gl.model=t1[:-1] st.write('\ \n\ \n\ \n\ \n') st.write('\ \n\

\n\

\n\ \n') if i > 0: self.printColor(st,blackn,black,'#000000',True) if i > 1: self.printColor(st,cyann,cyan,'#00ffff',False) self.printColor(st,magentan,magenta,'#ff00ff',False) self.printColor(st,yellown,yellow,'#ffff00',False) if i > 4: self.printColor(st,lcyann,lcyan,'#a0ffff',False) self.printColor(st,lmagentan,lmagenta,'#ffa0ff',False) if i > 6: self.printColor(st,greyn,grey) st.write('\ \n\ \n\ \n\ \n\
'+gl.model+'

'+res.printerState+''+status+'

\n\ \n\ \n\ \n\ \n\ \n') self.printButton(st, '18', res.check, 'check', 'Check', gl.enCheck) self.printButton(st, '18', res.clean, 'clean', 'Clean', gl.enClean) self.printButton(st, '18', res.align, 'align', 'Align', gl.enAlign) self.printButton(st, '18', res.reset, 'reset', 'Reset', gl.enReset) self.printButton(st, '18', res.cartridge, 'ex', 'Exchange', gl.enExchange) st.write('\ \
\n\ \n\ ') st.close() def printColor(self,st, name,value,cname,invert): val1=str(long(value)) val2=str(100-long(value)) txtColor='Black' if invert: txtColor='White' st.write('\ \n\ '+name+'\n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\
\n\ \n\ \n\ \n\ \n\ \n\
'+val1+'%
\n\
\n\ \n\ ') def printButton(self, st, sz, text, id, command, actif): txtColor='Black' if actif == False: txtColor = 'Grey' st.write('\n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ '
\n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ '
\n') else: st.write('>\n') st.write(' '+text+'\n'+\ '
\n'+\ '
\n'+\ '\n') def askDev(self,st): t1=res.cfgDevice #print'ASK for device file' # build a list of file device os.system('(ls -c /var/mtink/*;ls -cr /dev/lp*;ls -c /dev/usb/lp*) >deviceFiles 2>/dev/null') st.write( '\n'+\ '\n'+\ '\n'+\ '\n'+\ ' \n'+\ ' '+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ '
'+t1+'\n'+\ '
\n'\ ' \n'\ '
\n'\ '
\n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+ ' \n'+ ' \n'+\ '
\n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ '
\n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ ' \n'+\ '
\n'+\ ' '+res.ok+'\n'+\ '
\n'+\ '
\n'+\ '
\n'+\ '
\n'+\ '') mtink-1.0.16/CHANGE.LOG0000644000076400001540000005477110665175344012372 0ustar jjfuseV 1.0.16 29-AUG-2007 - Corrected name of no strop option for the Configure file (--no-strip Debian) V 1.0.16.RC1 - Added test for access to device files - Replaced call of access() with own function - Some cleanup - Added flag -nostrip for the Configure file V 1.0.15a 26-AUG-2007 - Cleanup - An error message modified. V 1.0.15 26-AUG-2007 - Minor corrections insuring that the ink color is set correctly for some printer with strange color model. V 1.0.15.RC1 24-AUG-2006 - Added Stylus Photo R2400 Some tests are necessary ! V 1.0.14 04-OCT-2006 - Variable XAUTORITY was deleted by the environment checker corrected. v 1.0.13c 02-OCT-2006 - Applied a patch from Sylvain Legall concerning the CDBS packaging system he use. v 1.0.13b 10-SEP-2006 - Stylus Photo 950, mtink show only 6 inks, fixed v 1.0.13a 05-MAI-2006 - Security checks for the SHELL variable modified (the may be under /usr/local/bin on some systems). V 1.0.13 - Changes for FreeBSD which is now supported - New russian translation donated by anonymous V 1.0.12 - 1.0.2d - Some little works and bug fixes. V 1.0.11 DEC-2005 - Workaround for wrong xpm handling under SuSE 10.0 - More Workaround for buggy 2.6.X kernel - Check of environment added into mtink - Code for reading of alignment files V 1.0.11 17-AUG-2005 - Corrections for Fedora Core 4 - Corrections for Gcc 4 (a lot o warnings and a (wrong)error) - Correction for decoding of inklevel (4 color models as C84) V 1.0.10 15-AUG-2005 - Corrections for mtink-cups (Sylvain Le Gall) - Corrections for french textes (Sylvain Le Gall) V 1.0.9 18-JUL-2005 - Work around for buggy printer intreface (2.6 kernels). - Correction for Stylus R800. - some little corrections. V 1.0.8 06-FEB-2005 - Mac OS detection of printer improved - Workaround for Stylus Photo 890/120 firmware bug (send a reset printer) V 1.0.7.7 30-JAN-2005 - Mac OS Port Configuration detect openMotif and Lesstif V 1.0.7.6 23-JAN-2005 - For Mac OS X use /usr/bin/open for viewing of help - Security fix for call of a browser (Linux, Solaris) - remove hungarian textes from makefile (Mac Os don't like this) V 1.0.7.5 23-JAN-2005 - Reworked some Mac Os specific parts (ttink / mtink). - new utilty for checking of resources - adapted pyink for Mac OS X - corerction of some resources files V 1.0.7.4 22-JAN-2005 - Removed hungarian textes from Configure tool - added option -f (find devices) to ttink for use of the pyink interface - modified rules for configuration of printers on Mac OS V 1.0.7.3 18-JAN-2005 - Added swedish translation from Daniel Tamm V 1.0.7.2 15-JAN-2005 - Changed name of some files - Modifications for mtink (Mac OS X). - Modifications of configure script V 1.0.7.1 10-JAN-2005 - first port works for Mac OS X - Bug fixing for the decoding of ink quantity. V 1.0.7a 06-JAN-2005 - Color recognition new printers corrected, work on Photo R200. V 1.0.7 12-DEC-2004 - Color recognition and model for new printers. V 1.0.6 11-DEC-2004 - Added palatin language (Pf) V 1.0.5 07-NOV-2004 - Handle disconnected printer for mtink - Dead lock condition while reset removed, modified entries for reset protocol. - Security hole for server (right for /var/run/mtink/*) fixed V 1.0.4 17-AUG-2004 - Added a few printers - added UTF-8 support for ttink. - added a little python application which allow to see the ink level via a browser - little problem with spec file fixed V 1.0.3 30-JUN-2004 - Modification of Makefile.ORG and Configure for X86_84 according to Nicola Fabiano ivololeribar@yahoo.it proposal. - Stylus Photo 2100 show not all 7 inks. - Stylus C42xx allow catridge exchange from mtink - Documentation now searched under $prefix/doc/mtink. Past version had only a fews build in pathes. - Added installation of file printer.desc V 1.0.2 16-MAI-2004 - Adaptation for gimp 2.0 v 1.0.1 25-JAN-2004 - Check nscript for motif modified according to proposal from Raulk Morales (Problem on Debian where the motif lib is located in /usr/lib). V 1.0.0 02-NOV-2003 - Modified Makefile (ttink don't need X- libraries) - Support for the binary version of the status message returned by newer printers as the C43 and C84 - debug facility for the D4 protocol via command line argument -L instead of special compilation flag V 0.9.59 25-OCT-2003 internal - Test on CX3200: -> disable alignment pushbutton, set reset to D4 only V 0.9.58 17-OCT-2003 - D4 printers will block if the ink level is low. Disable test of printer type for exchange ink (unconditionnaly) and for status request (GET_IQ) if the autodetection of printer is disabled. - Modifications of Makefile V 0.9.57 07-SEP-2003 internal - Little problem within makefile fixed. V 0.9.56 05-SEP-2003 - Install startscript added /usr/local/sbin to path - Hotplug behaviour for mtinkd / mtink improved - changes for Mac OS-X - Added doc path for Mandrake 9.0 V 0.9.55b 25-MAI-2003 - Install startscript location is /etc/rc.d if /etc/init.d don't exist, this is for Slackware. The file /etc/rc will also be corrected. V 0.9.54b 12-JAN-2003 - Added danish resource translated by Mogens Jaeger. V 0.9.54 26-DEC-2002 internal - Added all known printers, modified sorting of printer list (alpha numerical). V 0.9.53 26-DEC-2002 - Added Stylus C82 - Modification regarding Exploit from David Endler build in. V 0.9.53 21-DEC-2002 internal - Problem wih C42xx corrected. If the printer is allready into the D4 mode, sendinf a get state request don't work, the printer must be set tom the non D4 mode and the into the D4 mode again. V 0.9.53 11-DEC-2002 internal - Error in file getGimpPluginDir.sh corrected. V 0.9.52 06-DEC-2002 - Added C42SX and C42UX - Few correction to the start script mtink - Correction and adds for the documentation V 0.9.52c 01-DEC-2002 internal - Modified parameter for the Color 777 V 0.9.52b 26-NOV-2002 internal - File etc/mtinkd corrected according to report from Yasunari Tosa V 0.9.52a 19-NOV-2002 internal - The browser prozess terminate as zombie, corrected. - Spec-file renamed (mtink.spec.ORG and mtink-all.spec.ORG), Makefile.ORG corrected. V 0.9.51 19-OCT-2002 - Server mtinkd: Create the directory /var/run if necessary (Solaris) - Makefile / rpm Red Hat 8.0 don't know the -ba flag for rpm, use rpmbuild if existing. - Mtink, preference menu: cyclic scan modified according to old state and device (/dev/... /var/mtink/...) - Mtink: dead lock removed which may appear while the server is running and the user try to choose a normal device file. - Mtink: destroy the "icon" window, if the device file changed and no more the fifo. - Mtink: corrected determining position of the "icon", this was not always OK. V 0.9.51a 06-OCT-2002 internal - Better checks for Motif / Lesstif (Linux). The library file will also be set if the libXm.so link point to the wrong version. - Code cleaning for mtinkc - Checked for compiling with gcc 3.2 - New html file (for add of a new printer) - Correction of wrong link doc V 0.9.50 03-OCT-2002 - File location rearanged, most text files moved to the directory html - Created link doc -> html - modification of *.spec files according to new layout. - Added index.html into the html directory V 0.9.49 01-OCT-2002 - Resource corrected according to message from Sylvain Legall - Configure modified (detection of gimp devel package) - Add dlag -g / --no-gimp to the configure script V 0.9.48 29-SEP-2002 internal - Adds to the Makefile concerning problems with mixed openmotif/lesstif environment, not handled automatically - Add installation / uninstalltion of some file in the Makefile. - Documentation: corrected name of gimp-installInitScript.sh to gimp-installInitScript.sh V 0.9.47 28-SEP-2002 - Modified Makefile, the gimp plugin will be installed under the global directory. - RPM Spec file modified for read of global gimp directory via the new file getGimpPluginDir.sh V 0.9.46 27-SEP-2002 - Added check for egid (scanning for device files). - Corrected Makefile.org regarding rpm-all tag. V 0.9.45 26-SEP-2002 - Added mtink.spec (rpm spec for Red Hat) donnated by Keith Amidon - Added a drivative spec file (all packages in one rpm) - corrected mtinkc.c (one header file missed according to Keith). V 0.9.44 21-SEP-2002 - Added Stylus C62 - Code cleaning - Add code to some header file for compatibility to C++ V 0.9.43 20-SEP-2002 - Auto detection don't work with some printers, corrected. V 0.9.42 16-SEP-2002 - Disabled the Motif drag and drop feature from chooser. - Modified the gimp pluging in order to call the chooser if more as 1 configuration file found. - Modified Makefile, erroneous error message. V 0.9.41 16-SEP-2002 - Disabled the Motif drag and drop feature. - Little code changes in order to have lesstif workink correctly with xpm. - the "icon" window will now be moved with either the button 2 and 3. V 0.9.40 15-SEP-2002 - Lesstif 1.2 don't habe Xpm build in as Motif 1.2 under Solaris. Check for Xm/Xpm.h and X11/xpm.h in order to create a running makefile. V 0.9.39 14-SEP-2002 - More error in Configure script removed - Several little errors corrected, - change of device (/var/mtink/... <-> /dev/...) corrected. V 0.9.38 13-SEP-2002 - Error in Configure script removed V 0.9.37 12-SEP-2002 - Reviewed the code for the "icon" window, No more wm decorations, button 2 -> move function. Now positionning OK for all tested window managers. - Added a little utility (Motif) for choosing of the printer, if the user own more as one. - Behaviour in case of server restart corrected. The server will be asked every second for life, this insure that the server will terminate if started to soon (time must be greater as 1 sec). - Lock for user program / server reviewed. - Added a few resources for printer status. - Added html files V 0.9.36 11-SEP-2002 internal - Some corrections. - Added save / restore for position of the "icon window" a lot of window manager are wrong ! fvwm2 don't work as expected. The position is OK for Xfce, Mwm, Kde, Gnome Windowmaker. - Bug within mtinkd removed. V 0.9.35 10-SEP-2002 internal - added a second toplevel window looking as an icon. V 0.9.34 09-SEP-2002 internal - Reorganisation of code an splitting of cmd.c into more files V 0.9.33 02-SEP-2002 - Added lock mimick, this avoid problems if cups try to send 2 job on the same time. - correction of installation script, adds to the Makefile - Test on Red Hat, Mandrake, Debian, SuSE, all OK V 0.9.32 01-SEP-2002 internal - Installation of cups backend and installInitScript added. - Minor corrections. V 0.9.32 31-AUG-2002 - Bug fix for the Stylus Color 580 provided by Glen Steward. - install script for the mtink start/stop script modified - Errors within the html files fixed. V 0.9.31 30-AUG-2002 - mtinkd terminate at a early stage, printer just poweed on, fixed - mtink-cups donnated by Till Kamppeter include into the etc directory, installation job must be performed. - included a version of the start-stop script donnated by Till Kammpeter and modified for use of a configuration script, see also below. - created the directory detect and put askPrinter.c inside, modified askPrinter.c with code borrowed from Tim Waugh (Red Hat). askPrinter return now the ID string for // and USB printers. - various improvment V 0.9.30 29-AUG-2002 - Error in the etc/mtink file corrected, missed file etc/mtink.ORG added. V 0.9.29 29-AUG-2002 - Italian translations and corrections from Alberto Zanoni added - Installation script for the server start/stop scripts provided (Linux) V 0.9.28 28-AUG-2002 - The -type option will now be always taken for building of the pipe name (of course only if the option was passed). - If the option -type name is given mtinkd check the printer against the proper type and eventually terminate. V 0.9.27 27-AUG-2002 external tests - Added generation of file /var/run/mtink/xxx for stop/status purpose V 0.9.26 27-AUG-2002 tests - modified the server and mtink. The fifo name may be the name of the printer instead of the device name. Mtinkd detect the correct device file according to code given by Till Kamppeter. V 0.9.25 25-AUG-2002 internal - Server don't set the printer to the non D4 mode if killed, corrected. V 0.9.24 24-AUG-2002 - More documentation, little change for the official release. V 0.9.23 24-AUG-2002 - detection and handling of error while printer is powered on/off improved. V 0.9.22 24-AUG-2002 - Added option -i / --identity to ttink. This will allow scanning via [mtinkd] ttink. - cyclic query of ik quantity build into the frontends. V 0.9.21 22-AUG-2002 - Added a sys V like start/stop script and modified the server in order to make the life easier. V 0.9.20 22-AUG-2002 - Tests and corrections of bugs and behaviour in case of power on/off of printer. V 0.9.19 22-AUG-2002 - first alpha release for external testing. - new directory etc for startup scripts, to be filled wit life. V 0.9.18a 21-AUG-2002 - corrected german textes from Karlheinz Guenster included. V 0.9.17a 12_AUG-2002 ... 20-AUG-2002 - various modifications - new directory server and code for a D4 server allowing printing of jobs and query of ink quantity - modification of mai sources according to the new requirement - modification of Makefile V 0.9.17 11-AUG-2002 - added "-config # "option to mtink for people with printers on different ports. V 0.9.16 10-AUG-2002 - added light black, corrected little bugs. V 0.9.15 06-AUG-2002 internal - Layout for file location modified. Makefile adapted V 0.9.14 05-AUG-2002 - more documentation (english, french, german). - debian directory moved to Debian.Old, this will allow Sylvain to maintain the debian package more easelly. V 0.9.13 03-AUG-2002 / 04-AUG-2002 - resources for mtink in language specific files instead of one big file. - The configuration script allow to choose only to generate the command line version. - Added the file mtink.sh as example for people which want to monitor different printer attached on differnt ports. V 0.9.12 29-JUL-2002 internal - little correction of resources acc. to Steven J. Mackenzie proposal - Code cleanup (not used variables,...) V 0.9.11 27-JUL-2002 - Bug in description for the Stylus Photo 790 fixed (Steven - Code cleaning, removed unused variable,... V 0.9.10 27-JUL-2002 - The Photo 820 alignment work. - little correction concerning the printer description. - Resources for Mtink rearanged, dource are now the Mtink.res file and no more the c file resource.c. generating of the resource.c file done by the new utility bldRes. V 0.9.03 24-JUL-2002 internal - Added code for external printer description file - tried to fix the Alignment bug for the Photo 820 The modifications seem to be others as those expected and are also due to a buggy firmware. The exit D4 command must be issued after all channels was closed. V 0.9.02 21-JUL-2002 - Added the file Ttink.en for translators. - Added utility bldRes.c for converting of resource files to there *.c counterpart. - Fixed bug for Photo 820 alignment function. V 0.9.01 21-JUL-2002 - Test on Solaris and corrections for line discipline V 0.9 20-JUL-2002 - Ttink (console based version of ttink) has now all functions available for mtink. - Code change for internalisation developed. - first resource file (german) for ttink written. V 0.8p 15-JUL-2002 - Bug while saving configuration (introduced with V 0.8o) fixed. - Added head alignment (ttink). - internationalization beginned. V 0.8o 14-JUL-2002 - Added code for extern aligment pattern (Photo 820). V 0.8n 10-JUL-2002 - Security problems fixed as stated by Till Kampeter. 1) The browser will allways be vcalled with the user id and not with the effective uid. 2) Mtink may work with he normal uid if the user is a member of the lp group and the device file have lp as group Mtink may be a set uid program with owner root or the owner of the device files. - Added the italian translation provided by Alberto Zanoni. V 0.8m 01-JUL-2002 - Bug regarding exchange ink for the Stylus Color 480 fixed. V 0.8n 28-JUN-2002 / 29-JUIN-2002 internal - Add file for debian package which was provided by Sylvain Le-Gall. - Makefile.ORG modified as given by Sylvain. - little modification of resources - minor modification of the file cfg1.c - Added the file LICENCE - included of the first work from Sylvain LE GAL concerning debian package V 0.8m 08-JUN-2002 09-JUN-2002 - First modifications for writing of an TTY based version, model description moved to the new file model.c. All functions are not supported (exchange head, align head). - Added Path in configure file for Debian Linux V 0.8l 31-MAI-2002 - Added path for the documentation and corrected the Configure and Mekefile.ORG files. V 0.8k 26-MAI-2002 - Modified detection of available device file. The acess call check the access rights according to the uid and not the euid. If the devfs is used on Linux, mtink must be a root setuid programm, the device file are created dynamically amd the rights will not be OK for normal users. - Added device name according to Linux devfs (used by mandrake 8.2). V 0.8j 20-MAI-2002 - Makefile and configure script improved. plug-in will also be installed via make install. deinstallation of plugins also integrated. V 0.8i 18-MAI-2002 - Reviewed configurations script and the Makefile. Textes will be printed into english, french and german. Installlations stuff added. Test performed under Linux, Solaris (sparc) and freeBSD. V 0.8h 04-MAI-2002 / 11-Mai-2002 - Added Stylus C50, Stylus Photo 950, Stylus Photo 2100 will be marketed soon. - Correction for first read call at initialization. - Modifications ofr Solaris 8, first tests witg Stylus Color 980 on Solaris are OK V 0.8g 25-APR-2002 - Correction for the C80 / C70 not alignment for color head. - Some little bugs removed. V 0.8f 20-APR-2002 - Correction for german resources - Modification, for better handling of head alignment on C80 V 0.8e2 19-APR-2002 internal - Created Configure script, test on Solaris, FreeBSD and Linux V 0.8e1 15-APR-2002 internal - Added Stylus Color 685 - Modified the Makefile a little bit V 0.8e 09-APR-2002 - Bayrische bersetzung von Robert Wachinger integriert V 0.8d 07-APR-2002 - Bug for the Color 580 (exchange cartridge) fixed. Better handling of abnormal termination of the GUI. Fix call for netscape help browser problems, included $(HOME)/mtink in the search path for documentation. V 0.8c 01-APR-2002 - Italian documentation updated V 0.8b 30-MAR-2002 - Diplay of unkmow printers modified. - German documentation from Marc Riese substituted by the translation from Karlheinz Gnster. - Call of netscape modified (version 6.2x) V 0.8a 24-MAR-2002 - Whell mouse handling reviewed and generalized. The file wheelmouse.c and whellmouse.h may be used for other programs. - Whell mouse handling for all scrolled windows, scrollwide modified according to shift and scontrol keys. V 0.8 23-MAR-2002 - Handling for Button 4 and 5 (scroll mouse) added for printer and device lists. - French textes for the tooltips. - Provision for unknown (newer printer) integrated. Unknown printer are handled as photo printer and the cartridge alignm,ent is disabled. - Datas are no more stored into 2 files. The configurations file is .mtinkrc. - Restructuration (not yet finished). V 0.7a 13-MAR-2002 - english textes for tooltips added (if you know english you can send better textes). - Added file foe device FreeBSD. V 0.7 09-MAR-2002 - Tooltips implemented, not finished know (only german and as resource File). - Copied a few xpm file from the xfce pacakge to the directory XPM V 0.6b 23-FEB-2002 - German documentation integrated (translation from Marc Riese) V 0.6a internal - little modifications V 0.6 15-FEB-2002 - Added plugin for gimp. Tested compiling under SuSE 6.4 and SuSE 7.3 V 0.5d 14-FEB-2002 - Minor change regarding themes, added the file Themes. V 0.5c 11-FEB-2002 - put the display string to environment (may be usefull if a browser is started from a remote instance of mtink). - If no printer or device is "preset" show the list correctly. - If no dev found return with proper env and inform the user about this. - Little correction for the resources. V 0.5b 09-FEB-2002 - correction for german resources, thank to Marc Riese - Bug in file cfg2.c, ink quantity not processed correctly. - Ink quantity bars not set correctly if ink level = 0, corrected. - If the printer is powered down or if the printer cable is removed, the subprocsee for printer access may remain in a loop, fixed. V 0.5a 05-FEB-2002 - wrong prototype in header file eliminated, V 0.5 02-FEB-2002 - added configuration of printer and device file into configure window. - Trkish resource corrected. V 0.4 20-JAN-2002 - modified the protocol for some older printers V 0.3f 17-JAN-2002 - Turkish resources completed (intermal) V 0.3e 15-JAN-2002 - Correction for a few resources. - Little changes concerning automatic printer recognition - Resources into a separated file resources.c V 0.3d 31-DEC-2001 - Error textes completed (emglish, german and french). V 0.3c 30-DEC-2001 - correction of code for launching of netscape or mozilla - more documentation. V 0.3b 29-DEC-2001 Internal - Added configuration for autodetection (disable this) - Added command line option -noAutoDetect - modified autodetection for the first time mtink is called V 0.3b 29-DEC-2001 - Resource correction (german) - wrong code fixed V 0.3a 28-DEC-2001 - Resource correction. - documentation update - bug for some printer (get ink quantity ) fixed. - Script for extraction of resources added. - Makefile correction and a little script for static binding of mtink added. V 0.3 27-DEC-2001 - Added preference menu for selection of the help browser. V 0.2g 23-DEC-2001 - correction of resources. V 0.2h 19-DEC-2001 Internal - correction of documentation. - Makefile corrected, linking fail on Red Hat 6.2, option -lXp amd -letx needed, thanks to Stefan Bohlein. V 0.2g 18-DEC-2001 internal - Italian html text from Alberto Zanoni integrated, change for internationalization regarding help. V 02.f 17-DEC-2001 - Test with Stylus Color 980 done. This device need only 2 pass for the head alignment. V 0.2e 16-DEC-2001 - internatilization was not OK some textes was english instead of italian,.... Bug corrected V 0.2d 16-DEC-2001 - added help via Netscape (not perfect). V 0.2c 16-DEC-2001 - added % output right of scale V 0.2b 14-DEC-2001 - added a few turkish textes - bug for get credit (D4 mode) corrected. V 0.2a 29-DEC-2001 - german resource corrected. - Stylus Photo 750 was declared as "OLD" printer, changed to D4 - improvement of look (new resource setting) in order to have the same look under openMotif and Motif 1.2 / Lesstif mtink-1.0.16/getGimVersion.sh0000755000076400001540000000100410376041214014163 0ustar jjfuse#!/bin/sh # check for the gimp plugin directory getGimptoolDir() { for dir in `echo $PATH | tr ':' ' '` do if [ -x $dir/gimptool ] then echo $dir break; fi done } # this work perfectly with gimp 1.0, 1.1 and 1.2. # gimptool will alway fail but we can get the wanted path getDir() { sh -x $gimptoolDir/gimptool ---install-admin-bin t.sh --just-print --dry-run 2>&1 | tee -a /dev/tty| sed -n 's/.*plug[_]*in[_]*dir=\(.*\)/\1/p' } gimptoolDir=`getGimptoolDir` getDir mtink-1.0.16/README0000777000076400001540000000000010665176047013367 2doc/READMEustar jjfusemtink-1.0.16/README.MacOsX0000644000076400001540000000562410466121313013066 0ustar jjfuseThis is for Mac OS X users. This package include a terminal version (ttink) and a graphical user interface mtink, which require the X11 system and the openMotif or Lesstif package. Only USB printers are supported. Requirements: ------------- In order to compile mtink and ttink you need the libusb package which can be found at sourceforge.net, the necessary development package for you Mac OS X system which can be downloaded from the apple site or installed from your DVD (xcode) and the openmotif package which can be downloaded from http://www.ist.co.uk/DOWNLOADS/motif_download.html XCode / X11 SDK: ---------------- The required X11 packages are located on the DVD under: X11 runtime : /System/Installation/Packages/X11User.pkg X11 development: /Xcode Tools/Packages/X11SDK.pkg Libusb: ------- For the libusb, you can download it from the fink project. First dowload fink at http://fink.sourceforge.net and install this package. From a terminal call: "fink install libusb" OpenMotif: ---------- OpenMotif is delivered as *.dmg file and contain a *.pkg file which do all necessary works if clicked. Mtink/Ttink Configuration: -------------------------- call "./Configure -x -p /sw" This will generate the Makefile necessary for compiling the terminal application ttink. or "./Configure -p /sw" The second command will generate the Makefile for producing of the terminal based ttink as well as the GUI program mtink. If openMotif or Lesstif is installed ./Configure shall no complain and produce the wanted Makefile. Compilation: ------------ if all was ok call "make" Installation: ------------- if all was ok call "sudo make install" After this step you can call ttink from a terminal. or launch mtink which is located under /sw/bin. The best way to launch mtink will probably to insert it into the X11 Applications menu. Environment: ------------ The Apple I had was not OK concerning the language to use for the programs. I solved the problems as follow: create the file /Users//.bashrc and insert the line: export LANG=de_DE.UTF-8 export DISPLAY=:0 finally Save the file. At the next login the enironment LANG will be set correctly. The example above is for german. The supported languages are Italian (it_IT.UTF-8), english, not need to do anythings, French (fr_FR.UTF-8), Hungarian (hu_HU.UTF-8), turkish (tr_TR.UTF8), danish (da_DA.UTF8),... . If your preferred language is not known by ttink/mtink, the tools default to english. You may also write a script which set the environment. This script shall look as follow: --------------------------------------------------- #!/bin/sh export DISPLAY=:0 export LANG=de_DE.UTF-8 /sw/mtink "$@" ---------------------------------------------------- The file may be located under /sw/bin and be called mtink.sh Please mmake shure that this file has the exeution rights: chown 755 /sw/bin/mtink.sh Jean-Jacques Sarton jj.sarton@t-online.de http://xwtools.automatix.de mtink-1.0.16/server/0000755000076400001540000000000010665016555012370 5ustar jjfusemtink-1.0.16/server/mtinkd.c0000644000076400001540000013257710441253704014030 0ustar jjfuse/* mtinkd.c * Copyright (C) 2001 Jean-Jacques Sarton jj.sarton@t-online.de * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* d4Print.c allow to print data via the EPSON D4 protocol. * * The data to be printed are to be passed via a pipe and must * be "printer code". * d4Print dont modify the datas which will only be packed * int the EPSON D4 protocol * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#ifdef MACOS //#include "fakepoll.h" //#else #include //#endif #include #include #include "d4lib.h" #include "cmd.h" #include "mtink.h" #ifndef DEVICE #define DEVICE "/dev/lp0" #endif static int terminate = 0; static int debug = 0; static char *prgName; static char *fifoName = NULL; extern shmem_t *shmem; int shmid = -1; char *printerName = NULL; char *runFile = NULL; configData_t actConfig; /* not used now */ /* the printers listed here are known as no D4-able printers */ char *noD4Printers[] = { "Color", "Color 1500", "Color 1520", "Color 300", "Color 3000", "Color 400", "Color 440", "Color 500", "Color 600", "Color 640", "Color 800", "Color 850", "Color Pro", "Color Pro XL", "Photo", "Photo 700", "Photo EX", "Pro 5000", "Pro 5500", "Pro 7000", "Pro 7500", "Pro 9000", "Pro 9500", NULL, }; /*******************************************************************/ /* Function checkForD4able */ /* */ /* scan the table noD4Printers, if match return 0 else return 1 */ /* */ /* Input: char *name printer ID */ /* */ /* Return: 0/1 */ /* */ /*******************************************************************/ int checkForD4able(char *name) { char **model = noD4Printers; char *s; int l; if ( name == NULL || *name == '\0' ) { /* assume this is OK */ return 1; } while (*model) { if ( (s = strstr(name, *model)) ) { l = strlen(*model); if ( s[l] == ';' ) { return 0; } } model++; } return 1; } /*******************************************************************/ /* Function makeRunFile */ /* */ /* create the file /var/run/mtink/ and write the pid into it */ /* */ /* Input: char *fifo file */ /* */ /* Return: - */ /* */ /*******************************************************************/ void makeRunFile(char *fifo, int create) { char *s; FILE *fp; int um; if ( (s = strrchr(fifo, '/')) ) { runFile = (char*)calloc(strlen("/var/run/mtink/") + strlen(s), 1); sprintf(runFile,"/var/run/mtink/%s", s+1); if ( debug ) { fprintf(stderr,"makeRunFile(%s, create=%d)\n",fifo, create); } if ( create ) { if ( access("/var/run", O_RDONLY) == -1 ) { um = umask(0); if ( mkdir("/var/run", 0700) == -1 ) { perror("mkdir "); if ( debug ) { fprintf(stderr,"can't create directory /var/run\n"); } exit(1); } umask(um); } if ( access("/var/run/mtink", O_RDONLY) == -1 ) { um = umask(0); if ( mkdir("/var/run/mtink", 0600) == -1 ) { perror("mkdir "); if ( debug ) { fprintf(stderr,"can't create directory /var/run/mtink\n"); } exit(1); } umask(um); } if ( (fp = fopen(runFile, "w")) ) { fprintf(fp,"%d\n", getpid()); fclose(fp); } } } } /*******************************************************************/ /* Function killServer */ /* */ /* tell the server that he has to abort */ /* */ /* Input: char *fifo file */ /* */ /* Return: 0 -> OK 1 = error */ /* */ /*******************************************************************/ int killServer(char *fifo) { key_t key; struct shmid_ds buf; int shmid; FILE *fp; char ibuf[100]; int pid; if ( fifo == 0 ) { return 1; } else { key = ftok(fifo, 'M'); if ( key > -1 ) { if ((shmid = shmget(key, sizeof(shmem_t), 0)) > -1) { if ( shmctl(shmid, IPC_STAT, &buf) > -1 ) { if ( debug ) { fprintf(stderr,"Kill process %d\n",buf.shm_cpid); } if ( kill(buf.shm_cpid, SIGINT) == -1 ) { return 1; } } } } else { /* look for pid into /var/run/mtink( */ if ( (fp = fopen(runFile,"r")) ) { if ( fgets(ibuf, sizeof(buf), fp) ) { if ( (pid = atoi(ibuf)) ) { if ( debug ) { fprintf(stderr,"Kill process %d\n",pid); } if ( kill(pid, SIGINT) == -1 ) { return 1; } } } fclose(fp); } } } return 0; } /*******************************************************************/ /* Function getServerState */ /* */ /* tell the server that he has to abort */ /* */ /* Input: char *fifo file */ /* */ /* Return: 0 -> OK 1 = error */ /* */ /*******************************************************************/ int getServerState(char *fifo) { key_t key; struct shmid_ds buf; int shmid; if ( fifo == NULL ) { return 1; /* not running */ } else { key = ftok(fifo, 'M'); if ( key > -1 ) { if ((shmid = shmget(key, sizeof(shmem_t), 0)) > -1) { if ( shmctl(shmid, IPC_STAT, &buf) > -1 ) { return 0; } } } else { if ( runFile && access(runFile, O_RDONLY) > -1 ) { return 0; } } } return 1; } /*******************************************************************/ /* Function decodePrinterType */ /* */ /* decode the string returned from printer and print the */ /* informations in an human readable way */ /* */ /* Input: unsigned char *buf The String returned from printer */ /* int len Size of string */ /* */ /* Return: 0 if errro 1 if found */ /* */ /*******************************************************************/ static int decodePrinterType(char *buf, int len) { char *s = buf; char *t = buf; int i; if ( debug ) { fprintf(stderr,"decode:\n%s\n",buf); } if ( buf ) { for (i=0; i < len; i++) { if ( strncmp(s, "DES:", 4) == 0 || strncmp(s, "MDL:", 4) == 0 ) { s +=4; t = s; while(*t && *t != ';') t++; *t = '\0'; printerName = strdup(s); *t = ';'; return 1; } else { s++; } } } return 0; } /*******************************************************************/ /* Function terminatePrg() */ /* delete the shared memory and exit with passed code */ /* */ /* Input: int exitCode */ /* */ /* */ /* Output: - */ /* */ /* Return: - */ /* */ /*******************************************************************/ static void terminatePrg(int code) { struct shmid_ds buf; if ( debug ) fprintf(stderr,"Received signal %d\n",code); if ( fifoName && code > -2 ) unlink(fifoName); if ( runFile ) unlink(runFile); if ( debug ) fprintf(stderr,"Handle shm\n"); if ( shmem ) { /* close D4 */ shmem->command = TERMINATE; if ( debug ) fprintf(stderr,"Process %d call doCommand(-1)\n", getpid()); doCommand(-1); if ( debug ) fprintf(stderr,"Process %d doCommand(-1) returned \n", getpid()); shmdt((void*)shmem); shmctl(shmid, IPC_RMID, &buf); } exit(1); } /*******************************************************************/ /* Function createIpc() */ /* create the IPC shared memory and semaphore */ /* */ /* Input: char *fifo name of fifo used for generation of key */ /* */ /* */ /* Output: - */ /* */ /* Return: 0 if OK -1 if wrong */ /* */ /*******************************************************************/ static int createIpc(char *fifo, int mode, uid_t uid, gid_t gid) { key_t key; int ret = -1; struct shmid_ds buf; if ( debug ) { fprintf(stderr,"createIpc(%s,...)\n",fifo); } /* create the key */ key = ftok(fifo, 'M'); if ( key > -1 ) { if ((shmid = shmget(key, sizeof(shmem_t), IPC_CREAT|mode)) > -1) { if ( shmctl(shmid, IPC_STAT, &buf) > -1 ) { /* if there are attached processes, die */ if ( buf.shm_nattch ) { fprintf(stderr,"attached processes\n"); return -2; } buf.shm_perm.uid = uid; buf.shm_perm.gid = gid; if ( shmctl(shmid, IPC_SET, &buf) == -1 ) { perror("shmctl "); } else { shmem = (shmem_t*)shmat(shmid, NULL, 0); if ( shmem != NULL ) { shmem->ready = 0; ret = 0; } else { perror("shmat "); } } } else { perror("shmctl "); } } else { perror("shmget "); } } else { perror("ftok "); } if ( ret == -1 ) { /* cleanup */ if ( shmid > -1 ) { shmctl(shmid, IPC_RMID, &buf); } } return ret; } /*******************************************************************/ /* Function readFromStdin() */ /* read the data which are to be printed out */ /* */ /* Input: unsigned char *iBuf where to put the datas */ /* int size of buffer */ /* */ /* Output: int *stop if the stream is closed set to 1 */ /* */ /* Return: The number oc bytes read */ /* */ /*******************************************************************/ static int readFromStdin(int in, unsigned char *iBuf, int size, int *stop) { int rd = 0; int got; struct pollfd pfd[1]; int ret; *stop = 0; while ( rd < size ) { pfd[0].fd = in; pfd[0].events = POLLIN|POLLHUP; pfd[0].revents = 0; ret = poll(pfd, 1, 1000); if ( ret == 0 ) { return rd; } if ( ret == 1 ) { got = read(in, iBuf+rd, size-rd); if ( got > 0 ) { rd += got; } } if ( ret == -1 || (pfd[0].revents & POLLHUP) ) { *stop = 1; break; } } return rd; } /*******************************************************************/ /* Function strCNCmp() */ /* */ /* compare the id string returned by the ioctl call with the name */ /* provided by the user. the last cgaracter for the id string shall*/ /* be as ; */ /* input: char *id id string from printer */ /* char *t name provided by the user */ /* int len length of name */ /* */ /* return: 0 if match, != 0 if no match */ /* */ /*******************************************************************/ int strCNCmp(char *id, char *t, int len) { int i; int ret = 0; for ( i = 0; i < len && ! ret; i++) { if ( id[i] == ' ' ) { if ( t[i] == ' ' || t[i] == '_' ) ret = 0; else ret = 1; } else ret = id[i] - t[i]; } if ( !ret ) { ret = id[len] - ';'; } return ret; } /*******************************************************************/ /* Function checkPrinterDes() */ /* */ /* scan the id string against the passed name */ /* */ /* input: char *id id string from printer */ /* char *type wanted printer name */ /* */ /* return: 0 if not found 1 if OK */ /* */ /*******************************************************************/ int checkPrinterDes(char *id, char *type) { int len = 0; if ( debug && type ) { fprintf(stderr,"Search <%s>\n",type); } if ( type ) len = strlen(type); while ( type && (id = strchr(id, *type)) ) { if ( strCNCmp(id,type,len) == 0 ) { if ( debug ) { fprintf(stderr,"Printer detected\n"); } return 1; } id++; } if ( type == NULL ) return 1; return 0; } #ifdef linux /*******************************************************************/ /* Function checkPrinter() */ /* */ /* Ask the usb lp file for the id string */ /* This work only with recent linux kernel. */ /* If the wanted printer is detected set the device variable */ /* */ /* input: char *dir directory containing the dev-file */ /* char *dev */ /* char *type */ /* output char **device */ /* */ /* Return: 0 not found, 1 found, -1 ioctl not supported */ /* */ /*******************************************************************/ /* based on code from Till Kamppeter */ #define IOCNR_GET_DEVICE_ID 1 #define LPIOC_GET_DEVICE_ID(len) _IOC(_IOC_READ, 'P', IOCNR_GET_DEVICE_ID, len) /* get device_id string */ int checkPrinter(char *dir, char *dev, char *type, char **device) { char *fn; int fd; unsigned char argp[1024]; int length; /* build file name */ if ((fn = calloc(strlen(dir) + strlen(dev) + 2, 1)) == NULL ) { /* no memory */ terminatePrg(1); } sprintf(fn,"%s/%s", dir, dev); if ( debug ) { fprintf(stderr, "Check %s\n",fn); } /* open device file */ fd = open (fn, O_RDWR); if (fd < 0) { if ( debug ) { fprintf(stderr,"can't open %s\n",fn); perror("open"); } free(fn); return 0; } /* ask the kernel for the id string */ if (ioctl (fd, LPIOC_GET_DEVICE_ID(sizeof(argp)-1), argp) < 0) { /* failed, assume ioctl function not supported */ close(fd); free(fn); fprintf(stderr,"mtinkd: IOCTL not supported\n"); return -1; } close(fd); /* check the is string against the wanted printer type */ length = (argp[0] << 8) + argp[1]; /* make sure that we will not write behind the end of buffer */ if ( length > sizeof(argp)-1) { length = sizeof(argp)-1; } argp[length] = '\0'; if (checkPrinterDes((char*)argp+1, type) == 1) { *device = fn; return 1; } free(fn); return 0; } /*******************************************************************/ /* Function waitForPrinter() */ /* */ /* scan the device directory for printer device files */ /* */ /* input: char *base directory +base name of printer dev-file */ /* char *type wanted printer type */ /* output: char **device filled with device name */ /* */ /* return: 0 fatal error, 1 printer found, -1 ioctl not OK */ /* */ /*******************************************************************/ static int waitForPrinter(char *base, char *type, char **device) { DIR *dir; struct dirent *ent; char *s; int ret; /* get dir and name part */ if ( base ) { s = strrchr(base,'/'); if ( s == NULL ) return 0; *s = '\0'; } else { return 0; } /* open the directory */ dir = opendir(base); if ( dir == NULL ) { *s = '/'; return 0; } /* and scan the directory against wanted printer type */ for (;;) { while ( (ent = readdir(dir)) != NULL ) { /* device name match with the given name prefix ? */ if ( strncmp(s+1, ent->d_name, strlen(s+1)) == 0 ) { /* test for given printer type */ /* if printer found close dir and return 1 */ /* and set also device to the propervalue */ if ( (ret = checkPrinter(base, ent->d_name, type, device)) ) { /* at this stage 2 possibilities: 1 -> OK -1 -> ioctl failed */ *s = '/'; closedir(dir); return ret; } } } sleep(2); rewinddir(dir); } } #endif /*******************************************************************/ /* Function main() */ /* The begin of the world */ /* */ /* Syntax: d4Print [device file] */ /* */ /*******************************************************************/ int main(int argc, char **argv) { int fd; unsigned char iBuf[0xffff]; int sockId = 0; int len; int sndSize = 0x1006; /* 8K buffer + prot data */ int i; int in = fileno(stdin); int stop = 0; char *device = DEVICE; int daemon = 1; struct pollfd pollfd[2]; char *s; struct stat sBuf; int um = 0; char *model = NULL; int state; char *retBuf = NULL; char printerFound = 0; int d4Entered = 0; int block; int restart = 0; int mode = 0660; int detectCount = 0; int startMode = 1; char *type = NULL; /* option name */ #ifdef linux char *usbbase = NULL; char *oldDevice = NULL; #endif prgName = strchr(argv[0], '/'); if ( prgName != NULL ) { prgName++; } else { prgName = argv[0]; } argc--; argv++; while ( argc ) { if ( strcmp(argv[0], "start") == 0 ) { startMode = 1; } else if ( strcmp(argv[0], "stop") == 0 ) { startMode = 0; } else if ( strcmp(argv[0], "status") == 0 ) { startMode = 2; } else if ( strcmp(argv[0], "-debug") == 0 ) { debug++; } else if ( strcmp(argv[0], "-nodaemon") == 0 ) { daemon = 0; } else if ( strcmp(argv[0], "-L") == 0 ) { debugD4 = 1; } else if ( strcmp(argv[0], "-dev") == 0 ) { argc--; argv++; if ( argc ) { device = argv[0]; } else { fprintf(stderr,"argument expected for option -dev\n"); exit(1); } } else if ( strcmp(argv[0], "-model") == 0 ) { argc--; argv++; if ( argc ) { model = argv[0]; } else { fprintf(stderr,"argument expected for option -model\n"); exit(1); } } else if ( strcmp(argv[0], "-name") == 0 ) { argc--; argv++; if ( argc ) { type = argv[0]; } else { fprintf(stderr,"argument expected for option -name\n"); exit(1); } } #ifdef linux else if ( strcmp(argv[0], "-usbbase") == 0 ) { argc--; argv++; if ( argc ) { usbbase = argv[0]; } else { fprintf(stderr,"argument expected for option -usbbase\n"); exit(1); } } #endif argc--; argv++; } /* build fifo name */ #ifdef linux if ( usbbase && type ) { oldDevice = device; device = NULL; } #endif if ( type ) { fifoName = (char*)calloc(strlen(type)+ 20, 1); sprintf(fifoName, "/var/mtink/%s",type); } else { #ifdef linux if ( usbbase ) if ( waitForPrinter(usbbase, type, &device) == -1 ) device = oldDevice; #endif fifoName = calloc(strlen(device)+ 7, 1); sprintf(fifoName, "/var/mtink/%s",device+5); } /* replace / with _ and also blancks */ s = fifoName + 11; while ( *s ) { if ( *s == '/' ) *s = '_'; if ( *s == ' ' ) *s = '_'; s++; } if ( debug ) { fprintf(stderr,"Fifo name is <%s>\n",fifoName); } if ( startMode != 1 ) { makeRunFile(fifoName, 0); if ( startMode == 0 ) { i = killServer(fifoName); } else { i = getServerState(fifoName); } exit(i); } /* become a daemon */ if ( daemon ) { if ( fork() ) exit (0); setsid (); if ( fork() ) exit (0); close (0); open ("/dev/null", O_RDONLY); close (1); open ("/dev/null", O_WRONLY); if ( debug ) { fprintf(stderr,"%s running as daemon\n", prgName); } } /* create our directory if not existing */ if ( access("/var/mtink", O_RDONLY) == -1 ) { um = umask(0); if ( mkdir("/var/mtink", 0700) == -1 ) { perror("mkdir "); if ( debug ) { fprintf(stderr,"can't create directory /var/mtink\n"); } exit(1); } umask(um); chown(fifoName, 0, 0); } /* create write our pid to the /var/run/mtink/ file */ makeRunFile(fifoName, 1); /* if we are killed, cleanup first */ signal(SIGTERM, terminatePrg); signal(SIGINT, terminatePrg); signal(SIGQUIT, terminatePrg); len = mknod(fifoName, mode|S_IFIFO, 0); if ( len == -1 ) { if ( errno != EEXIST ) { perror("mknod "); if ( debug ) { fprintf(stderr, "can't create pipe %s\n",fifoName); } exit(1); } } /* create the shared memory */ if ( (i = createIpc(fifoName, sBuf.st_mode,sBuf.st_uid, sBuf.st_gid)) <= -1 ) { perror("create IPC"); terminatePrg(i); } #ifdef linux /* look for all device usbbase'*' */ /* if the type is OK continue */ if ( usbbase && type ) { if ( device ) free(device); device = NULL; if ( debug ) { fprintf(stderr,"wait for printer on %s*\n",usbbase); } if ( ! waitForPrinter(usbbase, type, &device) ) { terminatePrg(1); } } /* at this stage device may be NULL (ioctl call not supported */ if ( oldDevice ) { if ( device == NULL ) { device = strdup(oldDevice); usbbase = NULL; /* ioctl don't work */ } } /* device must have a correct value */ if ( ! device ) { if ( type ) { fprintf(stderr,"mtinkd: device not found or kernel to old\n"); } terminatePrg(1); } #endif /* wait for device file, may be it is created dynamically */ /* Linux dev FS */ while ( stat(device, &sBuf) == -1 ) { if ( debug ) { perror("stat "); } sleep(2); } if ( debug ) { fprintf(stderr,"found device file %s\n",device); } /* device file is present, get owner, permission */ /* and create our input pipe */ mode = sBuf.st_mode &(S_IRWXO|S_IRWXG|S_IRWXU); um = umask(0); umask(um); chown(fifoName, sBuf.st_uid, sBuf.st_gid); if ( debug ) { fprintf(stderr,"Fifo <%s> created and rigths set\n",fifoName); } /* open the pipe */ in = open(fifoName, O_RDONLY|O_NONBLOCK); if ( in == -1 ) { perror("open "); unlink(fifoName); if ( debug ) { fprintf(stderr, "can't open pipe %s\n",fifoName); } terminatePrg(1); } detectCount = 0; /* enter the overall loop */ while (!terminate) { shmem->block=2; if ( debug ) { fprintf(stderr,"TOP OF LOOPS\n"); } #ifdef linux /* look for all device usbbase'*' */ /* if the type is OK continue */ if ( usbbase && type ) { if ( debug ) { fprintf(stderr, "Linux: usbbase && type \n"); } shmem->block=2; if ( device ) { printerFound = 0; #if 0 /* this may cause problems if zhe printer has low ink */ d4Entered = 0; shmem->mode = NO_PROT; shmem->command = TEST_DEV; #else shmem->mode = PROT_D4; shmem->command = TEST_DEV; #endif strcpy(shmem->name, device); *shmem->function = '\0'; shmem->choice = 0; shmem->pass = 0; retBuf = shmem->buf; doCommand(-1); free(device); device = NULL; } shmem->block=2; if ( waitForPrinter(usbbase, type, &device) != 1 ) { terminatePrg(1); } } else #endif { if ( debug ) { fprintf(stderr, "!Linux || ! (usbbase && type) \n"); } shmem->block=2; printerFound = 0; #if 0 /* this may cause problems if zhe printer has low ink */ d4Entered = 0; shmem->mode = NO_PROT; shmem->command = TEST_DEV; #else shmem->mode = PROT_D4; shmem->command = TEST_DEV; #endif strcpy(shmem->name, device); *shmem->function = '\0'; shmem->choice = 0; shmem->pass = 0; retBuf = shmem->buf; doCommand(-1); shmem->block=2; /* wait for device */ if ( debug ) { fprintf(stderr,"Wait for device %s\n",device); } errno = 0; do { shmem->block=2; #if 0 /* this may cause problems if zhe printer has low ink */ shmem->mode = NO_PROT; shmem->command = TEST_DEV; #else shmem->mode = PROT_D4; shmem->command = TEST_DEV; #endif strcpy(shmem->name, device); *shmem->function = '\0'; shmem->choice = 0; shmem->pass = 0; retBuf = shmem->buf; /* close the device file if opened */ doCommand(-1); shmem->block=2; errno = 0; state = doCommand(2); shmem->block=2; if ( state == -1 ) usleep(1000000); } while ( state == -1 ); } if ( debug ) { fprintf(stderr,"Device %s is available\n",device); } /* try to get printer model name */ if ( model == NULL ) { shmem->block=2; /* try to detect the printer model */ errno = 0; #if 0 /* this may cause problems if the printer has low ink */ shmem->mode = NO_PROT; shmem->command = TEST_DEV; #else shmem->mode = PROT_D4; shmem->command = TEST_DEV; #endif strcpy(shmem->name, device); *shmem->function = '\0'; shmem->choice = 0; shmem->pass = 0; retBuf = shmem->buf; state = doCommand(2); shmem->block=2; if ( debug ) { fprintf(stderr, "detect printer call 1 -> %d\n", state); } if ( errno == ENODEV ) { if ( debug ) { fprintf(stderr,"detect printer try 1 error ENODEV\n"); } restart = 1; continue; } /* look for the operation result */ if ( state == -1 ) { fprintf(stderr,"%s: no access to printer\n", prgName); if ( debug ) { fprintf(stderr,"Device %s not available, terminate\n",device); } #ifdef linux if ( !usbbase) #endif terminatePrg(1); } else if ( state == 0 && retBuf) { /* may be OK, check for model name */ state = decodePrinterType(retBuf, strlen(retBuf)); if ( debug ) { fprintf(stderr, "decode printer call 1 -> %d\n", state); } shmem->ready = 0; if ( state ) { printerFound = 1; } else { /* test with D4 exit */ printerFound = 0; } } else if ( state == 1 ) { /* may be OK but no answer from device */ printerFound = 2; } else if ( state == 2 ) { /* may be OK and a D4 device */ printerFound = 2; } } else { printerFound = 1; printerName = strdup(model); errno = 0; shmem->block=2; state = doCommand(2); shmem->block=2; if ( errno == ENODEV ) { if ( debug ) { fprintf(stderr,"detect printer try 1b error ENODEV\n"); } restart = 1; continue; } } if ( printerFound == 0 || printerFound == 2 ) { if ( debug ) { fprintf(stderr, "enter detect printer call 2 printerFound == %d\n", printerFound); } shmem->block=2; errno = 0; shmem->mode = PROT_EXIT|PROT_OLD; shmem->command = GET_ID; state = doCommand(2); shmem->block=2; if ( debug ) { fprintf(stderr, "detect printer call 2 -> %d\n", state); } if ( errno == ENODEV ) { if ( debug ) { fprintf(stderr, "detect printer call 2 ENODEV ERROR\n"); } restart = 1; continue; } if ( state == 0 && retBuf ) { /* may be OK, check for model name */ state = decodePrinterType(retBuf, strlen(retBuf)); if ( debug ) { fprintf(stderr, "decode printer call 2 -> %d\n", state); } shmem->ready = 0; if ( state ) { printerFound = 1; } else { /* test with D4 */ printerFound = 0; } } else { /* may be OK and a D4 device */ printerFound = 0; } } if ( printerFound == 0 ) { if ( debug ) { fprintf(stderr, "enter detect printer call 3 printerFound == %d\n", printerFound); } shmem->block=2; errno = 0; shmem->mode = PROT_D4; shmem->command = GET_ID; state = doCommand(2); shmem->block=2; if ( debug ) { fprintf(stderr, "detect printer call 3 -> %d\n", state); } if ( errno == ENODEV ) { if ( debug ) { fprintf(stderr,"detect printer try 3 error ENODEV\n"); } restart = 1; continue; } /* look for the operation result */ if ( state == 0 && retBuf ) { /* may be OK, check for model name */ state = decodePrinterType(retBuf, strlen(retBuf)); shmem->ready = 0; if ( debug ) { fprintf(stderr, "decode printer call 3 -> %d\n", state); } if ( state ) { printerFound = 1; } else { /* test with D4 */ printerFound = 0; } d4Entered = 1; } else { /* not an Epson printer */ printerFound = 0; } } if ( printerFound == 0 && ! restart ) { if ( detectCount > 20 ) { /* more as 3 minute elapsed, die */ if ( debug ) { fprintf(stderr,"Printer on %s not detected, terminate\n",device); } #ifdef linux usleep(10000000); detectCount = 0; continue; #endif terminatePrg(1); } else { if ( debug ) { fprintf(stderr,"Printer on %s not detected, try again\n",device); } /* and wait for the next try */ usleep(10000000); detectCount++; continue; } } if ( model ) { setPrinterName(model); printerFound = 1; } else if ( type ) { /* check that the printer found is OK */ if ( !checkPrinterDes(retBuf, type) ) { #ifdef linux if ( !usbbase ) #endif { fprintf(stderr,"mtinkd: printer don't match required name\n"); terminatePrg(1); } } } /* check if the model is OK for D4 */ if ( !checkForD4able(model?model:retBuf) ) { fprintf(stderr,"mtinkd: %s is not D4 able\n", model?model:retBuf ); terminatePrg(1); } fd = shmem->fd; /* make shure that a job is aborted correctly in case */ /* of "kill" */ if ( !restart ) { /* may be we will et troubles with this */ /* make shure that we will not only be able to read from */ /* a pipe */ fcntl(in, F_SETFL, O_NONBLOCK); } /* initialize data channel */ if ( errno != ENODEV && !d4Entered ) { initializeD4(); } shmem->ready = 1; terminate = 0; if (errno != ENODEV ) restart = 0; /* main loop */ if ( debug ) { fprintf(stderr,"enter wait for print job loop\n"); } shmem->block = 0; while (!terminate && !restart) { /* At this place ask for incomming data. This may be */ /* from stdin or from the shmem. */ /* if the input id from stdin, leave the wait loop */ /* and process the print job */ /* If we have a command from the shared memory we will */ /* process the command and remain in this loop */ while(!terminate && !restart) { /* check for print job */ pollfd[0].fd = in; pollfd[0].events = POLLIN|POLLHUP; pollfd[0].revents = 0; i = poll(pollfd,1,1000); if (pollfd[0].revents & POLLIN ) { /* print job detected, initialize print environment */ terminate = 0; stop = 0; sndSize = writeD4Data(fd,(uc*)"",0,0); sockId = shmem->dataSocketId; if ( sndSize > 0 ) { sockId = shmem->dataSocketId; /* all is OK leave this loop */ break; } } /* some body has detached it from the pipe */ /* reinitialize the pipe */ if (pollfd[0].revents & POLLHUP ) { close(in); in = open(fifoName, O_RDONLY|O_NONBLOCK); if ( in == -1 ) { perror("open "); unlink(fifoName); terminatePrg(1); } else { stop = 0; } } if ( shmem && shmem->ready == 0 ) { /* OK for all commands, a few commands */ /* require the completion of the whole */ /* sequence ! */ for (block=1; block;) { doCommand(0); block = shmem->block; if ( errno == ENODEV ) { if ( debug ) { fprintf(stderr,"wait for job loop error ENODEV\n"); } restart = 1; stop = 1; break; } } /* tell that we are ready for processing */ /* a new command */ shmem->ready = 1; } } /* end loop process command, detect print job */ /* print loop */ if ( debug && !stop && ! restart ) { fprintf(stderr,"enter print job loop\n"); } while ( !stop && ! restart ) { /* get data from the pipe */ len = readFromStdin(in,iBuf,sndSize-6, &stop); /* write data */ if ( len > 0 && (i = writeD4Data(fd, iBuf, len, stop)) != len ) { fprintf(stderr,"%s: error while writing datas %d from %d\n", prgName,i,len); if ( errno == ENODEV ) { if ( debug ) { fprintf(stderr,"print jon loop error ENODEV\n"); } /* printer powered of or diconnected */ restart = 1; } stop = 1; /* leave also the top loop */ } /* if print job done, reinitialize the pipe */ if ( stop ) { close(in); /* avoid garbage if the device file was not OK */ if ( restart ) { mode = sBuf.st_mode &(S_IRWXO|S_IRWXG|S_IRWXU); errno = 0; unlink(fifoName); um = umask(0); len = mknod(fifoName, mode|S_IFIFO, 0); if ( len == -1 ) { if ( errno != EEXIST ) { perror("mknod "); exit(1); } } umask(um); chown(fifoName, sBuf.st_uid, sBuf.st_gid); if ( debug ) { fprintf(stderr, "Pipe file %s recreated\n",fifoName); } } in = open(fifoName, O_RDONLY|O_NONBLOCK); if ( in == -1 ) { perror("open "); unlink(fifoName); if ( debug && !stop && ! restart ) { fprintf(stderr,"can't reopen pipe %s\n", fifoName); } terminatePrg(1); } else { stop = 0; } break; } /* look for incoming request via shared memory */ if ( shmem && shmem->ready == 0 ) { /* only OK for getink command */ doCommand(1); shmem->ready = 1; if ( errno == ENODEV ) { restart = 1; } } } if ( restart) { break; } } /* end of main loop */ } /* end of overall loop, wait for device, open, ... */ /* here end of the for ever loop */ return 0; /* make gcc happy */ } mtink-1.0.16/checkMotifVersion.sh0000755000076400001540000001126410437502342015036 0ustar jjfuse#!/bin/sh # try to check for required library and check if header file comply # set a few variable so we can build the Makefile # Changes: # 01-JAN-2004 Added the /usr/lib path to the line # for l in `cat /etc/ld.so.conf` # according to code proposed by Raul Morales # # initialize a few variables MotifLib= found=0 XmHFound=0 XmLibFound=0 if uname | grep Linux > /dev/null 2>&1 then # declare the possible pathes for include files InclPathes='/usr/X11R6/include /usr/X11/include /usr/local/X11R6/include /usr/local/X11/include /usr/openwin /usr/X11R6/LessTif/Motif1.2/include /usr/include /usr/local/include' # declare standard path which will not be into ld.so.conf LibPathes='/usr/lib' # for each library path found in the file /etc/ld.so.conf if grep include /etc/ld.so.conf >/dev/null then nb=`ls /etc/ld.so.conf.d/*.conf 2>/dev/null | wc -l` if [ $nb -eq 0 ] then CMD='cat /etc/ld.so.conf' else CMD='cat /etc/ld.so.conf.d/*.conf /etc/ld.so.conf' fi else CMD='cat /etc/ld.so.conf' fi for l in `$CMD | grep -v include` $LibPathes do # and for each of the possible location for the motif headers for XmHPath in $InclPathes do Xm_h=$XmHPath/Xm/Xm.h if [ -f $Xm_h ] then XmHFound=1 else continue fi # for each motif library file for f in $l/libXm.so $l/libXm.so.[123] do if [ -f $f ] then XmLibFound=1 Ver=`strings $f | grep ' Version'` if grep "$Ver" $Xm_h > /dev/null then if [ `basename $f` = libXm.so ] then echo no special requirement for `echo $Ver | sed 's/^....//'` found=1 break else echo must link $f for `echo $Ver | sed 's/^....//'` MotifLib=$f found=1 break fi fi fi done if [ $found -eq 1 ] then break fi done if [ $found -eq 1 ] then break fi done >/dev/tty # final check if [ $found = 0 ] then # tell was is not OK if [ $XmLibFound -eq 0 ] then echo Motif / Lesstif library not found, please install the openmotif or lesstif package fi if [ $XmHFound -eq 0 ] then echo Motif / Lesstif devel not found, please install the openmotif or lesstif devel package fi # if the vesrion for devel and run time package differs if [ $XmLibFound -ne $XmHFound ] then echo runtime and devel package for openmotif / lesstif mismatch if [ "$XmHPath" != "" ] then echo Header file is for `sed -n 's/.*XmVERSION_STRING.*@(#)\(.*\)"/\1/p' $XmHPath/Xm/Xm.h` fi if [ "$Ver" != "" ] then echo Library file is `echo $Ver | sed 's/^....//'` fi fi exit 1 else # set the variable building the Makefile if [ "$MotifLib" = "" ] then MotifLib=-lXm else #check again for xpm if [ -f $XmHPath/Xm/XmXpm.h ] then mxpmheader="-DMOTIF_XPM": mxpmlib="" else mxpmheader="-DXPM_XPM" mxpmlib="-lXpm" fi fi # be a little bit verbose echo Motif library set to $MotifLib echo Motif include Path is $XmHPath if [ "$mxpmlib" != "" ] then echo Xpm library is $mxpmlib fi echo fi > /dev/tty else if uname | grep Darwin >/dev/null then Pathes='/usr/OpenMotif /sw /usr/X11R6' for path in $Pathes do if [ -f $path/include/Xm/Xm.h ] then Xm_h=$path/include/Xm/Xm.h headVer=`sed -n 's/.*VERSION_STRING.*\(@(#).*\)"/\1/p' $Xm_h` if [ -f $path/lib/libXm.dylib ] then Xm_l=$path/lib/libXm.dylib libVer=`strings -a $Xm_l | grep "$headVer"` if [ ! -z "$libVer" ] then found=1 MotifLib="-L$path/lib -lXm" XmHPath=$path/include # be a little bit verbose echo Motif library set to $MotifLib echo Motif include Path is $XmHPath break; fi fi fi done fi if [ $found -eq 0 ] then echo Motif / Lesstif devel not found, please install the openmotif or lesstif package fi > /dev/tty fi mtink-1.0.16/Temak0000644000076400001540000000675510376041214012050 0ustar jjfuse!!!!!!! Tmk az mtink-hez !! Teszteltem az mtink-et nhny xpm fjllal az xfce/ tervezetbl !! s feltltttem ezt a fjlt forrsokkal az xpm-hez, amik tetszetsen !! nznek ki. !! A hasznlatban lev pixmap fjlnak rvnyes knyvtrban kell lennie, !! az mtink indulshoz a fjlhoz vezet teljes tvonalat meg kell adni. !! !! Az tvonalat itt egy SuSE 7.3-hoz hasznlom. !! !! Ha az Xfce nincs teleptve, az xpm fjlokat az XPM alknyvtrban !! tallja. Msolja a kvnt xpm fjlt egy alkalmas helyre !! s javtsa ki az tvonalat az albbiaknak megfelelen. !! !! Ha tmkat akar hasznlni, egyszeren msolja a kvetkez 3 sort a !! $HOME/EpsonUtil fjlhoz vagy szrja be azokat a sajt .Xdefaults fjlba, !! vagy a $HOME/EpsonUtil fjlba. EpsonUtil*XmList.backgroundPixmap: UNSPECIFIED_PIXMAP EpsonUtil*XmText.backgroundPixmap: UNSPECIFIED_PIXMAP EpsonUtil*XmTextField.backgroundPixmap: UNSPECIFIED_PIXMAP !! Ha a cmfeliratokat fehr httrrel szeretn, msolja a !! kvetkez 2 sort a fjlba s tvoltsa el a "!" karaktert. !EpsonUtil*title_LB.background: white !EpsonUtil*title_LB.backgroundPixmap: UNSPECIFIED_PIXMAP !! A kvetkez bejegyzsek pldaknt vannak. Tekintse meg a kvetkez ktsoros !! blokkokat s szrja be azokat az n forrsfjljba. Ne felejtse el eltvoltani !! a '!' megjegyzs karaktert a sor elejrl. !EpsonUtil*background: #c7c7c7 !EpsonUtil*backgroundPixmap: /usr/share/xfce/textures/metal.xpm !EpsonUtil*background: #a6a6b6 !EpsonUtil*backgroundPixmap: /usr/share/xfce/textures/Ultrafina.xpm !EpsonUtil*background: #a6a6b6 !EpsonUtil*backgroundPixmap: /usr/share/xfce/textures/bronze.xpm !EpsonUtil*background: #dfcbb6 !EpsonUtil*backgroundPixmap: /usr/share/xfce/textures/cheese.xpm !EpsonUtil*background: #616d96 !EpsonUtil*backgroundPixmap: /usr/share/xfce/textures/craters.xpm !EpsonUtil*foreground: white !EpsonUtil*background: #ffefdf !EpsonUtil*backgroundPixmap: /usr/share/xfce/textures/ground.xpm !EpsonUtil*background: #ffefdf !EpsonUtil*backgroundPixmap: /usr/share/xfce/textures/paper.xpm !EpsonUtil*background: #ffefdf !EpsonUtil*backgroundPixmap: /usr/share/xfce/textures/Ultrafina.xpm !EpsonUtil*background: #ffefdf !EpsonUtil*backgroundPixmap: /usr/share/xfce/backdrops/Arena.xpm !EpsonUtil*background: #cfcfe7 !EpsonUtil*backgroundPixmap: /usr/share/xfce/backdrops/Bluedrops.xpm !EpsonUtil*background: #cfaa8e !EpsonUtil*backgroundPixmap: /usr/share/xfce/backdrops/Desert2.xpm !EpsonUtil*background: #bebe8a !EpsonUtil*backgroundPixmap: /usr/share/xfce/backdrops/Dry.xpm !EpsonUtil*background: #419e41 !EpsonUtil*backgroundPixmap: /usr/share/xfce/backdrops/Greenslate.xpm !EpsonUtil*background: #868686 !EpsonUtil*backgroundPixmap: /usr/share/xfce/backdrops/Greydrops.xpm !EpsonUtil*background: #dfdfdf !EpsonUtil*backgroundPixmap: /usr/share/xfce/backdrops/Greysea.xpm !EpsonUtil*background: #ffcb61 !EpsonUtil*backgroundPixmap: /usr/share/xfce/backdrops/Wood.xpm !EpsonUtil*background: #ffcb61 !EpsonUtil*backgroundPixmap: /usr/share/xfce/backdrops/Worm.xpm mtink-1.0.16/detect/0000755000076400001540000000000010665016555012332 5ustar jjfusemtink-1.0.16/detect/askPrinter.c0000644000076400001540000000540310376041214014607 0ustar jjfuse#include #include #include #include #include #include #include #include #include #include "parport.h" #include "ppdev.h" static int get_deviceid (char *buffer, int lenght, int fd) { ssize_t len = 0; if (read (fd, buffer, 2) < 2) { return 1; } len = ((unsigned char)buffer[0] << 8) + (unsigned char)buffer[1]; if ( len > lenght ) len = lenght - 3 ; len = read(fd, buffer+2, len); buffer[len+2] = '\0'; return 0; } #define IOCNR_GET_DEVICE_ID 1 #define LPIOC_GET_DEVICE_ID(len) _IOC(_IOC_READ, 'P', IOCNR_GET_DEVICE_ID, len) /* get device_id string */ int main(int argc, char **argv) { int fd; unsigned char argp[1024]; int length; char *dev; int compat = IEEE1284_MODE_COMPAT; int mode = IEEE1284_MODE_NIBBLE; if ( argc == 2 ) { if ( strstr(argv[1], "usb") ) { /* call for usb devices */ if ( (fd = open(argv[1], O_RDONLY)) > -1 ) { if (ioctl (fd, LPIOC_GET_DEVICE_ID(sizeof(argp)-1), argp) > -1 ) { length = (argp[0] << 8) + argp[1]; if ( length > sizeof(argp)-1 ) length = sizeof(argp)-1; argp[length] = '\0'; printf("%s\n",argp+2); exit(0); } else { fprintf(stderr,"ioctl: %s\n",strerror(errno)); } } else { fprintf(stderr,"open: %s\n",strerror(errno)); } } else { /* call for parport devices */ /* replace /dev/lp# with /dev/parport# */ if ( strlen(argv[1]) < 7 ) exit(1); length = 20 + strlen( argv[1] + 7 ); dev = (char*)calloc( length,1); sprintf(dev, "/dev/parports/%s",&argv[1][7]); if ( access(dev, R_OK|W_OK) == -1 ) { sprintf(dev, "/dev/parport%s",&argv[1][7]); if ( access(dev, R_OK|W_OK) == -1 ) { exit(1); } } fd = open (dev, O_RDWR); if (fd == -1) { exit(1); } if (ioctl (fd, PPSETMODE, &mode)) { exit(2); } if (ioctl (fd, PPCLAIM)) { exit(3); } if (ioctl (fd, PPNEGOT, &compat)) { exit(4); } mode |= IEEE1284_DEVICEID; if (ioctl (fd, PPNEGOT, &mode)) { exit(5); } if ( get_deviceid((char*)argp, sizeof(argp)-1,fd) == 0 ) printf("%s\n",argp+2); ioctl (fd, PPNEGOT, &compat); ioctl (fd, PPRELEASE); close (fd); exit(0); } } exit(1); return 0; } mtink-1.0.16/detect/ppdev.h0000644000076400001540000000377110376041214013616 0ustar jjfuse/* * linux/drivers/char/ppdev.h * * User-space parallel port device driver (header file). * * Copyright (C) 1998-9 Tim Waugh * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. * */ #define PP_MAJOR 99 #define PP_IOCTL 'p' /* Set mode for read/write (e.g. IEEE1284_MODE_EPP) */ #define PPSETMODE _IOW(PP_IOCTL, 0x80, int) /* Read status */ #define PPRSTATUS _IOR(PP_IOCTL, 0x81, unsigned char) #define PPWSTATUS OBSOLETE__IOW(PP_IOCTL, 0x82, unsigned char) /* Read/write control */ #define PPRCONTROL _IOR(PP_IOCTL, 0x83, unsigned char) #define PPWCONTROL _IOW(PP_IOCTL, 0x84, unsigned char) struct ppdev_frob_struct { unsigned char mask; unsigned char val; }; #define PPFCONTROL _IOW(PP_IOCTL, 0x8e, struct ppdev_frob_struct) /* Read/write data */ #define PPRDATA _IOR(PP_IOCTL, 0x85, unsigned char) #define PPWDATA _IOW(PP_IOCTL, 0x86, unsigned char) /* Read/write econtrol (not used) */ #define PPRECONTROL OBSOLETE__IOR(PP_IOCTL, 0x87, unsigned char) #define PPWECONTROL OBSOLETE__IOW(PP_IOCTL, 0x88, unsigned char) /* Read/write FIFO (not used) */ #define PPRFIFO OBSOLETE__IOR(PP_IOCTL, 0x89, unsigned char) #define PPWFIFO OBSOLETE__IOW(PP_IOCTL, 0x8a, unsigned char) /* Claim the port to start using it */ #define PPCLAIM _IO(PP_IOCTL, 0x8b) /* Release the port when you aren't using it */ #define PPRELEASE _IO(PP_IOCTL, 0x8c) /* Yield the port (release it if another driver is waiting, * then reclaim) */ #define PPYIELD _IO(PP_IOCTL, 0x8d) /* Register device exclusively (must be before PPCLAIM). */ #define PPEXCL _IO(PP_IOCTL, 0x8f) /* Data line direction: non-zero for input mode. */ #define PPDATADIR _IOW(PP_IOCTL, 0x90, int) /* Negotiate a particular IEEE 1284 mode. */ #define PPNEGOT _IOW(PP_IOCTL, 0x91, int) #define PPREG _IO(PP_IOCTL, 0x92) mtink-1.0.16/detect/parport.h0000644000076400001540000004530310376041214014164 0ustar jjfuse/* $Id: parport.h,v 1.1 1998/05/17 10:57:52 andrea Exp andrea $ */ #ifndef _PARPORT_H_ #define _PARPORT_H_ /* Start off with user-visible constants */ /* Maximum of 8 ports per machine */ #define PARPORT_MAX 8 /* Magic numbers */ #define PARPORT_IRQ_NONE -1 #define PARPORT_DMA_NONE -1 #define PARPORT_IRQ_AUTO -2 #define PARPORT_DMA_AUTO -2 #define PARPORT_DISABLE -2 #define PARPORT_IRQ_PROBEONLY -3 #define PARPORT_CONTROL_STROBE 0x1 #define PARPORT_CONTROL_AUTOFD 0x2 #define PARPORT_CONTROL_INIT 0x4 #define PARPORT_CONTROL_SELECT 0x8 #define PARPORT_STATUS_ERROR 0x8 #define PARPORT_STATUS_SELECT 0x10 #define PARPORT_STATUS_PAPEROUT 0x20 #define PARPORT_STATUS_ACK 0x40 #define PARPORT_STATUS_BUSY 0x80 /* Type classes for Plug-and-Play probe. */ typedef enum { PARPORT_CLASS_LEGACY = 0, /* Non-IEEE1284 device */ PARPORT_CLASS_PRINTER, PARPORT_CLASS_MODEM, PARPORT_CLASS_NET, PARPORT_CLASS_HDC, /* Hard disk controller */ PARPORT_CLASS_PCMCIA, PARPORT_CLASS_MEDIA, /* Multimedia device */ PARPORT_CLASS_FDC, /* Floppy disk controller */ PARPORT_CLASS_PORTS, PARPORT_CLASS_SCANNER, PARPORT_CLASS_DIGCAM, PARPORT_CLASS_OTHER, /* Anything else */ PARPORT_CLASS_UNSPEC, /* No CLS field in ID */ PARPORT_CLASS_SCSIADAPTER } parport_device_class; /* The "modes" entry in parport is a bit field representing the capabilities of the hardware. */ #define PARPORT_MODE_PCSPP (1<<0) /* IBM PC registers available. */ #define PARPORT_MODE_TRISTATE (1<<1) /* Can tristate. */ #define PARPORT_MODE_EPP (1<<2) /* Hardware EPP. */ #define PARPORT_MODE_ECP (1<<3) /* Hardware ECP. */ #define PARPORT_MODE_COMPAT (1<<4) /* Hardware 'printer protocol'. */ #define PARPORT_MODE_DMA (1<<5) /* Hardware can DMA. */ /* IEEE1284 modes: Nibble mode, byte mode, ECP, ECPRLE and EPP are their own 'extensibility request' values. Others are special. 'Real' ECP modes must have the IEEE1284_MODE_ECP bit set. */ #define IEEE1284_MODE_NIBBLE 0 #define IEEE1284_MODE_BYTE (1<<0) #define IEEE1284_MODE_COMPAT (1<<8) #define IEEE1284_MODE_BECP (1<<9) /* Bounded ECP mode */ #define IEEE1284_MODE_ECP (1<<4) #define IEEE1284_MODE_ECPRLE (IEEE1284_MODE_ECP | (1<<5)) #define IEEE1284_MODE_ECPSWE (1<<10) /* Software-emulated */ #define IEEE1284_MODE_EPP (1<<6) #define IEEE1284_MODE_EPPSL (1<<11) /* EPP 1.7 */ #define IEEE1284_MODE_EPPSWE (1<<12) /* Software-emulated */ #define IEEE1284_DEVICEID (1<<2) /* This is a flag */ /* The rest is for the kernel only */ #ifdef __KERNEL__ #include #include #include #include #include #include #include #define PARPORT_NEED_GENERIC_OPS /* Define this later. */ struct parport; struct pardevice; struct pc_parport_state { unsigned int ctr; unsigned int ecr; }; struct ax_parport_state { unsigned int ctr; unsigned int ecr; unsigned int dcsr; }; /* used by both parport_amiga and parport_mfc3 */ struct amiga_parport_state { unsigned char data; /* ciaa.prb */ unsigned char datadir; /* ciaa.ddrb */ unsigned char status; /* ciab.pra & 7 */ unsigned char statusdir;/* ciab.ddrb & 7 */ }; struct parport_state { union { struct pc_parport_state pc; /* ARC has no state. */ struct ax_parport_state ax; struct amiga_parport_state amiga; /* Atari has not state. */ void *misc; } u; }; struct parport_operations { /* IBM PC-style virtual registers. */ void (*write_data)(struct parport *, unsigned char); unsigned char (*read_data)(struct parport *); void (*write_control)(struct parport *, unsigned char); unsigned char (*read_control)(struct parport *); unsigned char (*frob_control)(struct parport *, unsigned char mask, unsigned char val); unsigned char (*read_status)(struct parport *); /* IRQs. */ void (*enable_irq)(struct parport *); void (*disable_irq)(struct parport *); /* Data direction. */ void (*data_forward) (struct parport *); void (*data_reverse) (struct parport *); /* For core parport code. */ void (*interrupt)(int, void *, struct pt_regs *); /* ? */ void (*init_state)(struct pardevice *, struct parport_state *); void (*save_state)(struct parport *, struct parport_state *); void (*restore_state)(struct parport *, struct parport_state *); void (*inc_use_count)(void); void (*dec_use_count)(void); void (*fill_inode)(struct inode *inode, int fill); /* ? */ /* Block read/write */ size_t (*epp_write_data) (struct parport *port, const void *buf, size_t len, int flags); size_t (*epp_read_data) (struct parport *port, void *buf, size_t len, int flags); size_t (*epp_write_addr) (struct parport *port, const void *buf, size_t len, int flags); size_t (*epp_read_addr) (struct parport *port, void *buf, size_t len, int flags); size_t (*ecp_write_data) (struct parport *port, const void *buf, size_t len, int flags); size_t (*ecp_read_data) (struct parport *port, void *buf, size_t len, int flags); size_t (*ecp_write_addr) (struct parport *port, const void *buf, size_t len, int flags); size_t (*compat_write_data) (struct parport *port, const void *buf, size_t len, int flags); size_t (*nibble_read_data) (struct parport *port, void *buf, size_t len, int flags); size_t (*byte_read_data) (struct parport *port, void *buf, size_t len, int flags); }; struct parport_device_info { parport_device_class class; const char *class_name; const char *mfr; const char *model; const char *cmdset; const char *description; }; /* Each device can have two callback functions: * 1) a preemption function, called by the resource manager to request * that the driver relinquish control of the port. The driver should * return zero if it agrees to release the port, and nonzero if it * refuses. Do not call parport_release() - the kernel will do this * implicitly. * * 2) a wake-up function, called by the resource manager to tell drivers * that the port is available to be claimed. If a driver wants to use * the port, it should call parport_claim() here. */ /* A parallel port device */ struct pardevice { const char *name; struct parport *port; int daisy; int (*preempt)(void *); void (*wakeup)(void *); void *private; void (*irq_func)(int, void *, struct pt_regs *); unsigned int flags; struct pardevice *next; struct pardevice *prev; struct parport_state *state; /* saved status over preemption */ wait_queue_head_t wait_q; unsigned long int time; unsigned long int timeslice; volatile long int timeout; unsigned int waiting; struct pardevice *waitprev; struct pardevice *waitnext; void * sysctl_table; }; /* IEEE1284 information */ /* IEEE1284 phases */ enum ieee1284_phase { IEEE1284_PH_FWD_DATA, IEEE1284_PH_FWD_IDLE, IEEE1284_PH_TERMINATE, IEEE1284_PH_NEGOTIATION, IEEE1284_PH_HBUSY_DNA, IEEE1284_PH_REV_IDLE, IEEE1284_PH_HBUSY_DAVAIL, IEEE1284_PH_REV_DATA, IEEE1284_PH_ECP_SETUP, IEEE1284_PH_ECP_FWD_TO_REV, IEEE1284_PH_ECP_REV_TO_FWD }; struct ieee1284_info { int mode; volatile enum ieee1284_phase phase; struct semaphore irq; }; /* A parallel port */ struct parport { unsigned long base; /* base address */ unsigned long base_hi; /* base address (hi - ECR) */ unsigned int size; /* IO extent */ const char *name; unsigned int modes; int irq; /* interrupt (or -1 for none) */ int dma; int muxport; /* which muxport (if any) this is */ int portnum; /* which physical parallel port (not mux) */ struct parport *physport; /* If this is a non-default mux parport, i.e. we're a clone of a real physical port, this is a pointer to that port. The locking is only done in the real port. For a clone port, the following structure members are meaningless: devices, cad, muxsel, waithead, waittail, flags, pdir, ieee1284, *_lock. It this is a default mux parport, or there is no mux involved, this points to ourself. */ struct pardevice *devices; struct pardevice *cad; /* port owner */ int daisy; /* currently selected daisy addr */ int muxsel; /* currently selected mux port */ struct pardevice *waithead; struct pardevice *waittail; struct parport *next; unsigned int flags; void *sysctl_table; struct parport_device_info probe_info[5]; /* 0-3 + non-IEEE1284.3 */ struct ieee1284_info ieee1284; struct parport_operations *ops; void *private_data; /* for lowlevel driver */ int number; /* port index - the `n' in `parportn' */ spinlock_t pardevice_lock; spinlock_t waitlist_lock; rwlock_t cad_lock; int spintime; }; #define DEFAULT_SPIN_TIME 500 /* us */ struct parport_driver { const char *name; void (*attach) (struct parport *); void (*detach) (struct parport *); struct parport_driver *next; }; /* parport_register_port registers a new parallel port at the given address (if one does not already exist) and returns a pointer to it. This entails claiming the I/O region, IRQ and DMA. NULL is returned if initialisation fails. */ struct parport *parport_register_port(unsigned long base, int irq, int dma, struct parport_operations *ops); /* Once a registered port is ready for high-level drivers to use, the low-level driver that registered it should announce it. This will call the high-level drivers' attach() functions (after things like determining the IEEE 1284.3 topology of the port and collecting DeviceIDs). */ void parport_announce_port (struct parport *port); /* Unregister a port. */ extern void parport_unregister_port(struct parport *port); /* parport_in_use returns nonzero if there are devices attached to a port. */ #define parport_in_use(x) ((x)->devices != NULL) /* parport_enumerate returns a pointer to the linked list of all the ports in this machine. */ struct parport *parport_enumerate(void); /* Register a new high-level driver. */ extern int parport_register_driver (struct parport_driver *); /* Unregister a high-level driver. */ extern void parport_unregister_driver (struct parport_driver *); /* parport_register_device declares that a device is connected to a port, and tells the kernel all it needs to know. pf is the preemption function (may be NULL for no callback) kf is the wake-up function (may be NULL for no callback) irq_func is the interrupt handler (may be NULL for no interrupts) handle is a user pointer that gets handed to callback functions. */ struct pardevice *parport_register_device(struct parport *port, const char *name, int (*pf)(void *), void (*kf)(void *), void (*irq_func)(int, void *, struct pt_regs *), int flags, void *handle); /* parport_unregister unlinks a device from the chain. */ extern void parport_unregister_device(struct pardevice *dev); /* parport_claim tries to gain ownership of the port for a particular driver. This may fail (return non-zero) if another driver is busy. If this driver has registered an interrupt handler, it will be enabled. */ extern int parport_claim(struct pardevice *dev); /* parport_claim_or_block is the same, but sleeps if the port cannot be claimed. Return value is 1 if it slept, 0 normally and -errno on error. */ extern int parport_claim_or_block(struct pardevice *dev); /* parport_release reverses a previous parport_claim. This can never fail, though the effects are undefined (except that they are bad) if you didn't previously own the port. Once you have released the port you should make sure that neither your code nor the hardware on the port tries to initiate any communication without first re-claiming the port. If you mess with the port state (enabling ECP for example) you should clean up before releasing the port. */ extern void parport_release(struct pardevice *dev); /* parport_yield relinquishes the port if it would be helpful to other drivers. The return value is the same as for parport_claim. */ extern __inline__ int parport_yield(struct pardevice *dev) { unsigned long int timeslip = (jiffies - dev->time); if ((dev->port->waithead == NULL) || (timeslip < dev->timeslice)) return 0; parport_release(dev); return parport_claim(dev); } /* parport_yield_blocking is the same but uses parport_claim_or_block instead of parport_claim. */ extern __inline__ int parport_yield_blocking(struct pardevice *dev) { unsigned long int timeslip = (jiffies - dev->time); if ((dev->port->waithead == NULL) || (timeslip < dev->timeslice)) return 0; parport_release(dev); return parport_claim_or_block(dev); } /* Flags used to identify what a device does. */ #define PARPORT_DEV_TRAN 0 /* WARNING !! DEPRECATED !! */ #define PARPORT_DEV_LURK (1<<0) /* WARNING !! DEPRECATED !! */ #define PARPORT_DEV_EXCL (1<<1) /* Need exclusive access. */ #define PARPORT_FLAG_EXCL (1<<1) /* EXCL driver registered. */ extern int parport_parse_irqs(int, const char *[], int irqval[]); extern int parport_parse_dmas(int, const char *[], int dmaval[]); /* IEEE1284 functions */ extern void parport_ieee1284_interrupt (int, void *, struct pt_regs *); extern int parport_negotiate (struct parport *, int mode); extern ssize_t parport_write (struct parport *, const void *buf, size_t len); extern ssize_t parport_read (struct parport *, void *buf, size_t len); extern long parport_set_timeout (struct pardevice *, long inactivity); extern int parport_wait_event (struct parport *, long timeout); extern int parport_wait_peripheral (struct parport *port, unsigned char mask, unsigned char val); /* For architectural drivers */ extern void parport_ieee1284_wakeup (struct parport *port); extern size_t parport_ieee1284_write_compat (struct parport *, const void *, size_t, int); extern size_t parport_ieee1284_read_nibble (struct parport *, void *, size_t, int); extern size_t parport_ieee1284_read_byte (struct parport *, void *, size_t, int); extern size_t parport_ieee1284_ecp_read_data (struct parport *, void *, size_t, int); extern size_t parport_ieee1284_ecp_write_data (struct parport *, const void *, size_t, int); extern size_t parport_ieee1284_ecp_write_addr (struct parport *, const void *, size_t, int); extern size_t parport_ieee1284_epp_write_data (struct parport *, const void *, size_t, int); extern size_t parport_ieee1284_epp_read_data (struct parport *, void *, size_t, int); extern size_t parport_ieee1284_epp_write_addr (struct parport *, const void *, size_t, int); extern size_t parport_ieee1284_epp_read_addr (struct parport *, void *, size_t, int); /* IEEE1284.3 functions */ extern int parport_daisy_init (struct parport *port); extern void parport_daisy_fini (struct parport *port); extern struct pardevice *parport_open (int devnum, const char *name, int (*pf) (void *), void (*kf) (void *), void (*irqf) (int, void *, struct pt_regs *), int flags, void *handle); extern void parport_close (struct pardevice *dev); extern ssize_t parport_device_id (int devnum, char *buffer, size_t len); extern int parport_device_num (int parport, int mux, int daisy); extern int parport_device_coords (int devnum, int *parport, int *mux, int *daisy); extern void parport_daisy_deselect_all (struct parport *port); extern int parport_daisy_select (struct parport *port, int daisy, int mode); /* For finding devices based on their device ID. Example usage: int devnum = -1; while ((devnum = parport_find_class (PARPORT_CLASS_DIGCAM, devnum)) != -1) { struct pardevice *dev = parport_open (devnum, ...); ... } */ extern int parport_find_device (const char *mfg, const char *mdl, int from); extern int parport_find_class (parport_device_class cls, int from); /* Lowlevel drivers _can_ call this support function to handle irqs. */ extern __inline__ void parport_generic_irq(int irq, struct parport *port, struct pt_regs *regs) { parport_ieee1284_interrupt (irq, port, regs); read_lock(&port->cad_lock); if (port->cad && port->cad->irq_func) port->cad->irq_func(irq, port->cad->private, regs); read_unlock(&port->cad_lock); } /* Prototypes from parport_procfs */ extern int parport_proc_register(struct parport *pp); extern int parport_proc_unregister(struct parport *pp); extern int parport_device_proc_register(struct pardevice *device); extern int parport_device_proc_unregister(struct pardevice *device); extern int parport_default_proc_register(void); extern int parport_default_proc_unregister(void); extern void dec_parport_count(void); extern void inc_parport_count(void); /* If PC hardware is the only type supported, we can optimise a bit. */ #if (defined(CONFIG_PARPORT_PC) || defined(CONFIG_PARPORT_PC_MODULE)) && !(defined(CONFIG_PARPORT_AX) || defined(CONFIG_PARPORT_AX_MODULE)) && !(defined(CONFIG_PARPORT_ARC) || defined(CONFIG_PARPORT_ARC_MODULE)) && !(defined(CONFIG_PARPORT_AMIGA) || defined(CONFIG_PARPORT_AMIGA_MODULE)) && !(defined(CONFIG_PARPORT_MFC3) || defined(CONFIG_PARPORT_MFC3_MODULE)) && !(defined(CONFIG_PARPORT_ATARI) || defined(CONFIG_PARPORT_ATARI_MODULE)) && !defined(CONFIG_PARPORT_OTHER) #undef PARPORT_NEED_GENERIC_OPS #include #define parport_write_data(p,x) parport_pc_write_data(p,x) #define parport_read_data(p) parport_pc_read_data(p) #define parport_write_control(p,x) parport_pc_write_control(p,x) #define parport_read_control(p) parport_pc_read_control(p) #define parport_frob_control(p,m,v) parport_pc_frob_control(p,m,v) #define parport_read_status(p) parport_pc_read_status(p) #define parport_enable_irq(p) parport_pc_enable_irq(p) #define parport_disable_irq(p) parport_pc_disable_irq(p) #define parport_data_forward(p) parport_pc_data_forward(p) #define parport_data_reverse(p) parport_pc_data_reverse(p) #endif #ifdef PARPORT_NEED_GENERIC_OPS /* Generic operations vector through the dispatch table. */ #define parport_write_data(p,x) (p)->ops->write_data(p,x) #define parport_read_data(p) (p)->ops->read_data(p) #define parport_write_control(p,x) (p)->ops->write_control(p,x) #define parport_read_control(p) (p)->ops->read_control(p) #define parport_frob_control(p,m,v) (p)->ops->frob_control(p,m,v) #define parport_read_status(p) (p)->ops->read_status(p) #define parport_enable_irq(p) (p)->ops->enable_irq(p) #define parport_disable_irq(p) (p)->ops->disable_irq(p) #define parport_data_forward(p) (p)->ops->data_forward(p) #define parport_data_reverse(p) (p)->ops->data_reverse(p) #endif #endif /* __KERNEL__ */ #endif /* _PARPORT_H_ */ mtink-1.0.16/Configure0000755000076400001540000004005010665175723012733 0ustar jjfuse#!/bin/sh # Changes: 07-MAR-2003 added /usr/local/... path for openMotif # on Mac OS X # prefix=/usr/local setUid=1 OS=`uname` # set LANG if necessary case $LANG in en*|de*|fr*|it*);; # known languages *) LANG=en;; # default english esac prt() { la=$1 shift case $LANG in $la*) echo $*;; esac } pSyntax() { echo Syntax `basename $0` '[-h|--help]' echo " " `basename $0` '[-p|--prefix installPath] [-d devpkgprefix] [-n|--no-suid] [-x|--no-x] [-g]|--no-gimp] [-s|--no-strip]' echo prt en "Default install path: $prefix" prt fr "Chemin d'installation par default: $prefix" prt de "Default Installationspfad: $prefix" prt it "Percorso d'installazione di default: $prefix" echo prt en "The documentation files will be installed under:" prt fr "Les fichiers de documentation seront installes sous:" prt de "Die Dokumentaionsdateien werden installiert unter:" prt it "La Documentazione verr installata in:" echo $prefix/mtink echo prt en "If you want only the tty based version use the -x option." prt en prt en "This program require read write access to the device" prt en "files. You may install mtink with the set uid bit set" prt en "or change yourself the permissions to the device files." prt en "In this case you may enter the -n option." prt fr "Pour ne creer que la version de commande en ligne" prt fr "utilise l'option -x." prt fr prt fr "Le programme necessite les droit d'ecriture et de lecture" prt fr "pour les fichiers /dev/... . Vous pouvez installer mtink" prt fr "avec le bit set-uid ou modifier vous meme les droits" prt fr "d'acces aux fichiers concernes. Dans ce cas vous pouvez" prt fr "lancer `basename $0` avec l'option -n" prt de "Nur Konsole basierte Version erstellen: Option -x angeben." prt de prt de "Das Program benoetigt uneingeschraenkte Rechte auf die" prt de "Geraetedateien. Sie koennen mtink mit das 'set-uid' bit" prt de "installieren. Falls Sie es nicht wuenschen muessen Sie" prt de "die Rechte auf der Geraetedateien anpassen und `basename $0`" prt de "mit der Option -n aufrufen." prt it "Se si vuole solo la versione a linea di comando usare -x." prt it prt it "Questo programma richiede l'accesso in lettura e scrittura al" prt it "file dispositivo. Si pu installare mtink con il bit sed uid" prt it "attivato o cambiare i permessi al file dispositivo." prt it "In questo caso si pu usare l'opzione -n." echo } noX=0 noGimp=0 useUsbLib=0 Strip=1 # Check for args while [ $# -ne 0 ] do case $1 in -m) # simulation with libusb under Linux useUsbLib=1;; -h|--h*) pSyntax exit 0;; -n|--no-su*) setUid=0 ;; -x|--no-x) noX=1 ;; -g|--no-g*) noGimp=1 ;; -p|--p*) shift if [ $# -ne 1 ] then pSyntax exit 1 else prefix=$1 fi;; -s|-nostrip|--no-st*) Strip=0 ;; *) pSyntax exit 1;; esac shift done # checks for Motif library and include files. # check first for 64 bit library (Nicola Fabiano on Fedora Core 2) LIBDIRS='/usr/X11R6/lib64 /usr/OpenMotif/lib /sw/lib /usr/X11R6/lib /usr/OpenMotif/lib /usr/lib /usr/X11/lib /usr/openwin/lib /usr/local/lib /usr/dt/lib' # Add gimp-2.0 for fedora core 2 INCLDIRS='/usr/include/gimp-2.0/libgimp /usr/OpenMotif/include /sw/include /usr/X11R6/include /usr/OpenMotif/include /usr/X11/include /usr/include /usr/openwin/include /usr/local/include /usr/dt/include' mlibFound=0 mxpmheader= mxpmlib= for dir in $LIBDIRS do if [ "`ls -c $dir/libXm.* 2>/dev/null`" != "" ] then mlibFound=1 break fi done minclFound=0 for dir in $INCLDIRS do if [ -f $dir/Xm/Xm.h ] then minclFound=1 if [ -f $dir/Xm/XpmP.h ] then mxpmheader="-DMOTIF_XPM" fi break fi done xinclFound=0 for dir in $INCLDIRS do if [ -f $dir/X11/X.h ] then xinclFound=1 if [ "$mxpmheader" = "" ] then if [ -f $dir/X11/xpm.h ] then mxpmheader="-DXPM_XPM" mxpmlib="-lXpm" fi fi break fi done if [ $noX -eq 0 ] then if [ $xinclFound -eq 0 -o $minclFound -eq 0 -o $mlibFound -eq 0 ] then if [ $mlibFound -eq 0 ] then prt en "The Motif libraries are not installed." prt en "Install Motif or Lesstif if your system" prt en "don't provide Motif." prt en "Please note that the motif package may be" prt en "called openmotif, motif or lesstif (Linux)." prt fr "La bibliotheque Motif n'est pas installee." prt fr "Installez Motif ou, si votre Systeme ne contient" prt fr "pas Motif / Openmotif installez Lesstif (Linux)." prt de "Die Motif Umgebung wurde nicht gefunden." prt de "Installieren Sie bitte Motif / Openmotif oder," prt de "falls nicht vorhanden Lesstif (Linux)." prt it "Le librerie Motif non sono installate." prt it "Installare Motif o Lesstif se il sistema non" prt it "ha Motif." prt it "Notare che il paccehtto Motif pu aver" prt it "nome openmotif, motif o lesstif (Linux)." echo fi if [ $minclFound -eq 0 ] then prt en "Motif/Lesstif header file not found !" prt en "mtink require this, please install them." prt fr "Les fichiers includes Motif/Lesstif ne sont pas" prt fr "present! Installe Motif/Lesstif correctement." prt de "Die Motif/Lesstif Include-Dateien wurden nicht" prt de "gefunden! Installieren Sie bitte Motif/Lesstif" prt de "vollstaendig." prt it "Il file header di Motif/Lesstif non sono stati trovati !" prt it "mtink ne ha bisogno, si prega di installarlo." echo if [ "`uname`" = Linux ] then prt en "The Motif package is mostly called motif-devel" prt en "If you have installed Lesstif the package name" prt en "will probably be lesstif-devel" prt fr "Le paquetage est souvent nomme motif-devel" prt fr "Si vous avez installe Lesstif le nom du paquet" prt fr "manquant est certainement lesstif-devel" prt de "Sie muessen das Entwicklungspacket motif-devel Bzw." prt de "openmotif-devel installieren. Falls Lesstif zum" prt de "Einsatzkommen soll is das Packetname meistens" prt de "lesstif-devel" prt it "Il pacchetto Motif spesso chiamato motif-devel" prt it "Se avessi installato Lesstif il nome del pacchetto" prt it "dovrebbe probabilmente essere lesstif-devel" echo fi echo fi if [ $xinclFound -eq 0 ] then prt en "X is not installed or the include pathes are stranges" prt fr "X n'est pas apparement pas installe ou les fichier 'include'" prt fr "se trouvent sous un repertoire non standard." prt de "X scheint nicht installiert zu sein. Moeglicherweise" prt de "befinden sich die Dateien unter einen nicht Standardpfad" prt it "X non e installato o i percorsi di inclusione non sono standard." if [ "`uname`" = Linux ] then prt en "The X development package is mostly called X-devel" prt fr "Les paquets de developement X ne sont pas installes." prt fr "Installez les, le non est generalement X-devel" prt de "Die X.Enticklungsumgebung muss installiert werden." prt de "Das Packetname ist meistens X-devel" prt it "Il pacchetto di sviluppo X spesso chiamato X-devel." fi echo fi exit 1 fi case $OS in Linux) . ./checkMotifVersion.sh;; Darwin) . ./checkMotifVersion.sh;; esac if [ "$MotifLib" != "" ] then mlCmd="s@^MOLIB.*@MOLIB = $MotifLib@" else mlCmd= fi if [ "$XmHPath" != "" ] then miCmd="s@^MOINC.*@MOINC = -I$XmHPath@" else miCmd= fi # Check for the Xp libary, some Motif libraries need this xplibFound=0 for dir in $LIBDIRS do if [ "`ls -c $dir/libXp.* 2>/dev/null`" != "" ] then xplibFound=1 break fi done # but not for Solaris if [ `uname` = SunOS ] then xplibFound=0 fi # Gimp part ################################################ # check for gimp includeFileFound=0 gimptoolFound=0 gimpVersion=0 if [ $noGimp -eq 0 ] then for dir in `echo $PATH | tr ':' '\012'` do if [ -x $dir/gimptool-2.0 ] then # and ask for the version gimpVersion=`$dir/gimptool-2.0 --version | sed 's/\(1\..\).*/\1/'` gimptoolFound=2 break fi if [ -x $dir/gimptool ] then # and ask for the version gimpVersion=`$dir/gimptool --version | sed 's/\(1\..\).*/\1/'` gimptoolFound=1 break fi done fi if [ $gimptoolFound -eq 0 ] then if [ $noGimp -eq 0 ] then prt en "Gimp development package not installed." prt en "Plugins will not be compiled" prt en "Please install the gimp package" prt en "if you want the gimp plugins." prt fr "Le paquet de developement gimp n'est pas installe," prt fr "Le plugins ne sera pas genere." prt fr "Installez gimp et gimp-devel si vous souhaitez" prt fr "le plugins gimp." prt de "Das Gimp-Entwiclungs packet ist nicht installieert," prt de "Das plugins wird nicht erzeugt." prt de "Installieren Sie, bitte, gimp-devel (Linux) Wenn Sie" prt de "das Gimp-Plugins erzeugen moechten." prt it "Il pacchetto di sviluppo Gimp non e installato." prt it "I plugin non verranno compilati." prt it "Installare il pacchetto gimp" prt it "se si vogliono i plugin gimp." echo fi else # Build MTINK_CFLAGS and LFLAGS if [ $gimptoolFound -eq 2 ] then MTINK_CFLAGS=`gimptool-2.0 --cflags` LFLAGS=`gimptool-2.0 --libs` else MTINK_CFLAGS=`gimptool --cflags` LFLAGS=`gimptool --libs` fi # Check for Header files libgimp/gimp.h includeFileFound=0 for dir in `echo $MTINK_CFLAGS | tr ' ' '\012' | grep -- -I | sed 's/-I//'`\ /usr/include /usr/local/include do if [ -f $dir/libgimp/gimp.h ] then includeFileFound=1 break fi done if [ $includeFileFound -eq 0 ] then prt en "Header file for gimp not found." prt en "Please install the gimp development package." prt fr "Les fichiers necessaire pour gimp ne sont pas installes." prt fr "Installez le paquet gimp-devel." prt de "Die notwendige Entwicklungsumgebung fuer gimp ist." prt de "nicht vorhanden. Packet gimp-devel bitte installieren." prt it "File header per gimp non trovato." prt it "Installare il pacchetto di sviluppo gimp." fi fi # Set a few variable according to OS and components found guiPrg= instGuiPrg= if [ $noX -eq 0 ] then guiPrg='mtink mtinkc' instGuiPrg=install-mtink fi if [ `uname` = "Linux" ] then otherPrg='mtinkd $(DETDIR)/askPrinter' installOther='install-askPrinter install-mtinkd install-start install-cups' fi if [ "$OS" = "Darwin" -o $useUsbLib -eq 1 ] then otherPrg= installOther=install-cups fi if [ $gimptoolFound -ge 1 ] then installOther="$installOther install-plugins" otherPrg="$otherPrg gimp-mtink" fi prgs="$guiPrg ttink $otherPrg" instPrgs="$instGuiPrg install-ttink install-desc install-pyink $installOther" # build Makefile. cat Makefile.ORG |\ if [ "$OS" != "Darwin" -a $useUsbLib -eq 0 ] then sed -e 's/^MACOS.*//' else if [ $useUsbLib -eq 1 ] then sed -e 's/^MACOSLDFLG=.*/MACOSLDFLG=-lusb -lpthread $(MACLB)/' else cat - fi fi |\ if [ "$xplibFound" = 1 ] then sed -e 's/LIBXP .*/LIBXP = -lXp/' else sed -e 's/LIBXP .*/LIBXP =/' fi |\ if [ "$mxpmheader" != "" ] then sed -e 's@^XPM_INC.*@XPM_INC = '$mxpmheader'@' \ -e 's@^XPM_LIB.*@XPM_LIB = '$mxpmlib'@' else sed -e 's@^XPM_INC.*@XPM_INC =@' \ -e 's@^XPM_INC.*@XPM_LIB =@' fi |\ if [ "$gimptoolFound" -ge 1 ] then sed -e "s@GIMP_INC .*@GIMP_INC = $MTINK_CFLAGS@" \ -e "s@GIMP_LIB .*@GIMP_LIB = $LFLAGS@" \ -e "s@^gimpVersion=.*@gimpVersion=$gimpVersion@" else cat - fi |\ sed -e "s@PRG .*@PRG = $prgs@" \ -e "s@^install:.*@install: $instPrgs@" |\ if [ "$gimpVersion" = "1.0" ] then sed -e 's@\(GIMP_INC .*\)@\1 -DGIMP_VERSION_1@' else if [ "$gimptoolFound" -gt 1 ] then sed -e 's@\(GIMP_INC .*\)@\1 -DGIMP_VERSION_2@' else cat - fi fi |\ sed -e "s@PRG .*@PRG = $prgs@" \ -e "s@^install:.*@install: $instPrgs@" |\ if [ "$gimpVersion" = "1.0" ] then sed -e 's@\(GIMP_INC .*\)@\1 -DGIMP_VERSION_1@' else if [ "$gimptoolFound" -gt 1 ] then sed -e 's@\(GIMP_INC .*\)@\1 -DGIMP_VERSION_2@' else cat - fi fi |\ if [ "$Strip" = "0" ] then sed -e 's/^DBG.*/DBG = -g/' else cat - fi |\ if [ $OS = Darwin ] then sed 's/^#\(MACIN.*\)/\1/' else cat - fi | sed -e "s@^prefix.*@prefix=$prefix@" \ -e "s@^setUid.*@setUid=$setUid@" \ -e "$mlCmd" -e "$miCmd" > Makefile # and server install script sed -e 's@^PROG.*@PROG='$prefix'/sbin/mtinkd@' etc/mtink.ORG > etc/mtink if [ -d $prefix/doc ] then docDir=$prefix/doc else docDir=$prefix fi prt en "Binary path:" prt fr "Chemin d'installation de l'executable:" prt de "Installationspfad fuer das ausfuehrbares Programm:" prt it "Percorso di installazione dell'eseguibile:" echo $prefix/bin echo prt en "The documentation files will be installed under:" prt fr "Les fichiers de documentation seront installes sous:" prt de "Die Dokumentationsdateien werden installiert unter:" prt it "La Documentazione verr installata in:" echo $docDir/mtink echo if [ "$gimpVersion" != "" ] then echo Gimp version $gimpVersion found / trouve / gefunden / trovato / tallva. | $CONV echo fi else # no x file to build # build Makefile. # Set a few variable according to OS and components found guiPrg= instGuiPrg= if [ `uname` = "Linux" ] then otherPrg='mtinkd $(DETDIR)/askPrinter' installOther='install-askPrinter install-mtinkd install-start install-cups' fi if [ "$OS" = "Darwin" -o $useUsbLib -eq 1 ] then otherPrg= installOther=install-cups fi prgs="$guiPrg ttink $otherPrg" instPrgs="$instGuiPrg install-ttink install-desc install-pyink $installOther" cat Makefile.ORG |\ if [ "$Strip" = "0" ] then sed -e 's/^DBG.*/DBG = -g/' else cat - fi |\ if [ "$OS" != "Darwin" ] then sed -e 's/^MACOS.*//' else cat - fi |\ sed -e "s@PRG .*@PRG = ttink $detectPrg $svrPrg@" |\ sed -e "s@^prefix.*@prefix=$prefix@" \ -e "s@^setUid.*@setUid=$setUid@" \ -e "s@^install:.*@install: $instPrgs@" > Makefile # and server install script sed -e 's@^PROG.*@PROG='$prefix'/sbin@' etc/mtink.ORG > etc/mtink if [ -d $prefix/doc ] then docDir=$prefix/doc else docDir=$prefix fi prt en "Binary path:" prt fr "Chemin d'installation de l'executable:" prt de "Installationspfad fuer das ausfuehrbares Programm:" prt it "Percorso di installazione dell'eseguibile:" echo $prefix/bin echo prt en "The documentation files will be installed under:" prt fr "Les fichiers de documentation seront installes sous:" prt de "Die Dokumentationsdateien werden installiert unter:" prt it "La Documentazione verr installata in:" echo $docDir/mtink echo fi mtink-1.0.16/html/0000755000076400001540000000000010376041214012013 5ustar jjfusemtink-1.0.16/html/LICENCE0000644000076400001540000000124510376041214013002 0ustar jjfuseThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. mtink-1.0.16/html/rdPrtDesc.txt0000644000076400001540000001400010376041214014441 0ustar jjfuserdPrtDesc: ---------- This utilities allow the extraction of the printer description datas need by ttink/mtink and print them in an human readable form. If you provide your own description, the description file will be read and you can produce a new d files with all datas which are relevants. Syntax: rdPrtDesc -p|-c -p rdPrtDes create the human readable file which will include all known printers. -c rdPrtDes read the file printer.desc which must reside into the actual directory and generate a new c file which can be used for ttink/mtink. The known printer data and those from the description file are merged. FILE printer.desc: ------------------ This file contain blocks which describe the printer capability. A block look like this: .PRINTER .name: Stylus C20SX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: OLD D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .alignFunctionName: - .END The word .PRINTER declare that a new description begins. The following words up to the .END word, but not including it, describe the capabilities for the printer. Please don't begin a line with a dot '.', this character tell the ttink/mtink as well as the help program rdPrtDesc that a description line begins. The .name: word must contain the name of the printer as returned by the printer name query. The .colorsNb: tell ttink/mtink how many inks are used. The designer ending with Prot: tell the programs which protocol is to be used. Newer printers know a new protocol which is named the D4 protocol. This new protocol allows to communicate with the printer via independant channels. This allows for example to query the remaining ink quantity or the printer status while printing. The D4 protocol includes also a set of commands, so that most of the old commands has a replacement. Unfortunately not all printers offer the full set of D4 commands. Due to this, and also for compatibility to drivers which don't know the D4 protocol, it is possible to tell the printer that the D4 protocol must be disabled. According to this the following combinations values are possible: - OLD The printer don' know anythings about D4. - OLD D4 Use non D4 command, but send this via the D4 protocol - OLD EXD4 Use the normal commands and set the printer into the compatibility mode. - D4 The printer know a special D4 command, use this. The word .mainProt: declare the default mode. The word .resetProt: declare the protocol type top use for the reset command. D4 printers may all know this command but not perform the operation as needed (e.g. Stylus Color 980 or the Stylus Scan ...) The word .alignProt: This command seem not to have a D4 counterpart and the classic command will alltime be used. Here you may declare only D4 (OLD is implied). The word ending with Flg: tell if the printer has a particular capability. The assigned value may be True or False. The word .stateFlg: Tell if the printer is able to return if it is busy, working,... The word .cleanSeparateFlg: a few printers allow to clean separately the nozzle. For those printers declare True. The word .idFlg: The Stylus Scan 2500 and probably the Stylus Scan 2000 don't return an identification. For such model this flag must be set to False. The word .exchangeFlg: A few printers (Stylus Color 480/580) don't allows to do this via button on the printer. This must be done by software. For such printers set the value to True. The word .exchangeSeparateFlg: Both above mentionned printers need a selection of the cartridge which is to be exchanged. Set the value to True. Some printers as the Stylus Photo 890 allow also to exchange the ink cartridge via software. If you want to use this possibility set the flag .exchangeFlg to True and .exchangeSeparateFlg to False. The remaining designer ending with Nb: - .passesNb: - .ChoicesNb: - .colorPassesNb: - .colorChoicesNb: are for the aligment procedure. The first two entries tell how many passes are needed, and how many choices are allowed. These values can be seen from the windows or Mac OS driver delivered by EPSON. If the printer don't allow an adjustement for the color head, set the value for .colorChoicesNb to 0. The last keyword .alignFunctionName was introduced specially for the Stylus Photo 820. This printer don't have a buildin code which print the desired pattern. The pattern must be supplied by ttink/mtink. For the Stylus Photo 820, enter Pattern820, for others set the value to "-". Istalling a printer.desc file: ------------------------------ Ttink/Mtink expect to find the printer.desc file in one of the following directories: - /usr/lib/mtink - /usr/local/lib/mtink - /opt/mtink If the printer.desc file is found, the remaining directories are not scanned. If you want to modify the description for one of the given printers, extract the data with rdPrtDesc and modify the value for the wanted file, then copy the resulting printer.desc file to one of the above directory. The description find into the printer.desc file prevail. Compiling a new printer into ttink/mtink: ----------------------------------------- generate your printer.desc file under the directory .../mtink/utils and call rdPrtDesc -c > ../model.c The file for actual printers and the new one is then automatically generated. return then to the mtink directory and call make and make install. mtink-1.0.16/html/gimp-installInitScript.Hu.html0000644000076400001540000000370610376041214017673 0ustar jjfuse gimp-installInitScript

gimp-installInitScript / askPrinter

Csak Linuxhoz

Ezek segít segédprogramok és a /etc/mtinkd.conf konfigurációs fájl kreálásához vannak használva..
Az /etc/mtinkd.conf az mtinkd démon indításához van használva és tartalmazza az engedélyezett változókat a szerverhez.

AskPrinter speciális hívást használ az eszközazonosító kinyeréséhez az usb vagy párhuzamos portokhoz csatlakoztatva.

Például:

askPrinter /dev/usb/lp0
askPrinter /dev/lp0

Ha a nyomtató detektálva van, az azonosító string visszaadódik.

A nyomtató azonosítás kérés az USB portan csak újabb 2.4 kerneleken mködik.
A párhuzamos porthoz a ppdev kernel modult kell telepíteni.

Hibák:

Amikor a nyomtató leíráshoz kérdez a párhuzamos porton, az askPrinter használja a /dev/parport*-ot és /dev/parports/*-ot a /dev/lp* helyett és a  gimp-installInitScript szkript feltételezi, hogy a port száma azonos mindkét eszközhöz.

Szerz:

Jean-Jacques Sarton
jj.sarton@t-online.de
http://xwtools.automatix.de

mtink-1.0.16/html/align4.It.gif0000644000076400001540000001324110376041214014234 0ustar jjfuseGIF87aADAZZ@@ddde w@@|Z@}d\!@>/"D/@<࿿E"wddE"v|Zk@,L@W|Z@Ld5| dZBd\ T@͈d e |q1#4e |PZ5 :dje L &9|dk@@||ZZdd0d4 EG@@88jrjLh FG@@|PZ5jd|LȣEV$d \WEx8pjkj,H*\ȰÇ#JHŋ3jȑ Cqɓ(S\ɲ˗0cʜI͛8siJQ&*]ʴӧPJJիXjʵ֤W׳hӪ]˶۷p*lչq˷߿pR;tÈ+^̸ǐ#KL˘3k̹Ϡ)%,K;S^ͺװcFݒ6˹}* ~wSLq-)rУKN=s׋^^qOov*|j˟}{)G]{ER `Vu79XZ ]%Ȕvؙ~͕~XT`.pX8JHTHeR=7@c4Xc-$GhZYQb`θPvᔅU`:8c\tdrJiXyW2igi!N:(zb"xeYczzgyjyCꭸbkapZ鮹+l|ZݯB:JW"kkV۳&Phv+kne@4+k,lp$訧ꬷ90nβ} w t8R3/}W}#=g?n>t?=zoS_f@|ރ'p#Z@/~sW@ k&@~|8HZO~*ۈ@b>h:ЀKal8Ĺm+H?d{w(ω(4qAaхJdaHBъ"BF)q|+#.awjh;Z" H-ы#HH9rdc%]G>dhF0|s$):n2u\ _ٺ~҆[%s 2r"IL^,}xD&H'KMFxϼ6_حwf6IN2zL:ɶsΒ'4iMyh~M@JЕMB pЅ:fk(D'JQIh.ڑz HGJҒ"JWRvw4ZJӚ8ͩNwӞ@ PJԢHMQ28թx*T_>TX*ԏ@ SQihM W'UUJ׺dMW Wլv `S׽:U$|&&: ),CW.hsf*Y lH2Ҟd-ִ̘(jQھ SZݦ*I6nLĹno\HW%UWYL6$c.xW#ޖ0W$-H󶗺%+S$8.L+SV)o  VM&8',W'0÷] o:<61 Kb_8!#>!㖠VHb[_rqc"W򕕫oS~2g9f.,eYN fwrsp$^rw{;w ~i;\~)X.Mwz!^oKm1~v6qt[q)"3;oFw2zwp}-QV΋<'O=O~n2KzO_ W|%`Iz[cw{Ez34n)1y ja\s^sZ>auߦ;^𛹯E6od᳛O9_l˜s]&moچir.s^rHyy{5y"h $gs@^?'k2Wst7_}v76nSW~fݶms(HrleDG5{@(Gn[8PWO p#t>tFhqHXxW8gW"sY8p?M6jx{_YayJhU7ld'a6Pfwu~YGv\w7V}Bhv|'}cu1h؂wx0UŇX<qdh83H}+8xC،ȉ8FxԸ.Ȍ፫x;A8{؎7~g82Gy؏e+ȎX`xI(h wȊ 9"GY|ّ4v~Ց~$I&)7kWmW)yZ,ieq29kk'X@iZBit7B~_ٔxot(EuwƓ\[YtRtubYd9}Xo\Iuɍw|qCv)~踘)zifyyӘٌٙ9XYiY)*m%xHY\|| ?y8 7`|ÉYqvwH)w8i}'~}ueff}"ȉbxxkTgp'fp^r>9 hƟ[HȘ9vuosOpmȁr8jI6ƃF7x{Jmloǟrs99jhp膰֠^8Bz)8Ωr7Jg7U(QJȡ/ږMzchuyfjf3X뷠YrަtcGrH:iRȡçP}Y8ɜ%JQ 򩇕ɑyLx |õ׉Y])[:4j~6 2JڧZyΩ9)0(޶9Nh'X,}pڏ\uWڣ=ijYJ؅պgRlZ*IZ9I 09\ j618# ):qOwu_ ];:j8ʙ* feh{rڟ֚vǫaZw gǯ8~5~5{~Smq6u`/[h^'H;J2L۴ {S^YKո69ʵig)fKyhl [nr;dkuw y }t۷;x{ z{tV۸ZU;U'iceٱaj5 J)JUP պkzxKk+J[WO[tz{{+ۼJ5ڻYӽ{5R3 5{N4۾F 4;>S{֛[3\<LP \!s 1"<]˱k,leS4 16|ð8:̽<@,B<[FHLNRLT\{X. 0Q`b^@P^sWgFGx'M1eۭMCcPppK5ޙ"s{}N?>♘ٌ.ل萮T軭2x^s1M2^~ꨞꪞى 6,dw,r~-$Q>Ȟ^1>->^vھ;mtink-1.0.16/html/LISEZ-MOI0000644000076400001540000000424710376041214013255 0ustar jjfuseMtink est un moniteur pour les imprimantes jet d'encre EPSON. Les port d'attaque de l'imprimante doivent etre bidirectionnel. Si votre systeme ne repond pas a ceci, un nombre limite de fonctions sera accessible. Mtink necessite la bibliotheque Motif (libXm.so). Si Motif n'est pas installe installe de preference Motif ou OpenMotif. Lesstif peu produire des resultats non expectes. Note pour Linux et USB: ----------------------- Les kernels les plus anciens (2.2 et 2.4) contiennent un bogue en ce qui concerne le module printer. En cas de doute installez une version recente du kernel. Note pour FreeBSD: ------------------ L'implementation dur port USB pour l'impression n'est pas complete (lecture non possible) et de ce fait ce port ne sera pas propose. Note pour Solaris: ------------------ Solaris x386 ne permet pas une communication bidirectionnelle avec les imprimantes. Solaris Sparc ne pose pas de problemes si le port est ecpp0. Installation de mtink en tant que "root" /usr/ccs/bin/make install si make n'est pas trouve. Compilation et installation de mtink: ------------------------------------- Le fichier Configure effectue un certain nombre de tests et genere le fichier Makefile. "./Configure -h" ou "./Configure --help" imprime les option presentes. Apres avoir lancer Configure, tapez make. L'installation du plug-ins s'effectue sous un compte normal a l'aide de "make install". Si vous utilisez le compte root, mtink et las documentation seront installes. "make uninstall" effectue la deinstallation. Note concernant ttink: ---------------------- Ttink est une version de command en ligne du moniteur. L'internationalisation ne cecessite que la traduction des resources anglaise (tres.c) et la mise en place de celle ci dans un fichier Ttink a copier sous $HOME. Voir egalement le fichier Ttink.de. Ajout d'une nouvelle imprimante: -------------------------------- voir le fichier utils/rdPrtDesc.Fr.txt Noez pour mtink avec un Browser: -------------------------------- Mtink contient maintenant ein server http permettant la visualisation de la quantite d'encre restante a l'aide d'un browser. Voir les fichiers du repertoire pyink. Voir egalement le fichier README mtink-1.0.16/html/NEUEN_DRUCKER_HINZUFUEGEN.html0000644000076400001540000002310010376041214016575 0ustar jjfuse neuen_drucker_hinzufuegen

neuen Drucker hinzufügen

Die Datei printer.desc.bldin welches im Verzeichniss /usr/lib/xw oder /usr/local/lib/xw vorhanden ist beschreibt die Druckereingenschaften. TDiese datei kann als Beispiel fü das generieren der Datei printer.desc verwendet werden. Mtink und ttink lessen diese Datei (falls vorhanden) beim Start und werten diese aus.

Falls die Datei printer.desc gefunden wird, werden weitere Verzeichnisse nicht untersucht.
Die Reihenfolge zum Suchen der Datzei ist /usr/lib/mtink /usr/local/lib/mtink>
Die Beschreibungen die in der Datei printer.desc werden, falls ein Drucker schon vom Program mtink/ttink bekannt ist, vorzugsweise verwendet.

Datei printer.desc:

Diese Datei beinhaltet beschreibungsblöcke die die Fähigkeiten der unterstützten Druckern beschreiben.

Ein Block sieht wie folgt aus:

.PRINTER
.name: Stylus C20SX
.colorsNb: 4
.mainProt: D4
.stateFlg: True
.exchangeFlg: False
.exchangeSeparateFlg: False
.cleanSeparateFlg: True
.resetProt: D4
.alignProt: OLD D4
.idFlg: True
.passesNb: 3
.choicesNb: 15
.colorPassesNb: 2
.colorChoicesNb: 9
.alignFunctionName: -
.END

.PRINTER Das Wort .PRINTER leitet einen neuen Datensatz ein. Die nachstehenden Wörter bis zum Wort .END sind die eigentliche Beschreibung.

Bitte die Zeilen nicht mit dem Zeichen . beginnen, denn diese Zeichen bedeutet für mtink/ttink, dass eine gültige Beschreibungszeile schon vorhanden ist. Zeilen, die nicht mit einem .beginnen, werden als Kommentarzeilen interpretiert. Leerzeichen am Beginn einer Zeile werden überlesen, so dass " .xxx" nicht als Kommentar verarbeitet wird.
.name: muss die Bezeichnung des Druckers beinhalten, und zwar genau so, wie es der Drucker nach einer Abfrage zurückliefert (ttink vwerwenden).
.colorsNb: gibt an wieviel Farben vorhanden sind.




Neuere Druckern beherrschen ein neuen Protokoll (D4) welches es erlaubt, mit dem Drucker über unabhängige Kanäle zu kommunizieren. Dies erlaubt es beispielsweise, die Resttintenmenge abzufragen, obwohl der Drucker noch mit Drucken beschäftigt ist.
Das D4-Protokoll beinhaltet ebenfalls einen Satz Kommandos, die zum Teil die normalen Kommandos (REMOTE Kommandos) ersetzen können.
Unglücklicherweise unterscheiden sich die Drucker erheblich bezüglich der Menge der implementierten D4-Kommandos.
Dementsprechend is es möglich anzugeben, welcher Kommandotyp zu verwenden ist, um die Verwendung des D4-Protokoll (Verwendung mit älteren Druckern) zu unterbinden.

Wörter die mit Prot: enden geben das Protokoll an, das für sie jeweilige Funktionen zu verwenden sind.

OLD Der Drucker unterstützt nicht D4.

OLD D4 Nicht D4-Kommandos verwenden aber in das D4-Protokoll einbetten.

OLD EXD4 Alte Kommandos verwenden und Drucker im Kompatibilitätsmodus betreiben (das D4-Protokoll wird abgeschaltet).

D4 Der Drucker kennt D4 Kommandos, das auch verwenden.
.mainProt: Default Modus festlegen.
.resetProt: Kommando für Rücksetzen deklarieren. Manche Drucker besitzen auch eine D4-Version die allerdings nicht zum gewünschten Ergebnis führt (Stylus Color 980 oder die Stylus Scan ... Serie).
.alignProt: Dieses Kommando hat offenbar keine D4 Entsprechung. Das klassische Kommando wird stattdessen immer verwendet.




Wörter die mit Flg: enden, geben an, ob der Drucker eine bestimmte Fähigkeit besitzt. Die zugewiesenen Werte sind True (Wahr) oder False (Falsch).
.stateFlg: Gibt an, ob der Drucker Zustandsangaben (Druck im Gang,...) zurückgeben kann.
.cleanSeparateFlg Einige wenige Drucker erlauben es, die Düsenreinigung geziehlt vorzunehmen (nur Schwarz/nur Farbe). Für solche Druckern ist True anzugeben.
.idFlg: Der Stylus Scan 2500, und wahrscheinlich auch der Stylus Scan 2000, geben keine Identifizierung zurück. Für solche Modelle ist False anzugeben.
.exchangeFlg: Wenige Drucker, wie die Stylus Color 480/580, besitzen keine Bedienelemente, so dass das Auswechseln der Tintenpatrone eine Softwarelösung erfordet. In diesem Fall True angeben.
.exchangeSeparateFlg: Beide zuvor genannten Drucker benötigen eine Angabe bezüglich der Patronne, die auszuwechseln ist. Den Wert auf True setzen.




Die mit Nb: vesehenen Wörter:

.passesNb:
.ChoicesNb:
.colorPassesNb:
.colorChoicesNb:
beschreiben die Düsen-Ausrichtung. Die beiden ersten Wörter (Schwarz) geben an, wieviele Durchgänge notwendig sind und wieviele Antwortmöglichkeiten vorhanden sind. Die zwei nächsten Eintragungen betreffen die Ausrichtung bezüglich der Farbdüsen.
Die möglichen Werte können ermittelt werden indem der EPSON-Statusmonitor für Windows oder Mac OS bemüht wird. Wenn eine Ausrichtung der Farbdüsen nicht vorhanden ist, muss der Wert für .colorChoicesNb 0 sein.
.alignFunctionName musste wegen dem Stylus Photo 820 eingeführt werden. Dieser Drucker besitzt keinen internen Code für das Ausrichten der Köpfe, so dass der Statusmonitor diesen zur Verfügung stellen muss. Ausser für oben genannte Drucker (Wert = Pattern820) ist ein - anzugeben.

Nachstehendes gilt nur für das Sourcen Packet:

Datei printer.desc installieren

wenn Sie die Beschreibung der vorhandenen Drucker ändern oder ergänzen möchten, können dioe Daten mit rdPrtDesc extrahiert und modifiziert werden. Nach der Modificationb der Datei printer.desc, ist diese nach /usr/lib/mtink oder /usr/local/lib/mtink zu kopieren.

Neuen Drucker in ttink/mtink einkompilieren:

Datei printer.desc im Verzeichniss .../mtink/utils generieren und aufrufen von:

rdPrtDesc -c > ../mainSrc/model.c
 
Danach im Verzeichniss mtink wechseln und make; make install aufrufen.

mtink-1.0.16/html/rdPrtDesc.Hu.txt0000644000076400001540000001375010376041214015027 0ustar jjfuserdPrtDesc: ---------- Ez a segdprogram teszi lehetv az mtink/ttink-hez szksges nyomtatler adatok bvtst s rja azt egy olvashat formtumba. Ha sajt lerst szolgltat, a ler fjl olvasdik s kszt egy j d fjlt minden adattal, amelyik a trgyhoz tartozik. Syntax: rdPrtDesc -p|-c -p rdPrtDes alkotja az olvashat fjlt, amelyik tartalmazni fog minden ismert nyomtatt. -c rdPrtDes olvassa a printer.desc fjlt, aminek az aktulis knyvtrban kell tartzkodnia, s generl egy j c fjlt amit a ttink/mtinkhez tud hasznlni. Az j s az eddigi ler fjl adatai ssze vannak olvasztva. FILE printer.desc: ------------------ Ez a fjl blokkokat tartalmazm amelyek lerjk a nyomtat adottsgait. gy nz ki egy blokk: .PRINTER .name: Stylus C20SX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: OLD D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .alignFunctionName: - .END A .PRINTER sz jelenti, hogy egy j lers kvetkezik. A kvetkez szavakkal egszen az .END szig, de nem tartalmazva azt, vannak lerva a nyomtat tulajdonsgai. Krem ne kezdjen sort ponttal '.', ez a karakter jelzs a ttink/mtink valamint a rdPrtDesc segtsg programnak, hogy egy ler sor kvetkezik. A .name: sz tartalmazza a nyomtat nevt, ahogy visszatr a nyomtat nv krsnl. A .colorsNb: jelzi az ttink/mtink-nek, hogy hnyfle tinta van hasznlatban. A vgn Prot-tal szerkesztve: jelzi, hogy a programok melyik protokollt hasznljk. Az jabb nyomtatk ismernek egy j protokollt, amit D4-nek neveznek. Ez az j protokoll engedi kommuniklni a nyomtatt fggetlen csatornkon. Ez engedi pldul a maradvny tinta mennyisgnek, vagy a nyomtat llapotnak lekrdezst nyomtats kzben. A D4 protokoll szintn tartalmaz egy parancskszletet, gy hogy a legtbb rgi parancs ki lett cserlve. Sajnos nem minden nyomtat knlja a D4 parancsok teljes kszlett. Ennek ksznheten s a kompatibilitsnak a meghajtkhoz, amelyek nem ismreik a D4 protokollt, a legjobb jelezni a nyomtatnak, hog a D4 protokoll nincs engedlyezve. Ennek megfelelen a kvetkez kombincis rtkek lehetsgesek: - OLD A nyomtat nem tud semmit a D4-rl. - OLD D4 Nem D4 parancsot hasznl, de ezt a D4 protokollon t kldi. - OLD EXD4 Hasznljon szablyos parancsokat s lltsa a nyomtatt a kompatibilis mdba. - D4 A nyomtat ismeri a specilis D4 parancsot, hasznlja ezt. A .mainProt sz: meghatrozza az alaprtelemezett mdot. A .resetProt sz: A protokoll tpus megatrozsa a reset parancs legjobb hasznlathoz. D4 nyomtatk mind ismerhetik ezt a parancsot, de nem hajtjk vgre a mveletet megfelelen (pldul: Stylus Color 980 vagy a Stylus Scan ...). A .alignProt sz: Ez a parancs ltszik, hogy nem egy D4 msolat s mindig a klasszikus parancs lesz hasznlatban. Itt csak D4-et (OLD belertve) lehet meghatroznia. A sz a vgn Flg-vel: jelzi, ha a nyomtat egyni tulajdonsg. A kijellt rtk lehet True vagy False. A .stateFlg sz: Jelzi, ha a nyomtat vissza tud trni, ha az foglalt, mkdik... A .cleanSeparateFlg sz: nhny nyomtat kln-kln engedi a fvkkat tiszttani. Ezen nyomtatk meghatrozsa True. A .idFlg sz: A Stylus Scan 2500 s taln a Stylus Scan 2000 nem fog azonostst visszaadni. Ilyen modellhez ezt False-ra kell lltani. A .exchangeFlg sz: Nhny nyomtatn (Stylus Color 480/580) nem alkalmaztak kezelgombokat. Ezek a mveleteket szoftveres ton vgzik. Ilyen nyomtatkhoz az rtk True. A .exchangeSeparateFlg sz: az elbb emltett kt nyomtatnak szksge van egy nyomtatpatron kivlasztsra, ami a cserhez kell. Az rtket True-ra kell belltani. Tbb nyomtat, mint a Stylus Photo 890 szoftveres ton is engedi a tintapatron cserjt. Ha ezt a lehetsget akarod hasznlni, lltsd be a flag .exchangeFlg-et True-ra s a .exchangeSeparateFlg-et False-ra. A maradk szavak, vgkn Nb-vel: - .passesNb: - .ChoicesNb: - .colorPassesNb: - .colorChoicesNb: a fejllts folyamathoz vannak. Az els kt bejegyzs jelzi, mennyi engedlyre van szksged, s mennyi vlaszts van engedlyezve. Ezeket az rtkek az EPSON ltal szolgltatott Windows vagy MacOs meghajtkban lthatk. Ha a nyomtat nem enged egy belltst a sznes fejhez, lltsd az .colorChoicesNb rtkt 0-ra. Az utols kulcssz, az .alignFunctionName specilisan a Stylus Photo 820 miatt kerlt bevezetsre. Ez a nyomtat nem kapott egy szerkezeti kdot, amelyik nyomtat egy mintt. A minta szksges a ttink/mtink szmra. A Stylus Photo 820-hoz rja be Pattern820, a tbbi rtk belltsa "- ". Egy printer.desc fjl teleptse: ------------------------------ Ttink/Mtink a printer.desc fjl megtallsra egyik kvetkez knyvtrban szmt: - /usr/lib/mtink - /usr/local/lib/mtink - /opt/mtink Ha a printer.desc fjlt megtallta, a maradk knyvtrak nincsenek tovbb kutatva. Ha mdostani akarja egy adott nyomtat lerst ,vegyeki az adatot rdPrtDesc-vel s mdostsa az rtket a keresett fjlhoz, azutn msolja az eredmny printer.desc fjlt egy fent emltett knyvtrhoz. A lers felismers a printer.desc fjlban rvnyesl. Egy j nyomtat beszerkesztse a ttink/mtink-be: ----------------------------------------- Hozza ltre a sajt printer.desc fjlt a .../mtink/utils knyvtr alatt s hvja a rdPrtDesc -c > ../model.c -t A fjl a jelenlegi s az j nyomtathoz ekkor automatikusan generldik. Ezutn trjen vissza az mtink knyvtrhoz s hvja a make-t s a make install-t. mtink-1.0.16/html/mtink.It.html0000644000076400001540000004010310376041214014374 0ustar jjfuse mtink

Mtink

Mtink un analizzatore di stato per le stampanti EPSON a getto d'inchiostro.

Con mtink possibile mostrare la quantit d'inchiostro rimasto e lo stato della stampante.
Sono anche implementate altre operazioni, come controllo ugelli, pulizia ugelli e allineamento testine.

Alcune stampanti, come la Stylus Color 480 e la Stylus Color 580 richiedono una componente software per cambiare cartuccia. Mtink conosce i comandi per questo scopo e supporta queste stampanti.

Requisiti

Mtink necessita della libreria openMotif, Motif o Lesstif. Per la compilazione accertarsi che i pacchetti di sviluppo X ed uno dei suddetti tool sia installato (in ambiente di sviluppo e di esecuzione).

Mtink usa una comunicazione bidirezionale con la stampante.

Linux

Se si usa la porta parallela bisogna accertarsi che il kernel o i moduli (partport*) siano configurati correttamente. Per la famiglia di kernel 2.2 il parametro "CONFIG_PRINTER_READBACK" (file /usr/src/linux/.config) dev'essere configurato a 'y'.

Il modulo per la porta stampante USB ha un errore per i kernel 2.2 e 2.4. Se si usa la porta USB bisogna usare un kernel pi recente o modificare il file /usr/src/drivers/usb/printer.c.
Queste modifiche non sono complicate. Bisogna cambiare le linee seguenti :

static ssize_t usblp_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
{
    struct usblp *usblp = file->private_data;
....
    if ((usblp->readcount += count) == usblp->readurb.actual_length)
        usb_submit_urb(&usblp->readurb);
    return count;
}
to:
static ssize_t usblp_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
{
struct usblp *usblp = file->private_data; .... if ((usblp->readcount += count) == usblp->readurb.actual_length) { usblp->readcount = 0; usblp->readurb.dev = usblp->dev; usb_submit_urb(&usblp->readurb);
return count;
} }
Le modifiche sono in lettere rosse in grassetto.

Solaris

Non possiedo una postazione Sparc che permetta una comunicazione bidirezionale con la stampante, e non sono in grado di testare mtink con Sparc Solaris.
Postazioni pi recenti sono dotate di una porta ecpp compliant e permettono una comunicazione bidirezionale. Nel caso si possieda una tale postazione ed una stampante EPSON a getto d'inchiostro, si prega di tenermi informato sui risultati ottenuti.

Mtink ed il protocollo di comunicazione EPSON

Un nuovo protocollo di comunicazione stato creato da EPSON quando i modelli Stylus Color 740 e Stylus Scan sono apparsi sul mercato. Questo protocollo (D4) basato sul draft IEEE 1284.4 1.5 e permette una comunicazione su vari canali logici. Il vantaggio principale che un programma pu inviare richieste o comandi particolari relativi al canale di controllo anche se la stampante occupata (stia effettuando una stampa).
Questo permette anche di condividere una porta per pi dispositivi (stampante e scanner).

L'implementazione del protocollo D4 sembra essere molto parziale per stampanti pi vecchie, e non neppure priva di errori
per quelle nuove, come la Stylus Photo 890 (la mia stampante EPSON).

Il protocollo D4 richiede che la stampante conosca almeno una parte del linguaggio EJL (Epson Job Language). I comandi pi importanti sono
Esci dalla modalit D4, conosciuto da tutte le stampanti che supportano il protocollo di comunicazione D4 e
Leggi l' ID che dice alla stampante di riportare alcune informazioni (modello, designazione, linguaggio supportato).
Il comando Leggi l' ID non apparentemente supportato dalla Stylus Scan 2500 e probabilmente dalla  Stylus Scan 2000 o dalla famiglia Stylus Cxxx
che usano D4 in dipendenza Leggi l'ID.

La vecchia modalit di ottenere informazioni sullo stato della stampante era di usare i comandi EPSON REMOTI. Questi comandi sono
implementati anche sulle nuove stampanti.

Mtink sa dei diversi protocolli, ma l'autore non conosce esattamente le possibilit di ogni stampante prodotta da EPSON.
Per questa mancanza di informazioni, qualche stampante potr non fare ci che mtink si aspetta, ad ogni modo le modifiche da apportare
possono essere realizzate facilmente.

La descrizione delle possibilit della stampante si trova all'inizio del file model.c. I campi pi importanti sono il campo protocollo
ed il campo id. Il campo protocollo deve contenere una delle seguenti voci:
  • PROT_OLD  La stampante non sa nulla del protocollo D4.
  • PROT_NEW  La stampante ha un'implementazione minima del protocollo D4Esci dalla modalit D4 necessaria.
  • PROT_D4       La stampante supporta il protocollo D4  nelle sue linee principali.
Se il dispositivo non risponde al comando Leggi l'ID (versioni EJL e D4) vi saranno sicuramente problemi se questi comandi venissero inviati alla stampante. L'interrogazione della stampante sar disabilitata se il campo id contiene False invece di True
/*   name               colors prot      state exch.  e.sep  cl sep reset             id   */
{ "Stylus C20SX", 4,PROT_D4, True, False, False, True, PROT_D4, True, 3, 15, 2, 9, NULL },
{ "Stylus Color", 4,PROT_OLD, True, False, False, False, PROT_OLD, True, 1, 7, 0, 0, NULL },
{ "Stylus Photo 750", 6,PROT_NEW, True, False, False, False, PROT_NEW, True, 3, 15, 0, 0, NULL },
{ "Stylus Scan 2500", 4,PROT_D4, True, False, False, False, PROT_OLD|PROT_D4, False,3, 15, 0, 0, NULL },

Nei dati presi dal file model.c si pu notare che la Stylus Scan 2500 non fornisce informazioni sulla sua identit, ma utilizza il protocollo D4. La  Stylus Photo 750 fa parte della prima generazione di stampanti con D4: la comunicazione sar OK solo se il comando Esci dalla modait D4 viene dato prima del corrispondente comando REMOTE. La Stylus Color una stampante molto vecchia, e non sa nulla del protocollo D4. Infine la Stylus C20SX usa il protocollo D4 (il vecchio Leggi l'ID non funziona).

La correzione dei campi indicati permette di rendere mtink funzionante con la tua stampante. Per favore, informami sui tuoi successi e modifiche al file model.c.

Vedi anche la documentazione gimp-print riguardante i comandi:
http://gimp-print.sourceforge.net

Come funziona mtink

La prima volta che si lancia mtink verranno richiesti il file dispositivo e la stampante. Fatto questo, vengono caricati i dati relativi alla stampante ed il campo id posto a True, mtink tenter di rilevare se i dati siano corretti e caricher i dati per un'altra stampante se la scelta non era giusta. Infine, la configurazione (porta e modello di stampante) viene scritta nel file $HOME/.mtink.
Invocando nuovamente mtink il file di configurazione viene letto e viene effettuato un controllo per la stampante collegata se dichiarata
"id able".
La cancellazione del file $HOME/.mtink ripristiner mtink al comportamento iniziale.

Mtink diviso in due parti, che comunicano tramite memoria condivisa. Ci permette di effettuare aggiornamenti per la parte X del programma ed evitare malfunzionamenti del codice relativo alla stampante dovuto all'ambiente X (timer, interruzioni,...).

La parte X non costruita come un comune programma X. Mtink contiene vari cicli di eventi X per rendere il job pi facile. Ogni sottofinestra ha un proprio ciclo e la funzione di ritorno, se chiamata, ritorna solo se il ciclo della sottofinestra ritorna. Questo permette il ritorno dei
valori al chiamante. La chiamata dell'interfaccia stampante usa un protocollo simile.

Internazionalizzazione

Mtink pu essere internazionalizzato molto facilmente. Attualmente mtink conosce l'inglese, il francese, l'italiano, il tedesco e qualche parola di turco. E' possibile aggiungere una lingua modificando il file Mtink.res e copiandolo nella tua home directory come EpsonUtil.
Il nome della lingua preso dalle variabili LANG, LC_ALL and LC_MESSAGE. Se, per esempio, LANG contiene fr_FR, mtink si aspetta di trovare il file EpsonUtil.Fr (prima lettera maiuscola, e seconda come specificato nella variabile d'ambiente).
Se il file non viene trovato, il default usato l'inglese.

Esempio:
!!! Font di default per l'Inglese e le lingue europee
EpsonUtil*title_LB.fontList:    *-helvetica-*-r-normal--14-*-*-*-*-*-iso8859-1
EpsonUtil*fontList:    *-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1
!!! set the font required for turkish
EpsonUtil.Tr*title_LB.fontList: *-helvetica-*-r-normal--14-*-*-*-*-*-iso8859-9
EpsonUtil.Tr*fontList: *-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-9
....
!!! Il valore di default (inglese)
EpsonUtil*previous_PB.labelString: Previous
!!! ed i testi per il tedesco, francese, italiano e turco
EpsonUtil.De*previous_PB.labelString: Zurück
EpsonUtil.Fr*previous_PB.labelString: Précédent
EpsonUtil.It*previous_PB.labelString: Precedente
EpsonUtil.Tr*previous_PB.labelString: Geri
Se volessi effettuare una traduzione, mandami il tuo lavoro. Inserisci anche il tuo nome, indirizzo e-mail, url, come preferisci.

Le opzioni a riga di comando

Passare opzioni a mtink di solito non necessario. Se mtink dev'essere lanciato su un computer diverso rispetto a queloo a cui connessa la stampante bisogna indicare il nome del display, per es. mtink -display computerName:0.
In questo caso non necessario che un server X sia attivato sul server della stampante.
Si pu anche lanciare mtink tramite ssh o rsh, se disponibili:
ssh serverName /home/jj/mtink/mtink -display workStationName:0
E' anche possibile indicare quale lingua si debba usare
ssh serverName LANG=fr /home/jj/mtink/mtink -display workStationName:0
configura mtink per l'uso di testo in lingua francese.
Si tenga presente che non tutti i browser funzioneranno come previsto.
La rilevazione automatica della stampante pu essere disabilitata lanciando mtink con l'opzione -noAutoDetect.

La finestra principale

mtink main window

In cima alla finestra compare il modello di stampante rilevato o inserito al momento della configurazione, in questo caso la Stylus Scan 2500.
La quantit d'inchiostro rimasto viene indicata sia in forma grafica che testuale.
Lo stato della stampante pu dare alcune informazioni sullo stato interno della stampante, ad es. stampa in corso (la stampante occupata).
I pulsanti sollo alla linea di Stato permettono la scelta dell'operazione da effettuare, l'ultimo pulsante non attivo se la stampante non supporta (richiede) la funzione per il cambio della cartuccia.
I pulsanti in fondo permettono di vedere  alcune informazioni su mtink (Informazioni) o di terminare (Esci). Il pulsante Aiuto permette di vedere questo documento.

La finestra di configurazione

mtink configuration window

Si pu scegliere quale browser utilizzare per visualizzare il manuale, ed indicare ad mtink di effettuare un rilevamento automatico al lancio del programma (default).

Scelta di un browser:
Si pu indicare il nome del browser nel campo appropriato o cliccare su [ ... ] e selezionare il browser tramite la finestra di selezione file.

Mtink conosce le opzioni dei comandi in linea richieste da alcuni browser (Netscape, Mozilla e galeon) e li lancia appropriatamente. Anche altri browser, come Konqueror, Gnome-help-browser o Opera, non necessitano di particolari opzioni e possono essere usati.

Alcuni browser non funzionano se il corrispondente desktop non usato. La scelta migliore in questo caso un browser come Netsvcape, Mozilla, Galeon o Opera, che sono indipendenti da un desktop particolare, come KDE (un OS sopra il OS che ha a tutt'oggi un grosso errore, non ci sono chermate blu).

Rilevamento automatico:
Il pulsante di controllo Permetti rilevamento automatico Pu essere attivato. In Modalit rilevamento automatico, mtink cercher di identificare la stampante connessa. Se la stampante risultasse essere un modello vecchio, come la Stylus Color 400 / 600, ... e non venisse riconosciuta dopo il primo tentativo, mtink tenter di inviare un comando per la stampa di alcuni caratteri. Un vantaggio ulteriore della disabilitazione del rilevamento automatico che l'avvio sar un po' pi veloce, ma se si connettesse un altra stampante EPSON al computer vi potrebbero essere problemi.
Dopo aver modificato la configurazione necessario salvarla. I dati vengono scritti nel file $HOME/.mtinkrc.

Allineamento testine

Mtink di allineare le testine. Questa caratteristica dipende dal modello di stampante e l'aspetto della finestra pu essere leggermente diverso da modello a modello.
Alcune stampanti, come le Stylus Color 480 e 580 richiedono allineamenti separati per la testina del nero e del colore. Per questo motivo, la finestra principale mostrer pulsanti per la selezione della testina. Un'altra differenza che il numero di esempi di stampa varia (8 o 15). Il numero di passi pu anche variare da modello a modello di stampante.
Non posso garantire che il codice inviato alla stampante sia sempre valido: se si usa questo tool bisogna considerare questo rischio.

mtink alignment first window mtink alignment wait window
mtink: prima finestra per l'allineamento mtink: finestra principale per l'allineamento
mtink alignment setup window mtink alignment last window
mtink: finestra di configurazione per l'allineamento mtink: ultima finestra per l'allineamento

La seconda e terza finestra mostrate sopra verranno mostrate fino a tre volte (dipende dal modello di stampante).

Errori

Probabilmente un sacco.

To do

  • Documentazione migliore.
  • Traduzioni della documentazione.
  • Sperimentazioni con pi stampanti.
  • ....

Autore

Jean-Jacques Sarton
jj.sarton@t-online.de
Xwtools Home Page

mtink-1.0.16/html/bldRes.De.txt0000644000076400001540000000037110376041214014317 0ustar jjfusebldRes: Dieses Programm liest die angegebene Ressourcen-Dateien und erzeugt eine .c-Datei. Die Ausgabe erfolgt auf der Konsole. Syntax: bldRes resource_datei_1 ..... Beispiel: bldRes ../Ttink.en ../Ttink.de | sed 's/^\.En//' > ../mainSrc/tres.c mtink-1.0.16/html/mtink.De.html0000644000076400001540000005145710376041214014366 0ustar jjfuse Mtink

Mtink

Mtink ist ein Status-Monitor für EPSON Tintenstrahldrucker.

Mtink zeigt Ihnen die Tintenmenge und gibt Ihnen Auskunft über den allgemeinen Status Ihres Druckers. Zudem ist das Überprüfen und Reinigen der Düsen und das Ausrichten der Druckköpfe möglich. Einige Drucker, darunter der Stylus Color 480 und der Stylus Color 580, benötigen extra Software um die Tintenbehälter zu wechseln. In Mtink sind diese Steuercodes bereits eingebaut.

Inhalt

Voraussetzungen für den Betrieb
Mtink und die EPSON Kommunikationsprotokolle
Wie Mtink funktioniert
Internationalisation
Optionen in der Befehlszeile
Das Hauptfenster
Das Konfigurationsfenster
Druckkopf justieren
Das Minifenster
Bugs
Siehe auch
To do


Voraussetzungen für den Betrieb

Für den Betrieb sollte openMotif, Motif oder die Lesstif library installiert sein. Falls Mtink kompiliert wird, muss zusätzlich das X-Entwicklerpaket und vom oben genannten die Runtime- und die Entwicklerumgebung installiert sein. Für Mtink muss die Schnittstelle bi-directional sein, das heißt, dass Daten vom Drucker auch gelesen werden müssen.

Linux

Wenn Sie den parallelen Druckerausgang benutzen, dann muss der Kernel oder das parport-Modul korrekt konfiguriert sein. Beim Standardkernel ist das auch in der Regel der Fall, beim Selbstkompilieren von 2.2-Kernelversionen muss der Eintrag in der Konfigurationsdatei "/usr/src/linux/.config" im Abschnitt "CONFIG_PRINTER_READBACK" auf "y" stehen.

Leider ist das USB-Druckerport-Modul für ältere 2.2- und 2.4-Kernel fehlerhaft. Gibt es Schwierigkeiten, müssen Sie sich einen neuen Kernel mit höherer Versionsnummer besorgen oder die Datei /usr/src/linux/drivers/usb/printer.c modifizieren. Das ist nicht schwer, es brauchen nur die folgenden Zeilen geändert werden:

static ssize_t usblp_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
{
    struct usblp *usblp = file->private_data;
    ....
    if ((usblp->readcount += count) == usblp->readurb.actual_length)
      usb_submit_urb(&usblp->readurb);
    return count;
}
ändern nach:
static ssize_t usblp_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
{
   struct usblp *usblp = file->private_data;
   ....
   if ((usblp->readcount += count) == usblp->readurb.actual_length) {
     usblp->readcount = 0;
     usblp->readurb.dev = usblp->dev;
     usb_submit_urb(&usblp->readurb);
     return count;
   }
}

Die Änderungen sind rot und fett gekennzeichnet.

Solaris

Leider besitze ich keine Sparc-Station, die eine bi-direktionale Schnittstelle zum drucken hat, deshalb konnte ich es nicht testen. Neuere Workstations verfügen über einen "ecpp"-Port, der beidseitige Kommunikation erlaubt. Falls das Jemanden mit einem Epson-Drucker gelingt, so möge er mir bitte Bescheid geben, damit ich es in künftigen Versionen berücksichtigen kann.

Mtink und die EPSON Kommunikationsprotokolle

Mit Erscheinen des Stylus Color 740 und des Stylus Scan verwendet Epson ein neues Protokoll, um diese Drucker anzusteuern. Es heißt D4 und basiert auf dem Entwurf des Datenübertragungsprotokolls IEEE 1284.4, Version 1.5, und ermöglicht die Kommunikation über mehrere logische Kanäle. Der größte vorteil ist, dass Kommandos über einen control-Kanal geschickt werden können, und obwohl der Drucker gerade arbeitet, also eigentlich busy ist, ausgeführt werden können. Dank dieses Protokolls ist es auch möglich, diesen Port mit anderen Geräten, beispielsweise einem Scanner, zu teilen.

Die Implementation des D4-Protokolls scheint für ältere Drucker sehr unvollständig zu sein und ist somit nicht frei von Fehlern - im Gegensatz zu neueren Geräten wie dem Stylus Photo 890 (das ist mein eigener).

Das D4-Protokoll erfordert, dass der Drucker zumindest ein paar Grundzüge der EJL (Epson Job Language) beherrscht. Das wichtigste Kommando daraus ist der Exit from D4 mode-Befehl, der von allen Geräten unterstützt wird, die das D4-Kommunikations-Protokoll und den Get ID-Befehl beherrschen. Letzterer veranlasst den Drucker zur Ausgabe über das Modell, die Bezeichnung und die unterstützten Sprachen. Der Get ID-Befehl wird offensichtlich nicht vom Stylus Scan 2500 und wahrscheinlich auch nicht vom Stylus Scan 2000 und von der Stylus Cxxx-Reihe unterstützt. Diese benötigen das D4 Pendant vonGet ID . Bisher erfuhr man Informationen über den Drucker-Status durch die Epson REMOTE-Befehle. Diese Befehle sind in den neueren Geräten weiterhin eingebaut.

Mtink unterscheidet die unterschiedlichen Protokolle, aber der Autor kennt nicht alle Fähigkeiten der Drucker, die von Epson ausgeliefert wurden. Um zu verhindern, dass Mtink auf Reaktionen des Druckers wartet, die schlicht nicht vorhanden sind, können die erforderlichen Modifikationen leicht vorgenommen werden.

Die Fähigkeiten der verschiedenen Drucker sind zu Beginn der Datei model.c beschrieben. Die wichtigsten Felder sind die, in denen das "protocol" steht und die "id". Im "protocol"-Feld muss einer der folgenden Einträge stehen:

  • PROT_OLD   Der Drucker kann mit dem D4-Protokoll überhaupt nichts anfangen.
  • PROT_NEW  Der Drucker kennt einige wenige Befehle von D4 . Exit from D4 mode ist erforderlich.
  • PROT_D4   Der Drucker unterstützt das D4-Protokoll im größeren Rahmen.
Sollte der Drucker auf das get ID-Kommando (bei EJL und D4 Versionen) nicht antworten, wird es problematisch, denn Fragen an den Drucker werden unmöglich und der Wert des Feldes der id wird anstelle von True auf False gesetzt.
/*   name            colors prot      state exch   e.sep  cl sep reset             id   */
   { "Stylus C20SX",      4,PROT_D4,  True, False, False, True,  PROT_D4,          True, 3, 15, 2, 9, NULL },
{ "Stylus Color", 4,PROT_OLD, True, False, False, False, PROT_OLD, True, 1, 7, 0, 0, NULL },
{ "Stylus Photo 750", 6,PROT_NEW, True, False, False, False, PROT_NEW, True, 3, 15, 0, 0, NULL },
{ "Stylus Scan 2500", 4,PROT_D4, True, False, False, False, PROT_OLD|PROT_D4, False,3, 15, 0, 0, NULL },
Aus den Daten der Datei model.c können Sie erkennen, das der Stylus Scan 2500 nichts über seine Identität preisgibt, aber das D4-Protokoll benötigt. Der Stylus Photo 750 ist einer aus der ersten Generation, die D4 beherrschen. Die Kommunikation funktioniert aber nur, wenn der Exit from D4-Befehl dem erforderlichen REMOTE -Befehl vorangestellt wird. Der Stylus Color ist ein älterer Drucker, der nichts über das D4-Protokoll weiß. Letztlich benötigt der Stylus C20SX das D4-Protokoll (das "alte" Get ID funktioniert nicht).

Durch Korrekturen an den jeweiligen Feldern sollte Mtink mit Ihrem Drucker zusammenarbeiten. Bitte informieren Sie mich, wenn Sie eine Kombination gefunden haben, die mit Ihrem Drucker zusammenarbeitet und die von den Vorgaben aus der Datei model.c abweicht. In der gimp-print-Dokumentation steht mehr dazu:

http://gimp-print.sourceforge.net

Wie Mtink funktioniert

Wenn Sie Mtink das erste Mal aufrufen, werden sie nach der Gerätedatei (Anschluss) und dem Drucker gefragt. Dann wird die Drucker-Beschreibungsdatei geladen und mit dem Druckereintrag verglichen. Steht das id-Feld auf True, versucht Mtink, das Gerät zu bestimmen. War Ihre Angabe zum Druckermodell nicht korrekt, wird von Mtink dasjenige, dass es selbst herausgefunden hat, genommen (ausser wenn ein Gerät deklariert wurde, das keine Identifikation zurück gab). Diese Daten, Druckermodell und Port, werden in der Datei $HOME/.mtink gespeichert. Wenn Sie Mtink danach aufrufen, wird die Konfigurationsdatei eingelesen und mit der Antwort des angeschlossenen Druckers verglichen. Das Löschen der Datei $HOME/.mtink ist wie ein Reset der Konfiguration.

Mtink belegt zwei Bereiche im Arbeitsspeicher und kommuniziert über "Shared Memory". Das erlaubt kurze Refresh-Zeiten für die grafische Ausgabe über X und vermeidet Fehlfunktionen im printer code, damit sich der nicht mit der X-Umgebung, den Timer, den Interrupts und anderen Funktionen ins Gehege kommt.

Mtink entspricht vom Aufbau her nicht herkömlichen X-Anwendungen. Damit Daten von verschiedenen Darstellungsmasken zurückgeliefert werden können und damit die Ansteuerung des Druckers nicht zu Wartezeiten führt, bei denen die Oberfläche nicht mehr bedienbar wird, beinhaltet Mtink für jede Maske und für die Schnittstelle zur Druckeransteuerung eigene XEven-Schleifen.

Internationalisation

Mtink kann auf einfache Weise an andere Sprachen angepasst werden. Zur Zeit kennt es die Sprachen Englisch, Französisch, Italienisch, Deutsch und Türkisch. Sie können leicht Ihre eigene Sprache einbauen, in dem Sie die Datei Mtink.res editieren und in Ihr Home-Verzeichnis als EpsonUtil kopieren. Der Resourcen-Name für Ihre Sprache leitet sich von den Umgebungsvariablen LANG, LC_ALL und LC_MESSAGE ab. So erwartet beispielsweise Mtink beim Inhalt einer Variablen von fr_FR eine Resourcen-Datei mit dem Namen EpsonUtil.Fr. Bitte beachten Sie, dass bei der Länderkennung der erste Buchstabe, hier das F, großgeschrieben ist und der zweite Buchstabe entsprechend dem Variableninhalt von LANG ist. Wird die Resourcendatei nicht gefunden, kommt default zum Zug, also Englisch.

Beispiel:

 EpsonUtil*title_LB.fontList: *-helvetica-*-r-normal--14-*-*-*-*-*-iso8859-1
 EpsonUtil*fontList: *-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1
 !!! set the font required for turkish
 EpsonUtil.Tr*title_LB.fontList: *-helvetica-*-r-normal--14-*-*-*-*-*-iso8859-9
 EpsonUtil.Tr*fontList: *-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-9
 ....

 !!! The default (english)
 EpsonUtil*previous_PB.labelString:    Previous

 !!! and the texts for german, french, italian and turkish
 EpsonUtil.De*previous_PB.labelString: Zurück
 EpsonUtil.Fr*previous_PB.labelString: précédent
 EpsonUtil.It*previous_PB.labelString: Informazioni
 EpsonUtil.Tr*previous_PB.labelString: Geri
Wenn Sie die Übersetzung in andere Sprachen unterstützen möchten, senden Sie mir bitte Ihre Datei, die mit Ihrem Namen und Ihrer Internetadresse, sofern Sie es möchten, versehen ist.

Optionen in der Befehlszeile

Mtink mit Optionen aufzurufen ist normalerweise nicht erforderlich. Falls Mtink seine Bildschirmausgabe zu einem anderen Computer schicken soll, müssen Sie die DISPLAY-Variable anpassen, oder Mtink so aufrufen: mtink -display ComputerName:0. Es ist nicht erforderlich, dass auf dem Rechner, an dem der Drucker angeschlossen ist, ein X-Server läuft. Mtink kann mittels ssh und rsh, sofern vorhanden, gestartet werden:
$ ssh serverName /home/jj/mtink/mtink -display workStationName:0.
Sie können auf diesem Weg auch die Sprache einstellen.
$ ssh serverName LANG=fr /home/jj/mtink/mtink -display workStationName:0
veranlasst Mtink zur Ausgabe von französischen Texten. Bitte berücksichtigen Sie, dass nicht alle Browser (Hilfe Funktion) korrekt arbeiten, wenn diese vom entfernten Rechner aus aufgerufen werden.

Die automatische Druckererkennung kann mit dieser Option ausgeschaltet werden:

$ mtink -noAutoDetect

Die Option -config <Nummer> erlaubt den gleichzeitigen Betrieb mit unterschiedlichen Druckern.

Beispiel:

Drucker 1 ist ein Stylus Color 980 an /dev/lp0

und

Drucker 2 ist ein Stylus Photo 890 an /dev/usb/lp0.

Sie können mit mtink -config 1 Mtink für Drucker 1 (Stylus Color 980) und mit mtink -config 2 für Drucker 1 (Stylus Photo 890) aufgerufen werden.

Die Konfigurationsdaten werden in die Dateien ~/.mtinkrc.1 beziehungsweise ~/.mtinkrc.2 gespeichert.

Ohne Angabe der Option -config # oder mit -config 0 wird auf die Datei ~/.mtinkrc zurückgegriffen.

Das Hauptfenster

mtink Hauptfenster

Ganz oben im Fenster wird der angeschlossenen Drucker angezeigt. Grafisch als Balken und in Zahlen wird die Tintenmenge dargestellt, die sich aktuell in den Behältern befindet. Die Zahl der Balken hängt von der tatsächlich verfügbaren Zahl der Farben des Druckers ab. Der Druckerstatus beinhaltet einige Informationen über den internen Zustand, beipielsweise ob er gerade druckt. Die Schaltflächen unter der Statuszeile erlauben verschiedene Aktionen. Hier im Beispiel ist der letzte Button nicht aktiv, weil dieser Drucker das Wechseln der Patronen auf diesem Wege nicht unterstützt. In diesem Fall müsste man selbst am Drucker die entsprechenden Knöpfe drücken. Mit den Buttons ganz unten kann man sich verschiedene Informationen über Mtink anschauen und das Programm mit Exit verlassen. Die Schaltfläche mit der Bezeichnung Hilfe zeigt diesen Text an, den Sie gerade lesen.

Das Konfigurationsfenster

Mtink Konfigurationsfenster

Hier können Sie bestimmen, welcher Browser die HTML-Hilfedatei anzeigen soll. Mtink kann mitgeteilt werden, dass beim Programmaufruf automatisch nach einem Browser gesucht werden soll. Das ist die Voreinstellung.

Auswahl eines Browsers

Sie können den Namen des Browsers in das Eingabefeld schreiben oder den [ ... ]-Button drücken. Dann erscheint ein Dateimanager. Mtink kennt Optionen für die verschiedenen Browser wie Netscape, Mozilla und Galeon und startet sie entsprechend. Andere Browser, beispielsweise der Konqueror, der Gnome-Help-Browser und Opera brauchen keine besonderen Optionen und können auch verwendet werden.

Manche Browser verweigern die Arbeit, wenn die dazugehörige Desktop-Umgebung fehlt. Die bessere Lösung sind in diesem Fall Browser wie Netscape, Mozilla, Galeon und Opera, die von einem speziellen Desktop wie beispielsweise KDE unabhängig sind. Der Autor steht der Entwicklung von KDE kritisch gegenüber, lediglich die Bluescreens sind bei KDE noch nicht implementiert.

Automatische Erkennung

Der Check-Button erlaubt den Wechsel zwischen der automatischen und der manuellen Erkennung. Im automatischen Modus versucht Mtink , den angeschlossenen Drucker zu identifzieren. Falls Ihr Modell älter als der Stylus Color 400/600 und dergleichen ist, und er nach dem ersten Versuch nicht erkannt wurde, sendet Mtink einen Code, damit der Drucker ein paar Zeichen auf Papier ausgibt. Dabei ist es ein Vorteil, wenn die automatische Erkennung ausgeschaltet wird, dann gehen die späteren Programmstarts schneller. Das könnte lediglich in dem Fall problematisch werden, sobald ein anderer Drucker angeschlossen wird. Nach dem Ändern der Einstellungen müssen sie auch gesichert werden. Diese Daten werden in die Datei $HOME/.mtinkrc geschrieben.

Druckkopf justieren

Mtink kann auch die Druckköpfe ausrichten. Diese Funktion ist jedoch abhängig vom Druckermodell und die Erscheinung des Programmfensters hängt ebenfalls davon ab. Manche Drucker, wie der Stylus Color 480 und Stylus Color 580, erfordern eine getrennte Justierung für den farbigen und für den schwarzen Kopf. Dementsprechend werden auch die Fenster mit den Auswahlmöglichkeiten angepasst, so dass es in diesem Fall zwei Buttons, einen für den farbigen und einen für den schwarzen Kopf, gibt. Ein weiterer Unterschied ist im Ausdruck des Testmusters zu sehen, denn es können 8 oder 15 Streifen sein. Unterschiedlich ist auch die Zahl der Durchgänge.


Mtink Einstellung Erstes-Fenster Mtink Einstellung Pause-Fenster


Mtink Einstellung Erstes-Fenster Mtink Einstellung Pause-Fenster


Mtink Einstellung Setup-Fenster Mtink Einstellung letztes Fenster


Mtink Einstellung Setup-Fenster Mtink Einstellung letztes Fenster

Das zweite und das dritte Fenster wird je nach Druckermodell bis zu dreimal angezeigt.

Bugs

Wahrscheinlich eine Menge. Ich kann nicht garantieren, dass der Code, der zum Drucker gesendet wird, immer korrekt ist, weil mir Informationen darüber oft fehlen. Die Benutzung des Programms geschieht auf eigene Gefahr.

Das MiniFenster

Diese Fenster wird nur aufgeschaltet wenn der Server mtinkd läuft oder die Rc-Datei .mtinkrc deb Pfad "/var/mtink/..." beinhaltet.

Das Fenster kann 2 Fareben annehmen, Grün (alles klar), Orange (Tintenmenge weniger als 10%) oder Rot (Drucker nicht verfügbar oder wenige als 5 % Tinte).
Durch betätigen er linke Maustaste, wird das Mtink-Hauptfenster aufgeschaltet bzw. geschlossen.
Das Fenster kann frei positionniert werden (rechte Maustaste). Die Position des Fensters wird in der Datei ~/.mtinksess[.Konfiguration nummer festgehalten wenn mtink via ALT + F4 oder der Schliessschaltfläche der Titelleiste beendet wird.

Siehe auch

Index
mtinkd der server for D4 Drucker
minkc ein Auswahl Dialog für Besitzern von mehereren EPSON druckern
ttink ein Konsolen basierten Statusmonitor

To do

  • Bessere Dokumentation.
  • Übersetzen der Dokumentation.
  • Test mit mehreren Druckern.
  • ....

Autor

Jean-Jacques Sarton jj.sarton@t-online.de
Zur Xwtools Home Page

mtink-1.0.16/html/bldRes.txt0000644000076400001540000000051210376041214013765 0ustar jjfusebldRes: This program read the given resource files and create a c-file which can be included in the main program. Syntax: bldRes resource_file_1 ..... The output is done on the console. If you whish to create the resource file, rtedirect the output to the wanted file. example: bldRes Ttink.en Ttink.de > ../mainSrc/tres.c mtink-1.0.16/html/mtink-chooser.Hu.gif0000644000076400001540000002135110376041214015641 0ustar jjfuseGIF89a`$,dŔ̌,`dؔL9Jx$|ZNX´`|L~,Lh|DشДLd|̹|}<><]z0nwzhf$ܙjzLz|T4AR\|ER(l4JfzD|z|dtlTv,T4L׼TlDdl׬]:uʰk]R:+S&)|tW2|'WqH,xH*:R!vƇ @hO,hH!yNj.xEyx9Wܨc\c>(@BG"G¤@%"PNAVZZVS|H|@aISP"o 7q9't~z~-P&h -T!FFE+88o-r?H&:vP!(tK RE-v頝O9FyK Ǽ:RҫG텏|zY +HpG$hT&`J2 %(!Sd<*3xAA'HKZp/e'ri/'xd,)Q8RD!qA`RT\5`fВ*8UԥKj;vh nzьAAytЁ{8>oC,6jrtBGzfÒ`  d,F0 nP4) kYKr(,N8(҄@ * OU3.< 5-в\P>T`9Uִo*1׺U^pxͧ< < q5@lbwX[VKF#B>pf g?{,=miqld5HD2,#`nA,` kIS4)1Es `F59NAU!OE,+0(3I ;ZKR/~]sxA:W`+*p 7hGoa*A(V!takx'^lqb ㅷ ,8c@|?B4L,h$#,*b4V^h\pqpy!f2yGtLJDls9S̱(?DXa>@/Xh`; ͊5 Ns 0RԦ~AP V:Bg-. ָ+pqxK бWc![lؾ,>p HC4WNK/D@i75m(S]:x b`?vaLVw Q ǽQ%gTΎ{A [9̙̀3psTP9Y]*TXG(;k [W/]cf6.lcǎ p;w4Aw~Y|wA߯1k5_ZւEjZXAsMLq|BScTF4.0]BqSD! /~~Ea{? X-GPүO5 C_x(@0 o 1x+c|c bxhA€ x A @xx $8&j@y y0y.igz4zz7xp^d }A8! d !`}^WN,` 7g h ;n؆m tCz xxr\ 6uuK- "K`x( ؉ Xx (  (8hr@jj¸ j`xpjql@lhD!ߨ! X}`,؎` ` ,X|;x|p0 y --p2@-K ޒ KА+ rВ 3 rH89 H@r0E9JyLYN@ CYPUYjP6` _`96p6 hyeٖey(hd}1{! !Ia!@,` i   ;; |@Y|p GY o9K͙ יع8m mГ`߉PB B9 I@OipYiZI i[i_Z 60uLy{I4@)4*J-` ai 1 ppUP'GH )LVI00[ڥI" f:edN mn ېsZtJH`Ӱ yڧ& 0 &YHPP) O VZ `~]٩` :ڠJzpiP"MM0qq8 @zǚ4p ` @ @ڭp : 劮 Uz :L LL IoIPk o " N ;kNN `"Kfp& uuu,[ `8) =A )Pi~EGݐ~PP p ZL%qqdecº:o@py۷| 4 [U˭Up@ @ k LPI IPۯ " "s s ˰P" s&``śf ۼu`u`u`ԛKuг)D ۳ 围 뻾݀` {ۿ18680\| <\ vL l "<8d@(<ڸ.+, <{, )l4/6l=?L@;|H|!<{@ 3!T S=|glSX\GlG|\ 2zɅL–Ʉl˘LZŸƕ<LS Oz,e
M4uW|?.,g,~An`;>|T.)Z/3~m{~0]>}ehϮ} -ne颾 ~޻ 2nfϺԌ~N̖ɗa.{} 4>nMa@.UN{=^.Į6ﶾq ռ ||m؅o7mTmGoHNp-M~]#--[O]`~d_ul1h]6Ь=r/҉mvOX_]|o6MY/Džs< mn떿с}нM _Oȕm/¢{'( {¿Ŀ?ο?_ԏ\, ?_O׆01H@ DPB >a$6jDfYB5ˢALDRJ-]SL5mę3Р#?nȒ:ETRJyZ lUV]Yc#eYTjӺQrMSd VeIiޅYxa:"LXa jUEu*KNƤ#?^蝨 +&]Գgʵ+5PKVoS&>5ku](]c6`艡6r_.o\j rsu̽>~Myjו~MzͣFs_뷏|DB{f#?W}-._ߧT+~ Eϵ/|SB!ЁR~@ Vj+ܯaBס/'UlvHЅ/a e8CІ7auCЇ? #a *Gd+RB60JLEE$VъW"E.vыO̢)bDEoc8юwcˈƱ4_t#= d"E0VN XHDa<yGH:r$(EIR2'U)}m|F,QN6qU-uiHe_ID&SiAsjl$&.ҙHf2WYhrWjߴ*)ts%<ٙMs֓_)M9zsD2xN+R" M td#=t7N"h<%/ƓübFNKeKUU#q{²"<;::TvTDӸB6թ? SAE };:MllPcU]IYկ2&[*OʵpU9.^VKbT.6֘^#_EɞEc5Y rka;Ζv~hZٷYcٲִj9CQվV-T*+֋bp9C4׹υnt;]V׺nv]v׻vmD׼Eozջ^ K˼* h;.9525YI:Ѩl)MȝV,p-#UQmsh!<-*YÊ (S *`Vn'";l`V]nRI굞Eq=$ =ֱk *־1\kllx!xrC֊$U%%I-Tbq լf-na{15ĺ"ث r{PƍLє"W9G怡*=9!%Ny3v QR  -cwa-"uc"Uy5ifҕzX+v6`=\0m-Ez3ݱGg[t;,ZZ.\+vۋj{RƮQۆ@ {47g/{@nҧ7 Oo- " "q6pηMaߕ 9>no暥v>ߒ**i=yWp \Dу=|1]Ac~D eWy7.v WH}V$a߸[7`'og{ٵEhX<}_1,x/{?t7_)n*}Mzԗ~:bЛ'=W]B3 t5'>iF:Ot ?v^f]:;:W$7m~?"g $ݟcJ;xtҢ4;&1h*?. $+6 p9t&S ,-3|#/5?$d„R#()*B꒔-./01$243D4T5d4T689:;,>-@ACBBDCTDALDF\DCtHIlDJ|JKDIDNDKyO$EP4N 7#&sV g jԦrpfǼi*, .4l8<@-DmH#1W8)v2=n(XӜ==/c!n+ٖΆnr!vU|q\g8N8c⊯x'>Oakynι`+Hz_{N{|^gvxG|/ edIoP"Kxh9MY|?/KU8@4 h}^@VЂ,̀% -HV"fYUh gX`j%U B^}k"!DURⅮ*(8q zU *H R ctAj gFGуd_,LQx̣>q;LĻA^AK"F"k)#'IJZ[%Ű~+_ؘ9¯P& +G rd$ Kv2qcRҗ(yJߒ_2TfjZ뒦 y9qt)NӅ{R:|O(խ)C؉ B44=ȩP!z }ʘEt,ZE(zd4Z7}roǴITV:o/i`4ؒPJԢHDES1y*TɓЩ {n{:-Z «+X/1ֳmco'y~+Jת 6U/wՍ6̪*`S b!26:}Y+YD(,fEsƤ] hCђ$=mHRZ1,ln]Mɶy-p'^m'r2W[}B+]8Y.v?Ew;"0=W̫ޫ/|Mj~6#|vR7,]2X,}p",ZN{ f` bV(@?]|-)Oew0559y1&\+Vęz\' GFpg?:Pؾ6ZX2a.{`s2h65-9g̳>}~=hyvF3 DcMJ[ZbruN{Ϗ#3@:1Ρv4#ц8zҟ XD).w=T'q: qj2FdiHÚжth(68+-0dlh_{[٣⸟vy0Aw{N} Xt{(aN0ߺwm!yaq7{㑂EA|ѽWk;NgN[R/󝃧>/ۂn]Ŧҗt{[MԧnӃ7u ش:.sz>ٙ!`̽ԥ?qxl+_{2NMŻ}_gAyY^)ULWݧ(Ʃ瓱w{R!o`1G_ Ӓ{Jɓd)J İ=;?#ԟOCϾa#6p RkYcQIOV2/VQu$7c59cpCWseSS> 7gOʁ787Uǀcn1W (O#N~%Eeꅃ祃Ń%5W >^1A($d>GS1~N !UwQc7P?[F إhOt3eaO,؀h}@$Sbbׁe|%GH 6؈CX~V58 Hw}x[/3ޅۥŊuV Ȃ] mUW (6U &7woR.&O`(Ȍe/ҋxpuOce>hQmrHW7S1hlȡ舋8ᨆX-x2bX#)Cwd H(Xc%Eeƅåő呹%EeŒ咡%E萟hȓ-蓗EeŔV(PEMe:2)ŕ% E eŖ$Dd܄ė#CcØ㘴#CcÙ㙜#CcÚ㚄k#hCf%GhAXM1#.C-c2%/4ٜ9Y8%F!燜a bdrb7EVXL_ ҈ iV0QDFiE">)>(;t( icy1W!H5]X`*x1 ^sXOpc b'7x&j R1WO J%9?ʟ+ -"#* `N3YR3晇ɝwSڥ^`b$"ffzhj*?rnp,rtZvzx*h;mtink-1.0.16/html/LESE-MICH0000644000076400001540000000433310376041214013207 0ustar jjfuseMtink ist ein Status Monitor fr EPSON Tintenstrahl Druckern. Damit mtink sein Werk verrichten kann, muss die Kommunikation mit den Drucker bidirektional sein. Falls Ihr System diese Anforderung nicht entspricht, ist gegebenfalls ein neuer Kernel zu generieren. Notizen fr Linux und USB: -------------------------- ltere Kernel sind bezglich der Druckeruntersttzung fehlerhaft. Im Zweifelsfall, installieren Sie bitte eine neuere Version des Kernels. Notizen fr freeBSD: -------------------- Die Implementierung des Kerneltreibers fr den Drucker-USB-Port lsst nur ein lesen zu. Aus diesen Grund ist eine Unterstzung des USB-Drucker-Port nicht vorhanden. Notizen fr Solaris: -------------------- Unter Solaris x386 scheint keine Bidirektionnale Kommunikation mglich zu sein. Unter Solaris Sparc gibt es hier kein Problem wenn die Gertedatei /dev/ecpp0 vorhanden ist. Der Pfad fr make wird standardmssig nicht in der Variable PATH eingetragen. Anstelle von "make install" /usr/ccs/bin/make install" aufrufen. Kompilierung und Installation: ------------------------------ Das Script Configure generiert die Datei Makefile entsprechend des vorgefundenen Betriebssystems und der angegebenen Optionen. "./Configure -h" oder "./Configure --help" gibt die vorhandene Optionen aus. Nachdem Configure aufgerufen wurde, knnen sie mit "make" das Programm bersetzen. Mit "make install" wird das Plug-ins gimp-mtink, falls Sie nicht als root eingelogt, sind installiert. Wenn Sie als root angemeldet sind, werden mtink und die Dokumentationsdateien installiert. Mit "make uninstall" wird mtink deinstalliert. Notiz bezglich ttink: ---------------------- Ttink die Konsole basierte Version des Status Monitor kann leicht internationalsiert werden. Dazu reicht es aus die Datei Ttink.de nach $HOME/Ttink zu kopieren. Drucker hinzufgen: ------------------- Siehe Datei utils/rdPrtDesc.De.txt Notiz fr mtink in ein Browser: -------------------------------- Mtink beinhaltet nun einen kleinen Server welcher es erlaubt die Resttintenmenge innerhalb ein Browser zu sehen. Die Verzeichniss pyink beinhaltet den entsprechende Kode. Fr weitere Informationen, siehe die Dateien dieses Folder. Weitere Hinweise sind in der Datei README zu finden. mtink-1.0.16/html/FORDITAS0000644000076400001540000000264310376041214013156 0ustar jjfuseMegjegyzs fordtknak. A Ttink.En (angol) s Ttink.De (nmet) tartalmazza a forrsokat a ttink segdprogramhoz. Ezek a fjlok a utils knyvtrban vannak. A fordts elkszlte utn, a c fjlt knnyedn generlni tudja a bldRes segdprogrammal. Elszr szerkessze ezt a segdprogramot a "cd utils;make bldRes"paranccsal s azutn krelja jra a tres.c fjlt. bldRes Ttink.en Ttink.de .... | sed 's/\.En\././' > tres.c Ha a fjl sikeresen generldott, helyettesteni tudja a rgit a sajt vltozattal. mv tres.c .. Ezutn a lps utn jra tudja szerkeszteni "cd ..;make" paranccsal. Ha akarja, befoglalhatja a nevt, levlcmt s URL-t a forrsfjlba. Ebben az esetben ne felejtse el ezeket megjegyzsknt megtenni ( ! nv,... ). Krem kldje el nekem a fordtst, gy n azokat bele tudom foglalni a csomagba. Az Mtink forrsok tltetsei jelenleg ezek a fjlok: Mtink.gen (ltalnos forrsok, amelyeket nem szksges lefordtani) Mtink.En (angol szvegek s nem jelenlv nyelvek alaprtelmezse) Mtink.De (nmet szvegek) Mtink.Fr (francia szvegek) Mtink.It (olasz szvegek) Mtink.Tr (trk szvegek) Mtink.Hu (magyar szvegek) A resource.c fjl felptshez adja ki az /mtink/utils knyvtrban a ./bldRes Mtink.gen Mtink.En Mtink.De Mtink.Fr Mtink.It Mtink.Tr Mtink.Hu > resource.c parancsot s msolja a resource.c fjlt az anyaknyvtrba (/mtink/mainSrc), ha minden OK. Jean-Jacques Sarton jj.sarton@t-online.de mtink-1.0.16/html/align3.gif0000644000076400001540000001352610376041214013666 0ustar jjfuseGIF87aK{}{,K@I8ͻ`(dihzB+ @ tq]߷NpH,ArL(SZ$0 ě-S U ,iovN<__gh`RKjO,.dqÕC~rG`A I̘ޛ"v7mT[ZeZCxY̨z]w_1>Yujrasz`/'hL1>PҘ)XV=AtιSujg>NTK%@r:o)=B k{6kYnf[k5F;s Vhᅖ<oL E!e⊇$y(4ָ8蒌hzH"A^PFIʒƈRfe&T2'3n)易t~NHQyߗa@I$8ѩvYX{Jcp6(id^WO<iv*杒z*Ɖ d,p* E'rYʮ'Q%jlʊҳ^h&Y̚)R,bҕ.S94AK ,'JR/kS݋&ۦa+-) p>z[ *7l #N{IRe-$HҒCl*@s) 'ɖ%win 1Lg)ɩ2%zP*wSL=2@KOsMh<7dPS g=!Qy褨@%P=AZ$%IGjQvh+1_β|iNwӞ@) 0M94T1M*zFPdt*X2U)j4TpuXU9aS|UH,Py+\[%WƵ/+^Y4 fQjY*V]+`#ڛl #a!ְ&(J7lힸ;ֳXb[+Xv;UPUZoK7jjˤK(ʲeY&{YeN׶hu8IKgn7ޤ-U;^WͪkW}|ϔDQ3h_w&%7ۢ;\P"L [00_0{GaxļKہ'c\b 0  @\L*DAC&3P6v d!8ȹKwNa@ue ܐEEk5Y hre09xdq)OrBДsBʅ'MJ[Ҙ>gxTr:.@GMRP`jŇVհX/s$N:"XD!鵭7M7p v>Ƹv^_[ 6lMmܤ6mrsn<}ZGoZԥ0% 7g/aT:ۤieyq8K85#VʅȦZv/&^Fxʣ=QAIn%CI@zZߙR&dM13X4muQJ7E攫S}.z̩Sj2d\:lKCPas#G>緸kgwC+~oFr&IuGD4p& !-Xrxz"ͧR(*2$(&xׁ9N+{|o0X,y5$)x >'=8cRF%HYL&@ZTȃQpW؄YHtWz]$V8>RfX#h,l"n~#Gra5R(w8(Cp56}CA_8&ֈ򈐘(2Pe^T!]V]^[م1xFJt}E^`Ee05qf U]^FsXoHZZuy1Xh.vHwUw،287xi@NȈ[))\Ҙ8`%uUx (@!E:u}א`/ 3.X^̲W-W8Bu\RC/;Wt)FheE#*؍3Yw IH$V"Eht8}5`G}y~t]r9]yb)Znv9  FYdM) h &wHg'lȎġYiHp)r.93H{y9 YI'#șʹ8h9rvؙڹe96y FÞc66Yy1`ٟi=#8ehea#f:zjƠZ:vfe,*#VkdIf;4#c7@OpI~&,ev6h)ZH.J;0Jmv:IJg){lƯ"kk /;Zl3k/۲*@B[?fJAP JZYX{$Z?ҵ^7qBT;~d[gTEc-r0nˇpKgw *9Qvy G}2z-gq+ &'gwegwrĕpu|$`{viyL$4wv[HKwzq"G E'rsyDxHdx{ +]w~Q[_R az~KgHg}=G M KIk=זK "Rqط&lF:}bq{K xTE,DE՛~E{2|fI|8 |V3XBW% %gyƫHT|:wr|7Ih|S|[+L9ra5: )EX|;, ÛK~]AHP~(!,#+*q#$$ы JWs5˺+Z[ɗdGuKܽY‡J[Rw~ܫ㴽̾GS"86yL|v1lHĨALI\WȮJe͉ͺ}|5ȋD oHL| Æ'xE]\~,<~1GrĴZ @E7-G)1N= Pա0T V}՝Z 廷]\K4d c(ynm= 5vum}=ցփMօևՉՋ}ՍMՏՑԓԕMԗԙӛӝmӟӡң Υͧȩ= ݷ} Mk[rlm%ܷ ƍ z+ 9. MMglkpL_},%G3潒c,mUj\j߫ \ݘX0`VhPR.Iߴe }v 75>I↌ }ѥ, } Ώ<;!B.㼸'>=EGnF~ OUiᐵN> ^)p儹cIe˥Nqam{ΖJ.+߀n>.C߯ߪYDBR}8Θt\nWHnXin}i=Օ|ȑ [~NN5ZrV %4~.1`uvtM閨KTd@Hc>Ⱦ^ ^N풙Y^~y^A߂?~ԜX~&xc~4iwPﰾ4_7z2K޸\rx|Ždu ^hYv+YK ug\+n.JU>["^뮾t?>O`.b_NLokHc].r?oMϗK29pO?}0(OB!B*,)U~?_Bf3Fͯ̿?W>7滉 H9XW]3P`7*τP@`V/ 2Q_8go<3w.IP}Jf8VWGb*/LMޖP'3Ͷox˶3ɢ9>FIJKLM44)RST$EQ>WX٫PQI\]^_`abc]VۓfghijklmnopQEstuvwxyz{|}~$XA .dC %NXŀ";mtink-1.0.16/html/TRANSLATION0000644000076400001540000000227510376041214013542 0ustar jjfuseNote for translators. The file Ttink.En (english) and Ttink.De (german) contain the resources for the ttink utility. These file are located into the directory utils. After the translation is done, the c file can be easily generated with the utility bldRes and the shell scripts bldTtink-Utf8-File.sh and bldTtinkResFile.sh First build this utilty. With the command "cd utils; ./bldTtink-Utf8-File.sh; ./bldTtinkResFile.sh" create the resource file for ttink again. After this step you can recompile the programs witk "cd ..;make". You may also include your name, mail address and URL if you want this into the resource file. In this case don't forget that this is to be done as comment ( ! name,... ). Please send me your translations so I can include them in the package. The resources for Mtink are now put into the files Mtink.gen (general resources which must not be translated) Mtink.En (english textes and also default for non present languages) Mtink.De (german textes) Mtink.Fr (french textes) Mtink.It (italian textes) Mtink.Tr (turkish textes) ... In order to build the c.resource file, issue the command "./bldMtinkResFile.sh; cd ..; make" Jean-Jacques Sarton jj.sarton@t-online.de mtink-1.0.16/html/align4.Hu.gif0000644000076400001540000011700310376041214014235 0ustar jjfuseGIF89a`$,Ŕď,`dؔL8JMNLĴx$|`|~Lش,|DLhДL|ddfdѴ|䐭_BhHP4δרyHĤ;Q|1L̟HK(ό\az7܌AũtߔĴt?3v4pߤTi\dNd᩾Lʨu4ʁhдh<\ʘhʷրRؼjzL—az,><>JWNTTľmzTuzddtԪlTv,Tؼ4LTl!,H*\ȰÇ#JHŋ3jȱǏPG'M$ʗ)eL8ٱ$N@q}SQE]̦IM*TM!u֧UƎGdӲ#i[Bp"Ww!صdn^Bi+M ^성N;,r˕W\֬9ϚAMz:ӤSsVNZnͺ٨^߾.}?`j8ȁz;xУK.HB B)P >>{=LP=(!4J'~' TXאI d`k[-h6dv&m-Wo]7e{=c {# Ԑ7@.y&:_^<9: ` :< J3{3W0|pTб2h08YCzؐP"EH Pʨ2(PLr2dlB0GiV@.gI!,1pG ЀN E:в;.4}5iL׷CMIԦtWRҬ \Ȃֶ.0e,>0`06eD qb:P6mjV Mq\]q/Nn &eLc4ư7o@hM20F^;\G eP Ƴ\2`L4ly<(7bytM\Ct!jN@<.Լ%ۂ; %c \N_NWVWthfvDaAv]uwc{َuK: O,3^HYQ0>2`Scx=5,@澽u?^(@={!ce0> 3-p 7a 2t 'COdGG~e=o{TA )P 'U0lfsUrU`hUP PsU]P]]s5s!8@t Qhpq0ht:?Q7m`CXgHHJ8gKCKXOXMXPK8ZTbMex JȆl(khp8!4R wȇA ''4P Hh@ πH Xd`"@؊dƐ8@#@#P`dv׋#P dh6`6 X 6Ԉp8h ȁ]0Xs;'U5&wFǂ@ yh ُ@tt)AIp!Ʌ8 i!IIL)ɑ' (*) MЏyM?  ДO)z0Wizpk &k@ kPc fI 0j9 @@ o4@`x xi|Yh 9h hIpИ")HI9I0q0vyvAP6Avi`PUƹYʉ ! 5 ذƹUs@xVt|IMC0\ўMIMIG *y`  9JjzZڠ" ʡ   z@1 M < ࣾyAJzC: Sz]Y\ V)L kP P Qx`Uz \xa:b x x`h* r s:Iwp{*|ʧ## `qZA!0!6P:!6U 9:!!٫ֹz\0 Jp+ ) M`ݚʭ`A٭ JͰɮڮЮɮ:YJZiJڞʯ*ڰzZy{` 9S++0/Kz%zQO 0PӀٰ 00EP C[D[ @΀J[ `xx0pW X p ^ "  p`Ip"pIpn{pqpkpy[q u˷  A퐪j!๞{ j0ؠ ۺ빨 jP`k;; ˺@t| p0{pEJ\{ ppQ|`Vlqp `A`byPyigp!P|ǀ \ ȧ ɒɌ,k ǰɛ< | F|M'P5';h'+˶l @ |'`Ɍl̜˼,ּüLޜM lΒPΝ'0| 0| MpS Z%Z0% -P E  "O%}&=̠̠,GB|I\I|4}{q:],PCm]ypHygiRUMS]xLzPjd ȏ<֙ Ɍ|o|jə Fנ| p Fp |tU ' 'ؒ a̙ٛٝ .PڣڨM]ک,۰ ڨ]ۣ]Ϊ}۾M۸mۺڿ۶m}aM םݒ`ٍP8`\= ] ]Z 7 -Ȁb --0-b 0 '-,TpT>Tp $>#nW[ [P*P1* pMP@P`R**INaPO|pnFPkmdMב, | e^F]nnpnp.. |~u|狮ʧ- ܏=ړ٧ʒ键Nڎ>Nٜ>~ꦎꡎ܅>^'pg g`Ʈ̞ >֠֐n Zp- 7^ހ bȀb ^TPP N  &` o 0[`&1O**00*<> /3/| `2:pt`| |@2` 2L Fp 1@ p t΂+).phg_inokxuxyzw_~?`/?o{/}? @Z0 /p 0  -@ 7`܀ @b ? T X &@O[ ?y"_.'g@ MpGÉ'6p"$H1 2H@EO}ZRL5męSN=}TPEETR+[J$%U^ŚUV]~VXe͞EVZmݪ$)Km^ZX S2J}4hD@4ɸ.:Sr,"@L0ӥa}l˱݇șϦ?6=AW˱bR,\E_vmHΪ1k挺sҭ)m *Xc]vҗ~8eA Chd։Ԗ.2*,:s4;;ƻ<ܰ-7l-B@>c9O+/@a6@tPnʃM Ð kN8Rι;CРCai1(q Z ϲŃP3J 4%caMaP1嬰B&" sa<$9slD&C(;69Z3ƓIG>\ @g#4>N{D&kHNp9OM?PcFTH5=-cBӆ1T]W+lW1,Lլ7Kݐm6gMLl["rL\@)oͬꩨE6L`F3͋'4&EPtT9+Pڒv@.m1O~N[v`bEƳ;yW>yDݬgOgڸxgkڡfꑭPzt?欹k̜ņV,>;g&즟f3Cfaoha@#ֹ@ ?@CSqf3 6+LI#ޱY4cA.|gA<^┿yxCoO`Tu%EOg')!G|Xm>۰/~]s@OQ$g=Bm2ٞo|fPGE:(X).s9p&pHjBHVP$T@!=(BOC=r# ֛apxfSIxԫ-&k^ ^e(] 8EUqTa(Q `#T32GDt&nЛ"0g@ܻ/jJ@bkJiDrbT4xkaQo) Y&ldV7(<,XAcQug8]f|)k' @IJ348$J$E/X8=De2DܘjipviӚc˧ݶA|~͢3N* |@gneOB]yз{btp<2&x%>qGxSMgmyE>r#Ywc=n@e.3[55_{[2)8}ZsF׹n}~:ZWugб<>;püņc=Uynl?/#w;yg{Nyքg?^V>UR%;z~Pؗ>-_S{K}+_g<Ӯ?k>#8+ J7K P5C>˵??+>@*p?`v;8>?\A#l#t;#B -!*,:07 ̣ `IB1=0d7*Sܣ 7C2WSISbd\3_T-E(E9Z,j2d8k\l2_jtorp4s,Gu r2tm4Gx,7o2[dFmjFz2>yT. `J||hϨb. JmYK K)d1!\Jp4'a'Q@J˾ᡧ 8R M8zx]1 b9Lє9JK1   ..:a͕*L bZoy!M y/NJP`MjN؜԰֨ ݼ |1, 贂3M6ę! A@A:Q1Q*„J0J,A:%O (z~[6gY^gzeqfW&e/foff.uf|2Y&NeC3A.a#OdPhi&i^FiQ6fQi阶ii&j>i锞h順jnj>饎>93VJLj+񘾯3N~j빦뺶FрhL C k*+hFZj/ljt3.VY4^xl[$4G[1Cm-fFОm^ D l=}~\lz\>ZNoF&Hbl3{ 4o ^~HE\$opwmo\&v>* 7|3 &ed>]loVm6̎w23o:lhF& ,crno-q/!fo+W.35G.p 8n7nnF|E EW2鞙NLr$wn9pngJJ^lwoPdbLcO'3?x83гan]'lur:{wr'}wWGy:7y4s_ymWsy,[wKŞj+Y-ECv2_x~vP1rE_toQg3|u΀hJk&_W@~tZvDzE?3zs2|7.L_d6[whwC(on^lQ5dowf|o/}LFϲ3/2['l r[^7Kr-W|?~7~?~vwO~{O|{{Go~G?#$HBDȰ`BG (Ņ7n5 #(Q$B lKG@µO}$id,PTQCb0$SnT!իTC:HjSX+r5YFhi[`XbעWvkXjݿmI$JA\9yɛ9w4#i4|K5{+˺TPevھe^{_+^6=>D#)$BIwEd4N<}:Z8#UPk1g~U}eW`\_R~ۂRHb.G@L\AAAr$씈$QB0}bD'u]E ҶUtetŧVN(Up"ե^yd^IevtbJH]e-y!qގhqD+)bȉ)[epy9JdlvL`Rz@B V %8()(̘fX0^xdS9ဆX^E_F vD]R&ne@:iM0$/◨%w/C4Pv[AF$5AMfPԊL0Ш^O?Qrbhb*c)ͦl, S+39s);BD,qHtvM9K9c\`8H:jtQQ(v2,<nJ1q=ӭ6p- }}x}?xNn *&vMfy2(bQmvԁ͸(<̵ȸѱw+-|޽OĸGmO|?FKϾL6'ڊ׺kg;- r:}k$N!Us,yDmێ/aJ4'+CXĘ'fW"Iy~`|Cfx/DDA΂4A;O̔@s%v`ijr |8$C#,C`J}gDŽ2I$q|dU^ MV"h"" "{ ̌Ӣ)J{\:=,(8IC,zBC$ctb`5vJWe MG0&JN,9<> e6ׯ9cև&V!Ih4Q¸&βэlptuw^4L,`1MhI~1?uD 5:H oz;DFv%p e/H`ö z4봉#e4ϛ(w策c ~X迆9c޳4(yǴn<ʼ Pe' ΀Uդ\n |~Uk;ȿJo OQ%&ݨv~vd^l]n倇YG Uqog X*T큧.?T{>A–N $I#2t9xmzkoy)t5K[څ|y!~s;˯r#yaT!K '3-}}|7i<_i_%9pQ0`1\m- U55S y\=}ޝ  XA_IMB%i)I=QY\_,UmLaA)9D!=J$]̎! r\ɭqj9\Py))OWƜK/EQ8G!ЉGp"[)!6" =!  Z >"(~`Hbu|J\ՋLD W.tP U~u]!"f5" W0(A` pGH,dⰴ*vaRU! 6bU(.dǥ`APV9Jo,`#DL,cHDkAc$iD[K*Vc(?!",b+X|~H tTRZ9nc[OJ^qQ@ P9M!^Z$8@pQɎD &aavȩ@RFbd_*y 'PbTGXH\`xڣQ B6T[NSLZ^V~V6ͺi&m$>" !%L"/cfW UC[e] Nhau"qgl>PLHTGATRRBl0!Af\ۂvVdmBۯL΢Հ!Jddˉc40>`Ҡ&ѓ,&mwg6no^N&dw( d\%G'E@Q#,S(ZRΨ bڜZvn#a4> ^l0qQB,0 i!*&z!hyq' 8ܹb鼵hOeS@bHV~%Hr@2jɒo"!ՁgDhe6(~Yx( N؁$(I ƪFⶢeDX _[f¦ ɑG<[8<=.} >kaRMH)'j^| qzN&[ŧpVY\gw8IL K}ɢU';V)@%T)cB{.}e{)PcNDxP gĄذNE G=!5u)zkM-zU/j䜚Ǯx+~RRUT׆ԫ֪u(^4fbX,Ȗakd*ٖF̑vI$M5fedAX?)qm΍ӵV_jϾ)bV $ R"ȱ݋` h1ޢ՚ܵ%e6.REO.ߚ()MݑbiƖH"͋O!O5E4nA7Qh=~x_ &ծ6e`y$~^~l]i5F*l%e6/*Z.ov/fNN ؄nRibhLO._ ӡ 0o`+Zz[_ȄN:qhCF &eWf/I:,VrmRdK!(hzХڂ*J-,g6ᆥ:#ClXou>2#)F@vdo\*;:c'yn_lo Ȋm6D/ EJhTe p%.j'ֲ`r/MR5TYTdE16pBZE( p ޏ!S2,[c7`9:&f*xϤ^]kmQ*0dSF B/'vq?QaKS3 n*)],rw͢;3 +)cFxcH4K7NZ5ln3i,rqxOxG'O$zxiMBvQV)cB'-[[4hbap2%sr * SFh^K&$Guڔc6 #¨*"5(*"Ej*nٜ!@gΔvbNx)ƗPP\y$=J 0vV]k27qKYf-BHgFܢɸ-p.'sYLiF0)k:rCtl p(AT巣dyAّ$cDtl|j9P:/u3*`VH׮Y`l`mpRW80sӼ%L~9jYykBZ^=/7k*{b1!p=f Vs?<gKr/3gWۼS')ZiAגLf #ϣO>-4˨'!o[:1T/ҝWk[pԹ&5cc<>;!'4OKCy >Ey8(kX A\[[~壼agwg)=O.AT=Yt]DU@ԄY+@8r@ "<`B 4pPÈ)Zĸ`Ď~TÍ'EHQ&&N9‰2_9Sfυ;kqtҠɞNmiE ۪D6dŊo9zī.F+wʓ e7#aà M,أŊ OfgϘb\Tq6G+i@"NJ-TGbSׯa9 SC"^cˏ)7G?9L꙳79/7Z4h߳x3u{R3$*mm7Cz ,H+>R$H4p/ :/@"ðD_*:8л20LCn>R i3ӯ5FI;ʗj)D:ʒP8jJʬ<2YJZ16q#H|NM9ƹ2G4RЈ4da(R@*K,[;\o<@EOU[iS tG+OLnGK٫є=R$ʳ5P5l*TQbA5L7SBL#3EG)[0*Lo%sswi_NO2J۾E2~}oF͝w8HOh_e6 p?Z_c1-tcʧ:f"ҭ}UY U?#%-QpkD#<ݯ{p1#LFJĂSҊU^QyTg0HRP9B4DnXɪثɐ1Vo(R2STɉ7<\o8iC h3#႙EERVŪ\F2Xózc2bT|a pT{!s&:=I&+Y|ڋd`ƽ$kfH涁9ocBصS ;!u(C-HԯEHiK#zVz5L #`H(+JO|J@2NWi*,!p]iw`LlhMSr26媭su<;upQb ԁ.6y ְD̓y-!T= ФPdXmW&ZTjW+i=9f2QBs3BڇXB)֟9TQʴ"+7U–EhmU)Ӿ;:ζ`f$ q6fE8^"B,.a13C+K `\m.z-rFߡPoƄ92#& g3V/6;.k!AijT*:aҬssFCIGzΜ5k.~e'| i,*0W۲G}%.aA64RVUKmG:VO5Neޱ:̪B6s "S aH rLw$E۶07]vZOU5ehFH`zl- }o-:6t.*Ɓm*ɇt8Q{j{UtfO}/͚:~t%mU^L׏ 7{Q18Z9'$tZxx*M)[wC$C{ଔ P>Ķ|ǃs9Y^J[a0iLv[0mt 8jKV}ؔo Q PJI",H6fq$RE"y',nj1ݤ P.d"?`?&e"ވ eO)O#I 8LtΆ.. _}b& O j#DpfN>^#505Xz*>0Tmĭd&j'/=*X 7p |EM(g"wfqZBcp%m5'ϫP^R&6%kZp1.05IR#P.NXvPlR,us`+[D}`^ {i!sMqo?3"p+2$'@ M1?.d=9p[Z2A7cjr'zpA'ooΑ R'6#i&ptC0Ӝ*@oN{ G2kSBkpJǯ4ح-7UM8/;Rئ5|aB8/ 1ɡr<7Rqx/1MtE;(z*2CLj3dBI 06pS1 @5S#2yL3n6X$ a Q>nZTk6(,c}UbAFY}ܸԘzs< `tC'BӷHP PSr07. CEa+1I5<t%˖į HTy1{N''tu,N+4)%P.i2=[SG1&i *ˮr$#\32d>^.JqX -k/E:1ȑp X N48@)Ab8p"FbST L%v]qP</r^nqs1= ~TIpC]c*ԝbA |c6OT_Yrk9mױ<yKqGM5TuA>T)HY77vw2&5g(q]Puc7S\)U AuwNAi]77!Jb6qm{\'Voc'*6Rf%5lmsY1 ڞTEhPj׌"R{11pWqVpI7LedyCc-G';T] VX@!ur%h,y&/8%g`joBX-u7kJkUzǓk2JbX#exz_-'? j e`X\Ʌ- OkS 8gms/wa؅G.v.wNŕ`u@m_pOK%;tq%.Z<Tm.S&A)P)vbAwgl1>bQY3s>p}7hRo gonq+х5uW4JO9mmnhi?oM&i)uq6U rLXg0"I V^PV<'Kr6 ``Sxbq'݄XufY*Ul4 p{ڈ x!NeYeAj6[Zoqnc8)TwF5k77qsu1ͤL,Dȇ_QcVx9_ ג9AS\n9prᖊ*f)$oefv-瑏;)# Fx7mguD#X7L=e)}zlZ带%@s҄?Sow~Xt.oZv+۪4iz[7[ۼ݃s)ZacA̭;6 fڊ`8ĹBŇPӎ[;1)^[A ;L 7i)(MiqNJⶡnRZ\TL7.U9Y3I)XY(Y51!F6l;sO]a[vxDJJ{fr;ȯH0'e\Vj$?1u7 B-{Og-l8h _3 ,v) kXlR5<=w+CLb `ZOIr~Y)vӵzޛ=;sh}1{[i2F4qSA"YrF{T{!yJ2*Ÿr)\0GI@RWxץ:_uܰx.8`߆ QG霜+[bEX1Kv&DӒs/HDTaQw3zɷ5[ԣt{]T}~YăVV#+jiK旬vםO"я♅膹9])lm|3MDB T0Htmř'?qN(%ftc-ޱr<1ȢY IX:N]SގuZ;ۯ5#[<ރKK>#e3 ir˄o2O->̝ܠE#,7q]ybc>Av.|Is(92ו 9ǏիG9qD'NRx+"$h] )M q 4hΝ+mhͤB"}s鑝1qT:UjPMy4+Ԯaz-(#D@PZr) |ǐ#9-6DCӫذZT4ięfюG?l:5Pԙa>%#q\kd,9 &dM{Ҋŗ^5jCwVo+WH}X s2}~z$G aEugP|B9RI%!|y{^{`SXuUt5Ki Z QBSE %r^D0,`iٔtHvƇ"ONeOG"}f "MzX^v6`D(ӎ藗!BVL2`p6uhUh`>)j凖(刚n:ib~be50M%%yDHD1GRZGTO!@qiT]x+wv$Zyi5iѝ ,֏'7߶E[鵪I¸b~*jyT#F&5CHp3qEf Rǣv2 30gjvK(M2Ok9.ZxDq`+'kZIykje{ݔ7mdY$(dbu՛E f5q~Q"(~]madơxIeԭfUf:k/vwF?4z =6^rcY'8BiN3CQyՈWlgKN/Ԍkz5CYrB}sƳd-jV񁽬2e,_>ٟ"eNA"TiOݻ%u*J~oyi:8<0jey?P_6GRݐ]mp2>ԈG;%P$ F]ltYM^R$hdWI B 9qM2hmFsakQlc>0}ai _QKFejt%12}yS<,ZK"I=QuܣLv )%-/7ع<%BbxIXs3(*nfSe,HX-C3!UƈDGF0N,9rL B ^ӕTÃѬYha eFJY+߇ݯB$K.JQl, -Jb Pԕ a.-'&yS 2sH9F]s;zgʸTKXY ]dܒQC &aG- ִa\ϋ?s<鄞}I!fMδ4[+ -a ˊRDĨ˥ -s0B,[Xc:ݩwn @ }Xf&ik,J V<_YsM]UU \ B3VEygڔjlIЩP!5lK,,NAq]W(D(ZۦX#OjOZ]0ϱa*T:-D@躐\n%SR`woͱ4~|Y% k׹~,:Cbi;B> h92 'dpdi2X+*WP8kf+{s(6hBsR?B~}%w ;P2/U>gt-Y5ҽw76p!g15+AŊ%,N\Բ6lFK!1}O#NӝmQ%Ikml9ҭVV҉6\Fy.nذ|MM2 (?5XwUeRTbHХdPx {MF)/SUX#Gg3H U~>E^Ž؎&¸5IaEEN2Av+&@Sp1})j fYF; '5~m\e[%5/,9r¦]1, f^2ǚg}$uDb=I[w)F>9LoG'7OXU;D~5Kiϯp)O .87_BYFDZ9G;9f}TSJrL,զIw4z126Ds2F+5W^ZSgnU77 ˇLh k 6{7Z9xwEqS*GvBG&dJ{hђ|OFC.D487DYK&lW]~?P3ol7r8g2X>W`_&J|GmK\nn. "lURV, Xw{k33gz\F7al/wrw?tVg=Fi' v|jV4?4hlj#3;m; mA3G3:nt5bTY#t;\8stAR%"3C"&O`a%qN gt #G9(Ə?4-WKG*6)xarmEN1 En i4fw_S.HeŇf,Pгqx%NJ Wa%}uW` %R@k!T :r7#N0!j6SwDTxP7|nGXiGxYBzE9eV0:I^Ef_kDWy<CV}"~l>t2YZCٔh5tW͵r , h.䚜g7!|#N$HafVc8?qI 7(gD.)Q GԔ7YHc[6֞x]p9P7aPx8)R7sDAE٢9jjh8_J\qBvksUDY9f[(5eJ ،rtrs#'8o:L*(J]~(nct,'{hTZ#p`Y7AS;z8v6);śJDœ&)hdX*H6X;.,Iz>Z[%v>iw*<}r1x&E^Za'L(V 6@u5^wqheX胞;I2!}0Ð:!dC'1 5/gwsr(yHyIg.u(?#zFD-r dZԊ9y-2?-JeW3wxABTxCp ؉`S{AX3ȣX[PJ;&j7 M؟p ׂ)y5WqKT[`{;ՍQʔΓJ`a1ڶv被q't4)*ohʳ{j8UkO+gTFaKE@K(vB:'3qY1xh츩kcyHYfdbq692Jݡu$XlaC %w,*&IP׎Lڮ蛆{vHAyp ,.pˋ!gǻ[`odeh~1Ip0[[K|!= +7aJD^gIGEBBb7˧}*lj8San}V B#}rẎodz.Tfı89gCcj&Z}B lkvK#+}TgG^AHl&77^%7~S],뙒"&q72Hm )g<ܮ]<6fk\(=5_j> "hPx+V&ʬ<{ ^}0_+N{4qfl:-̙5/ Qܓ&.:)'# ʀ\C>71pĝ(Gy;mE^zū{z+8UsSHkk1\!({rp$u5ve4=ZLŤXw6̷4ˇcHB 67L}+'Hzxu䌿Kkzgc[e[\|c$ka Qlg&i  BK>,7D4KIՏ Ì̛}PY,1  S|9ɯ;X{/לb/Dݛ9̤5[F!٫ IKm"Om?ڵ4vUΜv׏b~ o\{Õ;ƙ[\ҫܛD BX^-t6͓3=pw::hpG0K5"M # TX =x͏ɣ^%@S4^1#A,SmUD4j8Y ! o&sZ[D ʰ 6g7Em]WM2>զMΏ܄9$͜P5ֻ x}Dխ,UT+>[ǕK\z7Co!@?;}aۉC$F\/nƂLyN?P z[4,VsX9 L$tؖ,򻿈N頾u><ȷ "d&aP,{c څhx~jS^p{SMces/B*F{s؇a^xs9~2 ™gȊ,ri{ K׬FԦr؎C ۲^r =?N#HV/Jܑ1)(jm@}qLy>/5ܗ>.R.Spe/̉?oLLJpϘ5&eǙ^ZjSDi-dDC|ZOfJ =ؼ/'ٖ}ಐht$ŝ7SXIVA2KPCtz vE=!sⰹKjZEIUms[1pwG 4d%*ȉ'B>9T0 2A3BLʏcM:bO.Z1L񐜎Kz"0 @0m*=NlO,HtRXb$6LI9uA@ёG//kL+ -\%Jk-O 8kO](ITXSSo.Uaq=I|? . 3,Qc}e72)u[ͣ/_6=Ԥl>.zUP5(ϳfCY^aɳJ1+2I4W&dT= ;@&>yj7b 9Ҕp0X5Xl\T]-r'*땲1س,\TEb>LOJmvX UUS|9߾,j#a̪ȸN6H`uEdx\ ^5qf\ԺCPSD\ռFLhRz4ygуAZȘ"`lA± WJcƒj} F({ B?5ġ y禪<Fhܒ%^ߑ\ Ȅĝ55ƓiM4YU"z+haX&-䀼A`bup̝M~vhPr>,_x22p=)S4nֹEjYʬύmMJc"SY%cf6.Db>Hb^rKvQZ?k<ʫku4b_svG]k |X0BxZXՃMsS"*hatoGrq? f|ϭUeqWtXc#YA.b! b(|P1e=}Є>b[Z7GRJCՓƀrMiY'.=Ll^.`X1Onyw?rIկrE3Y>.G"DeOˌ4wN6YxnpzIpw].nCCqV&ND!/uLuhDǹ"}޾~|Uڪ AKFY*FsNU U `NYxNuR_XZY NԗehYC٬$WZfM0YT^C)1 ٟZJiM8RQ"IE%Ή0OC狰; J:1"8NA0ܶQ2@3p',w"\c܅9`4x 3*,Å>XU$}܅p߀;\5ދ5]#N1]+>_wzm]Ȣ$aޅ\P\[\E\܋0Hu^PX^+_,aJO Xh } ;Х\S=_ WQmiU`1ơiQ9P/P$eU ۸ܥ$ s6@=VYua`]ڽka՞n\acC aq !mu* ˱'(:0+_]73nc63 >c!1ߺ\8fb+`*c2n^+~b9Aa0bDE&4&ذv$':p8=N1/&'*e(cэ ˂ýB^*,l6/gN bb6~a3^l3hYڭk]^a\ Iv7_~uf bcV93wuα7^h%~nN(hvgxNem\WYAa< ~6gfl^b=]m^]3a?fW ;aH>\_5_߲rjg=\6kα6LB^ˊkeiF*&`VPp_blhƅ_fX"lliWccd/n ېn6*kn l܀k k[j>J`h h|Kaj$6b>ߍ靄ΡJfe63UFyaHVcjLfjjcc.?)>r1ȕ\V͞Vbco?ufV&pWhh>]>%|~].^~g3qi Xiv`!nAb5h4_zȒ$6n/5ֺkVcxP`r~f$`vk%'d3,8 6ifpV\rB~WIP*s^]c)8/xm=>I>qB/YW㜖fTQ+1v\mL>4oH䖮F߰5 `f Bo^qYKIn]aU+n Fʶurk^w0\3nK vu }gnloHq%uhtMacowxlvV*cƖEVo vu/tP׾Ayoinm4a9P(b}Nhl΅]iW]1F:^b9,6sqmݶvdXG?i6wQ&=|+N5lW{A{"|wrx۝}S]gnd{w'W{wxbJRu{{ W}}97{^|jEXIXly`Fanoϱܫn!]t&>3ϰXVXȠaXh"P"B("pe HX9v,B($Xl鲤ɑ7z%A Q"E>jB" 7ɍ\ *Vo\ҬϨH-xC88EQ9~XWkO$RL%u9f[kMMf\9_AIO8fh6ڶoέ{7޾.|8Ə#O|97:QꌔcϮ};޿/~<ϣO~=Ïcխ9I:+/P1a !VXIgҟL}-brȑX}L8̃z% bAXUBׇԕZ\qN'`,10 :!0V8m(G(0#ETG?(6bM4^YK2^^ I)!fCF&tcV LufDad'6Ȃ_8RF h%a$&: CVL; ;0-%PV * RiT&qI4披rH(,A}k kFjSXufWUQPVI,$ ^unòۇ+~eE ꪩn;Z J6LB0~e,Zih" pY$ש KY0oX4!]>o1 xRK듌 m/H,4]).j*dG>[$]w, oZ`uc4Io=e\I,qڜjbv헕ST"EeTȶK34ӱVz8֙:!^Lc*ڨJ6ӱ_DY[F4!q4C$Xd0.YMXl-()OB7rG}l1 {O\zmIƿP>ш*+H"PHT#;WqcIZ%`v?Y5Y椼# ` Ňbd[`(ú}7CJ 4_T2…G4:r+Jπx%d$jc2%EPLf'H2:&}PD,a zOFL!rmbGbNlV]D9B4E$R4GJB.A2f0,IEeT [ky+iBX8 &6iupK0 +0}A%`D J"b.*iI< dGVFvumi i\!جbrBSa,*(*K+Y%M'dr!,DR@Med9hF/#)W^E0\xRF-⑺ͬ/,}MbU[fUORZacMjhE8Ve,.VO@|jI._cq"+hk NQ+Q'd,j,d )u"Im& @:Ғ4MKcӖ47]iNGѠ5cXܙ@1%miO:ֱ5E-kJ7_Ӿ&hx_-Lćh&Wѝʘe!tqkq\2 N_Xvj#'vg*K8ˣktwb{.V[L*1z+pf!/ .eEErmGGMsI' 9 lىq]};еAPNR\pˬKX,@)L.|LƼLyЅ`'*US ެ4׬[t_>_FIG Tlߜy`H Pdw[ޘ XALSWH%9DA@̉R)80ȽW)0XLa`( N9laiH]>mF!I UYȧ) b :L 鉡y%ZDQuY lOB8bKN(\)<hNxFhHvHhgvjMSFTV`ЅLaa C E2];^i8U*G*9e):ecQY$ [@CILLᦎYJd_}ʉ Mh"LODP\\`M,^W뼗N fDҭXౌqI dvjvkmUG8eLvh, "kv>"fPl`ͮ[$,<.Tgvf򪹊&.DҲmvNU]Ha96e8ZR{^ "D Ȫ|LDCKLc8JAJl.UGfp`H&TVDLp \cL(p'ۺhh2X⍹-ޚa+ i& IU-N"(a^uMXkrhV&ҮZvKApx^ݢXrl\ճʎ NdEYY@}a.=Nfq̷LJQGh9Ŝ2H/DuD^|-WԊm|ZghdimK@kTUmmuگŖO_*E;UMBu-q8uR[TdS'^1ݲ[~Ɋ S]L,"m!ԇE$RfdcTLcPExԌnYшD9" D E/JSh-f.cV5ߕ DAԲ]+nLPK3RtX @5-ޝʪ>ŰR8%H՞uBn:W(K1 `p Q*ɬ`fa  ̬tS)͌W|'P Π/UgVIfY`f l&BVLcv1ޒ1inwfCL2-Բt1ې[cILu[,$5,XuHLHOI5C\1m6VM 4AԜncHM]DZB~ =njD$L# 'n&ɏ#d1L YsZ0 e+:yE '6jҔ\L\$h~(:%a3kiP14tBb]XGUՄ#pC_@S/1zf>f^HzlXn{O-J"ɐgk}dIh%υ<%G:FzيG^)UD/cA F&qd%:Eҽ\ZeTƑY.O "J6[9.8A5\)B4׌HַHEAx`%999^L@DMJV梇FrE] fblT,k t&6]gM%wuBh#']-H(UrbZ46(m`%¬EӀ iKZ0|3Td$HpR!#D$i8L'AsFܒd-̺ΪyQmBh(,eS)|EQ,-AX덬S_IcݏSđ#(*"&cP!."IjXd HHcI KJ p%BÄ)Tka8TeRbI"49 9 :ADhbE G: s>fا0 GlK$!Ei3L61Nݙ"٢nڰ.ke'S!8}"DgDˢnP0ϸi'dL--=uk6R>N])["ScuP0k5أm_0+%M7@|ѯ_{雷?}񻿿^ N?p F\(HK#$Ѩ@)h# o4\6|s̰6L4ܓ>s 1ŕN6;,I8!(ǣ(RJ B)>H+mFTr(&"(8)1}TJ&M%:d]VY}hrLfdY)WorW]ӣD$B;10{MQhۍLjv$h,T#2-)'||~/}l^2r=vd[nj%ekDžfdYZ_Z9[J/EH FcT;bI!TI_+:9("+SL+6R%.I\6I{:5 96 Y~Һy]ZɿNsp'KmO 2Œn/)s>_ljLR F7ъj(H=R$UHYѕ"LeZӓԦ)MwS>)N:ԞUEUjRTT.TZՏRVVլ~`jX:VeMYVuqu\:Wt*>R` [XUbX>d)[YZy^7Y~lhI;ZӊMiUZ)~lc;[mw[ַpK\Uq.׹хt[]Znv]ng[^Uz^|[_~_~;mtink-1.0.16/html/TRADUZIONE0000644000076400001540000000255010376041214013424 0ustar jjfuseNota per i traduttori. Il file Ttink.En (inglese) e Ttink.De (tedesco) contengono le voci per l'utility ttink. Questi file sono posti nella directory utils. Quando la traduzione terminata, il file c pu essere generato facilmente con l'utility bldRes. Dapprima costruisci quest'utility con "cd utils;make bldRes" e poi crea un file tres.c di nuovo con il comando bldRes Ttink.en Ttink.de .... | sed 's/\.En\././' > tres.c Se il file stato generato correttamente puoi sostituire il vecchio con la tua versione. mv tres.c .. Dopo di ci puoi ricompilare i programmi con "cd ..;make". Puoi anche includere il tuo nome, indirizzo di posta elettronica e sito internet, se li vuoi indicati nel file. In questo caso non dimenticare che questo dev'essere posto come commento ( ! nome,... ). Inviami la tua traduzione, in modo che la possa includere nel package. Le voci per Mtink vengono inserite nei file Mtink.gen (voci generali, da non tradurre) Mtink.En (testi in inglese ed anche di default per lingue non presenti) Mtink.De (testi in tedesco) Mtink.Fr (testi in francese) Mtink.It (testi in italiano) Mtink.Tr (testi in turco) Per costruire il file c.resource file, dare il comando bldRes Mtink.gen Mtink.En Mtink.De Mtink.Fr Mtink.It Mtink.Tr > resource.c e copiare il file nella directory superiore, se tutto a posto. Jean-Jacques Sarton jj.sarton@t-online.de mtink-1.0.16/html/align1.gif0000644000076400001540000001102410376041214013653 0ustar jjfuseGIF87aK{}{,K@I8ͻ`(dihzB+ @ tq]߷NpH,ArL(SZ$0 ě-S U ,iovN<__gh`RKjO,.dqÕC~rG`A I-еiYjlѶlޭ5/ZLKӢ v^ +)㱠N$UUWQy* jmNq5:Fə*SҦ_wvw%kL_q=+w{m:JԘv #3XG!N|%열;knkNX>g#~?\?XzVF eW f)REa/> 眲{r3l|Xw BXrHBC>p`Bɐ|%4{p" >ψ3D~?@lsE3MUMm'L|/=4#H-513cFȱuFJ#˵A.|"IE2p H=FH b%yvQrc&?Prˑ|*SU2X|b)YѲLviRt&L.bZ ǍHx5%MOeH`(m~":&ɲ)1F*hDXz̧>4 @JP`MBj:4 }CFQճA%Јrq7A- 4ൌ QP7@LxNa5 ,=)PՖ1o@5!fةT06kU-Kܞ8=S*Tp\V4?5Jzx `۳5S<,b + 9d;"sͬf7[%ݜfGa#u Nt3BbγmE|Hu9!\vnmbZds[Z7mu.)S,)^nM/z}LlQ KILJ񽜲d`R}Js4,gtY[;apLc+qMQar AqpgcuKb_ZapHd_k\bQ0^:a%-(TgXc.Q8`sP,ZLf%7sweb? ꠜysA#Z s`]@Vpn4*CLFȖ&ţi klxa>-jBߙl` |`SXq唩]UjYdu9i^BFmsKv-&K:7 -F1Wr'}xI~󼍙$K.w}- oI|.(#Oőƌ3Ɛk^g'nr!y9#W66<. t,9:җ%t{oʉu )!:?wk>pdg1tA]{..[н2ϟ}}?HÝtמJ>@|(2B޿ߑ0uY>6VM~H|=8.{]ʈDN5$߽S7I jS,%[8>ei%}y oO"'=y Ͽ}V]Ux T؀4XDzÁQ!"8$XUO&*+x8#uTWkeWuee<؃>PFT7?XFHowY3iIUuWaW xX5WU6iSX5Z8Y*B0SH%JՄ{uJxdx,ȅVMp6ȃ_Eq3FSeWPXRTZCV`Vvz56](؉"hfRcV6UVnVVM;艰xPXQ0`5xT!xRxXd!(881ؘڸ؍"28W!З|xM]8h59p:P])ʃu UP;)0\ )] \i;3ąZ35[Б"Iȅ5Z9)\Z\6ُFG:>9%);>y\T\=@œ#9& ENJ@rY[ezyɗHX^9YyٙibKw 7 (wPdb@_~W"Lz9ui`= _zB|v1 dM)$s!=Cvj2eYg]FdF6f}cff}=lfjj}Dc š=DD۳s}l@L!i=AiJg=lV ~y*Ct6Fz}j@۹jȖAGyYrJ& 'r**vǹ!/*pyilDi1}l (&aeyvLaYu1`E`aaZZkMe]J$@:V:ijhjܹ4$ljAʎ@zᩴڠJ|6it:kAvlex64KGlЦ@kszc⩝ګIǣ:m5ǹh ixnpiClyjy J`>#`\`&ǚj g t?jiКulѦb+nQ[)c3z{vF}戳㨳dz糵'GgǴ'Gg7 4뛿T'Ibhe9c˶|r[ \wy[w{+w}vvKvuuu[u utt[t tsks;s srkrrqqKqpp[p+pjˢwxk?yG黷 $ okooͻnϋn[n+nmmٛmkmkKe_[l{mGV蛾3O(&~g̙|~2Ą9+ $\ɦD* WQ'ŇYʧ_L 0}^2檠:%S1**ͻ~}Aab겵,qͮʹg9oK1{¢Lϕ0ϑy-3 { 8]}bcPƸу"=$]*;mtink-1.0.16/html/rdPrtDesc.It.txt0000644000076400001540000001427610376041214015033 0ustar jjfuserdPrtDesc: ---------- Questo programma consente l'estrazione della descrizione dei dati della stampante necessari a ttink/mtink e li stampa in formato leggibile. Se dai la tua descrizione, il file di descrizione verr letto e potrai creare un nuovo file d con tutti i dati rilevanti. Sintassi: rdPrtDesc -p|-c -p rdPrtDes crea il file leggibile che include tutte le stampanti conosciute. -c rdPrtDes legge il file printer.desc nella directory corrente e genera un nuoco file c che pu essere usato da ttink/mtink. I dati relativi alla stampante noti e quelli presi dal file di descrizione vengono messi assieme. FILE printer.desc: ------------------ Questo file contiene blocchi blocchi che descrivono le possibilit della stampante. Un blocco cos fatto: .PRINTER .name: Stylus C20SX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: OLD D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .alignFunctionName: - .END La parola .PRINTER indica che inizia una nuova descrizione. Le parole successive, fino ad .END, essa esclusa, descrivono la possibilit della stampante. Non iniziare una linea con un punto '.': questo carattere indica a ttink/mtink ed al programma di aiuto rdPrtDesc che inizia una linea di descrizione. La parola .name: deve contenere il nome della stampante come risulta dalla richiesta nome stampante. .colorsNb: indica a ttink/mtink quanti inchiostri siano usati. Le indicazioni che terminano Prot: indicano ai programmi quale protocollo dev'essere usato. Le nuove stampanti conoscono un protocollo noto come protocollo D4. Questo nuovo protocollo permette di comunicare con la stampante tramite canali indipendenti. Questo permette per esempio di chiedere la quantit di inchiostro rimasto o lo stato della stampante durante la stampa. Il protocollo D4 include anche un insieme di comandi, di modo che la maggior parte dei vecchi comandi ha un corrispondente. Sfortunatamente, non tutte le stampanti offrono l'intero insieme di comandi D4. Per questo motivo, ed anche per compatibilit con driver che non conoscono il protocollo D4, possibile dire alla stampante che il protocollo D4 dev'essere disabilitato. Sono dunque possibili le seguenti combinazioni di valori: - OLD La stampante nonsa nulla di D4. - OLD D4 Usa comandi non D4 command, ma li invia secondo il protocollo D4 - OLD EXD4 Usa i comandi normali e configura la stampante in modalit compatibile. - D4 La stampante conosce un comando speciale D4, usalo. La parola .mainProt: indica la modalit di default. La parola .resetProt: indica il tipo di protocollo top usato per il comando reset. Le stampanti D4 possono conoscere questo comando ma non eseguire l'operazione come richiesto (es. Stylus Color 980 o Stylus Scan ...) La parola .alignProt: Questo comando non sembra avere un corrispondente D4 e viene usato il comando classico. Qui puoi dichiarare solo D4 (OLD implicito). La parola che termina per Flg: indica se la stampante abbia una capacit particolare. Il valore assunto pu essere True o False. La parola .stateFlg: Indica se la stampante sia in grado di dire se sia occupata, con stampa in corso, ecc... La parola .cleanSeparateFlg: alcune stampanti permettono di pulire gli ugelli separatamente. PEr queste stampanti porre a True. La parola .idFlg: La Stylus Scan 2500 e probabilmente la Stylus Scan 2000 non si identificano. Per questi modelli porre a False. La parola .exchangeFlg: Alcune stampanti (Stylus Color 480/580) non permettono ci tramite pulsanti sulla stampante. Dev'essere fatto tramite software. Per queste stampanti porre il valore a True. La parola .exchangeSeparateFlg: Le sopracitate stampanti hanno bisogno di selezionare la cartuccia da sostituire. Porre il valore a True. Alcune stampanti, come la Stylus Photo 890, permettono anche di sostituire la cartuccia via software. Se vuoi usare questa possibilit porre il flag .exchangeFlg a True e .exchangeSeparateFlg a False. Le rimanenti voci che terminano con Nb: - .passesNb: - .ChoicesNb: - .colorPassesNb: - .colorChoicesNb: sono per la procedura di allineamento. Le prime due indicano quanti passi siano necessari, e quante scselte siano possibilit. Questi valori possono essere visualizzati dal driver Windows o Mac OS forniti da EPSON. Se la stampante non permette la regolazione della testina del colore, porre il valore di .colorChoicesNb a 0. L'ultima parola chiave .alignFunctionName stata introdotta in modo particolare per la Stylus Photo 820. Questa stampante non ha un codice incorporato che stampi lo schema desiderato. Lo schema dev'essere fornito da ttink/mtink. Per la Stylus Photo 820 inserire Pattern820, per le altre porre il valore a "-". Installare in file printer.desc: -------------------------------- Ttink/Mtink si aspettano di trovare il file printer.desc in una delle seguenti directory: - /usr/lib/mtink - /usr/local/lib/mtink - /opt/mtink Se il file printer.desc viene trovato, le directory successive non vengono analizzate. Se volessi modificare la descrizione per una delle stampanti, estrai il dato con rdPrtDesc e modifica il valore per il file desiderato, poi copia il file printer.desc cos ottenuto in una delle directory sopra indicate. La descrizione nel file printer.desc ha la precedenza. Compilare una nuova stampante in ttink/mtink: --------------------------------------------- Genera il tuo file printer.desc nella directory .../mtink/utils e chiama rdPrtDesc -c > ../model.c Il file per le stampani presenti e quella nuova viene generto automaticamente. Torna alla directory mtink e chiama make e make install. mtink-1.0.16/html/align4.De.gif0000644000076400001540000001333510376041214014214 0ustar jjfuseGIF87aADAZZ@@ddde w@@d}\!@>/"D/@<࿿E"wdEv|DZk@,L@W|Z@Ld5| dZBd|Z@ :@@͈d j|q19#@@@4e |Z; :dje L &9|Z@dk@@||ZZdd0d4 EG@@88,jrjLhFx|Z;jd|LȣEV$d \ݠWEx8pjkj,H*\ȰÇ#JHŋ3j܈ЀǏ C8`ɓ(S\ɲ˗0cʜI͛8A9@@ J@ɢH*]ʴӧPJJիXj zjO?JٳhӪ]jW_N}۶ݻxKԸ\LÈ+^̸ǐ#KL˘3k<0Н.AMӨSF-eo=/۸sލRJcJ)pȓ+_8RE%:سk]w#7/-?]M ig_tcx\^|6JA蠃 " I7!"H@$wgN}X^ -"*(@J#z/rcPZhTHΨ(8PnWgG^複KNb8fhfY\g]$gإ>gvufPkY垊^{_ZqFkR'6(&N%ꪬ5j`jh}j^ީiꮳ j%,w ٳF+VkJG+k覫+k:)xj,) @,W 7élg Clgqk,$RaRl,2(k4l*Ŭ/<:Dmq*L4MG-3=%f\w`-dmhl6'|uHomx|wqO 5Hn'vq1.Wnf;c砇.ۚL訋ꬓڬǮzz;n#^>anϾ.\w(Pb?T EЊRTܨC4.ݓH c YXF7nݪ G цs" hG0r-/ol% y%插q8r텉4&IArF|,6Rr.1FsdILL2x. a3 jZswӤ6 Լ93q<#':Κ)za4G~ @Z MA{8@D'JъZͨF7юz HGJR#(JUz> vϚڔ%8GR}(]7=Л"ɩ\,EETTԪ@ݩPAթz՞UJCrՠDW ϰ3+LMt+OGշn$vū`󭆝k:V=IbPV+Q7ij)-h[YΒִ(1LF+ĵgjQ6dz=N׺UmiK޶=.L 1.s;RgL[{\.dXV'%o]%mW Ht ښWDeroWopK`{|B.ubX &{ (/Iz61~g2Ob蘶0!b 6<1LeOy;Ic,kپ%Lf {Fre/+ Iʢugr|.8(K,h>1k64x gGse1$tfC=9Vj2zӜY5NY])ͷF|aݾ1jZχkZ?G3}dEKvyb{;0.鑄֮-dR: M^?sћ~0/]mk3ŷf8=gdӵ9ENGjɻ]nfwi)??YqqP=wқs/_ԇt>}SzѪ[Q[67G׼6c{]`pN0ĵ^{ھrq!p `·6G0z%_+^տ>vn& e2G;8>=GowDowL'^oz]v=`']77~݇VV^vzcrZs;;l[3|̱{pO!/_coGrv&{Gq6xgoj3kqhphbvw}/ 1сPvc{#~䧁&ȁrg,3t#Hz1(gtx=8rDP8|3sNQxbX؅(^8d7Lg(j5awYrx-A:نB9" 5؉H)EI<ɈM)9KWVXX\W^i~i,w0guvvǃWSaI]okxrzv\HUJYx Gx膋m 6aXzWNUHzFrf ~ |c֚zHNYzg릏WFwl(,| Y~Y>獶hpE qk'Z'ƛYȌ׉痌eyf MΩzٚЖvv~뉜 ~J 陦ȟgoh9'ЧًW_ 3a3)ZwӢ4s$bw(58X6Y?N2^5D*UFzG|96arpyh)Ɲ#>M)WztYvɥalZ9JoXgZahbi_ٟx֙|zpxw}ia׏݆7өhn֘閣)Zoj׎Y|ɞչJoZii Ii`g:zgXIk-)uxdz*Zufv Zkyjz16)[ jȚwiYneyw)9~|h'W|fhq {b:2oZ4C V?{c&S,ZǤ>T=yI7UV+GZaH^tX;TfV`;]wnkqXp[tx[s{+Xzٷ6)oK=i_+5۸LR H4{[';W˹a6ۜ{O8k342[xLr4~˻jA)EKțW˼+NbKjm(I˽ݫɮKt [4 1۾Kl ;48麿軻{l۱{L# 0@+KK<l;i+LF(Lu!)% <6|/<\387B<>\\HG&CP R<.QVSOիa\1Xd,f|Ej0cƅpL*;˓ pTӚLxau2MC5U|Ԅ,չ,VOXV}X-XUdWWYSHf6RMUV&mmoX|~׀؂={+a]،؎ؐ tKu1tٚ0 ٠04]oURڬڮڰ۲=Mظۺۼ۾bhMH{#/4=]S-.*-6!vkNjlSݫH}Nr}=Nd;mYW߳՝C[%wq54]\M:A>w'S]O c">YFs\j:)ɪm0_v ڭ9[z N{\hɬH&%n-M6)NɠHNd>2e7-ĸ^ޙsuga{*x:}Y9S>mEn4$nG4~]NM۸Qݝ^ۜ^/1>~C~>^.QB۾g5,>V*1N[a>-.?_;mtink-1.0.16/html/mtinkd.html0000644000076400001540000003236210376041214014175 0ustar jjfuse mtinkd

Mtinkd


Mtinkd is a little server which allow to use the status monitor mtink or ttink while a job is printed.
Mtinkd work only with EPSON printers which support the EPSON-D4 protocol. The first devices supporting this protocol was probably the Stylus Color 740 and the Stylus Scan 2000/2500.

Content:

Syntax
Printing with mtinkd
Configuration of start script
Call of ttink
Call of mtink
Start of mtinkd at boot time
Theory of operation
Bugs
See also

Syntax:

mtink [start|stop|status] -dev <device file>  [-nodaemon] [-model <model name>] [-name <modelname] [-usbbase <path and device file base>]  [-debug] [-L]

Special option for the SYS V start / stop scripts
start

The server will be started. start may be ommited
stop

An running server will be stopped
status

This allow to ask if a server is running.
 


Normal options
-dev
device file
This option is mandatory and is also used in order to get the status or to stop a running server.
Device file is the name of the character device on which the printer is attached (/dev/lp0, /dev/usb/lp0, /dev/ecpp0, ...)
-nodaemon

This option is for test purpose, without this option mtink start in the background.
-model
model name
If the printer don't return it identity you may tell which printer is attached. The name is derived from the official name and space characters are to be replaced by the "_ " character. This will be the case for the Stylus Scan 2500 (model anme isScan_2500).
This option may also be usefull for multifunction device as the Stylus Photo 895 under Linux. If the printer is powered off and then on, the usb kernel will not detect the printer properly and mtinkd must be at least stopped and started again.
-name
name
The name of the named pipe will be set according to this name. If the -model option is not given, mtinkd will terminate if the identification returned don't comply with passed name
-usbbase
path and device file base
ONLY FOR LINUX This option require a special system call which is only implemented into newer kernels.
The -type <name> option is required !
path and device file base may be /usr/usblp or /usr/usl/lp. All device files matching whith the passed name will be scanned  for the wanted printer, the device file will then be used later.
If the kernel don't support the special call, scanning will fail and if the -dev <device file> option was given, the given device file name will then be used.
-debug

print out a few debug messages
-L

debug for D4 protocol

Printing with mtinkd

The usb or parallel ports can't be used by more as one process at the same time. Mtink supply a named pipe for this purpose and you will have to reconfigure the print service accordingly.

The named pipes are all installed under the directory /var/mtink. The file name is derived from the device file name and path.
Example of file name
Device file
Named pipe name
Remark
/dev/lp0
/var/mtink/lp0

/dev/usb/lp0
/var/mtink/usb_lp0
The "/" is replaced by a "_"
/dev/printer/0
/var/mtink/printer_0




Name given with -type


Photo 890
/var/mtink/Photo_890
The " " are replaced by "_" characters

If you configure your print systeme you must choose the file /var/mtink/xxx.
If you don't use cups you must make sure that the print system will not write at the same time on the named pipe !

Call of ttink

Normally you have to call ttink with for example the option -d /dev/lp0. If you use the mtinkd server you must launch ttink with the option -d /var/mtink/lp0

Call of mtink

Mtink can be called as usual. If the choosed device is locked, mtink will allow you to choose the /var/mtink/* files.

Theory of operation

Mtinkd and mtink / ttink communicate via shared memory. The shared  memory will be created by the server process and this memory has a key which is calculated from the file name /var/mtink/<name>. The print jobs are to be send to the file /var/mtink/<name>. If datas are recognized by mtinkd on this file, these datas are packed into the D4 protocol and sent to the printer via a data channel. Queries or commands from mtink / ttink are written into the shared memory and send via the D4 control channel. Both channel data and control channel are independant so you will be able to get information while a print job is running.

In order to prevent problems, only one frontend (mtink or ttink) can attach it to the server mtinkd.

Linux specific:

Powering the printer on / off / on will normally be handled by mtinkd however the usb driver may be the cause of problems id the attached device contain more as one device as printer and storage. In this case you will have to stop the daemon and restart it. If this don't help you must delete the printer module and insert it again.

Start of mtinkd at boot time

In order to allow an easy integration of the daemon to different systems the options start, status and stop was added to the daemon mtinkd. This allow a dramatic simplification of the start script. An example script is provided in the source subdirectory etc:



# define the device file, adapt this
#DEV_FILE=/dev/usb/lp0

# Special options, adapt this

SPEC="-name $NAME -usbbase /dev/usb/lp"

# where the program is located

PROG=/usr/local/sbin/mtinkd

case $1 in
start|stop|status)
names=""
if [ -f /etc/mtinkd.conf ]
then
while read opt1 name opt2 dev; do
if [ $opt1 = -name ]
then
echo -n "$1 `basename $0` for $name "
if $PROG $1 $opt1 $name $opt2 $dev
then
echo RUN
else
echo STOP
fi
fi
done < /etc/mtinkd.conf
else
for f in /dev/usb/lp* /dev/lp; do
name=`askPrinter $f | grep '[:,]D4[,;]' | sed -n '/Stylus/s/.*:EPSON Stylus \(.*\);/\1/pg' | tr ' ' '_'`
if [ ! -z $name ]; then
echo -n "$1 `basename $0` for $name "
if echo $f | grep usb > /dev/null; then
$PROG $1 -name $name -usbbase /dev/usb/lp
else
$PROG $1 -name $name -dev $f
fi
if [ $? -eq 0 ]
then
echo RUN
else
echo STOP
fi
fi
done
fi
RETVAL=$?;;
restart)
$0 stop
sleep 2
$0 start
RETVAL=$?;;
*)
echo "Syntax `basename $0` start|stop|status|restart"
RETVAL=1;;
esac



Please take in account that the you  need a server for each EPSON printer, if you have the luck to own more such devices.
In this case you will have to provide  start/stop scripts with different name, for example mtink.lp0 mtink.usblp0 and correct the line DEV_FILE=/dev/usb/lp0 in the script.

Warning

The server is not able to detect printer from other manufacturers and using this server with an unsupported printer may cause garbage.

Configuration of start script:

Under Linux the script /usr/sbin/mtink-installInitScript generate all necessaries links in the /etc/rc.d/* directories and generate the configurations file /etc/mtinkd.conf. The printer must ne attached on the computer and powered on while launching mtink-installInitScript.

Bugs

Probably a lot.

See also

mtink
mtinkc
ttink
gimp-installInitScript

Author:

Jean-Jacques Sarton
jj.sarton@t-online.de
http://xwtools.automatix.de

mtink-1.0.16/html/align3.It.gif0000644000076400001540000001546510376041214014245 0ustar jjfuseGIF87aADAZZ@@ddde w@@|Z@}d\!@>/"D/@<࿿E"wddE"v|Zk@,L@W|Z@Ld5| dZBd\ T@͈d e |q1#4e |Z= :dje L &9|dk@@||ZZdd0d4 EG@@88jrjLh FG@@|=jd|LȣEV$d \WEx8pjkj,H*\ȰÇ#JHŋ3jȑ Cqɓ(S\ɲ˗0cʜI͛8siJQ&*]ʴӧPJJիXjʵ֤W׳hӪ]˶۷p*lչq˷߿pR;tÈ+^̸ǐ#KL˘3k̹Ϡ)%,K;S^ͺװcFݒ6˹}* ~wSLq-)rУKN=s׋^^qOov*|j˟}{)G]{ER `Vu79XZ ]%Ȕvؙ~͕~XT`.pX8JHTHeR=7@c4Xc-$GhZYQb`θPvᔅU`:8c\tdrJiXyW2igi!N:(zb"xeYczzgyjyCꭸbkapZ鮹+l|ZݯB:JW"kkV۳&Phv+kne@4+k,lp$訧ꬷ90nβ} w t8R3/}W}#=g?n>t?=zoS_f@|ރ'p#Z@/~sW@ k&@~|8HZO~*ۈ@b>h:ЀKal8Ĺm+H?d{w(ω(4qAaхJdaHBъ"BF)q|+#.awjh;Z" H-ы#HH9rdc%]G>dhF0|s$):n2u\ _ٺ~҆[%s 2r"IL^,}xD&H'KMFxϼ6_حwf6IN2zL:ɶsΒ'4iMyh~M@JЕMB pЅ:fk(D'JQIh.юztfHG (ISҖf.Lorю8ͩNwӞqJԢ`Ԧ:PTJժZXͪVծz` X:ig=Zӊ3kKP֏` +ZVS$ u+`QvaAX2uld*Nլ,fG;Q2+hXҺ6+IPՆͭ@c[VT*nuKܳ%ց))+tQ2ݖTgu]ݥ&Vb=IvE2^7w֮f&E۾zW&^$j|:ߥZMwܱHWun}+a^Rv$pGB׵p mniq6rC&۵Z9 n]"vxfd)N[f&Yis~ 5xc~170}n\c4̇{\*r9]h>Őfs RΨ hAg:nv jUYӎ4WGΟ>{Q"s}kyͭ]fh{=^SiZԽ^6ekM[{t6 r:{6}bIC66bry\({8^-v7Vrv[|'|l<2$A|muMW3Xd.G3vkd ![J\_ӽ+-\W4yoi#OS>|e8 {O-yL$~1f槮/|3v>YVv_Sb2zl^r0ws o7q:sr7t>Wq{tW|nyqfӅt~Gq&hw[GowFe;Gxufǂ gn:8*!X}#Bׂxwh+XpTt)p~LNxhSh<lqn;(p.a1ct 6~gdksvw}CfwT'wzv@xv@v uwxn 3uȆ8|&u8c (czh^f(1]0;4ËCb_1yqLcG`XeZf(8uGxivgApR8hփqEwHarG7p6Z$  ir\mxvHH;QsH<يgؐ9tXoc^(ن)3 {)?v1d肶vyw9g`e'Wc&iQdWHw] (cj(Gh]''ŕ"x_y9yȗEG 2ywQoIIPY*qwtYe)yYiYyII~y‰7 YHɛYٍr֩3ܩ YxI깞؞I8ya9ٟ}:Wz| J\ZZuzYաW q5$*S&z.*R,ڢ(0X~ɩ3 }2BY5E GjչڤiPJZDZuXPZե^ڗRz]V:yi1lOnrj6tZdsx|hډԩ{:SzY3|}zz'e 5:NS4F 4רI*XJzj3ϘJQzHj*u9Yʫ8IjʉC8ʬe %Ij:Zzdzʥ݊ [ڙ* ڮ:1Zs0 ӯ*HOJvje3  *X8k4"+$[0q(*,Ѳ.K13;5z79~iz=K;;D駽jZLk`ʳO;3UveZG3i2\۵Nzo\Nd{3[w2SeeZr3U4z4skYB l+vWvk[g5 :XŸW;[{/[۹ T;[KGiuK60ջXkQ8^#ƫ5śK Z[+5{03;0{4뾛39r*3t΋`2$ѿ(C~k3[3 ĖA' 2,3,GSlzˈ&,Իt,9̿Qz6Q1L0}/ž ,x-3\Ħ3P|BlzH\èĪqFS yYxMe\[g2LrLk/|ݗ`;A+i^t\{~lc,z<}yp<Njȇ|ɘ\AnÆƁlu,zLŰț\ƮL|5+ȩʏ'|˴8 ̫lv\Ⱦ|̙,\˱aCc,ߌռŧь, lιLh##&'icS OE] ׼O3="\ (=I./ 1/6}ltX;D]F}GMJ\<}>̆V}XmJM4 2Y]f}[,SJc ,{t]׍o--c=l<4ƊLvMqDֵ3!+=5O]@Lpƪ̾VVؘȚײb |L~bԲBMk5۸}`ŤxʀTn-y]y݅;mˁM W܎M-ۅԭۼۦٿݴ ]ʒq ڭ -m r⽻x=Ugޤޣ<^ڕ ۗ ]˝MlmF ͆`ڳ<ܬ߻=)S㱍X| 6LN[ֽ2ͽA>4=HlyӜZ*W01λU^^f~  -{m!tNin\1m4beP:/`US.+Q*|Ҝ&FӨn/꺫ӛ=j^R}n%쭬lPMp.N s> x^hv.ُ纖^2{G~_┍ȑ">*qn)C~2N>~>Kl_ _ZlN}nc$N]~ " Uxl)8oGI_3&,Q_/N(O. ^4*Oe}a]_j[/2`_HP^mD?tP)Uix}v}_>#\c^}N@{|/N/o^?Jɟo*VcEؿUڿZUUe3$}?y3O!@@ DPB >Q"B\E|RH%MDRJ-]SL5męSeŋ2n9PEETRM>UTU^ŚUVQj@We͞EVZmܱośW^} c] FX^%Xdʕ-On˝=Zk湐EFZugқŮNڵkz@dٽ}{kܬ\˭jsի6U馳{x۟>n ZU={h>d>?R? P>D+G-­* E ShAZlCDW3Q+W{>F#Q1>.\Q%ód"$"2!Ko,̪0ߔ,*94LMd yԬL<UL|/Ec)G'4S0ͮҿNSQ:OQW]N]RVgU뀉n5W])*.U;i6XdXc$2cem6ZiiKw[o7\q%\s Zʶ]#ٕ*ٞ楷ޠ²7_}_8`&`F8af`~b/8c7c'.8AdOF9eW5J0fgfo9gwg2:h&hF:idi:jj:kk;l&ɀ;mtink-1.0.16/html/configure.Hu.gif0000644000076400001540000022462110376041214015045 0ustar jjfuseGIF89a`$,Ŕď,`dؔL8JMNLĴx$|`|~Lش,|DLhДL|ddfdѴ|䐭_BhHP4δרyHĤ;Q|1L̟HK(ό\az7܌AũtߔĴt?3v4pߤTi\dNd᩾Lʨu4ʁhдh<\ʘhʷրRؼjzL—az,><>JWNTTľmzTuzddtԪlTv,Tؼ4LTl!,H*\ȰÇ#JHŋ3jȱǏPG'M$G,U%K`>yM+/ /t,//|OCl lܱkC7lMlxq-R2|7C<@'ɡ0*@5$t P'tK7m5\muLw WKcM^l{`}sk__N{]5 8:@&' :꼡3.L`<砧{ ^q仇(M`K &2YuHIjM@QB!z%@B/t gC8s@eXQ8 P%6x,J VFE)B Y"jdfDcϸ3Rnc, vcEPF0URJ@H%(c|9IRJ0F&0I %(QQDAR22e 2r -f ]2:-Kb:-@f23H)MjN33f Lhf4I1P# I PD E1O0D H jBQ A(D'*ъR9tCYBYE%xmD @/d`L@:, HpSfktH<*CxTFQ`eR20 SXTjsèXM , Z 1,g\Z88/bX@`qns|d #GN99~6iM; 6>pG \֮`|mg;@(g~yέ>~v B٭3:вe ~TѕAi0pZ>Cy? Q"6eD q5}b:5kjV Ma-e+[a 4Pp(r.a2 e(o{e=]Ze 1pXѯ.\B17 ]A7} Y@u{dQw{H0dA<deF~- yjXiy 2zѓ>hP(ջ~۬p]ه#BoO ߗao2F/jD? ~5od_g@_bU !*T SwU$7@eap(G`G (G`؁x?P*,.؂02k768x(92xBBGR`GN K(Rp  WH_ px]Hx"A0 d80@f(P k؆lHhrhupyxȇh  8HI@"h H@# hx|v@Հ||׉6``xXx Њ77g񗋸'`A)e>@ hxH㨁`Ȏ먎@؍Ȏ؏MpP (8ȏ@hȁz !y֒/֒Rk԰uz0@ c0P @@ GoH@x sHT h Y }bh `i؈I0In9 vs)duٗzAv@!`iU 6 U𘘹Y;P ! !  ;@; ;]!HOrH<`MP%Y``Ι GP9ډŹ 9)M@ɝY ٝ㩞i)쩟  'p zM  x 0PӀzpx*0Ő Ű%J&(z*ڢPH 4:π7*8" = > @*pУDjpI qq OФ#PXzA]\AAqqAjm! q P`yڧ*!Y! \ EE[DC@C *C M ꪰPJɫ٫y ګjJzz JjZi ˺a a`Za`@𺮾j1Y W % 0PӠٰ00@EP {P@P ۱ p0!O ( "p `45{D|EGE~ QP TL \`_l0bL`0Ǝ{rr<pG3Ǜ{ 'p{}|Ȫ[kȭ{'PaPȋLLȭȇ,Ȍɉ|ɓɒɍɑ<ʘɠLɤ+ ʋ, p p˶| S˼M8 ZPZ`\˜٠<EE`ޜ |  <| Wp$p m, 3ymP6 77l.@XLUUR|P%P[|U| F`-Pc| tO,{4ay ՜V}RQ]-՜ ad f]g=l֜;ap-dMqr-uzw Mz׃]؂}}ց=v ..ؐ.`٘- <̟<< %Ϝ Ǭ-pE`pE - b b   0Ӎ TpM{pT` W`}[@]]* *  yP1 @ 0|P0 ڐSUT' (=mC0~ F-F}?x(p.. @WMs@@. ?C.pl-bM`'`W>SUX>Q.a^\nhiNs70ꨮꮎ b..ܠ뼾X0X@XTpƎѰ {`&0`~ٮy[ssNs*@> ~.| 2Ӑ ^ | 22N 1p 7>UA z(P',./JQD-^ĘQF %qD'N:DIEJ-]ĸL2]Rdei " D)%ѨDb"B(ҨWװa}1j3^-zAXceѤXCRZ &]ڴ([S^ͺ5i,eJlZfTJr Nj`KŒJV(jPg`?ƺ0Ȗ5lϣJtq]Yr-lگq'&to<X嗙{mԭsͻofǁg?v{k*C)Ji+*6 횢7;,9 k LX 9@*Ъƚ*+Js&j$,py* ÛC@EDDU  츤k|HL )錜0%892+b<*rLJ6a,sB1H6*+ {*&J)IWTIBQD1ǦvdHM$ID$8E&RB&Ǫ e탅<\m/Ӹ;;C{.VTŪ+*906 -emv2 ˒֪:;La6\0,XQ+ݧܵx5lY ]*|5ܷ_?mXWFBc7T EM4Y6ako$+`N[$r+qfuk.]]AJb J-j8cL]P̲*5/`{6 / D:2M·,6K0 ];.0Iz,mkr*7o=D'.-5¹">[y:lO wBu[4t=hBtn0T`Ϭt%=iJWҗt5f+E~R 1MԧFuUjV׹Hq`lַuukT':)^dBj^Fv alW/6%ljW!q- mr߹FMht.w[`%#-o~["v7,p? x7v+w-akzܷ-;|/8Agf8Klw2otxxC o#su:9Nr;I$Ob3wsdzt?|G'9Г;AzוNvfq_XWֻ/=|O=b<\ ҙy7z?x:%_Nٽ>zjS/>rw^+9>x'[-uz<91{7<]_n0}fi5.؇jeݣ l+B봹8>J[,$2B, d[107tC3d9| C<0;C C @ B=T84>90kKDqsCDCqDK4P\ DMLCQLDQ1TPԱOEGD N[E9dEU4EW1Pd_ZdCD8E[4KEi> FWCXWKo\F`elhdOrLGSEPEqEY`DGK)Њ!- u )bїXHh$"!"-:8Mi<Ѣ %s)`C>~#ҚQ2 p/j+ٔ2Iiȇd`HEHuIh*dא (=< *ʜHyQCY*6%M+P QI\EٓJ1، iA)s K jtKu: OhP$iQ<,ɢLQdCIҔ\ҝm N)YC*ha2MFzZ&" m4U>I& Ҕc?@M ԛ!uEfri)ɢM!P&CE/]*U9՟IըXUHSlZŎ)ǠL]-:D XGbmLXAJ /b6 ߨ gٗR*M3ȋ(%!Kɾ<ir|& W13W Xm'Xh x1. Y<|)&!ϸ}E~mXYjձ*eWz ky]zصXm'" !面M4{ۘ @.XPYLP :ʷ,Bň͌.E~Q+ м[%P<ɋ[ܤ ц#ѧՄť't[|\<͵=  IV]ܷޥ}f=P -A UB }4K0  k%E"K.9r\%-󵌁٧8 Ŕ4Ҍ_'2=X%_ `fIf`2mE f _ϷAH6Ofqt*am: (9] [m0,hP 9@]@Y  `&)l*q .6 cl3vֆ\cw 7 (966`ݖ }-crh@ɛ H h"15XNUjI`­n.BuM2iꒇ XpXfE)g0~J!>Noe؃f)gqihkgm.n+kh1FT4g>YBgY<: Ȋ>H[E޽ Z] ɞfHUj %jO -j];P%eb U2F1.|k%}9~g*k#pd ʩ̒Jek>"}!Ǯ깦D$i oc O3@lD? kѤѮqH wn'%yڜCI /nUY סT7YnIU>/X) 잍X Q Cn0Nnilծxv'uR!][- ]Бbc[Es1u{F_dVL Gu,qZD{1no4Gpq-a. ar#D7O7"tJ *]9qq$\I%b^$r%#J}5nT'(]6dLvI"~r0K$HAQJLf($r]` `j>u X%vPuޡqHPhhQ[z:ajrP Q$Rl͑8s* iggI< 5˲`뢋zWEu-eo! iwac.vad w9&Pv )a7`L!q;O)+R1-)4UьV9HG%YPO#@~ LH2+Pڦ&AŠ׸.f[MD$t= y'>Vmjѡ. "y08w)JndtҤOl?oy!9*Jzn-y"Ohax0a!﫫7rh l)Ed'!v"Yr5;'5QFC à.{1=KOS{8`dI ֶG}~}Z^}l-aόZڣ\7AM- QvO M XD q[YKyΞʬ%hP PbɱB$(\Ad1arXXH "E~<(#TԙX}>5΂Fd8 N$S$E&u:e2d>BڼW:(ˆ;-*e>QcM- H&G2i<3 g#8qhD,-\˩a{V  $)!B$qDi,#G[DDXБWPQB)  l9p;z&Y>U`T"gTμyD, rr <2"gL+ T?VeK-r@4HbLQ@ jDvLeY{4HQF^YrgH} `xP;}t6YgTBSDP!ba T(L1bDC*"%FhuV@HX!p'}mŢ[uäECE2$GqMɱQT8 "yjaD1IH4!fh 'u򨜦Pg*y8#V tCU9F \UwA n'=6"sI:|gq vR kҊphH뤋&%n ucWXnJ,Jn*!G\nl{Wy ڙifmL5G(Qᔧ֧n2d$\B̵fiZ$}eE)DFEώ.}06nD٥@+SqE5Q`ZZcyr` 1DBՍuo,фRBH @b<{]9|?tlS?}]4`W$߁⵪*H@^6LL>w/oW(r0jQ?d x5b/S,ZaoMnR,|e$"wZ-[gTwA4dkdsRzEoL]Dɷ`}DIe~92FQUG]M Tq|9J <EXs VM ZڥU2S]ltkgSe:ܦ1Cb6*u_im6ŤJXe<>*89X2 ]":Ԭ9 !GP;.x2sƫ,VهJDr;G]LɷLh:1AVQ:Hbí;M%?#F5)" 3/;j:2 Z>խc GOE>L/njB̦ķ/bD|_-E3:uaۉ݅HL ZSΐVDt[ =VLH|$`#:_$SLPYLY3T^Ϲ OpHD_ Yɟ߹`FT|Xn0֡Uyuf\^ JW `\8h N$H\H')DMFV-Ӝh8 :mTMʗ,I!}["0=՟d nb_S݁b bB`]LG 객PAS E-VJ APJa4C{[4s}9 FܔDN s͡ 5 15P+-JE Ѓ8(UAIu0G+ㆄ[ROG^ $.>L h\B읤 F},DPaZ PV=,¿)_Q%Mi_`0J :\Yfq IleJ@EEb›]ɡ he:Ef:6ifQiiz jE)L G`O ğpW)`DʖF؊VlRiLEsDs>tF`Jhȿ -ʼnEVaMTᴌ -cϝ` eހI*K G~LţL*Ĥ%\hH|*< he jZdELPaQfߦAUu^DzYi{!{E#fi` djaJ!>FWGClMhC|7mEbIɌ$aPƄPR,yi+F(ZžVƸR5X .p%R)] zO&IjNYkIINhrfED@6D?"DEYzք~왆*NXDR&ЏE"a 5ZD20ߐ@iY c$6Hrũi8{WQ^ c>fԦcmkH zra*˅ 4 . -kjK: 0Q]'`;]*jf▄ZxJݮGD11VK֮nT...o /n ̙(.DkGI WO+jSw8@oLWxޅD %ȇjъGKE:oVtŬɡFl/HnT0WqbHok!/VL"J/TV . p p pe p fxHt !liW9vLjKD 8Uq@fg[s1=%gƎ Lƃ*P a1D4DߙtEŸu ]bݠ(UMơv$|$5pcQPؙn)sXve ųlFW D+)hmӏc֤()W0_ w&2F$s3󔬡5Ìsnru*sAmȔf u9,J ,׎])Wr߇ <ч|ٽĝZWŧHūu:~D+DV:ќyDdV٦(ϕu>Pl<7LmP7(Z{ddσ*X};p^GSJ_`ODQrfBc}M^yPn>{q{&U#|N0֌ËP>^*/{*ʟY5Xx[tBc;0{J͵5jŲ9]lĄm>܅e_'܄acjt q1=W ˄ԛ'zlE~e|=|6x@4P.= a}Ai}KX=_ ON _}yN}ӽD 0Ly"YY֘T>;Z1^.aw&|֢, P>s<\';S{\d * D'0X7KPCvGOZbH@8OX@!$kX "BI"(9&KFJD@lI}YpXK aL+AĕP%XV)3a c. /fq+"ID XiM1+kP!M:LS(]"jL^bXՒĩ`'B>QqUȱbUPAQ&(ƅ866ʢ+w 9sݠ TTԅr ТIKP0 A$)m湳"o߽)|8tǝwKKu.8^;h ҳ ;ߘ[=.cj_ϊI"j--bƿX a6Wdr;Pj/B'dbhF꣫PKC( 3N$lg4PA $ʳaAҘP.|'}K0(i9-Op|S͝\(Pr%)da3kO6s t:yrBv]y?2wu7>yGyoߥwܱx>y^yѿ^|z~|wv7:3hcј%r.\4"U A N1A nA8AJ YR:+".9N2Lv4$4pbEHǙ!׼n~?AxghR|G=TX^Y`195IɈ-Kė&Q3 aU yjRg֩ I@ݾ6W1NvQC҇E9BrG)*q4nuO<㐟^%9 DV Kԃ^.˭ ~^<\}'ϿfW [SՔ{"oyrp|s2IO6|տ?txB9>363?!I+61xb|!jJE |)BF.4P0.@IͣXNPvoB/ bʮop i1yL "D6beG j"nĸm.ڰ ) M cp8f OŎ kְK҈ J@F5t,@i! d vސ@+mUY/gi Vpf+mΜlh]iW1oPK-YTM)@!COV&% (hmŮQ1+fi qq HcN,0z L+-b*)ؤ+ qDOMq12lV92J$4R4%M[1#C$72$Wq&N#2&.>V@2$b鞎p'߯쑔t˶rl*/&72G$2+Ɛr\Jo4NG:o!a(QjrF,w20N0 0 0ƺ|#ԇ~~g) e&0335s393k[m9H! N/jk ̜&hZf5.6]37m-#f66u8{f8Ǝ 3퐳`+&p!cB (Cn(SHh<<Ӗ3=sӐ3<>?s >㳖@s@3< >ɬ;B-+5zϋ"@ 8C=CA4DEtDIDMDQ4EUtEYE]Dώ^&X.p)o;6EtHHH4ItI9`GtDO(q>>bt\3n'E 34LOXA@0 B(n" 5e+)?*7SOBP٨\/ THP hP 5QR)ޭ|rP7kO>=UBR9TGTW%ǭaR3,UJuܔ*^$Nt \dABG3RBde\[vcҊB (>Cz&KK*]4GU4C3"=.ډ;\('"3uµ/,a(dڤvNd?\"4m'j(3z "EnDf57Zw+$|#*8@M.#xQIZbZ6ڸmBnG|N@Sm} :DdxZput7a8'&\\ %\Ǘ/A]&m#%T88"kQCu=W7KWWӗ[]H̃nqC$Cc4P /Rgш&FynBMcn#Ĭ<'"zd? %9u2RZ؀8#(rOϙ OdeBcr}A;,K:rS7B LMdB /vZ9Q謯")*"Κ"bBtky.2"zQ`((dG/@88E㜁1"E#o?E:)UGU7914O~BO/x*W4,(jf#5v#-([5[;&v:dK%wW;- [cC,dЄ,sC9;]xUIjXv$`e*HWe{J$os6bl18Hj_#W6Z 1ԼaC4V[?&\E$?,[%;GW'*΂ (;Z(o{"q3XA$$y{9!*(0IJQj;[i WemUJfb\#'| (y(BpBǁ "_hGDΛA`yCԢJ<9B*mx'$N$'HDx6 cK."P!-!"K2qs#ZC-WGel|M\-C,V".|v:$8~B)7ӟ/~ͯQ:ٽkYw[b;)(4(v73r]!IXk["]hw]#ak7\^]#Yc^$BۋeeԑJ8fCd]}'Н}(dHZwz#`e7y$b '"fsbLNͩB7ک0.Ej4Mz&,BWF]d͹$0b[=n5 ՏFgV]6;*FUbYiBR~c[s^Zݝ;CQ[%"q[1z~ɾ~9>by>6rbMCDlQ$&.2yѶR"u~9893^V'CElu;49bx+ߒbY$—5^n!j0&Cm#TB$DtVw>F@M~^u<"V,9 " Pp-DH!C A cEX1`1.a%ă*[8 WZDxeIΌjP3fZ)X2†;%Bgϋ hcȑ%q% qO$Q4#7^_z K71AMLSiD@-jS9-̅+Rzc6dY$%P}Nrc ǏiUaЌ<9mrVpʟ*I5D %FͲ>\7O!Ϥt8r4'=SD)I/>]jpAcF0BzaD_7YBZH[VL2\ob*b.c.՝wN6Ye QgDff4UE?VdBLbHA)aKF0V HrCbTK9Ɨct*QQ@4$tEBA0 JNrdeQ[戓6$Ry)ՇXfJ4}JNbJ'Uy%nZ JBdBw#pOQYi[Aފk2AXa5RQ:p1 CI,4$}f`_뙔3miE9%RI?Xt,yZ,J;%&D.Ħ.y:%D2{ncI΋t>jo$-%JFfD# BJ$[! "AQp}YOǡfmOD "iҧ5ܶ4[PVf5Uq1ly gģ!{4d lLtHxUGyi pc6j4e,JMlIDm,NYqs"/Ɋ,ӕ=T7f^zuKib`}QϋS8]3 ʖ[pmY+%,XZq~‰m&, MUIMr L #6e&͖7\H@5k2&-Ӿ59bᩜ"RRuUwAkˣ$rU"+Q,ȢLPrRsRFH+lvLx#d6;I]fؔmmho"9P< KX3!d'-tiS۵ج LylؖRћF^pfdV\{#\E,3jcZ]E$CaJ+\k&Wa'f-=PdI mN'nSt.o? 4@2Ac| X ÆUu&& Xy U+rACV'ܠ9CuPM%^p&FMD"S4,T>gJrCs/g/)@|K(l9De}i̬.q9}r N߃X8J3UldZ O%<ZD 4aSMx$'gZ$ O26s+rc[Fٲ}Z׸M75YuM Ϸ*${,<ҧllVV l(m P/oDw ń0aVEI*BTp]d6vDO4JH\J ddS<".Ww}OGRZQFG*ꉗ[eƈiHٚVz\bCWcDsh)? =g=*C戚(~P?^*7#8ӡ^cABύj, >^}iGxS] %#͐G 1)\皇N3yP%7 Ε5zz}Ғ*}>DLD>۸ւ!U˓BLO@G^)w5NkEq-`|i|Oteq mT='X! 5P XoqRyD`C&>53IVy%DžB͵[cbrB.TYj Q`jR,DJ&!F49017b@Cu5Gxe[K^xv|SqdB(?3ᅸVI2#1:M^"kR7ݣ1R0="oAvhe J䁠8q"( q;!I׊#q-82Wa ,L+G7x2X%:qf Ane{f2AD 0Z wc61782C\$:tθ5D2NW=5rU|@kT:~AT8gK4C,6 )ރ%"a<}W#ql.Vo3O%sCAsCȕ '!@wCUWmM-3wRaVv9S[2|I/A)MOJ&1p:"P:X 5 X '" <( z;F*.7A(r9Gpq ZDIN{3NV\AUHmbveZ䦈\( 56TC@˵{9@^!*SVj$\(8ёQ )xA70a38Fjse9!S69yAä<)E9U1L:Pԓ*9e \҇a\ZZmAHDP%{<hf:T"o+}xda|}Bt"CZ,֮^&/:bqnHBUhlJ *%w1{:0M966ؑ%(V5)6 $Z8ML*wi5 zג##(XbE.>>.qVZcD-8_f_Bk U<FVA}w*d{sN@q",CBJ5:C?ǒ:E\To j8V]Ըf)1 xyv$hm|Itse"&!/#A#$BqԊ-IR:خ&8x KETW<!uqOVdbtk_ѵKl&,A-4 z8]@6YgDCCE%qd/LI ra L&,F\&,ws0ѕIz* Sz:ۉ=x-2q{]s"^3+.7$.dyqk!*Mv/#5yTufi2Ϙ%*c 9LmCMc-cu%Tfp<6A'xl&Db*b\jHUA/FAƊ_f/u:;!ɌEɨaƓ!1_*v=6"\+A,#[zዂPy?%+G8;#E~(YABk?Vg_6ui%:8(~r2;ny\,V5So?-ѱ$b'|A΁ؚ,tN܆i-h$ cFZNb(WrF6$L¸i35C;XC$^vwbI8.cH4OL!>%{bCpXqq t6/ fJY#IS9F3 igzCoj0e`x?-D 9Ivt&yUׂ}m*%;'sFC֖ABsS231GǓ\:r2?1VHjyz {vjirfJoANC  @~S*`1U$?Fza O??-<2G !lL^,vUOӰJ"ZZj\3RI+Zysf͛ 7JIpᰡ \xP*ΣN%FEjǏJ^z2JD\”ٳMC8}"D($N(YhC0Nujֱ_ˆع[}6fg92i t8(9H"6TV TRDVъ"’8IՆyfdtJ(>K((<"('"ܳBKТtš: ;jPA˛B*"@|Ro'\Rf>D,"تJ,rK..0; 3 #I ;-#&.$=zO:B:#s3͵P!\$ OAh-r,3JQR@4T;>A=IT$4,$XkQX%@'C$:[p[5spC4h%IOBSG.Xc8zDr'U;Il uVWukܲSm0 l^Wݷ.[bŅ.u"7Rf ϧ6ƊIB ߂*7RI4q#)*vdi[IօB_~0K}>9qhǏr%6v|6Z-)SE(5ͮLL)a̎`{m7>9)Ǔi'˒NeH@?Βq¨"cq%N`zbB%Cq`5–$>qG`>Fπ2hKm$UXA?IW(q!7!P,d3`2Ȝ9`M'B^HIcX: ,U5CYYJ $&i-@0iD('Va GSP;i"X`LrH] !C707f[) sڵH(J%MLFDQ0>F#PzRH4D_FH8|;M?$=!R,r 3V#1K!zIH+1X4lS Ii `py& iV&}yԖ鞮L ?՟f!' %^YOy#?9rrB┏=ٰPx=&(0RH;L! zzR(Փ$ +E"KOx):J%EUxP!!ʄf6%v艐3chP*RFYVP JMo=L:Út'ȩJ<"y`)5,HNGRAL(D٢/1ev9!Jgi)Z0sm,Q!nX.3ɓY@KS>?Lr9R ]+cdkXȌ`Yf+B5r9frEƴ7Bծv+(6vM`%Aq xICZ9LAdIΑY*Jlz8@F71@ HE ocSDW㈊)\%IS]='"q~DSUOyџD9$ cJ k9^I&1kLӦ'1DS8cDsLle ¦lB'-JV܉KS\dǬ]H9|aЙ"*J8B+]K b$1UT&*ZqeqgNTPG\'5-iS8zA rIrۗڞO4\J&ҩ $yqѱ`Me V'x;%ntf}R&+e ̛!ѲDǛ"Llz_LE/0=;;HW3F9ݙC}I+8ϳzB81DO (_`-GA!i5sxJ| w&%K;z!b p/pbaN.P)(T8d6Re/)u1^Q9$/$ZxH|Y'@G41MҐ72NU?rE| !r`2"d`:: fs~;3 ?+?ҁ ?ë戺&a's :=!/ 2AIzBØCA!( LY<,\4A"e !\"LB)vCX꘳.> 1A_0"t:C344 ))|.C,l%DZ{5i; t{93# `aE&X8M!X ,2;m&"51S &XRQF(" P2RR S Q RꤐpRSȦH+:{I:LəQ4iX<ɹph gS$RJRJ ³CYINNrp<=`͉!:S,OJ`I|9,@Y}2IV&_ cyS2od6X b6gRXjQie4k0m]2#W9 Vs&Tc/Ir:41 /.cE!`H9)CIgmأ wX)(09AC S.4jYה5Vj"<X2QZ2G 7#ZdDâ ST̉Z{GЏ6)? iBYÙV c61K 0Z!Ld"P5DīY bՎ7`nSRQ.HpMGl%-/$ya46i%QC)9SI9# "3 j,޲bF{!Ԯ" ZٍMڛPݺ;5ޗ #B Ӣ ʼR@٤E,YPn(p “^ T}銡X34Q Ɖm(ZaJ?'j≟YBQ'uR/ 8 X$A'b*[bnͳHbSa9%2Q3%ɈnԤdS0ٝSmC;aNL X`RFgm&9ɟX*hxP XXcȌVPR/q'Ɂh]A,IJ E7q@WKR`->fTfY* 9} g]L'uJggNh)R-1E)gt!KAюյ2S1tq| `Xb6.})&=ҡԽy>6aPVh9OdY^urFuѤ. QYJ՜'@cd.,6)愝-+莍ɔPA`$\oB a(99GAKW*ةE̙!'֩턗Tn-V̮i% 5CLFD;.l+i1;0k [QY;dט @iS2vbC]kE !L 7 [ XL\5n"*KًM*@"uV )P2# >6&{ɥ$ԉsnP9&̲% E3Bߺ%L3I]s".b$ -WSqCN%!GvkgVY< o:#". o"4kD(]ˁirr53ҵoSRHrn~P2T+.Ġ%]oۋ |c5e5FS+buPH^WJ0l{V!w{o%OvWWPz/$w|*Ovozq|"D"E`a`+ (:u)R\]?*5keڴ 'B>DIM?Y*UR=xiH4 zq$#]d9ӂr8 V,t:/b'%$ISrߎKq2tˆ NTՎx'~wqv Twfl5O438Wsf1 L߁t5HDYᝦ!GD_v:b 5hs{'t6ڨQe|q"E 69٤4f=9—"!)D)Q,4qt&JUSI(/SVP-*Kڒ)5)a"]S ax-L t.ʥIDŽ 0<"u@D-9*YXR$$#lS (P|u!AD^9CKXGr"IlS9T"+T *9ͽDr[AcLby}j'M%ߺ1*L1YLD؛P#'8w\1!Ł Sʈ6Qr1D$)ʴ!_]deeKnPVd,[/#V&zE"pZHj\eXQS!0"יDo4=#8 U V-0Kq$fz%uQ]BUZ1>fd#ljZQқpr\-׺N4QI)8G?=,i&2Vn*}"E:8Kٲ"a ڢ>.S,(>FTw΂EmJV5kǏ1\x#EY*TDsYJ%:,јh"/XzJlJS&U%ߝ‹y<$ە3/Cq/. wdbt?h{y`dO]҈ 3:MUMI|YBKܶëQ݈TMo3.%TxP ; `2+,}"l͹m0PiId N/u &d8ϳHvԙ7҈m #9'E%6# L=OȝMITQ/a?DPE_2O7q<@a:.ҧpW VڰYxdR@7\Ik,"U>KIxX{qnȷ A}lZ\F 1͇PPc`EF" PIa4VD! SXZU@[yql@N`^ ( aY\I`PB}LM"(IaCQS}@i=Z\ &V)ET0 8!BY muuh= !\Z}!V߅TF=U-҅ŠXI]pY Şt1`YAd\vҕMBBG!^ πM` %c|܈-S§Uƹp\T#&4Ĩ[ .. ` MSu6r78_` i90c%J UXd4 PB?J7uM J)[tDE|-^ő0Q#)$*Fڌ!ð[H ( a$vJ R_PXQD;5!(|R*`EETtTKtDMIV Ž@ Y8tGW-Lp$XZZ (eͦt_فXA"|DUؒmO$Ė,FU JuN]h^WmNl-]0[ƹmQM3ȋf0H&UdE:QBE5ɦOxgxx~'xyygz'zgygyg{§{}g~{~|'g~g|^ETI%UXtպeAWĘ|:u7:ɰs-ڃ"Nw&_Ԉj(au"+yi zg"i*2i:BiJI$8bU\ZijeŚ#2 fe\Gpe`)ULX(K]Ebq)Y"<ѦN4DZbj^*jjr։jjꪊjjjX^[UDuT\ X.BRL~ȂMZ< ("uOpX~EkJl\FBg&BkUj Ȫ_r*|Vjk*, ,+,,4+J†22V,ŽRz짎bIy? M/aX\&yqY:bӪG}bO*sdQI yE J ε8EK:%hTjLZ+nKT-K:WcbfINE&U ρeؙH>Q.&mF|BcBKDu M.LyI@ΤX"I~e\WTeJqMm,-6mlm8ERb":~T܂V 5C]{-$#_$]P,zC٠aB'R`AՈt55f|^v]2ZᅞJ8> ho B4Iv%4*ԆiYSK,[|T7%*pd}חsP/EW/`ܘnIB|'#>guVCc5qGdI}t_|c7s_("K{/ee!tpŀ3EX)r]rpœ4fQ\4/q-n-d8kr'7VLֈb yq3 y>3e_():YX-b4ЁOo\[fq.M*ו]`T"9)eyJo >*܌줏KO%23dey 5: m=7Fh\Qa[1ӹ1WT<˷eSuCٟ:ozO0jpSER33nMu];P3#vGiy7u p. vo>yO%cQP4wc;CYZJI;`~P>~9'ݠ#ūO8,DXp2H 64d )Bx!aq!ؑ%P!3 a$YA)5d9c j()'ɱ%8o&qHB D)0\@=my0͗gh9lNV%*ϑK]>- #N.AUK[ !B8I8w/НE6 iԪYvG|1x&ˆnpE|U ."qV5ԸV k0Ճ ":R $vS);Ԏ < mqze 0K;<+|ϫȯ9򩏇"/&gr` 3pH*ZJ0& #’$ڳ+˻K\I C0LFӥ7sO:ʽ O+zk=2"H. .!ĈX x('(-ASxc ߎF t c!8Iq Ԓ`fPp i˛DG~%Mɪ$Ǣt1sQ$2ļ`p+a}nYq#LMns-RtD$̴ 20_e.3K`\͗} I3)/J'(ة_5pa3Bf)7*5Uz0y= b.*cs@Yb'œ,zSp<~L*A6bsR2I_\\E4b(hjn)!$4.RBY}̦yX |9IBcG-URW\*w骟k#4|53a5Ӄt(]H-q1՜Tyc.ӕ2WIM3}?`,P%F)F:op'gCppQ¸6;lẓ-\q,<(.Y Z l8:m.CJKB{ЛHibLaUۗB''0GMrS#I(͒,B  1IK \<},5rNqW'(ԝdPR${]4 RK/.)O@Qvt1ţR 9ђʢ"JhV k3pBuNB,혽gm!H#NXŊ@XXS.IU,PM#ʧ$Q{ 3 NI;}/ {͉Y MB[{L瘓ŬY 9w;a\ۜϴJmoM˵1{ķr.\".=i]kZ] 6D,~)#ؤif `E>>N-NéF#bhE H" ;6{t~nǾ)FD5GP V(aXZ 2kph\>]t(쏻#ێ&%BMJY0>勠Pqbv؎XȌی Q$OJJ[| @X#GAqu]`p o瑂C$Dhq'\A.'"e-O꣋t&z* k τXkK(phY!#jex!>F'Ά(+r!̮A!#h SqLpo:Zĩ (0Hc^!ADE6Jj_< JH'+;"#”b(&W?P~f:JK -+Rf%E<f/ ?)^=L9++fS1p|@Gj"L0#Z DfqZr2c#-(-n6)sGAD1ز=Och̬oJ)ld(&}C ^B$ $ I/CI >(tf>2,<0%E'NjW&f-t.Z;C) w17[/;;l8)z1VU0F_tz, 붢IR)&,.M&, 3p{S×N"%`&$JlڼSB6LT"gTh+9)cuvO],> [rIXMe$RL.%Obt@j- MÈmڧLwMH-Ml3&IzEC8$Cc: gIBf҂'Ё =.p+@zk˜h G/qK%5>W늉/#G E-;B<6H@:϶T$6 U6Ah.5.(Ʋ@d^GQ55H.{C@5<s/vN2Iyb 2e. QAd68@iT:kMOh)QG,f1n:$@n$*HNhaEj'KPlbyՔe uv$xvs,eBpb/X4N,аG ' Έd#.g𬑐h6$eCD&_jJh NVc>B΋ eck.Fnh.> 5cilhde#Ÿ%rCi5cT|asgd a\'CBUT7x&\2 Z5?XTԂdd:Ut #oyp>S7{tvذSVHvb9*jT\f@ueCztL5'ggh9G~ ?&l&6nsZvW?x׶QyX\:V)\!ӂEt*dV_r0aB7*v>*y&d>Ly+7,{>%V;R'b$'@lօ|PjnL0͉RH@U΀Q+mDe.+#.DHxĄjR&ḿdL cL"/ -1ya+Ēhhԣr!y[샏& ĉ>tc/cky.#4ori"s0tޘ^P6Z6*fy_ٺ]t9^<~Y^fje͡s `)PW1Pݹ19ٞᙞYy鹞zzڠ)0 <)M%ecaSMo;9,fŅ|b/*` x+0eF:p쨑h !뱆U'hZ(vb |(C 2=R䝳Z٫Zǚz)_j=b6dKc@/\, %L:)P\l|,48\~դBjt+:aT#{dY;&Qxz5q~IC-$N(%UΆc8v#z۷㷃۷'#"7z㷏#((DO>?i8-YuWM:B|%vput9a$b /e??&&0ؘ_"bu0JfAǸ3̹+V",6,8b83x"0<6#K<P<Í-w;gcS\8> SOyE96\9fÇCiyaVbv5sƇb[{x¿j7J6|ڔ>*LJInF <[n^1  1$2ךd4qb )~81?s GhmdBY{ i*dB:N};FVz"}sBũʲvvO[!(jGXM}? о mc#ٳ;j֕D<#FS"4)zQU$һψe v5ӱ; ogwtFQ#gw<dJԔC +)=, l{"Z -g;ՃәC[XjIA}CC0N**0cũ+ݙtf]N6)Z>=0VJg^g)oOnfç}Iq#)>+ʧ D.xfps`\XN:`Y|hL{CcBףcuPP9R-M_fDX_`P%S"eJi1=7YFEBhP?r U;ШW,U]M%{y_H"-d`ol?O:vj&HJX^􄙢yCE`}F_,A  ."AŊ5pA:3h(09V "JcHJf*aXIM )!B Qb,c٘#H$O\ʖLaRه&aXZ9xaW@$z>dkp1dד$Sv]K5.,KTjyrL ̥D֬{B!2IR"B>qDiܢ L5΁4;,*d!(eOHΘ87r)[rmݑhgz5 fg\K8=-pQY uDž7nDghuuqeD_s#sDDWA]'QvrwRY@7]SK{aqeKy$Ҕ!v%C1}WUA6W6'&Im}TbQ!֥.FɔMRYDu Vf,V TeMŞM)0:nA?kEj$<+W yi o9 -~"<⋐t֕!}qgx=fl+Zuo dцAtc!d=aUC%70`6=`3$3cJJ/Rg42$F FVx ^ Lv%fW-D#YG0*RY"C8Wq!S.C. %>t(/҈(zê8O,"GF:D0$}I?aъ)9TJ0T! d;ٔ0MI8GLt%ikux)42!%IMZ5%7i8_3~<&jP<1qEΌei#Ju@m榐&HbLҫ)b fI4tHj1#rSt ] D!kGP:T_ըDMRԦ:P=STRUڦba#t_UJT&5C kSJVҤQנ5E6LqHW}D='&m4>#q} ty`^MRUM|Zպ}ic+}-ki ԒbG֠iZW+֮:miKk# չMo[V?b$dH|jfXiFaVL"e:ZXL,YMR尩$6UF4baAb"R i ݶbbmlzC6%)2<.q:BЈN)a*Ƅ2gW8³|HpjY' KHE X*6D M)I,j hiehJINl72ٵ~JL ylXDY,mKZǨY(*J{q~GD m1G]򲯡'ySJ_^̀YUVaVW?"oz+9IonŔU&-/X@'#PeJJ4D,E #:.5"ƤE$`LB$4hH9쥞˷JƸ#[؄X?JRBAy!M #c*B<+Yl@V֖'X$:Ycj 'Q|u`-MYgƫVSjzy$NEc(JJ<%q!Jnl Z`M&|N۳1I EzH$>Io%zaŬ~w,;wRh&n@K(F r,.CRv(_4(( dTs28sf",r"}=8?Fr;w_ăRXt3^GR3Ci?A*.qrU# 'C<$w(/ r2(xPIZڶɔ⢪x#,hNʔԄ4SbROL.BeMPblp=i;mʯa AzFwXR6ɬ[o*e ]bycXTeTP}ba5zH#Nƚ4}wW\3cȷ *:n)X Jonr(ð@ %B⋐O8$0T$1_1FgFo1G qͭIĢh9ƶE+͊>J#*X*| ̈N4K*蠐P-ZiM6<@J%ch8Pd!-QZ Z25 FhM/gۓBSв\JBκ"9 l@"TW_6Xa%X_ 06Yd5 jYfvZk6[^)C"} 0qT#`%3)$W i(0z.#d:.XtpA쬠چsT Yi} V^}Y[VNyy5[ yfi&^ yfY.hPvygORuΗhi{Հ֙g9祋埯.: !-u*N5΁`) 9h7($SQMRO*K-[-;@HDnқ.\FDoHZ+pM8#Mjs—&÷C U 3IL|ꃅIpub7IH\jsI^ [?MҸL7'DTW4ݧ} Ut! H!ޥԷ },QӐ~y]m Gydһh|^K>AW š*~^Z2R7PXCaAbB;o&ݙI1 Lt%T&"†ط/%BTxă$qq$*Aqg-|l;ĸ)MI1I [ם6"LFXAEZRE gUeD!Hxč䍢"mrLrsRȱ~"·XVHDp3iѓ:iO!aA8pLJ_!l#9d|m"]ߢw.<21j& Xrr$g9,C ÚS+^]o̥yj:PǠLT5 9ġڒx2!7Ypr8FF"C6Ք&}IG2ġMْ;'ps#QrMp @9Ao/s4JA< ^o0* ;\ LE[많K&]]F8&t!^Wݠ!7f&b$90@=[d%&-ʲD W,2ժ2Z-OQ[* ؙVoMG|3y[ J7! Z [٬vJ.HY ֭Pv[W?滇F$³!{;y)7 Y薻洄dYt&?diw44byy0}`y`7UX֩ Zrqed7I,C!t .b5a-"Kdv (DL䄘t9鵕&\PJPd [ƒE/[29q#X (͸]K 8 ZՇ .Z+"KɲtΆQO|s+oZ#uT2FY 4B6~z^; ~%_Q]os i)mk5Ǻ^{- җ%{PMEU"32}^3+pi[2U:GqPĿ!DmkiŜ4pOEg6>A^'M9[J9rWlTEڦo<3n2fszgTsbi7$T&<1MRSCw j 2*V53rp㮘}Hԕ8la^oO 4p[<1y3׈[')1C,u{ v'4z-(0n×JpܰM^o+y*\a,P[wIBoԷH7a;B ٜ# Kz "Kz 8i"=75𳍷聍ꃍ)@4b9ϡk Š@"*d" A?ˁ5|?B)DBh3&d+- vn!(A14B|3$ 5A * JKF9oqN!q*=#‘ 0&d%R 8\t$crt̢)M 4-IhKahMj1,Cqx"MK s@N嘬94M{6PC9O*NC¨< Qղ9T9=}4˜R9 bâ01dQMJ`S%<1֤jլ:#T+$2BF,TA&|oUm9@ѓ"@{bD/` 1ש+1t;$`u"(]QBjM D, :: sMXFmϓ$ !Ndz)+ؐ<{E͂ؖ刉EZX`d֬Z "ۋ4"`Đ8OJqՐ1HqVPXK& jj0 (FTk BsVV []ˉ [ ;YڈU0ۦzKҾ2=&Z n&=Ha uT ̭]t:]P6A QB&i\eA=Z hIxP.! rvj]VU ΁&,]єDJ˝`V5_B3\lвA H@_Yv'nǩa'Z7qI&v}>c#טN.2Z8͔uaـa c-`@ kPʷe=m &uC5m {q =*9 H+GiS_ 0 (*p>U|x 16:~_#ūBݳ{S@c F6&{\.J ,49"Dn%dd(dP~H&b:NTԐ0 jaoT bBب '![P|>gNY+@񟇺f.+)4܋$=n)%`rckǓhNp.w>ơES ֮f< Qy ,IEpJ=hp,Yx; օO1e/TgȓɬEUB\3p& `\1 C=9ܩL"2NqvXjijAG'Xi5{G2A၃ 6k`j^k>R9a^ܰ: 0l+82lplЏ1 e |NӰg08eH29*E+Bf#8 ŶƼ)@ێyT"nn6i- IC8pRln/f]ݮWۋa6.8onnqm.6qojf'=#k!)ẋf(p^5rjB5heCǩš& ^ G2aS'RDnCˍp: r+}q־!%^+#b>$6狍?$V1)Ji{qrЖrOfД4֓-)D]Ąȵ(s/6/)8盫*:r"gMI9P=3N R =O,b?Aȿ]Ns-PcFA92O^RnTV J =9( ))*ˉLI*#)rvV'\8v%JvՑuuh yU:8ljy+ EyO?#xT KP$0yPk ͗#3]ՐKx? O F%IziZHVZºqS*)o8e|kyM`I8|+?^>^}R)q0dRRtvAʿ٧|Ö· X|b:vGW8P9)R9 J}7 R|#upJ륒`񝚦FMLpM4ZuhѣIl UƒH:]2 6TzV$C8}"D($N( ]JXF';4R0F%t \WNX)EΐbYa'̛8'75CUH4INgd]xF!Ty祷0!t 7|-%R~'sН5Y RS!Xg]nĂyw5]XaqxK8H{ʸGKVY,E7cUvQh!iЖ OIF7b5 ',7 xئgr zXe]QGJf1$P*(pHrEV$U#DP}z'BiGlT2jYiZ}\SHc~TdG*A:-Vqj]e ^B*E|GO7f%WłmM'浻kk<: Q܇NJвLj$Wz*BsW!x*\Ja{jjX}jEuFMr!AlTit>MT-2kSu(C Q*]Q]VUN4}>i,W:3qS»ʡpQ_g5DD4C MP[BȃVwiVyk O6E+Jt]UےF$ԭ(v5AVtSMQug4NiR1io_Tz\hh,i/F+Y]M|^H0H~esK6LAC5P06 0`ǰO$IbyJ{9I62#޾0Wh7<z <=1GLU"2JU%#eF(ʂ –,hڙW?LVĒTqu'ZbN(iK4!_!$eE(L(7+KDFObKU:Z'XE* 3B4IJMlʙ9=H0U+ΩN$ÓGzp񤊋P7xj!f=0Eβ͉dYvT.'sWDRFdFul`Dώx,zB(OJ'̐ZDPQDQ}x$&ڕ g7b"҉ J>/[ 6vx,2J7h4##qG]s8XjO.Yvep$l&̜uryY.%d&Oe• -+l{k$"$iy! ExZ#rh~ҝyU`UH+_T, "TYCשּׂ"IR D`6r@riE v%XiZBfl(=୐n3[6Y$.agܠ \~B,42 XZ2҄'#}&`uMEC6ʽi7ߧ#ތ 3[m,]hZ{bzEw}b-\6Zх;1d;if@ڮ`K`<5O8Su_n5vT2FZd.&"\l0)e [ FKӬ"R95PzYI.g3伿;Y•1H % r+3.6øz~$ts}BK(E'A[.0=i{/eY}Y7OD ܧ>`JlO#/{ѳYdC^:{QV'NV%~䰬j1Pv3!MJ ­ko.I t,ۧ-[*oJ[ؘuzTWk,R| ߝT5 qpۂoMP[nE]GըC[2P>j$H0UD}9*=LUThNdgMF 'q8$rJ{>a|F^h C]J]qZny6G^ aЙY$`J`E0 X|EMK_(]EOx`D1 tUA^NaY IJPPeڒ`(bfsH(jTԈi]R*i6}iV'(ϕ]B`a*z4f)`H& ږGT`8f)PlVBL3:_UxzfQRpY,^1YCLB 6Ø-ԠFThIH#\ C*~ҧpGAP@R4F먌h"H0 (̪}0G)ՉJQ4*ikjN`<~A ꭮hMjSNCd gI, ^Zeו}h$(EDԕ$p,Pl9},F]sf$n( Ǣ>`6|1)tP- -U(m1 'щڅ%.NRz-D-%-&.ZTp FY#:G1X,É(2}$NAS/B0/*`Lxd. L( ^, MЋ؆M1fj hٞfd>LJjQ:=8f1=G>?{cDn:kx>B>|D3YtyFnj4@^C ȸ3.XXeCC/>naELUmƄ@kt,4`Ƙۨ> y.`DGPfq L 4Pפ>QbB=$Hk ژ^^uWIj,X 5IYO v`#.u ]WsWo磉 *`㭻]Cu7\iC6EN(Dx]nE},O<f$ZdPH-Ɵ2Μ<Θ߬I$G:ݜ6rמ9>^9D[YTUУ=<Oғh Mԟl8QEKFTdd 7У7ꄣ<c{@uSOFTracMjԬٚ-,ȹ}u67,Z{cv[vIQu!c7~qUs ko_TG>́bn ɱ=V,1,GO>Sʭ˪ǼvJB,ĕR-C^f5d$Nfd'jIf E4o$rK:M&)(Li6h!DoMI|[QH-j3 3Dt IO@)HD.bYC-,"R^uڧbS`5ٙDj?ZUZW%JG9bl[+ \w)!5V2Rj0 5Y= IDblCI44C>+\.3Vi-kI跚q Q+f):CƎĐWK?LVjۿ d頖Ӫ^i&t`' t&+%i$U7-.MǶ@y:XίֲhE2f,ZJIj暟S{ӮтECV:UwhjU^WzOyh;RjDj VQ0Qbu2vY)5+1$F1>aA'bC3g#4!S|b`E-ckjx:B։/\ȩv rn| ?ϐ^TbLlBddwk oOފĹ 2Oizimo QBOyͰx,/L:/)M!vѐ]1uUȥz6+h>ût]b'ꟛcšH$ tw4IW Y!GXmd> HgZV_͟x(4ua Z,ݡ =7f(o;ZRd_50c)q=Dhh5S'OFz25c#nzq1uJ-_/8O-dkP[Bl|/m, Q,۽ ڗԅl=ÁܤَZIJ޶r;r﨩Biz_dټYY~VKN)]a@K0i+_rCymS|G DA^GKx/sʛLC" ekDeh{NjTB(EaS԰s=[2[̧iI,"tBSE[BqsIa8Gs5?{^~z+U4OB2 u3n/)lb9.2 pVЌ&–R,څB^s`M>j{yxiH,ZZмvÞl|EF4LKd[R_]chĤx0Wب6DG|BbCȎqp(D9bIbhX]*Po0q T" w IQ/,$j |(ΒL6 ^mVi`)e䇌d $Sh1,`bD Ldn‚˚p hG*h"Jyzi)BdF˭Dh񺚆l o5gGCĈJlIuFf*^jPMZњjKR!ۚױ~*HGuq;xQ$ gq~Sn:V ;HFk&jo2xd{Ed`AC~|B"2#ityl>2eB[&4JiuϘU2\D*WJxP}'x#YN2"K Z<\FUh +FM,@.@Hώ%xIQ&ȱ^#0.w"֦HR'/^cˎ;0J 86McEJ*̕ga+<b׈ ϺbB\0jV.`k"Z9haOFeň<3i}$xhG`q6BPU)ь5>oV X(0KFgl"z"j7F,EjXal>>zl[-a%&%'pisSs&)sUq喫T7,M*.׮+> X ft5n!DduvA9#sewE )dDw ݬ\AU:Xj%a+H{ICWf#' 򧷦wYBg'wjqb|lfDL}Twlen6>t{7_0Hv|ܩ)d}?8wŴ~{OgM|WF1#^~Xw7m YH瓒IXx.t}m3'a/bC16hy,uc[s"|U VAm>؉a4~*,&yHU&%DW5x06!N1BTF4Nĩ 6xwZL)ԦIR:zVUYj,qzQ2|CwZکnki E!ZǮU{FX)9gj)WȢ0>'Қy 3:`'g2 }lN{n&IɅ}KO.nv5(˵>۪~6~Rnws[y۫[86QlM6 >[ABԄ%yGB)ј&C"5' 0D!%H;-N8,7D#3|Bd ӯ10Bߍ;zp#]*3!Z / gG>#8XrKK=*~g>o^-ד~qAu#2ж\ }DR ȹAHDƻ4_+&_D2XÆk` E" :%ԙXrH Ƈ!3Ҡ&bEB\TZ% DJl ‹ qW_{]H}%YwmA^Dw[~0_Ky|%E}1GH8Jx}dOp("Z)Fy5n-TXVq4e-a}Q~/! QW"ZhIvθ2zF!Ijڌ@4  m!Vx0)v! Ot}$\[CD&B*fu9'gD !WؐQ5gQ&1yעjF%DФle}ȉ^O l[}VjjT`)וmCi~uƆwSd`},VhD-biU JkVGB'IȘ|P " U}G'0rbx h-$L$;2uPfT[g 1 a_jwnd(W4,@(-M֦[.IH2^Txh`$bpQ",j a()%1dRr;|ʈ "$'I]G14N qI1!8SisPFdwZ@Y/\ &WT,$A$'jt*&̲{VSS0BZy92Ma#$ YLQe^2* Trh~Ռ_ ~K+ʻh3L+s1PO DF^X雂 Ě&a.Ws1}#P.@LxNqDFB 5o+B.Jk~$enŎA_yt`4=Ҏ!3U0;M&өk1+O*X0͍R2 & _%_v檓Nd\=A9j2^٤؊CQB%~$\W$He^hЋP:Wf!NĢ&0DsZQNVn9{<}Wҝ)V'"sX mT1I%orP 6rҕ͊}t5C݉XصN] ,cbpBKSS<)u%Omo+5sEw*NEMJ@ }Y\]4a ȝؤ%|;lp:H $ub*֔e48@"E[z5"B $I!t1.JÜ\%1.L$,[AѢ5&oAzDjr-r,.Bwt946~t( 2e|f)VM3*O"(UEq@CLY6" u,SKRNYvfG\ABfD"R*$,(=2!'054%oiP66T(F!/Q/4d%1#QhBB2 ^vjVMhXv 4EB~eEaH`lQTmqvȄ33`e":r-d;$hX%QQa!-;^aGq/egS}p>g$2vT/rDA&9gN%v:obu'FO"" _ԐsQ>͸>UD?x#tcGyIKHK)Ȓ^/;hMuh<9J u`'Fђ/MI~O=Qi%Jb(aJ#ov!!HY/-9 q3=?`f#VnH"r-QF$9i6Q'~1a3peBfhDfFd#/h$%vR,IN?=Vd*L_g#tkL9Kɛr@h,In㡚vntyŜDF4)9 y)D%fq0 `rU1 l8r q& 63<7Kт,,kȚ't֝'RefJo Hl:$:2dvOX6QRjmaA璡",Сţ>:`Xa;vDE'חg 5TQV4;ZJ㥨$j D*Jjʨꨏ *Jj(.$Jjʪꪯ *Jj"ѧ3;[*[)c^a!7dY}yF0_(!'p)`ubD;2_$;֞Z!)z0 ң4, rpa/3uul"S/IHFEyJcZV>ѭe0urcE<:ʮ?ъ뵝Eefyk[P"p&t/HAB3*E9:L[!o2V:ǵUӵ|T&K! 4=L q$El4qoжLl$]q:P,л{NQ!h*&#'˔V)~Y^";Z1aeE۸D k'=:z\ZSAC$ k+J֋#X"GtCE |_鵈E Cc‹10R>g(`(% 4IqrvHF194h-F6< 8!:hD4Z,KC>A }@}`'#RLljARU}!=$5p .Nn~^.nEuqh[U\1]we'A2\H3 <)?hG/{G`#OQ.p"|^>q,6yQxr&4a`kmoq.sNluLkx,pO*'~\T<ȷ`1L_$׻֒٦sM?ǛXXV\q MyHûD lK =)0ɯ j,ФA`L#g@k b!|Iяt سƱ ʧơA܇$KVA;w[Q:t|t^wSj2#ƌ}n >|RTV `5sM $kR>)'جz+.t.(*RI$f2Ã4ɬbn'9~ή 2m#RJ >&  T |& 6**:XpĊb"ErbA,lEdTʮ(i 4(t3,䢚%;MO>$pP4(! 1pcNI-ҧ*$W$I.A94?j4zTU \DgQz5P<+D$/Xp#Q`hHj'b9>XԷ DoA4.φK(jՕ|m 7nbA^eBJrSNy$˖ 7=͝qf"JצZ)3ìAh0PVy$OeKxMAl’$|"avб#IjI ,:)1M^f37 GeQCQDZEJFH;N  ,nnf&"ԩs=a#ʲN>úڼsÐh#!+E+UyT4\,A2rVT&Ӧ԰X%dsV?eќfq0%)2NcrПK?7  NڔPK^ofI? "Li>. #*QK(ƳFS\XJF˖`W#P@#fGRQ/WqTR}][O%,%r啘R#[J^={)v( WĹ=ExQLǛ4lPdO TCPQ̣4mIO&2f i eD%ٗL=zu(z^ (%%D 1Ulꋤ5l52is3ijFڅ*3=aLmaTmHSĴ/)Nn&ՆK'^Ѱcki,Jӕj$G) Â4X r^&!~!2xT艂[ ^ܺ" @r)R. F0mR:8'9M S$l8&VEVl8iWUf$tPf0W"Il3znZUD+J# YCKEk9Mi!Br+)-\"ѝ q>ѢA&'´'B%@1'R*ڙ0{'[fb8 %ƶ_8yQ q|QCfr&߁X~$LrP[AI衤8G DɈHQ#5K> % ,򟌰 (%ɠ@(| =ƲZ\0 š`5Q8. yB?l 0+#!1'3rS= ɠJܠ7Ǹ<`lMi,|B* AJ:6,xMCIE `M"؈c3X/ըѪЩlz 1W#CANrOEq= y;/Q@#/J@-cѧl̶ C⦛B b '2%th4Ԙjb|ʉ܎,C^:=ܜNP7?tX8RTrRԚ%RųbGXqb!J % pUXUXU[}[U]]U_^V^Ub_4=)@1RVS5 Te265M+&+8yM4,™џqǒaWWyuY` bWz5V~cTl,zFɦ# 21yXXXX؉!WIX >Iz_ [X-"4)I ɕXZ-Z}UNe1sK4Nj~jꦞjI8Zjjjkk.kk1 Vfkp븆뵆k뷶kkkkk&kNl^.lnȆlŖʦvlllll"lNm^Vfm׎m؞׮mٶmھmmmmn.>nFnNn^nVڞknnnnnnoo.o>oNo^o~_n~noooooowDO(7p_ponppp p p p p qqq/q'q?OqqqqBqqqq r!r"/r#?r$Or%_r&or'r(r);mtink-1.0.16/html/README0000644000076400001540000002236510376041214012703 0ustar jjfuseMtink is a status monitor for EPSON inkjet printer. Ttink is the console based counterpart. You need a bidirectional connection to the printer port. If you system don't fullfill this requirement only a few functions may be available. This beta version is not completely tested. In order to compile mtink you must make sure that the Motif, openMotif or Lesstif runtime and development package are installed. A gimp plug-ins is also provided (gimp-mtink). Note for users with a lot of printers attached on different ports. ------------------------------------------------------------------ You can use the script mtink.sh in order to call mtink with the right configuration file. See the textes in this file. Note for Linux and USB: ----------------------- Older kernel contain a bug while reading from the USB printer port. In doubt actualize your kernel. Note for FreeBSD: ----------------- I have added /dev/lpt0 ... /dev/lpt3 for FreeBSD. The version I have (4.5) don't support the bidirectional communication with USB-printers. If newer versions support this you may add a device list at the end of the known devices (file cfg1.c) and report the changes. Build mtink: ------------ The Configure script will check for the necessary components and create the Makefile. After you have called Configure simply type make, the binaries will be produced. This work on different Linux distributions and on Solaris. You don't normally need to modify the makefile for these systems. If you have an other OS you may need to modify the Configure script, sources includes and or the makefile. Please send me the modification you have performed. If you don't have gimp installed or any components are not available the plugins will not be produced. Installation: ------------- Type "./Configure" this will produce the makefile. "./Configure" will tell you which options are allowed. After this first step, type "make". As root type "make install" in order to install mtink and the documentation. As normal user type "make install" in order to install the plugins. The mtink program try to read and write from/to the parallel or USB port. If this fail you must set proper rights to the device file or make mtink running as root: - Modify access right to the port: chmod 666 /dev/ - Modify mtink rights: cd / chown root mtink chmod 4755 mtink - Tooltips: The textes are only for the german, french and the english language. If you copy the file Mtink.res to ~/EpsonUtil you can add textes into your language. In this case look for lines containing tooltip: and insert a new line with your language prefix. Example default (english) to german EpsonUtil*mainWindow.ok_PB.tooltip: Abondon the\nStatus Monitor. EpsonUtil.De*mainWindow.ok_PB.tooltip: Status Monitor\nverlassen. -- < language = german (de) If you want to install the plug ins, copy gimp-mtink to $HOME/.gimp*/plug-ins/ If you have installed more version of gimp choose the proper directory (e.g. gimp-1.2 for gimp 1.2). You will find "Epson Status Monitor" under the Xtns menu. Note that mtink must reside in a directory which is included in the PATH variable. Uninstall mtink with "make uninstall". Getting information from printer while printing: ------------------------------------------------ Only one program can open the device file to the printer, further programs which try to do this will not be able to attach it to the device file. In order to allow getting of the ink quantity while printing, I have programmed a little server which must be started at boot time. This server attach it to the printer and offer a named pipe for the print proccess. The communication with mtink and or ttink is then done via shared memory. The server look priodically for new print jobs and if one is found, the print data will be embedded into the EPSON D4 protocol and send to the printer. This allow to ask the printer for it state, it identity and the remaining ink quantity, the print-data and information/control channel are independant. The server can be started via the script etc/mtink which must be copied to /etc/init.d. Links must also be created unter the apropriate rc?.d directories. The daemon has to handle with a port, and the start script must be modified accordingly. The program location for the daemon mtinkd must possibly be adapted. If you want do use this feature with more as one printer, you will habe to install the mtink script under different name so that you are able to start the corresponding daemons. Internationalisation: --------------------- A few language are supported, english, french, german, italian. turkish, bavarian (for the last language see later). Mtink scan the environment for the variables LANG, LC_MESSAGES and LC_ALL. The top widget become a name according to the language found. The first 2 characters are taken, and the first one is converted to the upper case. According to this the default resource for a widget may be: EpsonUtil*ok_PB.labelString: Exit EpsonUtil.De*ok_PB.labelString: Ende The first line is the default (english), te second is the german text. If make you translation, or correct the textes, please send me them. The enclosed file Mtink.res contain the actual resources for mtink, you can use this file for the translation job and send me this file back. If you do so, please insert your name/email adress/URL in the about textes for the language you have translated or corrected. If you need other resources eg. font ypu can create a file EpsonUtil in your home directory and put the modified resource into this file. Don't forget that a resource description must begin with EpsonUtil. Ttink may also be internationalitez. If a file Ttink is found in one of the directory: - $HOME - /usr/lib/ttink - /usr/local/lib/ttink - /opt/mtink/Ttink - . The file will be read and the english textes replaced with the textes found in Ttink. At this time only one the english (default) and german (File Ttink.de provided) are supported. Bavarian language: ------------------ Please start mtink with "LANG=by mtink" Bitte Mtink wie folgt starten: LANG=by mtink Bugs: ----- There may be a lot of bugs, tell me please what for problems you have. I will try to solve them. Todo: ----- Documentation, help textes, more test, test for different printer (I have only one). Printers for which all work : ----------------------------- Stylus Photo 890 my own printer Stylus Photo 1290 This is only a A3 version of the 890. Stylus Color 400 SJK Stylus Color 580 Glen S. 07-APR-2002 Stylus Color 280 ??????? ??-JUN-2002 Stylus Color 600 S.B. 12-DEC-2001 Stylus Color 880 Marc R. 09-DEC-2001 (found on www.Pro-Linux.de) Stylus Color 900 own test 19-DEC-2001 Stylus Color 980 own test 17-DEC-2001 Stylus Photo 700 Arni 10-DEC-2001 (found on www.Pro-Linux.de) Stylus Photo 750 Karlheinz 29-DEC-2001 Stylus Scan 2500 Alberto 16-DEC-2001 (head alignment not tested) Stylus C60 Andre 26-DEC-2001 Stylus Photo 895 SJK 12-MAR-2002 Stylus C80 Ronny 16-APR-2002 Stylus C70 Ronny 05-MAI-2002 Stylus Photo 820 Gene Heskett 25-JUL-2002 Stylus Photo 790 Steven J. M. 27-JUL-2002 Stylus Color 580 Glen Steward Stylus Color C42UX yq DEC-2002 Stylus Color C42US yq DEC-2002 Stylus Color 777 Tosi DEC-2002 Stylus Color 760 Sylvain L. ... Configuration data for unknown printers : ----------------------------------------- Refer to the file under the directory utils mtinkd server: -------------- Mtinkd is a little server which allow to display the remaining ink quantity while printing. Furthermore a problem with the use of usb printers is solved with this server. If more printers are attached to the USB port, the port used will not be every time the same. Mtinkd scan the usb ports and detect which printer are attached. If a printer is found, mtinkd offer a pipe for accessing the printer /var/mtink/. A backend for cups is also provided. for installing an EPSON C60 printer you must issue the following command as root: mtink-installInitScript /etc/init.d/mtink start lpadmin -p C60 -E -v mtink:/C60 Warning: -------- Some printer don't work correctly if there receive code immediatly after powering on. In this case (The LED show that data are expected). Note for Netscape 6.21: ----------------------- The start script /netscape/run-mozilla.sh is wrong, a return value of 0 is always returned (at least for my version). In order to get netscape 6.2 working correctly modify the script as follows: Look for ''$prog ${1+"$@"}'' and add the line ''stat=$?'' after the line you have found. Look for the next ''}'' at the begin of a line and add before this line '' exit $stat'' Note for mtink within a browser: -------------------------------- Mtink contain now a little server wich will allow to see the remaining ink quantity within a browser. In order to install it change to the pyink directory and call "make install" (as root). For more information see the files in this directory. ====================================================================== Please report problems or success to: jj.sarton@t-online.de mtink-1.0.16/html/index.html0000644000076400001540000001151710376041214014015 0ustar jjfuse mtink index

Mtink Index

Language / Sprache

English

top

Francais

top

Deutsch

top

Italiano

top

Magyar

top

mtink-1.0.16/html/TRADUCTION0000644000076400001540000000303510376041214013413 0ustar jjfuseNote pour les traducteurs. Les fichier Ttink.En (anglais) et Ttink.DE (allemand) contiennent les resources pour le programme ttink. Ces fichiers se trouvent sous le rpertoire utils. Le fichier .c de resource peu-t etre gnr facilement aprs la traduction, grace a l'utilitaire bldRes. Si bldRes n'est pas prsent, crez le, avec la commande "cd utils;make bldRes". Crez ensuite le nouveau fichier de resource a l'aide de la commande suivante: bldRes Ttink.en Ttink.de .... | sed 's/\.En\././' > tres.c Si le fichier a t gnr corerctement, remplacez le fichier initial a l'aide de: mv tres.c .. Ceci tant fait, recompilez le programme en tapant: cd ..; make; make install Si vous avez traduit un texte vous pouvez, bien sur, placer vtres nom, adresse couriel et l'URL de vtre site dans le fichier resource. Dans ce cas n'oubliez pas de le faire dans une ligne de commentaire (! nom, ...). Envoyez moi vtre traduction, afin que je puisse l'include dans le paquetage. Les fichiers de resources piur mtink se trieuvent maintenant soud le rpertoire utils. Mtink.gen (resources gnrales, ne sont pas a traduire) Mtink.En (textes anglais, pris par dfaut) Mtink.De (textes allemands) Mtink.Fr (textes franais) Mtink.It (textes iataliens) Mtink.Tr (textes turques) Le fichier .c contenant les resources peit tre crer avec la commande: bldRes Mtink.gen Mtink.En Mtink.De Mtink.Fr Mtink.It Mtink.Tr > resource.c Le fichier resource.c doit tre copi sou le rpertore pre si tout est en ordre. Jean-Jacques Sarton jj.sar ton@t-online.de mtink-1.0.16/html/rdPrtDesc.De.txt0000644000076400001540000001536110376041214015003 0ustar jjfuserdPrtDesc: ---------- Dieses Hilfsprogramm erlaubt es, die Druckerbeschreibungen zu extrahieren und diese in einer menschenlesbare Form zu prsentieren. Wenn Sie Ihre eigene Beschreibungsdaten zur Verfgung stellen, wird die Datei printer.desc von ttink/mtink gelesen und deren Inhalt zur Menge der bekannten Drucker hinzugefgt. Syntax: rdPrtDesc -p|-c -p rdPrtDes: Eine fr Menschen lesbare Version der Druckerdaten fr alle bekannten Drucker erzeugen. -c rdPrtDes: Die Datei printer.desc lesen und die entsprechende .c-Datei erzeugen. Die Datei printer.desc muss im aktuellen Verzeichnis sein. Die Daten fr den bereits bekannten Druckern werden hinzugefgt. Die Ausgabe erfolgt auf das Terminal, kann aber in eine Datei umgeleitet werden. Datei printer.desc: ------------------- Diese Datei beinhaltet Abschnitte, die den einzelnen Drucker beschreiben. Ein Block sieht so aus: .PRINTER .name: Stylus C20SX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: OLD D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .alignFunctionName: - .END Das Wort .PRINTER leitet einen neuen Datensatz ein. Die nachstehenden Wrter bis zum Wort .END sind die eigentliche Beschreibung. Bitte die Zeilen nicht mit dem Zeichen '.' beginnen, denn diese Zeichen bedeutet fr mtink/ttink, dass eine gltige Beschreibungszeile schon vorhanden ist. Zeilen, die nicht mit einem '.' beginnen, werden als Kommentarzeilen interpretiert. Leerzeichen am Beginn einer Zeile werden berlesen, so dass " .xxx" nicht als Kommentar verarbeitet wird. "- .name:" muss die Bezeichnung des Druckers beinhalten, und zwar genau so, wie es der Drucker nach einer Abfrage zurckliefert. ".colorsNb:" gibt an wieviel Farben vorhanden sind. Wrter die mit "Prot:" enden, geben das Protokoll an, das fr die jeweilige Funktion zu verwenden ist. Neuere Druckern beherrschen ein neuen Protokoll (D4) welches es erlaubt, mit dem Drucker ber unabhngige Kanle zu kommunizieren. Dies erlaubt es beispielsweise, die Resttintenmenge abzufragen, obwohl der Drucker noch mit Drucken beschftigt ist. Das D4-Protokoll beinhaltet ebenfalls einen Satz Kommandos, die zum Teil die normalen Kommandos (REMOTE Kommandos) ersetzen knnen. Unglcklicherweise unterscheiden sich die Drucker erheblich bezglich der Menge der implementierten D4-Kommandos. Dementsprechend is es mglich anzugeben, welcher Kommandotyp zu verwenden ist, um die Verwendung des D4-Protokoll (Verwendng mit lteren Druckern) zu unterbinden. Nachstehende Eintrge sind mglich: - OLD Der Drucker untersttzt nicht D4. - OLD D4 Nicht D4-Kommandos verwenden aber in das D4-Protokoll einbetten. - OLD EXD4 Alte Kommandos verwenden und Drucker im Kompatibilittsmodus betreiben (das D4-Protokoll wird abgeschaltet). - D4 Der Drucker kennt D4 Kommandos, das auch verwenden. ".mainProt:" Default Modus festlegen. ".resetProt:" Kommando fr Rcksetzen deklarieren. Manche Drucker besitzen auch eine D4-Version die allerdings nicht zum gewnschten Ergebnis fhrt (Stylus Color 980 oder die Stylus Scan ... Serie). ".alignProt:" Dieses Kommando hat offenbar keine D4 Entsprechung. Das klassische Kommando wird stattdessen immer verwendet. Wrter die mit "Flg" enden, geben an, ob der Drucker eine bestimmte Fhigkeit besitzt. Die zugewiesenen Werte sind True (Wahr) oder False (Falsch). ".stateFlg:" Gibt an, ob der Drucker Zustandsangaben (Druck im Gang,...) zurckgeben kann. ".cleanSeparateFlg:" Einige wenige Drucker erlauben es, die Dsenreinigung geziehlt vorzunehmen (nur Schwarz/nur Farbe). Fr solche Druckern ist "True" anzugeben. ".idFlg:" Der Stylus Scan 2500, und wahrscheinlich auch der Stylus Scan 2000, geben keine Identifizierung zurck. Fr solche Modelle ist "False" anzugeben. ".exchangeFlg:" Wenige Drucker, wie die Stylus Color 480/580, besitzen keine Bedienelemente, so dass das Auswechseln der Tintenpatrone eine Softwarelsung erfordet. In diesem Fall "True" angeben. ".exchangeSeparateFlg:" Beide zuvor genannten Drucker bentigen eine Angabe bezglich der Patronne, die auszuwechseln ist. Den Wert auf "True" setzen. Manche Drucker, wie der Stylus Photo 890, erlauben es, das Auswechseln der Patrone softwaregesteuert vorzunehmen. Wenn Sie wnschen, diese Mglichkeit zu verwenden, modifizieren Sie den Wert fr ".exchangeFlg:" von "False" auf "True". Die mit "Nb:" vesehenen Wrter: ".passesNb:" ".colorPassesNb:" ".colorPassesNb:" ".colorChoicesNb:" beschreiben die Dsen-Ausrichtung. Die beiden ersten Wrter (Schwarz) geben an, wieviele Durchgnge notwendig sind und wieviele Antwortmglichkeiten vorhanden sind. Die zwei nchsten Eintragungen betreffen die Ausrichtung bezglich der Farbdsen. Die mglichen Werte knnen ermittelt werden indem der EPSON-Statusmonitor fr Windows oder Mac OS bemht wird. Wenn eine Ausrichtung der Farbdsen nicht vorhanden ist, muss der Wert fr ".colorChoicesNb" 0 sein. Das letzte Wort ".alignFunctionName" musste wegen dem Stylus Photo 820 eingefhrt werden. Dieser Drucker besitzt keinen internen Code fr das Ausrichten der Kpfe, so dass der Statusmonitor diesen zur Verfgung stellen muss. Ausser fr oben genannte Drucker (Wert = Pattern820) ist ein "-" anzugeben. Achtung: Der von Mtink abgesetze Code beinhaltet Steuersequenzen, die nur vom Stylus Photo 820 verstanden werden. Datei printer.desc installieren: -------------------------------- Ttink/Mtink erwarten die Datei printer.desc in einem der folgenden Ordner: - /usr/lib/mtink - /usr/local/lib/mtink - /opt/mtink Wenn die Datei printer.desc gefunden wurde, werden die brige Ordner nicht mehr untersucht. Wenn Sie die Beschreibung Ihres Druckers ndern mchten, knnen Sie mit "rdPrtDesc" die Daten fr die bekannten Druckern extrahieren und modifizieren. Nachdem diese Datei in eines der oben genannten Verzeichnisse kopiert wurde, werden beim nchsten Aufruf von ttink/mtink den vernderten Daten der Vorrang gegenber den internen Daten gegeben. Daten in einen neuen Drucker in ttink/mtink einbinden: ------------------------------------------------------ Die Datei printer.desc im Verzeichniss .../mtink/utils generieren, dann ergnzen und die c-Datei erzeugen mit: rdPrtDesc -c > ../model.c Die Daten fr die alten und neuen Drucker sind nun in der Datei ../model.c. Nach der Rckkehr zum Hauptverzeichniss "make;make install" aufrufen. mtink-1.0.16/html/align2.gif0000644000076400001540000001010210376041214013650 0ustar jjfuseGIF87aK{}{,K@I8ͻ`(dihzB+ @ tq]߷NpH,ArL(SZ$0 ě-S U ,iovN<__gh`RKjO,.dqÕC~rG`A IFLaNu^u$Ԭ)ښu5..c,s&۞wYe vܗˤiУK>ɸr=Z9,sHë_~GoO߾cR.(}%v7 RW%w Vhpb| x ah"؜!-#I4bmai5#(7X1HZdhdPM`X8DXTwY %b"Iӓj 5rIP$zJRבئV(&F JGw^J\ViioҦfvjgj*~zi,i,rb*Tkf܆+.Q覫+kEU:+'7/)50dʣ _0~{rw݆,$l'<,0,4l83q!Q,"[a:K/-LT/ hpXXЁalh?{@ok1ŔP|߀E#BYPAڔx{c9CxD#y3Kki.>ꠗZnvf,:W7A[UXkvacƷp/oeC=aSgɱ;^[m6a$fYkfԏ/^LV[*c V(ʁLmJ\:d/P1≅)~eB °W. X=a!PahDPKn>p6eV:~I6Rǘ Ur>:ؽnlPXi]혞 Rk0=F>æzuMM)'_LGϼ7yRcFћ=1 7`9gO%wm@bҋ^ );lD q5[W'MoS1L ;]a|6m~jRL?=۟(S|D$~,Q@C}3E~w }QN# 8WR5SPRB%}ARg5X׀OOg.H{On5P;}4p$@(NDHM133GphN'QXSwX|S[[X|iyE8dXyC0jl؆npx|Wqxzч~(|GZXhu&s؈U e9HZ; @XWS AWЉV8X9؊r9Vz59 UXxu8UW8W#Y/٘ 9، 1S895HYX (Wj5XHHwT%H@gY ȇt9aw5$Y&y(*,ْ.0294)I4q+q 0 84Ǔ)GuIsDI t OwVtK9 ͒ Wl/d`<ѕ]y `_0')Zc`dr 5`9uduep a@Of?;v]#*풔+wZ2=`)a9]v9a{q_8&exbFFd^5e)Id9`PG=6f9eQFris7ᜥtATt6LA^]E=#G?絙d)vu^=Dܙ@z9aq=Zq_Dc Qח *[)i^éCj3wڵd @yFu^S㠅Frq=g҉AZCjxE*vGuIuKuM*uOtQjtS*tUsWsYs[Zs]s_rarcZrergqiqkZqm qopqpsJpuowoyzo{Jo}nnznJnnmmjm:m m:wf0eW x62uy檹&Ffƫ櫕&Ff@jsڬ@:t9*ؚ9G"@ຘ*pI7i)J zgJggffjf:f:b*\[ZUTKJ f꺮Zv;npǪ JIKIHH!;H#G%kG';G) G+F-{F/KF1F3E5kE7 E9D;kD=;Djil);$7Pp*EkIN[GߪK@H{Ar8d[f{h.>VGrǵp r;zu5z|۷~~/c{P [~g0{K l7d15ڳ"@@D/@,}\!@!/"<= 7w"4ddEv|Zk@,L@W| Z@ddLLd5@DJdBUJ_J`K#jK e Kq1@4e |0ZL0 :djLM&9N|ZN@dkO| Zd04 G@C8OjverwjritLe exiBFst@i|nZg @fijl |'/hodmVe$/@jj/mtin k/mtinkx.D@e8.jgf'j?,H*\ȰÇ#JHŋ3j܈Ǐ CH`ɓ(S\ɲ˗0cʜI͛8AI@@ J@ɢH*]ʴӧPJJիXj zjO?JٳhӪ]jW_N}۶ݻxKԸ\ LÈ+^̸ǐ#KL˘3k<0Н.AMӨSF-eo=/۸sލRJcJ)pȓ+_8RE%:سk]w#7/-J?]M0ig_tcx\^|6JA蠃 " I7!"h@$wgN}X^ -"*(@J#z/rcPZhTHΨ(8PnWgG^複KNb8fhfY\g]$gإ>gvufPkY垊^{_ZqFkR'6(&N%ꪬ5j`jh}j^ީiꮳ j%,w ٳF+VkJG +k覫+k:)j,) @,W 7élg Clgqk,$RaRl,2(k4l*Ŭ/<:Dmq*L4MG-3=%f\w`-dmhl6'|uHomx|wqO 5Hn'vq1.Wnf;c砇.ۚL訋ꬓڬǮzz;n3^>anϾ.\w(Pb?T EЊRTܨC4.ݓH c YXF7nݪ G цs" hG0r-/ol% y%插q8r텉4&IArF|,6Rr.1FsdILL2x. a3jZswӤ6 Լ93q<#':Κ)za> 5~ (j)Ђ&=B3G*ъ*At48(H5ʒԝ=MLQlk iL9Q#2(MAⓚnK2)PWҘ55*R]jS.JuTR%EQzSnu^iWjҫĪfIVUm)[ִv^֐e_ZՔ{`U 6l=Izص:?UX3؝4fhMњuXdSԲa9}d +̵p6 +Mnh. ΍M+r} Ӱ+ږW(y^ֶ4}i;Z&/bK_7%j~_ N0i|{qZ! _j) 7^  TU\X$/q]a5Nilc6q2bWP& uLtXβ.{`L2hN6y%)MKY\^xγ>]{ @GF;ѐ4B 1AP-%N{Ӡ^41fiY851Xv=K;]1zտ}V'{w%ӝx_]~;{{Nc_/ys#/^yϼ7{DkAԺk?O}M nXս{hϽwO6koXGO[?~ ưO@ew7wѧzHJLg5}RsWuX[ZՅ^([`%stEtť冻}pQsPu8MwPyxP{؀E8{jwm'ov`tuƆh舍xvDh:'uhGRhH1x7Gxd}wwxxxHf7^TH78ZxȘʈy}UwgM8X.VhηPxm8Xx蘎긎؎옃ܷ_zxg؏bt~S؍ ِ ~y|O5MƑ$Y&9y011֒*2<4SϸYדH #9JRL RNwZb摗;Xb9dY~xh\¸ՖnWpi5tyUvyCzRfs4ӳt?(9s@^Oى(]XyF(/i9隧 鋝ȋxȋhxYxYi|ٗ#՜ΙQȕYy7gZhYvwTk 깞ٞ9YyYEMfqhZz ʟ}Vyg :Zz9٘ɍi":$ O2knZ.0'OMUV-:<3O5ڋ3٣Fz1DrV^>U>TZ!6Vڥ^ZXZOZZYfzh٦no+qt:yvzzZ\٧ zQ|:Ytr B^ yׇee*٩I2:٨ig.ᙰZxʩI9ř8ʊͺ \z5gڭeڙjl 誄XmɁ:Zzگ䟥V* ۰+NRCS۱ Z딢79aj ),.Jd|,k0:++VDʱ<[F{z"HRJ+NL 7^"[4`{hb Nd[5=pZszxGF~O4kO{򔸊 O۸촩em(IŹd9˷h-뫬ʺʜثk*ۺ+ k*Ky 묤۶ŭq[{_ǝiegeiZѧۿ<\| k;ءh \| ) ^w$\&|(/kˁ)2<4,ܴZ5@쪀 ƀ˨+LN„ŴfO|X 7lAIGIʮN%T}S年J,cmYa̘}YYCYec1YUE|Y ͐iWǖs<ƾLZaL pXw,,|#,LTOj<Є]P<4ёN"[]D(O'ۤ.00 Nw+9; 7}̃,mB D2F2fLE Q&SSYGdT]2VԾ<=]R]g_M2aX]R:bpFt+ri/w. @Cjik5lu(҃FxqٗYzf؍]:ա ̗TٚWԆնע=ţهڊw6ČKw7)g5IS wFܧXX d ڸݨ^-ۧڏ֛yǭݦN*=[ۍˢ-mz}:lU j4$Œ-El'ݭ/>݈ks=kMw p">t%^͍u<*c ٫mSYq ~L=Om2;]\nZ0e_~4gak:mpq^XM`}儝x~s>}o2Q懾11eJ _NC]מՔ^;㘞 NncWڲܢC~䧾ݯ}_=oM^a]Mߠ.^$nӞM>&U׍N˾.Ncm}؛ۇdHn^.,MiuB>U}.d^_=^^K}m/ 1?8@#o!8/(I_6Nܾ1^%iaV NEߒNQ l)o{v.Yx[ͅ/O>o7eݎo֑?^O}臏1n?қ\/68 < >>O4ӶȜ/\-oNTawO??oOğ/_D[E*Q?/馟(/q@ A6tQD-^Ę!A5~RƌGDyE)]rBٲ%L N4 脚5$ӉN~UW`F$[VT bPТJهI".6?UnRT.Qe߸#5zo鯡{N6lf̑\v^ۊƍXw 'Zuꈼ"r՜9N=?([Un N|{QS|}~KT-?vso*;ȭrnl>pBgȯ ۳;L AL F$ɲ0_o= )|Gvđ;HsH.Cv\PE0 sJ= ,< ?LDH'OLaIƷhyԱE\o2L:L>tIБ\ENAt,JrL$u8rNk9|B|ԐXDQ?Qӌ+qԴVbקdI5R]YXgc vZjvUekrfVw$r\tRoZX"Z|ּw ynT_c2`vW8b'b/8c!.ic?9d;dO eWθe-U8fg^fwŬdg&hhfizڧ͉ek;l&{d  f{jGB'离&;ooxᇗDG>ygy矇>z駧z>{;mtink-1.0.16/html/align2.De.gif0000644000076400001540000001122110376041214014202 0ustar jjfuseGIF87aADAZZ@@ddde .$@@D/@}\!@>/"D/@<࿿E"wddEv|DZk@,L@W|Z@Ld5| dZBd\T |q1#ԩ4e |ZA :dje L &9|Zdk@@||ZZdd0d4 G@88 jjLhF|jd|LȣEV$@@d \ݠWEx@@8pjkj,H*\ȰÇ#JHŋ3j܈ЀǏ C8`ɓ(S\ɲ˗0cʜI͛8A9@@ J@ɢH*]ʴӧPJJիXj zjO?JٳhӪ]jW_N}۶ݻxKԸ\LÈ+^̸ǐ#KL˘3k<0Н.AMӨSF-eo=/۸sލRJcJ)pȓ+_8RE%:سk]w#7/-?]M ig_tcx\^|6JA蠃 " I7!"H@$wgN}X^ -"*(@J#z/rcPZhTHΨ(8PnWgG^複KNb8fhfY\g]$gإ>gvufPkY垊^{_ZqFkR'6(&N%ꪬ5j`jh}j^ީiꮳ j%,w ٳF+VkJG+k覫+k:)xj,) @,W 7élg Clgqk,$RaRl,2(k4l*Ŭ/<:Dmq*L4MG-3=%f\w`-dmhl6'|uHomx|wqO 5Hn'vq1.Wnf;c砇.ۚL訋ꬓڬǮzz;n#^>anϾ.\w(Pb?T EЊRTܨC4.ݓH c YXF7nݪ G цs" hG0r-/ol% y%插q8r텉4&IArF|,6Rr.1FsdILL2x. a3 jZswӤ6 Լ93q<#':Κ)za4G~ @Z MA{8@D'JъZͨF7юz HGJR#(JUz> vϚڔ%8GR}(]7=Л"ɩ\,EETTԪ@ݩPAթz՞UJCrՠDW ϰ3+LMt+OGշn$vū`󭆝k:V=IbPVuͬJ h6%lKB|V$'%Ŷu&u-`3LSZW~ deښ$}-rƹ-fO]=Pg*]zw >Y ζ IyKT5imԚVp[mW]+o_3&u'Urշǫ\w$qlb鞸̝/gen lX:>0\x3}b"8&=b*Qlj`?9KFJo߼>eۓ E+w6Y‡.kgXyb,Wro^Zl;/{›^K >SVe$4FIqh/9759}+ͷ>p;;`>]W֔g]]OyF2;cLےLݵfqkv]j8o~-leL#7~lˆ8QMmߚu#et+NbGS:ᭆ, hmĎ]Mud5ksV;A&:St2N։Vuڡ8ߺo^]a]VC5yE\o|xHtupݲ8,j#'| mg}uMhK^?L]xt?ÀM{`ckݟ7'/ܚN|ܑYػwիۛwvϓ/vǴyԿakjwě_NDM?mXֵ~~g /t؀axm xsX-h$sHs%.!}ǂ0.~1X&1 h:8;=X?ACH't)(GEX~MXO}QSxyUHWY؀[({](_VKFH 8jfhuhml8Xv(ou`񇇀h8X鷈H}yXwwj׉|{{}؁8nw}XȄ(y8w Th؊8v5(~X#x\ȌeUX՗7(/荠GiHDwhS؎XO8TN봏W|W8TX਄H UT)5YMs4FӑuɊ8䷋&I(r0ɒ Y`%ܨ1ypؐ9DY3Fy/J2Lٔ+PY2R9#SV2X\1^b0dY sh0jȓ~Ԗr0tYrx/zї~Iupi4IwȘ" |q E(Hə?i) 鐫Iv9i39->h4Sٛ)y9#QșzȜWy8ԩIٹ1 ɜᙜi9 ٛ멛i9Y)əi ʘZ Z*Z*ʕ!#j%:' )ڔ+-z/J135Z7 9;j=?ACEZG*IKMjO:QSʏUWjY:[ ]ڎ_aJcegZi*kʌmzoJqsʋujw:y{}ꉁZ*ʈj: j:چJڅZڄ5Qɝݙ1ae9{R&* SXJSXRȪ0Wv3ʖ2WU9ź*EV}ຬa?%yRTj=fSJv/;[{/ZIP;K׫JB3Ċ363$K3t?]oUR.02;4[6{,{<۳>@B;ޢ>H 4 -cNk2P$3T+2V{2J^+.64zNX0Mdgi[bkmKonj붻Ru s~/eP]$VfF`1~/XnfdJkal|xjkˢzj9. E'cxVl*k|m1V~{OFqyz0U2 21:J1a<0> RkyZ[2[ s0껾Ӿ1[[{+RB1+qVs)rlQ  La||)n! "<$l{(*,;mtink-1.0.16/html/ADD_NEW_PRINTER.html0000644000076400001540000002101010376041214015177 0ustar jjfuse how_to_add_a_printer

Adding a new printer

The file printer.desc.bldin which must reside under the directory /usr/lib/xw, /usr/local/lib/xw or /opt/mtink describe the printer capabilities. This file can be used as template for creating the description file printer.desc which will be read by the status monitors mtink and ttink.

If the printer.desc file is found, the remaining directories are not scanned.
The scan order is /usr/lib/mtink /usr/local/lib/mtink, /opt/mtink
The description find into the printer.desc file prevail.

FILE printer.desc:

This file contain blocks which describe the printer capability.

A block look like this:

.PRINTER
   .name:                Stylus C20SX
   .colorsNb:            4
   .mainProt:            D4
   .stateFlg:            True
   .exchangeFlg:         False
   .exchangeSeparateFlg: False
   .cleanSeparateFlg:    True
   .resetProt:           D4
   .alignProt:           OLD D4
   .idFlg:               True
   .passesNb:            3
   .choicesNb:           15
   .colorPassesNb:       2
   .colorChoicesNb:      9
   .alignFunctionName:   -
.END

.PRINTER declare that a new description begins. The following words up to the .END word, but not including it, describe the capabilities for the printer.
Please don't begin a line with a dot '.', this character tell the ttink/mtink as well as the help program rdPrtDesc that a description line begins.
.name: must contain the name of the printer as returned by the printer name query.
.colorsNb: tell ttink/mtink how many inks are used.
The designer ending with Prot: tell the programs which protocol is to be used.
Newer printers know a new protocol which is named the D4 protocol. This new protocol allows to communicate with the printer via independant c This allows for example to query the remaining ink quantity or the printer status while printing.
The D4 protocol includes also a set of commands, so that most of the old commands has a replacement. Unfortunately not all printers offer the full set of D4 commands.
Due to this, and also for compatibility to drivers which don't know the D4 protocol, it is possible to tell the printer that the D4 protocol must be disabled.
According to this the following combinations values are possible:
OLD The printer don't know anythings about D4.
OLD D4 Use non D4 command, but send this via the D4 protocol.
OLD EXD4 Use the normal commands and set the printer into the compatibility mode.
D4 The printer know a special D4 command, use this.
.mainProt: declare the default mode.
.resetProt: declare the protocol type top use for the reset command. D4 printers may all know this command but not perform the operation as needed (e.g. Stylus Color 980 or the Stylus Scan ...).
.alignProt: This command seem not to have a D4 counterpart and the classic command will alltime be used. Here you may declare only D4 (OLD is implied).
Words ending with Flg: tell if the printer has a particular capability. The assigned value may be True or False.
.stateFlg: Tell if the printer is able to return if it is busy, working,...
.cleanSeparateFlg A few printers allow to clean separately the nozzle. For those printers declare True.
.idFlg: The Stylus Scan 2500 and probably the Stylus Scan 2000 don't return an identification. For such model this flag must be set to False.
.exchangeFlg: A few printers (Stylus Color 480/580) don't allows to do this via button on the printer.This must be done by software. For such printers set the value to True.
.exchangeSeparateFlg: Both above mentionned printers need a selection of the cartridge which is to be exchanged. Set the value to True.
The remaining designer ending with Nb:
.passesNb:
.ChoicesNb:
.colorPassesNb:
.colorChoicesNb:
are for the aligment procedure. The first two entries tell how many passes are needed, and how many choices are allowed. These values can be seen from the windows or Mac OS driver delivered by EPSON. If the printer don't allow an adjustement for the color head, set the value for .colorChoicesNb to 0.
.alignFunctionName was introduced specially for the Stylus Photo 820. This printer don't have a buildin code which print the desired pattern. The pattern must be supplied by ttink/mtink. For the Stylus Photo 820, enter Pattern820, for others set the value to "- ".

The following apply only for the source distribution:

Installing a printer.desc file

If you want to modify the description for one of the given printers, extract the data with rdPrtDesc and modify the value for the wanted file, then copy the resulting printer.desc file to one of the above mentioned directory.

Compiling a new printer into ttink/mtink:

Generate your printer.desc file under the directory .../mtink/utils and call

rdPrtDesc -c > ../mainSrc/model.c

The file for actual printers and the new one is then automatically generated.
 
return then to the mtink directory and call make and make install.
mtink-1.0.16/html/Building_RPM_packages.Hu.html0000644000076400001540000000534210376041214017371 0ustar jjfuse Build RPM packages

RPM csomagok felépítése

Készíthet RPM fájlt a make fájl használatával.

Elször ellenrizze, hogy a Makefile megfelel a rendszeréhez. Hívja például: ./Configure -p /usr.

Ezután a lépés után szerkesztheti az rpm spec.ORG fájlt[fájlokat], és adja a %changelog tetejéhez a verziót és miért szerkesztette az RPM csomagot.

A következ lépés a spec fájlok újraszerkesztésében áll: :make spec .

Az utolsó lépés fogja megalkotni az RPM csomagot. Ennél a szakasznál két választása van:

  • hozzon létre önálló RPM csomagokat

  • alkosson egy RPM csomagot, tartalmazva minden összetevt

Az RPM fájlok az els verzióhoz a make rpm-all meghívása által kreálódnak. A következ fájlok jönnek létre:

  • mtink-all-<version>.<plattform>.rpm

  • mtink-all-<version>.src.rpm


A make rpm meghívása fogja megalkotni ezeket a fájlokat:

  • mtink-<version>.<plattform>.rpm
    Ez a fájl tartalmazza az mtink és ttink állapotmonitort.

  • mtink-gimp-plugin-<version>.<plattform>.rpm
    A gimp pluging, ha alkalmazható.

  • mtink-mtinkd-<version>.<plattform>.rpm
    Az mtinkd démon.

  • mtink-<version>.src.rpm


Az rpm fájl szokásos helye a /usr/src/*/RPMS/<plattform> és /usr/src/*/SRPMS alatt van.
Ha saját helye van, helyezze oda azokat.

A csomag megfelel futásához, végezze a munkát root-ként.

mtink-1.0.16/html/UJ_NYOMTATO_HOZZAADASA.html0000644000076400001540000002537410376041214016271 0ustar jjfuse how_to_add_a_printer

Egy új nyomtató hozzáadása

A printer.desc.bldin fájl, aminek kötelezen a /usr/lib/xw, /usr/local/lib/xw vagy /opt/mtink könyvtár alatt kell tartózkodnia, írja le a nyomtató képességeit. Ezt a fájlt sablonként tudja használni a printer.desc leíró fájl kreálásához, amelyik az mtink és ttink állapotmonitor által fog beolvasódni.

Ha a printer.desc fájlt megtalálta, a maradék könyvtárak nincsenek tovább kutatva.
A kutatás rendje /usr/lib/mtink /usr/local/lib/mtink, /opt/mtink
A leírás felismerés a printer.desc fájlban érvényesül.

printer.desc fájl:

Ez a fájl blokkokat tartalmaz, amelyek leírják a nyomtató képességeit.

Egy blokk úgy néz ki, mint ez:

.PRINTER
   .name:                Stylus C20SX
   .colorsNb:            4
   .mainProt:            D4
   .stateFlg:            True
   .exchangeFlg:         False
   .exchangeSeparateFlg: False
   .cleanSeparateFlg:    True
   .resetProt:           D4
   .alignProt:           OLD D4
   .idFlg:               True
   .passesNb:            3
   .choicesNb:           15
   .colorPassesNb:       2
   .colorChoicesNb:      9
   .alignFunctionName:   -
.END


.PRINTER

Meghatározza, hogy egy új nyomtató leírás következik. A következ szavak az .END szóig, de nem tartalmazva azt leírják a nyomtató tulajdonságait.

Kérem ne kezdjen sort ponttal '.', ez a karakter jelzi az ttink/mtink valamint a rdPrtDesc segítség program részére, hogy egy leíró sor következik.

.name:

A nyomtató nevét kell tartalmazni, ahogy visszakapta a nyomtató név kérésnél.

.colorsNb:

Jelzi a ttink/mtink részére, hogy hányféle tinta van használva.

A végén Prot-tal szerkesztve: jelzi a programoknak melyik protokoll van használva.

Újabb nyomtatók ismernek egy új protokollt, amit D4 protokollnak neveznek. Ez az új protokoll engedi a kommunikációt a nyomtatóval független csatornákon. Ez teszi lehetvé például a maradvány tinta mennyiségének, vagy a nyomtató állapotának lekérdezését, amikor az nyomtat.
A D4 protokoll szintén tartalmaz egy parancskészletet, úgy hogy a legtöbb régi parancs ki lett cserélve. Sajnos nem minden nyomtató kínálja a D4 parancsok teljes készletét.
Ennek kööszönheten és a kompatibilitásnak a meghajtókhoz, amelyek nem ismreik a D4 protokollt, a legjobb jelezni a nyomtatónak, hog a D4 protokoll nincs engedélyezve.
Ennek megfelelen a következ kombinációs értékek lehetségesek:

OLD

A nyomtató nem tud semmit a D4-rl.

OLD D4

Nem D4 parancsot használ, de ezt a D4 protokollon át küldi.

OLD EXD4

Használjon szabályos parancsokat és állítsa a nyomtatót a kompatibilis módba.

D4

A nyomtató ismeri a speciális D4 parancsot, használja ezt.

.mainProt:

Az alapértelmezett mód meghatározása.

.resetProt:

A protokoll típus megatározása a reset parancs legjobb használatához. D4 nyomtatók mind ismerhetik ezt a parancsot, de nem hajtják végre a mveletet megfelelen (például: Stylus Color 980 vagy a Stylus Scan ...).

.alignProt:

Ez a parancs látszik, hogy nem egy D4 másolat és mindig a klasszikus parancs lesz használatban. Itt csak D4-et (OLD beleértve) lehet meghatároznia.

Szavak Flg végzdéssel: jelzi, ha a nyomtató egyéni tulajdonságú. A kijelölt érték lehet True vagy False.

.stateFlg:

Jelzi, ha a nyomtató képes a visszaadásra, ha az foglalt, nyomtat,...

.cleanSeparateFlg

Néhány nyomtató külön-külön engedi a fejek tisztítását. Ezen nyomtatók meghatározása True.

.idFlg:

A Stylus Scan 2500 és valószínleg a Stylus Scan 2000 nem ad vissza azonosítást.Az ilyen modellhez ennek a jelzbitnek a beállítása False.

.exchangeFlg:

Néhány nyomtatón (Stylus Color 480/580) nem alkalmaztak kezelgombokat. Ezek mködéséhez szoftver szükséges. Az ilyen nyomtatók beállítási értéke True.

.exchangeSeparateFlg:

Az elbb említett két nyomtató tintapatron kiválasztást igényel annak cseréjénél. Az érték beállítása True.

A maradék Nb végzdéssel szerkesztve:

.passesNb:
.ChoicesNb:
.colorPassesNb:
.colorChoicesNb:

A fejigazítás folyamatához. Az els két bejegyzés jelzi, hogy mennyi engedélyre van szükség, és hogy hányféle választás van engedve. Ezek az értékek az EPSON által nyújtott Windows vagy Mac OS meghajtókban láthatók. Ha a nyomtató nem enged egy beállítást a színes fejhez, állítsa a .colorChoicesNb értékét 0-ra.

.alignFunctionName

Speciálisan a Stylus Photo 820 miatt került bevezetésre. Ez a nyomtató nem kapott egy szerkezeti kódot, amelyik nyomtat egy mintát. A minta szükséges a ttink/mtink számára. A Stylus Photo 820-hoz írja be Pattern820, a többi érték beállítása "- ".


A következt csak a forrás összeállításhoz alkalmazza:

Egy printer.desc fájl telepítése

Ha módosítani akarja egy adott nyomtató leírását ,vegye ki az adatot rdPrtDesc-vel és módosítsa az értéket a keresett fájlhoz, azután másolja az eredmény printer.desc fájlt egy fent említett könyvtárhoz.

Egy új nyomtató beszerkesztése a ttink/mtink-be:

Generálja a saját printer.desc fájlt az .../mtink/utils könyvtár alatt és hívja a

rdPrtDesc -c > ../mainSrc/model.c-t

A fájl a jelenlegi nyomtatókhoz és az újhoz ekkor automatikusan generálódik.
 
Ekkor térjen vissza az mtink könyvtárhoz és hívja a make-t és a make install-t.

mtink-1.0.16/html/mtink-chooser.De.gif0000644000076400001540000000500610376041214015614 0ustar jjfuseGIF87ajmj,@0I8]|`ij%tm %pXd5"' bBS4T,qL.8m`*~$uxsv|}{~yzVď! z0_AsjCH=HhE$fxcǏ99#I"KSɗ0cdi]0]\qϟ@  f@F-UٳTTZ]5 <`Sn%Jv&Ć ]˶۷m>kݻx=[) .È#+lPB fI>T@hZZ&e=&9e˟"eF VέS6]cs݇ Nȓ+_μУvسkΝ\1o|0r&̋{9 pw{YJ9)y x1\w( 68tF(!tVh!}ۆvʬHg0%$J|x2"dkȂd;"bl*?ƌu䒋[;#e6LM @ )\ԽȎ[jl7dvGLK`uRWYgGS]^8 !YeW?)C9Z衘Ngc8}~(ORU*U>Yҥjh?m$+[.*ͅ+kuL6%Hd`=e2L.2&羂,2.az뇼G{bd,l' 7E,W\wuP`krzT[>5أ TRJQro׽Y/~jٕ@ 0)B%i}JE@0P l`PȨ ɄwHSA5%*`\h( JfIT)"4Px R UB9"PDE FH$MHF 'c<טC.l/91B4" Iȅn Ha,ZFIeL2qo"Uf\݈pIRR4<(խ w %m>ICT2<-Cee#IE|hoL2iG Ќ4Icō̦6C6+v6pS9 $P<Рw*ȞJʲ5j9ޒSxM=C O~?. O۾}'(d怫YH>΂hl"JWp6-f:J%R?Gj Y#Ҟ4lErj)=_ R*HCwRRL*ES6-'m`zӪTh59sk)FWӘ$2) tvd'K%r0Nچ @+a5-jS+ղֳD^Gm-d[s3kţ]IuDҜlr1$u]p;vtM,k9nnI˭yqIZL6Fn^0W/\G—ZmVw_+>00`F2D^!'L [Sg{ a~PyƉU%C|^qJ[ w}i{ҟ[lM5F8R<𝯀U1wlc#}GF <"[Y1 WI9TV2@de6%yKrLlSwHÜ8QIO'9! Yη ,zRFGk /@U EHt% DGƊ 7Pmچ.4W-p1}hS uQFOJAI}kJROUUMßqAQYuXCB_ك` aM/'H8f{۽ƴkrW s4Go19W^#8aNsD·#yӄ0l,`>CRe;C8G+uKӓɭנ$Z9Ref v]/aȎ7m/_c]HQ;D5Dн++F{=;PҾayxtG٣~^k7]际y 쓶7u'ƻ:!!fuO[H;mtink-1.0.16/html/AJOUT_IMPRIMANTE.html0000644000076400001540000002313710376041214015316 0ustar jjfuse ajout_imprimante

Ajout d'une imprimante

Le fichier printer.desc.bldin qui se trouve sous le repertoire /usr/lib/mtink ou /usr/local/lib/mtink decrit les imprimantes integrée dans les moniteurs mtink et ttink.
Ce fichier peut etre utilisé pour gén érer un fichier printer.desc qui contiendra les charactéristiques de la nouvelle imprimante.

Fchier printer.desc:

Ce fichier contient des blocs décrivant les différentes imprimantes.

Chaque bloc se presente de la façon suivante:

.PRINTER
   .name:                Stylus C20SX
   .colorsNb:            4
   .mainProt:            D4
   .stateFlg:            True
   .exchangeFlg:         False
   .exchangeSeparateFlg: False
   .cleanSeparateFlg:    True
   .resetProt:           D4
   .alignProt:           OLD D4
   .idFlg:               True
   .passesNb:            3
   .choicesNb:           15
   .colorPassesNb:       2
   .colorChoicesNb:      9
   .alignFunctionName:   -
.END

.PRINTER Le mot clef ".PRINTER" déclare le début d'un bloc descriptif. Chaque bloc est términé pas le mot clef .END.
Les mots clef entre .PRINTER et .END correspondent à des charactéristiques particulières et sont suivis d'un argument.
Prière de noter que le charactère '.' a une signification particulière lors ce qu'il se trouve en début de ligne ou s´il n'est précédé que de charactères blancs ou des tabulateurs.
.name: Le nom de l'imprimante, tel qu'il est retournu lors d'une interrogation de l'imprimante doit suivre le mot clef .name:.
.colorsNb informe ttink/mtink du nombre de couleurs utilisées.
Les mots clef se terminant avec Prot: désigne quel protocol est utilisé pour la fonction donnée.
Les nouvelles imprimantes peuvent, grace au protocol D4, informer l'utilisateur quand à la quantité d'encre résiduelle et a l'état de fonctionemen de l'imprimante (impression en cour,...). Le protocol D4 utilise pour ceci des canaux indépendants.
Le protocol D4 définit également un certain nombre de commandes faisant double emploi avec des commandes existantes et permettant parfois une meilleure fontionalité. Malheureusement, l'implémentation varie selon les modelles.
Pour cette raison et de plus pou assuré le fonctionnement avec les imprimantes ne connaissant pas ce proptocol, il est possible de paramètrer différent mode:
OLD L'imprimante n'utilise pas le mode D4.
OLD D4 Utilisation d'une commande ancienne imbriquée dans le protocol D4.
OLD EXD4 L'imprimante connait le mode D4 mais l'imprimante doit être mise en mode de compatibilité.
D4 L'imprimante connait une commande speciale D4, celle ci est utilisée.
.mainProt: déclaration du mode par defaut.
.resetProt: déclaration du protocol pour la commande de remise à zéro. Certaine imprimante D4 connaisent cette commande mais les résultats ne sont pasomptés ( Stylus Color 980 et Stylus Scan ...).
.alignProt: Cette commande (alignement des têtes) n'est pas accessible directement par le protocol D4. Il est necessaire de declarer aux moins OLD. Suivamt la catégorie de l'imprimante il faut éventuellement ajouter EXD4 ou D4.
Les mots clef se terminant par Flg: (pour drapeau) sont a suivre par les mots False (faut) ou True (vrai) en fonction des possinilités de l'imprimante.
.stateFlg: indique si l'imprimante peu retourner des informations concernant sont état (imprime, erreur, ...).
.cleanSeparateFlg: un faible nombre d'imprimante permettent le nettoyage des buses de façon selective. Dans ce cas déclarer True.
.idFlg: La Stylus Scan 2500 and probablement laStylus Scan 2000 ne retournent pas la chaine d'identification. Mettre le drapeau sur false pour ce matériel.
.exchangeFlg: Un certain nombre d'imprimantes (Stylus Color 480/580) ne posséde pas de possoir permettant l'enclenchement du processus d'échange des cartouches d'encre. Une solution logicielle est neccesaire pour celle ci (valeur True).
.exchangeSeparateFlg: Les 2 imprimantes suscitée nécessite l'envoi de commandes pour les 2 types de cartouche d'encre. La valeur dot être True.
Certaines imprimantes sont pourvuent d'un poussoir pour le changement des carouches et accepte cependant une commande à partir du logiciel. Si vous désirez avoir cette possibilité, placer la valeur True pour le mot clef .exchangeFlg:.
Les mot clef se terminants par Nb: concernent l'alignement des têtes.
".passesNb:
.ChoicesNb:
.colorPassesNb:
.colorChoicesNb:
Les 2 premiers mots clef précide le nombre de passes et de choix pour l'alignement standard. Les 2 mots clef suivant permettent de noter les paramètres pour l'alignement des têtes couleur. Si cette possibilité n'existe pas il est neccessaire d'affecter 0 à .colorPassesNb:
.alignFunctionName ce mot clef a été introduit en raison du manque de la fonction d'impression des lignes d'ajustement pour la Stylus Photo 820. La valeur est normalement -, pour la Stylus Photo 820 il faut inscrire Pattern820.

Installation du fichier printer.desc

Ttink/Mtink recherchent le fichier printer.desc dans les répertoires suivants:
/usr/lib/mtink
/usr/local/lib/mtink
Si le fichier est trouvé, celui ci est lut et la recherche est abondonnée. Si vous direz modifier la description de vôtre imprimante, vous pouvez extraire les information a l'aide de l'utilitaire rdPrtDesc et effectuer les changements souhaités. Après cette operation il suffit de copier le fichier sous un des répertoires cités plus haut.

Installer une nouvelle imprimante dans ttink/mtink

générez le fichier printer.desc dans le répertoires .../mtink/utils et executez la commande rdPrtDesc -c > ../model.c Le fichier model.c contient les données de la nouvelle imprimante ainsi que les modelles déja connus Avec "make; make install" vous pouvez compiler et installer les programmes. mtink-1.0.16/html/align3.De.gif0000644000076400001540000001772010376041214014215 0ustar jjfuseGIF87aADAZZ@@ddde .$@@D/@}\!@>/"D/@<࿿E"wddEv|DZk@,L@W|Z@Ld5| dZBd\T |q1#ԩ4e |Z4 :dje L &9|Zdk@@||ZZdd0d4 G@88 jjLhF|jd|LȣEV$@@d \ݠWEx@@8pjkj,H*\ȰÇ#JHŋ3j܈ЀǏ C8`ɓ(S\ɲ˗0cʜI͛8A9@@ J@ɢH*]ʴӧPJJիXj zjO?JٳhӪ]jW_N}۶ݻxKԸ\LÈ+^̸ǐ#KL˘3k<0Н.AMӨSF-eo=/۸sލRJcJ)pȓ+_8RE%:سk]w#7/-?]M ig_tcx\^|6JA蠃 " I7!"H@$wgN}X^ -"*(@J#z/rcPZhTHΨ(8PnWgG^複KNb8fhfY\g]$gإ>gvufPkY垊^{_ZqFkR'6(&N%ꪬ5j`jh}j^ީiꮳ j%,w ٳF+VkJG+k覫+k:)xj,) @,W 7élg Clgqk,$RaRl,2(k4l*Ŭ/<:Dmq*L4MG-3=%f\w`-dmhl6'|uHomx|wqO 5Hn'vq1.Wnf;c砇.ۚL訋ꬓڬǮzz;n#^>anϾ.\w(Pb?T EЊRTܨC4.ݓH c YXF7nݪ G цs" hG0r-/ol% y%插q8r텉4&IArF|,6Rr.1FsdILL2x. a3 jZswӤ6 Լ93q<#':Κ)za> 5~ (j)Ђ&=B3GɑZͨF7юVD}HG^> JWҖ0LgJӚ8ͩNwӞT` @TF5~iJ<@P'} UIU}HHUj8hmWU&UYJעD I[K6zdu lj̰d_*ތW['W2ֱud Сfͬh[ٓp6 HkC2ۓv%mLf[¶ "ܔ4}D?6I;Rw&׍nK+ݕH]wJK{RVfpTNxW+ށw50;_ݖ a ·>mw2,RW|Zׯ/o+ҕ) ` :1k\ H5\a77@1zl$g0IPN, >pCV3ߜ yOγf.~}ޓ$$`Ral8:ߞN;b+xыs'!ͫ[YۙG$dF)t۬eEyΛ. j:N]iywu|K'Ʉ3_.sl]jgnnXۚ{y{RscmCǾobnY=D>8{ r[Fyǣ,akz3>hc\Lvkr7$ ?˪* }h҅:?c]pWƺ6۽aV~]k{u<~Xy_G4t;ڷkʖ{ oxD^ghvJ{Z_Uix[\רM\%"w} s6+opKs~<İ?9^ps?~\w~a/iHV -YLؓfkhnB]2 ɓ^؀[yl* ׿u8 Ժڪ򌪰}٢Mpm5r;=5]h\yJcDܸ-#(RӲFX]ځiO}N<-Q]Q%EPumM׹-ݡ~ ~PjuK,LPF N4">?S&>X)O( 4N36~㚵j )F.DnI2E1.}VT[]_MH>Sfaްi4h-tXNw4o瀾v>]戞ut5\b+|*tcL>#螮e-,>Uzߨ>4*&Y.ٯ3*vX^VWN^3*VW5=1Eo:<4&{SK@ȣq u ٍ^_}xɋi/=q/XxfA\{/61_zoW~6])$U(C0J*7 %0 N9S.69`BM3,4s FԈKr'9y/YrTeExSZpe-(9Tl.YH,l e2}0o{f`GleA%Ӯ W޼":Ypm3xoe.YN|zd'@JMs&?)PM%N*W9M6k0QlD:R$EiJCԥ1Ke:S%7?mS-iPGEjRT6թHQ7UVժWjVEup#jXլg]IV5mXWtuMWt})W 9G[h%]Wؖ>="c)R˲!K;ISQ\lՎ6sm0Kˁd_;21]ݲK9s n32>~HVcl%W9g!*4.g.r[Yfx[эwF/ +.֌c( Opv@ 7Īt:XÉ-;]<ƜqgE?< GdtOrYP[2AefKٲFdS 3k Ma 1L$˚f7'pQ&:u⫝<ɮyғ\7~Ϝg=Oe(,/P23VDt4Mn@D/z,9 ]X4'5.Hkm?GӚ8ͩNƝ@ P: HMjRmԦ"Nmᦪ7Rv0jT խ>ի\5C "'pնV! "(ؕ n[VV`f+82q[7$ zvWu Ud7VecÎSpljP :֯cYH p[:=-K 9t!>.kͮvNܥ½|(xxa$yσ/C^yee7`J D_7] ~#L>]ΰ7̻ SKbd.f&FG-~&3_o319_@Jnr_䉄|ȸDvWȓE yBDX$z@)1?A63 ̟Ja(0.c<9 mFHA&E|W\Qn-Ps>a4i,q5 WhiN҇r(8"}"By=QMR9QԻ4iUzضFB͞ 'U2ղmsT6`cq/*jfGZܲ7G [Ȼބ7MUmp^\YJ)ݠ6%^բuG銧z/xEBT<)#|PzߏW~iL*.EEogC=g.>3;BCpX;/H g[OO6 d#"6%]>s$#ƁdOw|2Yu| ~4.<MRg<9mC^ץ >0=(A?}_y«~鬿_{/}R{dŞ ~?zlj#|^m~ןK??o}퇟F?qү~ڰNy?Y"+;?B}{HyxXр('}ȀXFUv z`}w wg?,X}GPc1x0'uu:<؃hbQQQOd& B,5T f@ DsCC Gbe# X3$HXR>١Cx&bh Tp(r=Q8X)uSY(xdS؉S5:X:,V؊48Hs@:(V7KZE[XXxH6UZh[07̈Z(8ZU☌XYw%W#㸎⨍i W%eȌ7Y8SPX|EZE7 ّXIW3r&ɊXZj%ZUWe9H'[:ٓM%Yf8ؔNSVI)KIZ\L,b9dYfyh 1{ȇ4l !nr4kYvI|ٗa◂9y I>=0a谘_ ^ FŘY` _ři y] i^F<0a^9`u`yP/<3Ii _`i.^<Iy^9^YY0c#ٚƳ^Ś幘9)p zßԉ ڠCx wAbڡ ":$Z&z(***OЇz.: )83Q d: s 7i/P?A'G 0GhEwRtD 8zfpfgWWjlF@f*@vvgzwgpFkVg-7AvD1 &B~ tS*p Dk(n@q&io:BinvhBt:q5t1צrGr gSuE&&tAN:( ǫJ*+uYzaghZ3 dRaMbvJp:#Ij[!-fDd쁭J%@&RpeBfpSگ6wiYRut4u qk>(,Wuw HGvS˰oZlkd4dw^AClG5Dw$g(G>hQvBʲڰ$Aš ЦxGHׁ hPl{W[D;x`K b;Pfc`{jHtkWbuk|w2n}Q'}ֱ0C|dqcjrMKzl!oyWP˹J C*:J3js r &˦ t?=v[wںe:I仈RqGw '"JsZu ۪q۩pyRzH ~Ux6dYDZtkݻx{{8{7Inc[3wg6@*ˮڼO6F*I++ЛR,$G*!<ȁkJ'k[31n'KeXkBt:~vCʲt"|BR+Yr0L1|V"K"\.]{_ŦF6\m7od*Jglp \s,uoǹpl|@=(:H7h0*& (Hh 'Gg'˄zlo|˵@ˌ˺̵K\{,̥<UkXAlQC;H\#|qIa<v8L|g|'нGкgдЯЪЧЖ ўGїgѐъхр{ץϚ,դ&-0eNZ3%>zT2bf?ÔHJL.4x^aTzX*0^`b=d]f-!3?ZY?np-525ץ҄voRS,zM u(t`,m\$שP(-lXZL،ͭ+4xM*p; ϱ+LshΆlRҫ3̕h krٮ;)ڢ F=4n؇#= wmEg!2]Z@׶d=]b=$|STO>]y ;mtink-1.0.16/html/mtink.html0000644000076400001540000004426210376041214014033 0ustar jjfuse mtink

Mtink

Mtink is a Status Monitor for EPSON ink jet printer.

With mtink you will be able to display the remaining ink quantity and the state of your printer.
Operation as check nozzle, clean nozzle and align head are also implemented.

A few printers as the Stylus Color 480 and Stylus Color 580 require a peace of software in order to exchange the cartridges. Mtink knows about the commands needed for this and supports these printers.

Content

Requirements
Mtink and the EPSON communication protocols
How mtink works
Internationalization
The command line options
The main window
The configuration window
Head alignment
The mini window
Bugs
See also
To do

Requirements

Mtink needs the openMotif, Motif or Lesstif library. In order to be compiled you must make sure that the X development packages and one of the above mentioned  tool kits are  installed (runtime and development environment).

Mtink needs a bi-directional communication with the printer.

Linux

If you use the parallel port you must make sure that the kernel or module (parport*) are correctly configured. On the Kernel 2.2 family the "CONFIG_PRINTER_READBACK" parameter (file /usr/src/linux/.config) must be set to 'y'.

The USB printer port module is buggy for older 2.2 and 2.4 kernels. If you use the USB port you must get a newer kernel or modify the file /usr/src/drivers/usb/printer.c.
These modifications are not complicated. You have to modify the following lines:

static ssize_t usblp_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
{
struct usblp *usblp = file->private_data;
....
if ((usblp->readcount += count) == usblp->readurb.actual_length)
usb_submit_urb(&usblp->readurb);
    return count;
}
to:
static ssize_t usblp_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
{
struct usblp *usblp = file->private_data;
....
if ((usblp->readcount += count) == usblp->readurb.actual_length) {
usblp->readcount = 0;
usblp->readurb.dev = usblp->dev;
usb_submit_urb(&usblp->readurb);
return count;
} }
The modifications are in red and bold letters.

Solaris

I don't own a Sparc station which allows a bi-directional communication with the attached printer, so I am not able to test mtink under Sparc Solaris.
Newer workstation are equipped with an ecpp compliant port and will allow a bi-directional communication. If you own such a workstation and an EPSON  ink jet printer, inform me about the results.

Mtink and the EPSON communication protocols

A new communication protocol was created by EPSON as the Stylus Color 740 and Stylus Scan appears on the market. This protocol (D4) is based on the IEEE 1284.4 1.5 draft and allows a communication about different logical channels. The major advantage is that a program can query or send special command about the control channel even if the printer is busy (printing).
This allows also to share a port for different devices (printer and scanner).

The implementation of the D4 protocol seems to be very incomplete for older printer and is also not free of bugs for
newer printer as the Stylus Photo 890 (my own EPSON printer).

The D4 protocol requires that the printer knows at least a few part of the EJL (Epson Job Language) language. The most important Commands are the Exit from D4 mode command and is known by all printers which support the D4 communication protocol and
the Get ID command which tells the printer that a few information (model, designation, supported language) are returned.
The Get ID command is apparently not supported by the Stylus Scan 2500 and probably the  Stylus Scan 2000 or by the Stylus Cxxx
family which needs the D4 pendant of Get ID.

The old way to get information about the printer state is to use the EPSON REMOTE commands. These commands are
also implemented on new printers.

Mtink knows about the different protocols, but the author doesn't know exactly the capabilities for each printer delivered by
EPSON. Due to this lack of knowledge, some printer will not do what mtink expects, however you can easily make the
required modifications.

The printer capability description is situated at the begin of the file model.c. The most important fields are the protocol
field and the id field. The protocol field must contain one of the next word:
  • PROT_OLD   The printer doesn't know anything about the D4 protocol.
  • PROT_NEW  The printer has a minimal implementation of the D4 protocol, Exit from D4 mode is needed.
  • PROT_D4       The printer supports the D4 protocol  in the major aspects.
If the device doesn't answer to the get ID command (EJL and D4 versions) you will probably have problems if these commands are send to the printer. Querying the printer will be disabled id the id field contain False instead of True
/*   name               colors prot      state exch.  e.sep  cl sep reset             id   */
{ "Stylus C20SX", 4,PROT_D4, True, False, False, True, PROT_D4, True, 3, 15, 2, 9, NULL },
{ "Stylus Color", 4,PROT_OLD, True, False, False, False, PROT_OLD, True, 1, 7, 0, 0, NULL },
{ "Stylus Photo 750", 6,PROT_NEW, True, False, False, False, PROT_NEW, True, 3, 15, 0, 0, NULL },
{ "Stylus Scan 2500", 4,PROT_D4, True, False, False, False, PROT_OLD|PROT_D4, False,3, 15, 0, 0, NULL },

In the data extracted from the model.c file you can see that the Stylus Scan 2500 don't deliver information about it identity but need the D4 protocol. The  Stylus Photo 750 is one of the first generation of D4 able printer, the communication will only be OK if the Exit from D4 command is prepended to the needed REMO TE command. The Stylus Color is a very old printer and don't know anything about the D4 protocol. Finally the Stylus C20SX needs the D4 protocol (the old Get ID don't work).

Correction of the mentioned fields will allow you to get mtink working with your printer. Please inform me about success and change of the file model.c.

See also the gimp-print documentation about the commands:
http://gimp-print.sourceforge.net

How mtink works

At the first time you call mtink, you will be asked for the device file and the printer. After these question the printer knowledge data are loaded and if the id field set to True, mtink will try to detect if you inputs are correct and load the data for an other printer if your choice was not correct. Finally the configurations (printer model and port) are put into the file $HOME/.mtink.
If you call mtink again the configuration file is read and a check for the attached printer will occur if the printer is declared as
"id able".
Deleting the file $HOME/.mtink will reset mtink to the first .

Mtink is separated in two parts which communicate via a shared memory. This allows to perform refresh for the X-part of the program and avoid miss functions of the printer code due to the X-environment (timer, interrupts,...).

The X-part is not build as common X programs. Mtink contain different XEvents loop in order to make the job easier. Each sub window has a own loop and the called callback function return only if the loop of the sub mask return. This allows return of
values to the caller. Calling of the printer interface uses a similar mimic.

Internationalization

Mtink can be internationalized in a very easy way. Actually mtink knows English, French, Italian, German and a few words of Turkish. You can add your language if you edit the file Mtink.res and copy them to your home directory as EpsonUtil.
The resource name for your language are derived from the variable LANG, LC_ALL and LC_MESSAGE. If for example the environment variable LANG contain fr_FR, mtink expects to found the resources which begin with as EpsonUtil.Fr (first letter capitalized, and second letter as found in the environment variable).
If the searched resource is not found, the default will be English.

Example:
!!! default font for English and European languages
EpsonUtil*title_LB.fontList:    *-helvetica-*-r-normal--14-*-*-*-*-*-iso8859-1
EpsonUtil*fontList:    *-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1
!!! set the font required for turkish
EpsonUtil.Tr*title_LB.fontList: *-helvetica-*-r-normal--14-*-*-*-*-*-iso8859-9
EpsonUtil.Tr*fontList: *-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-9
....
!!! The default (english)
EpsonUtil*previous_PB.labelString: Previous
!!! and the texts for german, french, italian and turkish
EpsonUtil.De*previous_PB.labelString: Zurück
EpsonUtil.Fr*previous_PB.labelString: précédent
EpsonUtil.It*previous_PB.labelString: Informazioni
EpsonUtil.Tr*previous_PB.labelString: Geri
If want to provide translation, send me back your work. Please insert also in the about your name, email address, url as you want.

The command line options

Passing option to mtink is normally not necessary. If mtink is to be displayed on a different computer as the computer where the printer is attached you will have to state the display name e.g. mtink -display computerName:0 .
It is not necessary in this case that a X server is working on the printer server.
You may also start mtink via ssh or rsh if available:
ssh serverName /home/jj/mtink/mtink -display workStationName:0
You can also tell which language is to be used
ssh serverName LANG=fr /home/jj/mtink/mtink -display workStationName:0
will set mtink for output with french texts.
Please take in account that all browser will not work as expected.
The automatic printer detection can be disabled by launching mtink with the option -noAutoDetect.

Mtink support also more printer on the same time. The option -config <configuration number> allow to read / save the configuration datas from / to different files.
If <configuration number> is 0 or no -config <configuration number> is given, the file ~/.mtinkrc is used. If <configuration number> is not 0 the file name will be appended with ".<configuration number>".

The main window

mtink main window

At the top of the windows you will see the printer which was detected or given at configuration time, here the Stylus Scan 2500.
The remaining ink quantity is displayed as well as in graphic form as a text. The number of displayed scales
depends on the printer.
The printer state may contain a few information about the internal state of the printer e.g. printing (the printer is busy).
The buttons below the State line allow the choice of the work to be performed, the last button is not active if the printer doesn't support (require) the cartridge exchange function.
The buttons at the bottom allows to see a few information about mtink (about) or to leave mtink (exit). The Help button allows you to see this document.

The configuration window

mtink configuration window

You can choose which browser is to be used in order to display the html help file and tell mtink that an automatic detection at launching is to be performed (default).

Choosing a browser:
You can type the browser name into the input field or push the [ ... ] pushbutton and select the browser via the file selection box which will be popped up.

Mtink knows about the command line options required by a few browser (Netscape, Mozilla and Galeon) and start them accordingly. Other browser as Konqueror, Gnome-help-browser or Opera don't need special options and can also be used.

Some browser will not work if the corresponding desktop is not used. The better choice is in this case a browser as Netscape, Mozilla, Galeon or opera which are not dependent from a particular desktop as KDE (an OS above the OS which has at this time a very great bug, there are no blue screens).

Automatic detection:
The check button allow automatic detection can be toggled. In the automatic detection mode, mtink will try to identify the attached printer. If your printer is an older model as the Stylus Color 400 / 600, ... and the printer was not recognized after the first attempt, mtink will try to send a code which will cause printing of a few characters. A further advantage of disabling the automatic detection is that the start will be a little bit faster but if you attach an other EPSON printer to your computer you may get problems.
After you have modified the settings you must save them. The data are written in the file $HOME/.mtinkrc.

Head alignment

Mtink allows to align the head.This feature is dependent of the printer model and the window appearance may differ a little bit from model to model.
Some printer as the Stylus Color 480 and 580 require separate alignment for the color and black head. Accordingly the main window will show toggle buttons for selecting of the head. Another difference is that the number of sample print is different (8 or 15). The number of passes may also differ from printer model to printer model.
I can't guaranty that the code send to the printer is always good. If you use this, this is at your own risk.

mtink alignment first window mtink alignment wait window
mtink alignment first window mtink alignment wait window
mtink alignment setup window mtink alignment last window
mtink alignment setup window mtink alignment last window

The second and third windows shown above will be displayed up to three times (depend on printer model).

The mini window

This window will only be displayed if the server mtinkd is running or the rc file .mtinkrc contain the path "/var/mtink/...".

This little window will be displayed with a green (All is OK), orange (Ink quantity less as 10 %) or red background (Printer not available or ink quantity less a 5 %).
Pressing on the window with the left mouse button popup/popdown the Mtink main Window.
This window can be positionned on the screen while pressing the right pushbutton and the moving the mouse.
The last position is writting to the file ~/.mtinksess[.configuration number> if mtink is closed via the ALT + F4 key combination or by closing the window via the window manager menu for the mtink main window.

Bugs

Probably a lot.

See also

Index
mtinkd the server for D4 able printers
minkc the chooser for owner of more EPSON printers
ttink a tty based status monitor

To do

  • Better documentation.
  • Translation of the documentation.
  • Test with more printers.
  • ....

Author

Jean-Jacques Sarton
jj.sarton@t-online.de
Xwtools Home Page

mtink-1.0.16/html/mtinkd.Hu.html0000644000076400001540000004001610376041214014543 0ustar jjfuse mtinkd

Mtinkd


Az mtinkd egy kis szerver, ami engedi használni az mtink vagy ttink állapotmonitort, amikor nyomtatás folyik.
Az mtinkd csak olyan EPSON nyomtatókkal mködik, amelyek támogatják az EPSON-D4 protokollt. Az els készülék, amelyik támogatta ezt a protokollt, talán a Stylus Color 740 és a Stylus Scan 2000/2500.

Tartalom:

Syntax
Nyomtatás mtinkd-vel
Az indító szkript konfigurációja
ttink hívása
mtink hívása
mtinkd indítása rendszerindításkor
Mveletelmélet
Hibák
Lásd még

Syntax:

mtink [start|stop|status] -dev <device file>  [-nodaemon] [-model <model name>] [-name <modelname] [-usbbase <path and device file base>] 

Speciális opciók a SYS V start / stop szkripthez

start


A szerver indulni fog. Az indítást ki lehet hagyni.

stop


Egy mköd szerver leáll.

status


Ez engedi a lekérdezést, ha a szerver mködik.

 



Normál opciók

-dev

eszköz fájl

Ez az opció kötelez és megfelelen használva megadja az állapotot, vagy leállít egy futó szervert.
Az eszközfájl az eszköz jellegének megfelelen, amelyiken a nyomtató csatlakoztatva van (/dev/lp0, /dev/usb/lp0, /dev/ecpp0, ...)

-nodaemon


Ezt az opciót teszteléshez terveztem, enélkül az mtink a háttérben indul.

-model

modell neve

Ha a nyomtató nem ad vissza azonosítót, bejelölheti, milyen nyomtatót csatlakoztatott. A név a hivatalos névbl van nyerve, a szóköz karakter helyett "_ " karakter van alkalmazva. Így lesz a Stylus Scan 2500 esetében (modell név Scan_2500).
Ez az opció szintén hasznos lehet az olyan többfunkciós eszközhöz, mint a Stylus Photo 895 Linux alatt. Ha a nyomtató ki van kapcsolva, majd utána be, az usb kernel nem fogja detektálni helyesen a nyomtatót, és az mtinkd-t legalább leállítani és újraindítani kell.

-name

név

A nevezett cs nevét fogja beállítani ennek a névnek megfelelen. Ha a -model opció nincs megadva, az mtinkd le fog állni, ha az azonosítás visszatérve nem egyezik az engedélyezett névvel.

-usbbase

elérési útvonal és eszköz fájl bázis

CSAK LINUXHOZ Ez az opció egy speciális rendszerhívást igényel, amit csak az újabb kernelek tudnak végrehajtani.
A -type <név> opció követelmény !
Elérési útvonal és fájlbázis lehet az /usr/usblp vagy /usr/usl/lp. Minden eszközfájl egyezése az engedélyezett névvel kutatva lesz a keresett nyomtatóhoz, az eszköz fájlt késbb fogja használni.
Ha a kernel nem támogatja a speciális hívást, hibát fog keresni és ha a -dev <device file> opció adott, a megadott eszköz fájl nevet fogja azután használni.

Nyomtatás mtinkd-vel

Az usb vagy párhuzamos portot nem tudja egyidejleg egynél több folyamatra használni. Az mtink ezért tartalmaz egy csövet, és újra konfigurálhatja a nyomtatási szolgáltatást ennek megfelelen.

A nevezett cs a /var/mtink könyvtár alatt van telepítve. A fájl neve az eszköz fájl névbl és elérési útvonalból van eredeztetve.

Például a fájl neve

Eszközfájl

Named pipe name

Remark

/dev/lp0

/var/mtink/lp0


/dev/usb/lp0

/var/mtink/usb_lp0

The "/" is replaced by a "_"

/dev/printer/0

/var/mtink/printer_0





Név hozzáadása -type-pal



Photo 890

/var/mtink/Photo_890

The " " are replaced by "_" characters


Ha a saját nyomtatási rendszerét konfigurálja, válassza a /var/mtink/xxx fájlt.
Ha nem használ cups-ot, gyzdjék meg róla, hogy a nyomtatási rendszert ne írja át egyidejleg a nevezett csövön!

A ttink hívása

Rendes körülmények között a ttink-et például a -d /dev/lp0 opcióval hívhatja. Ha az mtinkd szervert használja, a ttink-et a -d /var/mtink/lp0 opcióval kell indítani.

Az mtink hívása

Az mtink-et a szokásos módon hívhatja. Ha a kiválasztott eszköz zárolt, az mtink engedi a /var/mtink/* fájlok kiválasztását..

Mveletelmélet

Mtinkd és mtink / ttink osztott memórián át kommunikálnak. Az osztott  memória létrejön a szerver folyamatnál és ennek a memóriának van egy kulcsa, ami a /var/mtink/<name> fájlból van kalkulálva. A nyomtatási munkák a /var/mtink/<name> fájlhoz vannak küldve. Ha az adatokat felismeri az mtinkd ebben a fájlban, ezek az adatok a D4 protokollba vannak csomagolva és a nyomtatóhoz egy adatcsatornán át küldi. A lekérdezések vagy parancsok az mtink / ttink-bl az osztott memóriába iródnak és a D4 vezérlcsatornán át vannak küldve. Mindkét adatvezérl csatorna egymástól független, így tud információt szerezni, amikor egy nyomtatási munka fut.

A problémák megelzése érdekében, csak egy felhasználói felületet (mtink vagy ttink) tud az mtinkd szerverhez kapcsolni.


Linux sajátosság:

A nyomtató ki/be kapcsolását rendes körülmények között az mtinkd végzi, azonban az usb meghajtó azonosítási problémák okozója lehet, a csatlakoztatott eszköz egynél több eszközt tart vissza, mint nyomtatót és tárolót. Ebben az esetben állítsa le a démont és indítsa újra azt. Ha ez nem segít, törölje a nyomtató modult és illessze be ismét.

Az mtinkd indítása bootolásnál

A démon integrálását különböz rendszerekbe a start, status és stop opciók mtinkd démonhoz adásával teheti lehetvé könnyedén . Ezt engedi meg a start script drámai leegyszersítése. Egy példa szkriptet tartalmaz a forrás etc alkönyvtár:


# define the device file, adapt this
#DEV_FILE=/dev/usb/lp0
# Special options, adapt this
SPEC="-name $NAME -usbbase /dev/usb/lp"
# where the program is located
PROG=/usr/local/sbin/mtinkd
case $1 in
    start|stop|status)
        names=""
        if [ -f /etc/mtinkd.conf ]
        then
           while read opt1 name opt2 dev; do
              if [ $opt1 = -name ]
              then
                  echo -n "$1 `basename $0` for $name " 
                  if $PROG $1 $opt1 $name $opt2 $dev
                  then
                     echo RUN
                  else
                     echo STOP
                 fi
              fi
           done < /etc/mtinkd.conf
        else
           for f in /dev/usb/lp* /dev/lp; do
               name=`askPrinter $f | grep '[:,]D4[,;]' | sed -n '/Stylus/s/.*:EPSON Stylus \(.*\);/\1/pg' | tr ' ' '_'`
               if [ ! -z $name ]; then
                   echo -n "$1 `basename $0` for $name "
                   if echo $f | grep usb > /dev/null; then
                      $PROG $1 -name $name -usbbase /dev/usb/lp
                   else
                      $PROG $1 -name $name -dev $f
                   fi
                   if [ $? -eq 0 ]
                   then
                      echo RUN
                   else
                      echo STOP
                   fi
               fi
           done
        fi
        RETVAL=$?;;
   restart)
        $0 stop
        sleep 2
        $0 start
        RETVAL=$?;;
   *)
        echo "Syntax `basename $0` start|stop|status|restart"
        RETVAL=1;;
esac


Kérem, vegye figyelembe, hogy szükséges lesz egy szerver minden EPSON nyomtatóhoz, ha olyan szerencséje van, hogy több ilyen készüléke van.
Ebben az esetben gondoskodjon a  start/stop szkriptekrl különböz nevekkel, például mtink.lp0 mtink.usblp0 és javítsa ki a DEV_FILE=/dev/usb/lp0 sort a szkriptben.

Figyelmeztetés

A szerver nem engedi más gyártóktól származó nyomtatók detektálását, és a szerver használata egy nem támogatott nyomtatóval meghibásodást okozhat.

Az indító szkript konfigurációja:

Linux alatt a szkript /usr/sbin/mtink-installInitScript generál minden szükséges linket a /etc/rc.d/* könyvtárakban és az /etc/mtinkd.conf konfigurációs fájlt. A nyomtatónak a számítógépre csatlakoztatva és bekapcsolva kell lennie az mtink-installInitScript indításakor.

Hibák

Valószínleg sok.

Lásd még

mtink
mtinkc
ttink
gimp-installInitScript

Szerz:

Jean-Jacques Sarton
jj.sarton@t-online.de
http://xwtools.automatix.de

mtink-1.0.16/html/align1.It.gif0000644000076400001540000001255510376041214014240 0ustar jjfuseGIF87aADAZZ@@dddw@@| Z@}d\!e @>/"D/@<࿿>w"dE"v|Zk@,L@W|Z@Ld5| dZB\ T@͈d e |q1#4e |PZ5 :dje L &9|Ze dkdd0d4 EG@@88jrjLh FG@@|PZ5jd|LȣEV$d \WEx8pjkj,H*\ȰÇ#JHŋ3jȑ Cqɓ(S\ɲ˗0cʜI͛8siJQ&*]ʴӧPJJիXjʵ֤W׳hӪ]˶۷p*lչq˷߿pR;tÈ+^̸ǐ#KL˘3k̹Ϡ)%,K;S^ͺװcFݒ6˹}* ~wSLq-)rУKN=s׋^^qOov*|j˟}{)G]{ER `Vu79XZ ]%Ȕvؙ~͕~XT`.pX8JHTHeR=7@c4Xc-$GhZYQb`θPvᔅU`:8c\tdrJiXyW2igi!N:(zb"xeYczzgyjyCꭸbkapZ鮹+l|ZݯB:JW"kkV۳&Phv+kne@4+k,lp$訧ꬷ90nβ} w t8R3/}W}#=g?n>t?=zoS_f@|ރ'p#Z@/~sW@ k&@~|8HZO~*ۈ@b>h:ЀKal8Ĺm+H?d{w(ω(4qAaхJdaHBъ"BF)q|+#.awjh;Z" H-ы#HH9rdc%]G>dhF0|s$):n2u\ _ٺ~҆[%s 2r"IL^,}xD&H'KMFxϼ6_حwf6IN2zL:ɶsΒ'4iMyh~M@JЕMB pЅ:fk(D'JQIh.ڑz HGJҒ"JWRvw4ZJӚ8ͩNwӞ@ PJԢHMQ28թx*T_>TX*ԏ@ SQihM W'UUJ׺dMW Wլv `S׽:U$|&&: ),CW.hsf*Y lH2Ҟd-ִ̘(jQھ2IWW[r S{Ƹ;AnnI\4aυpYzdcEݐuתnL̼MĪST2,xs[v KWrw%n+Ww}+^"7]frkJ6n-LNWn0 `Z5pb OFq_0JƵUlk2<wG)]!X#Yr+OE>,\Nr0/wP61W[ݭe[*|"mg'Έ D3&4MfJhfCCr.C[oA7+M/Ǧ([F8|oyY-q3'⎆}[^^5-rWްIUZuNusSk/E,c^rwne>޸^+G.F0+`'u\ 5/A5qq,;5eZ}d 'v=>|B'?@9lF9t\>/x?M{V8}k~uFI/>֭p|wl=ogZF-kK_`?{̢^#O=/ ?,+_sXH,lt[?GkjaW~e}~} s~{Fg+G}nqp~}LGZ5-'w\'9b^t|Bwk u-8$Q&w9goF5;xGGgL<(RxS(G^83T؃VdvQv_bn'{_7rf{dmozahy>jV|6ogr#|6`bswɷHӇwg 7e+n6nq3ghlv(6Cccf&ljk息Ɖh4gtlUlse5W iXqqm"zw HhzXl8%'(gwݘZxs|6G|h|PWeao+}x3X}(AY !hxGo8('Cq췍1OqT ugIsGǕ/ǔ i‰VY{U( U͹ٝ޹9)yqꉔٞ39&YjZ{x Xؠ*L8zz@ڡ ":W&z(|8\h,+74[6z:Y<ڣ@*}.Z9ZɑHBڤ)$ KVZR*JF^*['(eJg!Y,-:KrJijʼn⨧$JQ:UP P:zpڥ {t;I|Jf*꣠zGEZ6`35z}l*źNJBڬFکʜڔd:*[zZW:MLj*TzZZ*:~ zؚຯqjQz0 P[,s+ۦۨ;P;!S&1(,1.2^!۪5{64uʳd@[mʥC5B'IʴH QTV{Z R۵A`vb;]õf;N{i{e۶Ap;o[Hxx4h/ѷ~+1KXz{@cK۸"Y;Yی+ ;˱۫t{[+3k; ۸{Kûŋ[ ۶͛k; ۵׫{K ˴ᛴ; ˳雳[+˲k;[| , <l<\ !#|%<')+|-L/13uS걱[lcoծ +S]ҭB,+G,lE[9,KrcCQg --jي3]|m!MOjIDȚE=%mb)Zm? Tz؏c@}KMUmdف֢}]VXs֘h9}!X85ςP WCD eښ yOPע4ٶ͇ۺ\=JԬ:|]3!1dP}؝ڽ0a};vb-ג@=Q!߃#r.>^~ n;mtink-1.0.16/html/ttink.Hu.html0000644000076400001540000000575210376041214014416 0ustar jjfuse ttink.html

Ttink

Ttink egy terminál alapú állapotmonitor EPSON tintasugaras nyomtatókhoz.

Syntax

ttink opciók

A ttink változói

Kötelez:
 -d device_file --eszköz eszköz_fájl
Tetszleges:
 -m name --modell név vagy szám
                   enélkül a nyomtató automatikusan detektálódik
Utasítás |egyszerre csak egy utasítást lehet választani):
 -r --reset            visszaállítja a nyomtatót, nem mködik ugyanolyan
                          módon az összes nyomtatóval.
 -c --clean            fúvóka tisztítása
 -n --nozzle-check     egy fúvókaminta nyomtatása.
 -s --status  (alapértelmezés)
 -a --align-head       fejigazítás
 -e --exchange-ink (nem minden nyomtatóhoz) tintapatron cseréje
 -i --identity  nyomtató azonosító kiírása

A -model opció az azonosításra nem válaszoló eszközökhöz szükséges. Ebben az esetben be tudja írni a nyomtatója nevét vagy számát, ahogy a ttink -i -vel ki lett íratva. Ezt az opciót a Stylus Scan 2000 és Stylus Scan 2500 készülékek követelik..

Ttink és mtinkd

Ha használja az mtinkd-t, a kis szerver, ami engedi lekérdezni a nyomtatót egy aktív nyomtatási munka alatt, nem írhatja be a -model <printer name> opciót a ttink-hez, az mtinkd démont indíthatja a megfelel opcióval.

Az eszközfájl neve például nem /dev/lp0 vagy /dev/usb/lp0 ellenben például /var/mtink/lp0 vagy var/mtink/usb_lp0.

Hibák

Valószínleg sok.

Lásd még

mtink
mtinkc
mtinkd

Szerz:

Jean-Jacques Sarton
jj.sarton@t-online.de
http://xwtools.automatix.de

mtink-1.0.16/html/configure.It.gif0000644000076400001540000001175310376041214015045 0ustar jjfuseGIF87aADAZZ@@ddd.$@@D /@}\!e @>/"D/@<࿿>w"dE%v|Zk@,L@W|Z@Ld5@ dB\T#@ e |q1#4e |Z? :je L&9|Ze dkd04 G@88 jjLhF|j|.ȣV$.@@d \WEx@@8pjkj,H*\ȰÇ#JHŋ3jȑ Cqɓ(S\ɲ˗0cʜI͛8siJQ&*]ʴӧPJJիXjʵ֤W׳hӪ]˶۷p*lչq˷߿pR;tÈ+^̸ǐ#KL˘3k̹Ϡ)%,K;S^ͺװcFݒ6˹}* ~wSLq-)rУKN=s׋^^qOov*|j˟}{)G]{ER `Vu79XZ ]%Ȕvؙ~͕~XT`.pX8JHTHeR=7@c4Xc-$GhZYQb`θPvᔅU`:8c\tdrJiXyW2igi!N:(zb"xeYczzgyjyCꭸbkapZ鮹+l|ZݯB:JW"kkV۳&Phv+kne@4+k,lp$訧ꬷ90nβ} w t8R3/}W}#=g?n>t?=zoS_f@|ރ'p#Z@/~sW@ k&@~|8HZO~*ۈ@b>h:ЀKal8Ĺm+H?d{w(ω(4qAaхJdaHBъ"BF)q|+#.awjh;Z" H-ы#HH9rdc%]G>dhF0|s$):n2u\ _ٺ~҆[%s 2r"IL^,}xD&H'KMFxϼ6_حwf6IN2zL:ɶsΒ'4iMyh~M@JЕMB pЅ:fk(D'JQIh.юztfHG (ISҖf.Loә"d5qӞTPZӡUE=RSԥ:UE%H<6)U?Bխƫ^ŪXSӰNjZѺֶpKWӵպ5$9Yל*#+[J+^;Xja־Z$I{U$T'YNjSRִ֓hXVͫcWۓvn Vr.liN)m_+UU,dZ:7ͮZVV%/vzM}|7i~7hXe>K;f ~% [a_ {X5qx&%>5)~Gۘ-fv@L"HN&;PLeb7pPwQ,gH7yX́ W|f4v,fsfw/'3M<]R֯Qgojω>eBi^Vnt#IǤҐd"XN+05E}6v~5zkZ~ Zko\Od~]=E4jl!υaGgA_{fS nF{.7 nHkۺoxm4 tGVizi}p[xųL3hLef;y<ӻ>xUGђOgw]ڎ2W흟lse< 3F`qV4Wtt`PԧN[XϺϸ^/î߱ݾf?|Ӯvﲽ};y+v,׽]~U/xJ=<⍪5߻!ug.Q"(G_vm6] 97}`Q}l[þ.w}ۼa/{h׺5Ȼݛ|-g쟉<g5m+m [U\{{4G/ C5W3 ր44W'u8RՁQ 5$XQ&x*P,؂'08V/8U6HP8uBH2XGHh}GGNhxMG@Y£*9L)~NEi)nɆ 4&^WJjw\lH{f֩p{QYy8}EL y\HIfF'y9 e ݨq׹ǨBڇ鍪J)ny8{)ikxE<ɤ'6/O2-Z(Zi5hɡؚIA*խ3;1 zZڮ R:-e2IǮKZb4ڰ{::ۣ{@;۱ [";Z&],24[z8{(9>j.>>k;85˴2/ ,+)K&k# ˵ +Kk ˶ *Jjʷ *JjB?ȪD =鸒`[1;øZo˳;[C+ܺgK3[{ۻXF;[{Y20Kh8Ok!B.?KQZ ;$;T4MS[0Z\ cK20`Ӿ%-xٚ8󳉱Vڿi';Ȉ Z"$Lwo*xZ ;QE,̙he<2,^ˊKrU}(BlMl|F$ëќ쉝Ng éĵ^[[ Uj:fh<Dz<ŅL_5QŸvLDLuL< X(ɮSle뻼edl+\z<̳hc P<\|؜AS1a|ub-|R@Q!΃|#r.=]Н M;mtink-1.0.16/html/align3.Hu.gif0000644000076400001540000014435410376041214014245 0ustar jjfuseGIF89a`$,Ŕď,`dؔL8JMNLĴx$|`|~Lش,|DLhДL|ddfdѴ|䐭_BhHP4εרyHĤ;Q|1L̟HK(ό\az7܌AũtߔĴt?3v4pߤTi\dNd᩾Lʨu4ʁhдh<\ʘhʷրRؼjzL—az,><>JWNTTľmzTuzddtԪlTv,Tؼ4LTl!,H*\ȰÇ#JHŋ3jȱǏPG'Md˕(TRfMM6qisgΞ=ٱ 'QF\*TLG3ҩC@uUpNlGdӲ#i[:Y Awu\'ɉÈ +6dvfΚalX:Ҥ[^턵՟Ok~Њ6ulV ܭ^7ȍ~ $ģ O®߻N~sO=㫟^~}?%H"(`" " 2< R <RȄh!lء;<*;04֨#(~$@d$dHFPŔRR9\9e$deYe$d)f!fkfjox瞅袋~" $B@| !@IR:f馔Bi~*jjjjꪦ2QêPZ+nzGno܁,,.A#Nkm#bn|mknTn)nBkoΛoOB|7 W7gk1lt1E's ^- q ^p-+T6^Y,cd #>PS2h0ԾYAX<PT PXd%LG A6*ëBR8(> 2xeI2f0qKa 2jșM25SM&;9]`5dZ֝2BY |;|CL1ƛ.AͳwwYπ:{wЈ]^Aw \D9}4\"4%a CxBYz>x Z/C$Rȭ+ ԡ׿PaSN6h ,pp/L^ v1 g 6x!1Pv7 Pcý]2 (.p O.p{>ֱě͊SxdkU!\e)3Zg'p ̄(q\, ko6y.!rC6w}57}LwyJԭW=dƺǼ{O{}Jsϻ(" "}/A<Lc # Tȼ_ @ h72zճB@2@Gh}c/>B1/| C|2/?A[ʷ=}ۣ 5a?/@@*U jU]PU*W84tZDPs5'GG`Pthm*)h,.+8/X+H5(9h>H( ?:CCJH) y)(RX !R YA G'4iHӰji t8wHʐh}~h}@"HI@" h@8d0e@ȉ0h#P #hv 0(6X 6XxHH Ȁ]"]4/Z@`  H 㸎hH p㘏xɐ y؁hY ُ8IMH>K  :)= zPk@)zk@k &k@ kPM0@ 00 0P UY 4P 0\i4@a|(| hl)rɈhЈIP#ىq0`iq@qP qv阮HؘAP P i!A` iY`P!U9y rذ!;Ué@]eaA@MCf99`ɝމG9M О9)ܹGYiɞZja0Gpj @z ' ,: /'z4*6 kP { {0 W ~& ^&p[y yP@`**-(N@4::<~x |`L=>  |F`d-@d}֧Pt - h~fNo^n~p>ׅmtxN{. v.Mw^|燾~玾.鏮ڕ.ɅN~gg ~. pp ~뺮Z>֠֐~7~-> Ҏ ~.ݮTTP.N``ny_*ss@s**   | !?%/ #/  ||0/(0 p : > p 1BkhNMNO_V.\^tY .@cfj/~aoptix_jw0   }p p } o Ð/p? 0-à. @@bPT  @р `TT ?&߯?.?o#o.  BPa 6<'NIE=~RH%MDRJ-]SL5ejLt1#'J=}TPEETRM>UTU^J"FX^uUXe͞E+5lZJ$UIg+D, E$/P(%2Ho3&p,PDn W6hv[1" @$ +fdË#H0ALaD p) 'Q )'D̰Ȭ裱tr<& !I 7 Kr&),2Lb EV{LT5+M+kNۊ30\Dt'ψ,c4-a+/0=KnHT<.85%#STO$O*kPVU`e1ml4quA5SmKMXŬCt'JZ[aˋ\BSr'3ҌbE|p̓T9p?%S+xn#^r\;~t>N`[Y8M9dx!@TVA=~^ Β6q^[xb]xaڂmhbAwZ#酝 ꖥFXʪI۹2Vsc&hIE]v3]9`t_'qqͬr3.'xAͼC8?H w;b.Sdʭ|4vo<4MO3b\0awu<#iSם@z1/ ]+]V^\c5$)j=ȱ Ost^ʥoyKsK=q[LBL%"rya0AfFiYs,J:0L[-xb͔ZC_:X]% J|3x'G4|aýLB6ReVN Ct=t))K%F&,[&*wi! ] ʷgxHF#% XWNz. .}!|_S؅4Lq){i.tGFrd&7OrB >!-1jRԧFuUjVկue=kZַuuk^zFK-p PEulf7φv=Qgz@>n$jjww=nr6Nzrfw=op[H;znxN"?I],7xkmd0p]q.2-qy?k&xm佤aerK婾yK^󜟺糶IMs (FMRS] 05WmWwes걧}s}\w3= `p$ݥ?uo灗>?w2'qáowGD>"C_>@>ؓ>K@蛿<> 8Ӌ @x>쫹<=ѻ> ?>X+!%4i>7kA>$A s;<# <a\Bӿ*Bo3Ķˆ14Ch@J 937ȃ9-),X`1?D8@=%x@TE >;*!uc>dKD+kkLQ&TCCи0s/4%K$L{Z2\|EZ2]]]2ME,+W<.[3D6 #+h4iL2_F[h4mF[d FoqpdktXnFoDGhF$tt##ȅ&|D3zGl{h\3wX|DžKIt.UL}b( 0P̲)0Y$? ָ:aӴyI5 Nj3Grp#y8!NͨMpưӴJT#zMP !P|O։O 2B 8M MOz``)` ^ًBQ:UB)=4sAT@K+_3:tR$Q HTD9Rl6&ЈҰ3jԐY9nj %K (B4U0"7E89ʱ;Ri ʠR(İ3=ԶIT6 rHIEC y,59Iꎄ98",""䙬q"4SVmjR6Y~VI搒bQ+fg S+OB) "Jb5q!TstEuP y0  ap~Ѫr]u 8!hbUϺWכ9T(]mDuZ(\k9Z紩+hg!WU^s6 ֵBL"HE ffRZ(2LHdl ) *h՗v]J,kьqTr]avؐ$ ^i`ypaV^՜eY ='296]Vk]QਡΜ밂V묾kYƫ\5$/Dϲ +hh\q\q k`$b^JdN(|͔  'm0 /INJ-)amk d$(.Zh a#ОXxm薀^&*9~^m*Fn4!i.fn jnamdnB̑bs*9HY1޴`# ԋfV܌^RP)>-u~ pc)Y-p Nq׼+pq։(p /qgrQz$pq._yNh̸r` esKM@sUs(M7r9ggC+;=2EXIIwjAG p荅ni!"΋, ږ~ pLÅZj9򜭷&* HUh"I/\L<7zr[ 3dT|~,8dźuOovb$va9Soi~!* W, yk؟E8`3 (aH>U$(axWȏ'w!12u_7`35<#YMG\ުW쾩k{޳F+<7UU7La;:rq h߻ MWw"(f(ٙx%PVTxmzW\* ^\G D4JJ0?ߐ:Gr Scmf9Ή UJj](ykZ 'f"jV2c}2~ ZJy'kȥi*n&;t_o\Zi۪u>]v+ZM%P$7 (hB# b0u7.^:a$BfQle\D ZJ&,gCf{簓;Ĝ>R,mlHg[[8(^VNzN4%Sŭ!Hg;ݫZJw;0.HS]ա-S2ʐ%G?\/7U T°q2L %3b cwdgPPw&Z]4 `*B߉ńj KBmЄ6T '(eNugA)3P`i>OdW&&&TL\j&Lzq [ 4ZL[wiEYӀƴ;MyjE;LuJԞR5eR'9N&y"Yxؓcԣ71CI?9 %+>%cnj- IUp%4I{sI^T*tP9ձ7;)`;SG$ТM`)ZLo!>׃\fc{/`E’q[\+5ĤQod;B\EWuUc/?B>YrOgb=&}B=(j8 2Evq+ 7* 0YӇDEaҝʳ.tAήb'Wp%Wg_\M8\",5.~b$9k&]KWGRѦ?!X冁 @f3uho#_,9)[~"/GWXԦ.my]qV6/<@ІRDEit˲Tk;ݎF7#uѺ_Y}M,`|~gj`i-4h׎Z~יncUKlEݙokOvB%k e+ ѐ0eĂz] *%`sAORQb$TS}! z B VaSb` ޕUʉy­GLeUa FET! bo4q"_]L_:dxXF}ռS*SSq^u##ucO%WaWݞPVo7s՞,Q Qč8V8jD6* [Ht i!ޢfτY, S\X݋`jֹ\0]ZPp$MZL \XjVIqyćMc EBʘ- \NБ X$ NMύ]%y]QRߟzBZ GEexYblc cOqxIܕYNʞ]v SZZɟ [W VE𤲕 GMZ%wĦ۪GttxdZ%'dEnze$V] rZR KwT `%x YQψWefgnjYZ®uXԠT!e{ZLYVy]}!~ 'R(XZ'ڼ4\e0@yƊOꛇT }ѧb(Iݢ׺u&oNY6gH@ˁPd\XNaP4g'yZ[nx#'2E{L:hRX_ Al9I,N`I^ hzh( N&N|N&LH*nqFjby6 X_2K1Q)M Ѫ:FNk!mJnڴ+2DhUܢ›dXl 0LFr]^Q cZ\dj&kť Ivǥ&n(U&Vbg]"S`©gS64Z$RM#!&mڵukhɿe:oFvdz.*1XtS(\VzZAʄY]RkMSYFI [^mr( T Ͽ\,{SnQ()VJm4N"Le,- nt$qDZԦoy^rG!^?+]ŠL"JuKg#cS1ۢ)~jƸKHR1afe+)a.?ci^E!vZ{Luue)O4YU+b[Un^%?e"=#Jb+_yn.¥T,xf /eڹm `EDb>Seґo--/Q[&ju "2@S؏0SuLƼH  H4y7xNauK+T!W.=R6g;jQ^MAOan.1Hq2kb1h}/bj]Ŋ63SxQShbh~s\QO OH' iv3U8!*w|wW-qxHyNxvK0,Ȟ1 1ۜKܮ̮#w :m|j:55IP#t1IWb[\gq#]V^r^.w&a]l3z573"SLt'/\L5>ePv6o7$JLyWX1;1߳V & :'cKbEd6/ Ʈb'CƻL0׉f) `(6S痕f#2[nT,jt?Ioh c? 6t}[G2J{XIl/ȣi?Ԃ$8,9F?2Qpx@slD8xt$4O൫%1d ;Yr9}il?=}{jГV.Kw qs1b*g:?mf9}NdkCl}"$X8lD^<T`EGHB>QhфSMJjj#]-bʵ!Ьc6%;(شW}[A[3Dp$Q>1gheҤ=^ЮbϢzڥubvF3umѩ7Ͼ e>r1X.Nhq"]JL&%9}i6ݺz_t񤫦/V6Q:|]^v~v{>3/PC+%N&N4""x+(;.ﰽL>E k7b\E<̫n*ܜc) #pa3 a-J?K ;q.,|GS/qMDJ5 Tl\到zЀ$p:ɬ#JC3N9$*GlKUܓ#d$.$ yLV2}BXѡ<%TPg;X?,e3N*oK2VrU,%k)X Đ>e0>1dӴTQ[ OT- ]lbnSe(zA]9%60 ZgڈF}\-#~P7ݜ b6VXf^wUWd`W#9(%9d>- nZܱᦟ}hOgeKqNL˶*0Euۣ8&9_Šqc%i Έc+Zrdf}3sma|اj%ɔԠ *n~4+unAn-HZl9'#e X5T3:5e-R}sE鹩Hk֯z?)aԽ-9i!yuR$.fynw؝fl]"6`PF ms{!CzϤJo(8wVa6]y#̞؁$7_,KO4͐ގR%_6ܾ P [ LQtz]nfݷ̾\Oi2iy`Gi^W+cx?Uj\i򌄲q=\J}ᠷENN۬\q6֒?hl[OÑ>fT{4q bLj*/歨-qfm]m/R{K!Kl,\pwrv`/͈q)V8Øu1{,p]'6ͧB2YIAJd}Gap@xSI{nyvk.WfZR)}=;8ϗq[ ΁#Y[^Jkө÷g$Osboń,>[2JG(0. +n-l//ɐjtn*j?-*cqc@Al%Ov nO~>p&ήLnfLwPpłj*0<0 I%ݍYD鳐+iE 1FJ#Ў\ݞptè:n: N& ˾d '#.~-nP7֫ K7‰褊 js2n ς+%|j `a1$jo@1+⤊Ƨ"1G_VQeLBd^d)9cx)FPtb*IJɸ)sl Jo_'NA~(K4F,[J|`!RϲH)0ĢP1&+!17/$vc*T䶭48pk #&/n(,zzrq|6k 0 &XzN +oo~Qb0&-."°p0$Kd\)삈{nNvrlRÒ&3&Yg/11DPjF*=.G1D,6] p+X\?J8/(&O,O5Ќ/-... "ɬPR3 K (M le)Q#,rmRm0l ב|ؤȒ#>OP2lb7r:Yl \l'g*8!5<;qS.B;@ N/ Ͱ=%r4M?;0$o4h214sSD=Ca+X#HG@Q /3r(qhqG /\/@;k Q `Ik<-Hdc_`0CE w99t4wPKg[Vlj@/cX}`RAW%/p~o⦯rTaKuΆ@)V7DkdF ;c2b-Oq5GqG[ڐcuB9{0sVo_DlqPȖ*8b_&+)n#7kզ lT9/mVLS.wľztR7@jK1*Xa1O_qP QG qQbC!pm))umȋH#YPua^U(ѪjsI@sM&HJq|&lHMLmd)1 7M4W1W0C  2./~W#ITWL&R}k4!'Rf4ITIL s+q^TYwS,biR:7!~DW!Ѯ΂ )؜G5vhův{UM֩63"*(@CU#IOx_%G +_kxM{to.M;x.2fIrd :dm8 rh};2IZqc̢g*Nx!#q eQ{}xRZZjZZ?yX+xkצcn y2_3"`gJ)ԉEYuy3 J4&.dgC/9;xZhWZn]C %wJnjg՞OWz h72p[:z_3gw:f@ i :#9mL.⌖\hvA!W7-`rZ8QkT慯M50Ū^I&O?Ķ=+: T[eP&nyc" pW%v)6YWڛu.#[hۄZMx5(elJaSUIȱ)P9 s{s\# EvѸJ4tʚ@#]+MPmY?yqrHGz|/4eLrINQ|^ɼI΋.}#ghhh3ɸ>M٪d wuwg5fS\gGyIs>GLnnؖ{ԔKy/Q8峉uOǦN}{vh18D܋5di/Me{jW<b)e`͡U̵R;,E˿Hz,c>,I-"RXw\zK7c;7 ٫ǟu7͟7/@ J T٧=;ݛt.M>[홌(Yz\G4;բPRrt V!=9k%q|݁{!{ }D KQGK-n5U,1xtp_ѕ279i>'3w}/[V(Ԥ74Ӛi+եֻR!J%1395&O1@\iup|:'CR̘o>[sWRY32/S?96݁%lIiGp=<ڨg/_wl÷͍w{twV{}>3R0\pG8wD,159MH]e_P&߆ އ&{"|a}fu_E"P G2]J-7Єu r@UV,!UyX@FHU/{!\jڕ7ZJvaDLdcEFI(Tňf}&gfQUwsiߌZgU%ri*g&).$I"2ф0 ianZlW%y5ilzUgZ޺jΞ UJ K@ǁBXMFHI,0tV˥U$ڛV^ɣ]j秺ɔGfU< bq[ ZRFL2 C{nzzmRzđ\vafD_kvƆiARDa`#0C18n׷ݫχJ}7W g6zMK9`HG'Cױp6 k(emI|TZͲ1p1K &>2jd`FX(+/ VB5f^I`މJ$lt){,>/$m98%b{YϨqTf5?aǜeRYIMZ-k1AsK는 FV6nLkPyk|њ_+PN,X8jo̊I{ɩ2ZV#Pa-*"Ձw0|3q,3;PNqO>pT4<|&]A%疸MM[ ewyrxjg'ĸ3PL̏[#:Xur[ x|>.+moF,iecztS??ߔ8J_&,)uOִ:v4amܺK#8vf71Kg¿^ӛ+p=ӢUJpArC"n7߇}!e0I{g%zl} P }2^k&WM2wi2!3]v0rZ'5!uΒ71_n!UX 7$fV7@o2cVgk7>E%id5utH>6zd1|8cCkVGyjHDmupHlc2|4y8gX-R8n D$6w*Q>$( Y"rpdoU٢ ヤ1u{Eh,҉XRH.DjfJ8$k8un!B#1DOB2P~Y4?tfh({Ba5smw؍1玕ԎD?1GGp$;#5;x_b7׸r؋RFѐFҐUkIr)~ݤ)DV )P,Y tZGR}O#z7X=)HkB:YH"׎GpMFysw3UVɉ8ZGRgL(ǡVH⃙wY Ɋ1sTuٗ7VIYv1rvɑp9y!L-S>!AORZ1 Z~Iyd"IH-Q?OIBci~L (\+ xG'M\"~9뷑J&)Py&4yuhIPwy㉞ 9e߹"rə&PDo(Yc/ihZVveY8SBYcW᛬bl/EQmrڕF!F&%x?B :`#]2{? UiPU~1:Kj-YMR*CY[ʥ]~.LZ%1 *D: ǔ?H `u)؈} :s:xHȧ^ʐ :xX$W8-i P+tAz0!.cb2ʪꪤzjʫꫤjD*J Ɗƺڬb"GڬaMʑ2J LZ%L.+ɮ *Jjʯ BT 8ZJN Kk˱kg}b5POJ$kLʖ! {=S)գN0uq1s ,>_|~aQ% &1 y!&LPg?]+wр[˔[ y(:YKcr{z+ks{d{xi[ugU˵t'U6+%ϗ8a,/j7BWD`z+gbz'?B~1+@R2@azmbArPRBoZd}$ 6Vйr0(ND;GBZ(u 5PzAA ;dwkb` ۼ8KZPÀ+1ѽK%\*+K˾b +k˚+ _#;+&';Q2QrWAG{/2}5/T 6!Ag+a~1 P@,QcEq*Il+vA&;;/U|A[]ZdI~5 ,!8,@ē 7/L ;N,_|LŊm} '$`L,\g, FkǙt͔ΐLΈaAKM ޫLcα`zgNTǤ$A-Hq ͠PU gPF MZJB 2&Fmt~ RHJ^LNN|wVpx|P2+;.J"8pF~~(|yG*}<}v}Mm^Ul(ۻlA};,}R}պL<3 %!%c}īí>$ Rߝ8 Țl_2)Ǘܵ;^د>Zû7uL去%#5>ȹ\퓠5,qھultհ#DƮ^yW!^AMoMRk:MM _cL~РoŞu+7Ёσʫ<ǵd7%,@\\pa8yGȝj ^VvJ+8n͞Bn%]_WD]3l糂L[K>U_5{~` D?_gO<}Rİ'5:yo`$.i0|Ճߋ oK,f,`7x۸\īϟ@";ç5ðM ,XXc0r&ɑF \A!2.^ X(^4G*4ϙ?gAeZ8sb+5qB(A2t( Ɖ!bYrP,")FRW\)M*{ JϠ}f4jOSOz4O}$WPMZ _O Й F3,ƝnN".J ڌef,$St*ԭj\DG5=L#Q!]3mȇv;U'WpƧ̛C3ُ"ڠHc7=S+(R9"3ҨC$ZX$n6GĂR3#N2o"\ 1DcD (",-ɭ,| G&rMʽt)ټS1S Jl/& c!R#9ȭ&* )+Qs&9P.?:4H̻&EgR P,qj+:M#JER$L[(T5^tx:?ub9P(R VO'X5EjuèkX6>u0@ꊥcHUV+}5FR RpGfQ@Y$9lB&YC }-vx' )^ [! YpK2%M~j\\Ĺ0뺈"KvUV YoMH^&:6yufh$V^bVor+` |Bt%`0 mӫ wb74 QcNb!0{ o$O m1D>p`N$--tf0Yl!"(>բgF")gxý Ij$uܞ̬rh4ecEjgtl3w2ޤINXT[6q QîXZO6009T_!7g#_޾IС2keI7Q̑! g.z_TF`9hz)N.c0nl$ɝp1VZr8S 35h/Mȵ#-/ٸ!v|6n">E1ϾN!5&$0osWoZ([ CM'P WmmM^ 4eAb/(ޱ՞v"0O#8 uG%:gv\Ȕf`p6]q>d!s`6Zĵb(si0[cQ(_ Λ=6GiuxqmhN_O42\|KzyBIH:? 08%.RWYZ^؏}+ܗ;!}?^N,05;2 7ޮ"&guv'P-!~TG2 k*0:qH P43@qɿ z Hc1@D?+9[A)#?Tv3@pk+Ҟ Ĺ6qĚ4A(@!4.ș:*8zBS3J/wl"i>3&heq 89lI! ;+CZC*ؐA|YCC6*y}c p :7(6dP?G0 qW{+=?L( s\]$EC$_4AkEC39YG[֚X: Js?kDI U Il5ld<ᓒ?P/ ۰)G+`Hl5[غoɉP dž}{Z H; 80늑L III{t1IB~4ۨI|cKH?PHL{4 sɊiG aas%e4Z>Ib+5Nˈ*!s˦2l; H?(9$4+yiK{ ;vZ s ̾|+͠ )Tм)ƌ,`>ܑByIr +Μ< żЊҌմ tLSs3 B#"I@٨= 񊟺ӜXP1XFb(9<.:?OC%NH̪T$$XOq#|ĚΓÍxЕ/EG >XtO9u;%Sh="5L (ɭes%vٌIXAчb:ېᙦ; ݐ1 W5ȡ &d!)QRS:YX PA-B͉\[sD2$Ha| RT?}I 6mQ5ۻ舛3ILXUS:%AmO1*>v3Z}!5$m4,j?ijN<( Y 68fLЌ).VS m3}W`A׊WR[R9N;29cG*-PV`_נX`Dœ0;Պn4Xي %XՑX.K_AK0 2oq1@R`a6=̙L5d0.(D)ͮuA5ыZ(0"=+[<[@a ȿPxJ\ɒ!k|.ܐGFѕ"8AL }Zy)rdrډe_;mp,Gul!%?` 2-^޽Î+C[8 5+q GNz\%j9৸B yiUK2b9(1ځb}Ey0M #t],;2X&dc!N?+#$Nk,3aA7_0J`?)61LBk_**ENQ9VۓhZH *C3sH˨mE5^ZN #_ X T$rec:5ڰ$,@[f*`fpDukZe+fJB__)fD;g/ZgE^& l 睠 ?Ri &bV= =qI@ER~Oۣb~)!X?viӕ|2* Fivd A\5 X,Rߩ`FGþ lcg.jhĆۊl*i`\]~FD 0-3  39`!h: GhKlLQ#MЊ`7E 45М¦^Ɔ?a#  XmC6AXq0)I1{Yf<* hv `*tTgbPm먚+ JK }Y* pב?ppjpOppOp@JNs'_ p p/p Oq/L=xSqhqwp%qgr qP赭q--r/r0'&h s4Os5Wtˉ㩮E[s::'&0ψ8s;s?r:̫|9sC7t!τ9YKZ*"KI$y-$7tJt7*!SRwuRg8vtQu\􀁩}\VuJ7SF4j*`_%[?7rvgvvC"`סIv`FZj7*rWvkv@t tGU:hwvrwuPwupxlIuzwp$|`OW_%%}#i[}/!7$tuZQ.Ia0_P8 ֨8AA9JP2 Euz6^֐ 4.FE7yA5m,**`؋穯G)}Pzb H1zAz gz1ƍLV*n=?Yw"gЋ7m!3T>82] ߘJimÖE Fq Vq1= X}䘍]0!Im ڷ=h%$U4䨜`HgEXaѸ[2U,Q zyo%X0~i Gu&PA&O:(JFP,`FcQ$B %EÆ"XRA)^i5NI%J9´BdƚkvWD-7z (K:%R$0PƊ'ƮS1xFeMfE0 MǒDaPm5b^~Ƞxvr`'k"PV:2f+>i%ZnF[4,C'kݚ/K]eWYv%0t]^k¸`3]ri&R4W DUWOeQiaOqyd0SY`mW6 "ŝu }0H%rRr?Exi@S.ElugO"HB>d(H}+(GNA!I'Kz$t zQ !b,=uܥ$QPJn9̑bZX!Si w[\qɹ .*%)$F TS !VGZڪy%٩Jڊ*kj0quF2۬BϦ\W+r˪4ɪَkk IJo ۯ0—V |NtUM[c,mŊ0+ClcA/Y $_CuLeL\9ܔ?C]@;X |OC 4);!i͵Cq Z=fuj 6'WӚMG]u\C6$wx1wF/ %ɻ8Z,8ESnHyBS~ O>Gy x4Hd޺SlOYyG=:XID+zо[0[kR8gDK}"Z]nRTH¥^_"v,,bE}} E*d'OJt {{%{p&7O}rRO0?&zdԿ<%,=_  Y!a`秦$+s B( U>BB x0Va!қD? 1I"M>}|-- bi$/QBAx_8ܩJ;E^@'QC&aH!&cQ"ȝZ xXS)LtB@/rL+#U}H\d JM_6Л'1srkq^G{2!YrY"lyd>2Mbʋ%s"\ptrKY49\|"FDBIf dEJs)҉W+ o(d(0ӿ\M>Y>d4K' Dizb jB~ Vt4(*AOZŗ$M)EOGOO' I% _I:/^qY874HrVAẩ MbH#bAȝe:lqI yc3I d0/,hP"81>!o<&DonH)TISe]].[9O9(qɛX%Cg7SCIc4 @WV;]X$]%‚ly_% К<|2IUT>ɠ{*/! G.&KY D'H [Ĭ4B>xDЛb%L&ˍ8! )`"BZ%YX OP&mJ*ɚhg713)|#U"H^57{BO"D]ic҂dGW"¦W9OzPܤbk"0}{"R Pir6;56Y_fKًY'ڝe{-b9RfyuĻ퍠T>`fb% ޣ{5aEeX]c^΋[_=`JgR[bAA&\jnjշHmZ[~f%&b\_T܅d~en6Me!Hԉ~!GcbSA\8U~١!0AzFFk< T06ٙZVLZf_U8ff (t'g+L^D&-ُ@v!]ǁ|*HU&VeB6F@b7gO'Nŧ%ATebl֏2Ƶ[PHAl(ΈJ(UD`҆w(K@rXIhU ĥaF5-}De|څ&Z|| ~҈ɰZݚ$t.YJc+ejQ՞Hw*Ay^VXv)M).ޫq Gx]z#_DӝY[6bayU=W%5 kv`EpO.PM< }7릢W.e*M뙌d]iNN,Vz+Y"RuD(rbZb +y4BHDYDvR*+tp#Qp%KpfztRBT\-m=mPl_:6 *S݆@ƨyWgxݭ^OOڄZ`&ʓ&W*Z'J,G$LDB k@jlEmx-'GW5Elmq,J`{l&P0ϻ$f%.#hlB,uՌ̂mItI*o^VWdnHyݖ:TP▤ LumK8Pw 6"XF*t/LZʕIDo5ƗyonrT'`vUIRYp\jXE.#rB)_Ȇ8Yh(9I󾅼O%[,PHܝa`C" o~#"JIz%HK@1 Q`0}0[&k_:qf@Oqݎx]1^G"߬,N=+<K1j`hK$$EбX>OS$`0PyYahZ|Nm)uG`EaσV@m"j*Lty`GEI5Ө&`/-Кhf ׏Ct|.?!IV'S%D45Ȓ.13R9Vثw"L!6+Wrq >+?G93 ;ˡIU@4N@GnE| ڨ4|,4KL Xq94MtMJ PJ;IRM u`tUSOtP_8litVgUkuYӴUGDf΄ u+_]ǎ kx%_6`sl%!0ubM`0%dS6Č}\Wvgw!Kf^ϙì j j gۭ`kJkv kw+Ip7'jkJ$BkK_ sJ~[KhQ8ƚxLȸ xeH|ˋ#?L_h(H l5?s0Q$bo?7L:D}7r;[$7*v[$."@:rRB 6tbD E0+98dH#5lA ~&LG"ԙ>-L+jb$b'N4!>uP!]@4A(z5V1EE9rºȯ.Iݼ%j"a>@ thRI&)*f"U].L@4IX/f>,:9 EB|sX,]06k5tW>ɋsoʉ=V6O n`[ ;j$:7NĆM>9n3_m2,Ґr;<e863={Ϥ P (o4q5g{Ͷkf\8(B2vf5 ?c)N$IΊ|ʬ8S^Km"/'b"⼔4abM8|NAJq;K+ PA*T+A& LEͮXd&uD13;NP+uR#rQΣbMhZo}.\;ڵW(6?' 4H5UE @J+(HVQ` pS @%C2,`)| 4XKR|+.7>0|O:й-hn3+.\TKN"(*)x5\sEl:8`4yluѢ\-9"J@dY09׼rNOhWvZ~XJr]bzN+ H Db{妕%,HI}9ٜ&hrӦ+cm=)1^t"l4q.c:K=l Gߖ]Vzܪ|;^UK*iiIؾ6M#~#ؤs?3oz#LIiX#|jjT p> iXwA7EZSvF;)7sqt.M9H>p\^( ֙Ϡ̱1#5>|xD,8)bBA (X$Qadc/HgoQ q'w`K"QE~(r٦p,mZEjT` rsγkj"B- Rd,HXoN45 -n1=bQ}v,'y`qUar",E0S}VJQ5}(C8i Ss%;R ԒKU:PKtzB m;8i%e RƔձX:'0v4f{ML8btdE08tWIfEE@L: 2e/s5BКen=mt+&u-g$9F]T 3ezNrzgOEں%NpEq(;f['Kb4DIL|P:^6\;;x<Fdo Tmk5LǕS+((B,mQ$ڑr3`5a\wyJ Kuk2H~V=2$vKO(8[G?OL86O)kbodٙy=+R?}vgDK)u V4lh@x Hhgn] ݰϧ~ʮq#ZBx"05:kX 0O_&:pkÛ΀6JxbRΪg48-P^F5$l% a&I0cPN<0}|!dvH|0d%`5G8Y#Y(a$MϢ<&%uX4ͬLV,AW <$nXC1$Ngp./*A%ZJ?*@x 211: ,qsU,풄.ƺjeKtS%@x6|ʣDY '@aCicЬL;OiqX@Q \'*t" sB06ŠkPP"x slcl02t'Br`Z%~JJo*ciNV#+mFJ0F&dP"Ud$W°NK4-3˨*NL &>+*!\ГZC>dє29,,b!ᾨꓟR? $q?RIT@NLd!BA& R;GNp@itLj MnrpbHl 6*%rCqECۀECAwĒ!T :K@ifljfM5g@l?lc+BhFDhR4-/-*@C07E>UrĤV\C5ۈ@N> ^#F7e@LB0"]A3%`k"a!FqicergsU$@S A#"vLbLG>))TC6mіmmmնmnnն-䭯ʖnvn)novnն"e,\om wpWU*p p_s(p%p1Wt6qvn'oI7t[7qtGtіk#\Ɣu:NspxWxxx $m" !zWzwqe>bzW{ nº#Sv{w{yovO|}ag6ÇL\n Xw&?R,.@Rā818w&:dX~v3x; J8Bŏ48Q؄b q g}Xx&4}x&WZ1y؊؈=I X5䋅xX̐Ҩ2ޢ{X؏︊ 9})vp=ո7؍% ه )O/#c[l\oXsiKd %CF2Gk8s;PµLK_hOVI0ٴiY1'Eǁ IJPr~h.y%3S__+!)&G~Y]R<˛YvWr™防ZC&1C9Sf掕y_'&#֩Tx80@v.6#aoiز"d%:z6lKtDzY+fV$TL.>fre;|xz↹7L' X:a9IS0ylzspZ='S9zrqiS` ^$h:7G;:4s~@zdHPFo`V~&pPciK#Ƙs@WliE'N)6xlee gTkLuhZ h \VyZzB;86zowS,߉w%PmW"\-[S xensmgl_93)Ap,.!c(E箆`Lj$GfF#0dxuhTizY5f.SV6YϚl[W\I4uOT_m{•ԑ PϲCEYyECKėQMPū*z J_Û$)  8nS:.YV'x=_d7ݗWCXۥ>L69a!AC>Zdjdy>PclRŠTOS"p,grd.ZH\N B`aHh5(gJ9/B)V~BR[PLE%j$ ZS_cVB)e ?ghI";\}ן_ V)j1 \PH*\ȰÇ Hŋaȑ (P8}"DSȏ#."ayT ̛0Ռ3'a}Xuf0+,Y"GQ} M)%,?X;gܹE,e5:&A<}ɔnФKJXYlXP-kep鷧]c;UH:xjÉwsX{-/f_gr&? I5e}YƊg{~y嬩X6nix;*PhkeTh9j[NƂ(\ ֨F`>j6J+x6o |Zz.,~"9fK*j籆&q*))$XbM*z8b/8%5.~ӦpG}R}x!e4J_V zwBZqR[$XV_骸fh`u3V5=0K-}rDF`7 WoZ0vlvD ^:Yw8ۑ7P[>5U0-̭j5Rf[,׵I/%wb!?d$-o'V&i7J6g9 4,VQH)҇%"ke؞EX\Hjmͬob]h0Al&/['znCRx>@e %s}ՌI}Q~2h ΃5{{^\l1KI(SRxiYuDFrˉW=BGhV勞WQc3M8H`Q beNOx>rΈ'& bBmB@D~5IئuL3COI(K]Z0 >IZ-XfgcX1Xj`@]vY$(Rgi"s].Nl@E PZdY[Ը`{$* Lz;L%ITפ0Ð6e݅[NCW!gT|ԗ\>``0UØc L*WYQβ.{S2 -ySua"tx?lUƒOjMsXijQ6&2ۀ&x/Z"S pYYKKL7ˉa|QVUp-jOYhK yeU02֍(:PLSڬ,4ٍoIl'=n ~2@;J_T|~px,6m O^Aj,ZX<rRٜ JPs&}ăIa#v|TBBRv7L0M+dQ&r7PbQr`"="w.b}W"Z(^ ,e(#rp&!Td7R"#v1=e57pq|E7ӵszG~RU[wu ReG!_t4 3R4laG&vPLti46',[g`(+xsgNScMܱ,W;BaMF:Q)h)UX=q!)G#10Ay oJcob IW!jG0볂W|-t,cHa.f9[2*2i6S!(d`G`]%kGflG ;\ rd?(tr!SqS-6O" H`jGl* 1dIb\[!`!Y]q~6XFe@Z@diS׸ȏHВ8`Ð$d+/b+y''VT`tʸ(O )1yhXiS|G3F,0Z]1+<."M;a3KD~QAGQRK!U\FXxRYu(qyuHN3.I!ϲd67%hJUeR'nPDxD6[Ɂsѕ}cY* vWh+a|$5@!QSQq5i 8bٚIJeK}$Q+$9|tAc9Wmo}4%SU 4};Ia@N'7&R ;R7 bW}XW9:7lݙ4DF1P9;)}bc@9uSlY*@msK1u1NF MV %ّ0(PrPQD9 `uh#8%j}'7HVHx!QI:nE2Q/YfX=~,#AG *>MzO*SKHAq1 h`Gh3!)!(@1EDpB3"H#L*iS&x @N UNQUDMgq7-Zn}0IWB!2CuBYW( B@Y. W >  Pl! 3Z dR>g(3?4 myhKOUV ɛF.KaqXmk$SR&ۃSB)D5%t* 5!xb> LFk"PqS"{IX"D믏X>6c!Djcٺu. 8!zڬͺ**9.jQK[v~A"")kQ-DsM 4qFv&; wDL''K#]I%jcz! K蔅'T7A$ErKJdeu3.bku p;%Pm$ dC$]t%uf$KrdG0QhY "yvZ9! &?:*7٬Ț > -תi6B#׶y[O2Ahɘ9|bT%a)s7J bS TQzu.ZLzCD+-/7B 3</|C9Z  LPVb`!9!{UR&09"s<4Dp!IEYY ,)6pH-=1 qUwtDVHҚ [0IՊ9 ajGhAZ!ɍe=xqyy&MQlLq(Qʣrzz\ʗU@y`H%K6:WOV|߁\ܚWY['5Yř":wsRlhyL[=su=÷$\x[#%8$8(#&8 $(kbHWcL5%U' Y#I[b x20(Tʣapy=xrD ‚ԠkVFN>k{d)zkAjWLwI,VA$9"" U6|2$chqp~[ה!I)؉6I y0sCyI".(sj Ӻ%ˊ?Jˊz}I:ob۱3PKR ڶA/b}&r>?0 Z ^QٲuX>%Mԙ%% tJ’˂"p"axIXjLQ'y";!UQF3IE|ZzrgoA!w>'дKJ7d'-;*à!9͓Umn_p,Yi9x}2>Nq<;zJ2KI9OUvQ"ɉ&yWh|һYX$yt(tM}_a]anKYiB7xMj~u!7~.n7]F1')Áp+ǡr: 8KrVŭ/dn*cjDwnf_! jL@$B^qw wwD#ӎH>֨NKaD ~dFZBZK7|kqX(<[S4)5Yo84SL)S*VɆ` ~fTz : B#ફR%[w%pu'ɄC,wC+ U-`# d*=*Lwg-@֭ҍ*/g?H n7ow%,J Oq$> XVlkrL"_އx' RQI뚌>sA#B r4+_s iju} eh[oNn~Ad"H P$ %"gbJpE0$}p$j>@vO,X J"Ȟ%H,Ä)-8lఠ}|(1$w$)!C_XP\=lg,C8qDЧ= J- r-x˖VY6DK,5A:!prbT5ÁH\A)L3+.7KN9rD⮅n~+k"Kѵ]N2` ufZ?2 ݜ#:l]Ϗ?#? 4K0B#^)@!뮼D" >q6+(!Cv(0zP)0| I =3H3 "]SE,h ,Gͺ3PB$"J|z(WD6rM-mT&-|oP%+ȍ(QG4RI'RK3+ERP$ /\l9Jl; 8N\J<,+#Bl$NVYkE ?W:؆r)3U2gU-MZ!km"+S\؍F8aȀa#b-~Zy%ID/L|3@YSPwdCLՐ%_=˰x%ž)eWJo_`FR=:=`s6MUj6|0Fd{?ٲ6oֹ^)؆ȗ|a go\G&^KD .bj_Ĕ})+ f]`C%LBBm)l<(-4q[Ll&iu.&mQ4ݽ*7_'4-TmҶX\Q4uSfĘ<6 1r|NPQL/csC=0Ya{X7)\QT SC$klQ 0ữȥmY?ȅN&!uO"ʘ/ &0y% W"2R3R`t͂D()0%6c!_:C̵ܐ-F]Db`PSHq&6s $+R87KJęÜ:H@J" &nYV3.q>˶@c"6ch3{C % N :Ȧ)NoSԧ:jOSGjRT.թM*SԩFLu)vի_kX:VլgEkZպ֯*] ׹.t]jW|k_XְEl^uldXe!jg3 ZφִE-iUR*uml ʖmnk[Vo[5nr6Wes]Bw#z^]v׻ox;^׼Eozջ^׽o|N׺o}{旿o;`XFp)?D, vp!<WX5acpA gimp-installInitScript

gimp-installInitScript / askPrinter

Only for Linux

These utilities are helpers and used for creating of the configuration file /etc/mtinkd.conf.
The file /etc/mtinkd.conf is used for starting of the mtinkd daemon and contain the arguments passed to the server.

AskPrinter use special call in order to retriewe the identity of the devices attached to the usb or parallel ports.

Example:

askPrinter /dev/usb/lp0
askPrinter /dev/lp0

If a printer is detected, the identification string will be returned.

Asking for the printer identification on the USB port will only work on newer 2.4 kernels.
For the parallel port. the ppdev kernel module must be installed.

Bugs:

While asking for the description of the printer on the parallel port, askPrinter use /dev/parport* and /dev/parports/* instead of /dev/lp* and the script  gimp-installInitScript assume that the port number is the same for both devices.

Author:

Jean-Jacques Sarton
jj.sarton@t-online.de
http://xwtools.automatix.de

mtink-1.0.16/html/Building_RPM_packages.html0000644000076400001540000000343710376041214017021 0ustar jjfuse Build RPM packages

Building RPM packages

You may build RPM file using the make file.

You must first make sure that the Makefile is OK for your system. Call for example ./Configure -p /usr.

After this step you may edit the rpm spec.ORG file[s]. and add at the top of the %changelog the version and why you have build the RPM package.

The next step consist in rebuild of the spec files with make spec.

The last step will create the RPM packages. At this stage you have two choice:
  • Creating separate RPM packages
  • Creating a RPM packages containing all components
The RPM file for the first version will be created by calling make rpm-all. The following files will be created:
  • mtink-all-<version>.<plattform>.rpm
  • mtink-all-<version>.src.rpm

Calling of make rpm will create the files:
  • mtink-<version>.<plattform>.rpm
    This file contain the status monitor mtink and ttink
  • mtink-gimp-plugin-<version>.<plattform>.rpm
    The gimp pluging if applicable
  • mtink-mtinkd-<version>.<plattform>.rpm
    The daemon mtinkd
  • mtink-<version>.src.rpm

The rpm file are normally placed under /usr/src/*/RPMS/<plattform> and /usr/src/*/SRPMS.
If you have a private location, they will be placed there.

In order to have running package, do the job as root. mtink-1.0.16/html/mtink.Hu.gif0000644000076400001540000022355210376041214014210 0ustar jjfuseGIF89a`$,ńw)DĤWd8JMNLؤTD؄Ĭd,YФLhlDЄdD,l(dfdHP4شؔ϶ĴlTtu<}?T̲Ȫtp̹̖X3Ŕ~,ѴtjtD\ĹĜnД̠Tũ>K(az7ܐIഃ@Xܲd;ߔIߤԯxTzLʨdNdI߈s(x|:<>JWNTtmzTuzdČl׬\L،llؼ\|xD!,X*\ȰÇ#JHŋ3jȱǏP(ARr˖0_Ty&J8osϞ@ JtQ e*5d: O!r3YM+t*'dW"pu[֙?v>{ɟ}0agExcOLyeʑWd3̟1-ktgʡOGի[KA O"TGWvk+W>h# )T@cמzv߷{Nu絣7~{o,-b` c`) ⠃PXᄋ0ra;!#;!衇; G;}";1";826Ǐ4aJ>#BJ&)P(PJ9%WFY)`PtaYIgY!]Pf%rinykiȟjH.JhH!RJ@G|S饖f馚~3I>jjꪬjk+ <뭓TB N0-8 -쳒XJf+I n .+IlKn9I &Kn$BлKξKk*09;*g\ſ? r +2,B2<-'R-i?s@r*FK7ipB.t=h @'_ 6b fM4vp-wo]wxm}݀w߁|h _wb4AP4yߜc褏nBJ z#a ȑ{$H1O:1 |k?Wo h* *xo[J2+V~V6-U0߲U((Q"U *9H@.p<8?!D. R0QQ;a K DF,C? :a{x?`>b `E(>qPE,z]8F+h#D#э> GQtl>S$ y0BD"HD0xP$8&q@` IOkLJ"pp2Ɓ YR@.qT@E0=`$<+|&0e<(QlUf7) $QeXH@)$x<7TAXFh{ڷ0B~{ =0`I{A $A d!ZCJ8@&FTbȀc,K 8N1wd s`2Q"SHΦLm*$ ':LPwZg}v;ŜOP<ݞխpQB C8aM"va93S`F;ѐ~#MI[Ҙv.FoӝCJHAO}Vͯ# BWr! ` <6wpMmL6k; n>|{ F{u=Myx7)~2lxHt: 2[Ǹ4qcHǫ!=D5a斃B9(r#),DB41L,w>ҕ #4NO#鈶zsZ՝={(>+Z:pp=oϻڿw_t{nw a7])8<4hGB 4~ <>h ۿ)grHr%?)׀fFgV rPP*sv~` a` 0Ps'.( (8 7h5p<8-=8BXD@9GhNKȃIȄOSx;X~pw Z __xfFzÖza |ЇA@ XA0 A舔:Ҁ:@艞h@?Њ?@~R~7~7R0 H H( l P 8 l0 ژr 8@l X]x+suCwf5P€ $ȏpyX8Ђ 49!(IɐAh $)y)(Y!H -x 5`2Y2YZ#)`F)kKG q8u8cUYC`<Ԡ[  <v  vph AȈ8wzk  `:И   Yx7Ѱ?@yI) @R@pٚ0 )∛9 ] r]]l0XBpQ(B°Kgp y @5`9YyٟZi K@ K)zJ nȡ@ J) c@ @ ):AТA,A 4j9:Z@ ҠCZDF:JzCzzPj`Xzj[ mtpejm0 i7prJ@vZ9|}z ]P0 z ] @0E'%@gEP@zC_P 44 *iJ鹫 :Ɗ 4) *ZzΚ * P_0˚ P:Q nx *0CzCpp 0Ā+@ 2:[@ Jz J P`+ "+: ` `%{`-m.;-+#7{@#@?@K@L@DE{@M۴LQ@Q R[NLF˵ @ @ ʶ,ā  Q }{ ˷_˷{ K[K{ki˹;˹;ɪ; [ŀлk {{ `{ ` Š CCP R   z C;p {J۾+pJ ۿ "\ ` < #؀ 0 # L0' ɀ +L /04,L@R;= :9F< KP T\ T\U@: x]fg gƑkƑqOdU^HVPN*`h>Ͱ  p;~#^nPހP *]*P nP p>钾9`, @@  @ π^. ~.ngppn`gs>3p3 nsnڀ2 .a`N~f@a nݰaPf2`fYY@@`  BQE]G " @"(?% *`,O0_2Q ( :<;͠A5E⡀G_?nM/R?Q Pj<>=??*V-u`Pmp* t99P9 9@ P@u@ @/ T0T @NT^ g \ sp?OOs0ڐsɯͯs`ݠ ُ@/ / _af`oAH@f EWPRQT,QD-^ĘQF=~RH%MDd(.L5yiSN5q3P<EQ[}iԩQ^ZVE=9ԡBgr]z*ZG٦UV۶;ҕ۸|gUx&-B*X֡+s͘=ĒlC9ȗ+[\5kֳ+КіWjv/׵j9ޱuQڲs8og9jյ_z6n߼}N<6-;頫;sλ87ٺ Nޓ->=Z~ )@0 |tY| Z<6R&e{/AL,sbEܖ ޖ%k+;Ns"OWo@,t[uGFiq zsCRJ-ێ͕IPջ81Zڦs5_M0%4Yo w}te78d RCUm5`l-dbiGqntWnKS}]P@^X8\a7Nu;M:11u|I+qYe0V&>s chƁK.vdfba7%{ː lh9h.b75<;\!n'<Qm,{OCJvR@tSU6EQ㔶UTzCk 8%%0ul+wܨ5 wZL/;gH=Bg| -"+PP `^g,{^\Y_W fێyX?̓@÷]e+ >Z&5qiY9z%0m9RHe)pX:$T%Ί|ug5iKEUC\p p65+7J_׀yvl(Ydy@Rox HNjO;q}1^s+]',^XPp,uI7#/'NmCQȉN p͹Xzٳf꣮D^7'ױd6#벲#Nv5ǹ/2:.NF TxBKѮ9['ʵ)fR4XuA>t{|jM g㜎 G"nl7 6ڶݭ@.}V-uHG>.I8Hbeͺfͫ{ăM9t. )Ԛ5 7GƑDa3ws*z穭 1~ lVY~1 dB+ 1akkB28b$Ŷy Pؕs-xM?Ddï, '&4+e:sΰp!`R\b t5iNwӟuE=jRԧFuUjVկuE=-3)iKK}a[>6ml_+F=eS[mn;v=nk>7mu޶ ov;~7%.ILDGxp7x%>qWx5qwo2z884Ur/ye>se;RdY?zЅ>t4jF̈́g)?zԥ>uWA9"=iW{>v_үqD>Do{KצppR @?w\w8_NpAwW~O8+yG&[h{yċ'{x;'Dp='}?_??ۿk?j=ɛ +>@|>@ @ѻ@@k@J;8 ? A@ @KA9Aȣ Tľý 4$@{@":+h5+,;)|AT8{BC@@/;KS#`tð A ?#>kKS;K- `@E:?*A@4C0Ŀ#$@#]\*0V”r@Y(2 = 'h'GC)p oGH1liLȬo ;эJZBQD Ĥ A3Tڍ#)l̆jZ;BLMД~ģяt|`;ٜW+L'Xq+̖GO3*Si$&0p qR">r0 i(둚r!*%z"ڐP91ۀ-%ePK#A$ Ž-92IQLb|P OD!pQ*!ؑr &#b"1YE QR !/OS#]0:4)E3u&ba<ɴ8Ҥ*jRܔ=bYXty"„$4 " LLN=NO+o"\S=1B1LԶ•-9&DLe\դ]EQiܘ#Su1Vd+6YPY!}PUBVLʖ2_͡Qpqb<ⴄʸ%`ʪ\e `599NҏM)AoE`u}jO J"ʍ q A]i5ecWMB_:^(/g> d-5d4F:f ;V'[lR@&d41J_QrU_]X6,%Kߢ\?dMfBeM%\% QI,Eq^^OJIB$N'*I(¼dҔ ugr1"Ùi#.ۂCigNZq+g̴vёWg"8g|mYܜPp^oh̭gpgY:]~2fdK륔[yjQ* z}{ܭ)ɑTb5V**ښᘠahAA0ݨ tAC/'iJl`z1ȞkRAʡaƥcq O1Ykx7zיfv2 l$T&c7]t<"z#b/Y1Q1!(R Zi >)oBo }&o֒!'!H -:e0:2Y2z+*rxBW-S8"A;ne/*W 1#Tjq TVQ ߑ޸4qI tXKn:o">EqB'Q"@jBUj%Ӂ+&"r ӐRETNOʕ)Bur X'Zޠs_6r>瓀r+=scB TJN=yH,$C~#LK')iR#%tQg5W2%1\N!p"-Nfh+XKjf(-@MVjZs9=DtV,#<(|xܿ{-Z|]|In ?fN]ypWm-q V7$j  QÙDm*QaruN/it%iiGP(2-k-Qk>r`eWV"~')%U HEA*dgIr]JtɨTXUI9PMZ7`VFf NmҝPy !rPx~<4* Bz7@2|-jjPsr6yuǟ8](mѸe_9@`&rUl+U*LRN]qZ҆{r\yD#[tB\zY۶,,yաB_6RLfUB Gک,A2h=!tKڭ[WB>6/$yT8,5HRtG4P/8FŔRy|Yis,rV45\{U:ߕb}kE|L{~~sv4B2N.'̶5{Q=Sӓ)1d+P -m %%#_h0͢R"1]apWSŶ: HFkAHTl&ґH!PBj-9 H #&mإ\nӆ:URwUV" }N*|ۡ~;]s@-)lʳ~n\iF!Q^Tg*_W4#^$Hgy>Ò-K!sySǽT%ւA7ְ.Wf)-Ƀ]lZat-{ T A7KtB9Hd`R-縐i$\p(y/!PoƝaf# ! 'U앵@if!/>DcD@N5Dq>: 9x$mp]ɭe1f ,<`2Ζm<_(R)o\zs3?vaj3;|DIaTrlj%1U=zEBPClZMQr+9U+Wry4PM1#;,1H+y̔+|*n{T$=ª~2:NdU"2O;VxĤ4CjJ'#JdόvKGgc1WKPe^AT_@Ue"%'0Ϯ d 0hNӣ!W*$ aD$2bH/;MO('вbL jgQr64"!=cE"8˕1fsuM'O +X e ?ؚ-UYs]pFyϥ(AF#DB[M)Ⱦv'N]";\c1e68e_&Ppoi W۬%Rrl%LN #70+DF߼N@V\l.iSRe3!9rUEr eJFsRXseHδ q>sKU87D20sI ܾaKF;qkuUlqRpźWv 1#<4Kf")%r4'POI3cI&v0e]%">KY,KsQ 03&GH"%NhAZKG3Q2ie:j8p7]^O0eZ#rr( LRޜW>:AvZbG"E ¶31)!R m0;m}zZ}$žʱݐM!G&&mCSvC^מ %e{ǞEB?QMTe5">F|%+<-[ _\sJ$-M&&2e_+\SM^_NZѻΥ"7u XߗYG8p 6#p>6W?{LͦA0wZ qwP]ّğ6<61NQUw['r2L".A,%Jϙ AeZR/Ԥ~nC_d0u{|;\Sl*&id˅ڶ2HpGiA鐄 Řxgs_Yǿ-\vPXo8) Ι@\ pɆpH 5_q[XUKqߌYw_d _]^qT0I8AGE,MhAG vZSĬ$SO[RHa֙ 7̈́QLNҔ鑜D-YDlYQTRqHƤp L bZL]AlA"R"D,HʸDR"^:(xbbuIC@DT B. DĖ U"BJ잫9'-EXˊpI.rrh" IDV, H R~i-ߨ}#8 F$FF-J~-Rމ\NP#^iNdPL= 8Npp#$p#U 1=R=RFF<$- HW( [0JʣсX) #UŊx] 6`X[A2E4^:~PQGGHCD*n`E DW8Y \h\Ddљ%%RCLպm\ 0AbUN^BfKW%ÁNlѡ >0V=\Bĺ%(bvPКhei$bΘ\&]]Ag1\:U֘؅w w'x~xgyzg1{'|gz'}|'|z~xg| (g'.(= ,a} &x*hxZ%燎'fhrn耚(gvyz聒(bIΧ(玮hh&i((~B)y.iy:iwrv*Ȥ˨qLd,eIx#rJYCnDI Mj4Jk舄H|D*ɛL)} 8G)k=А  hDRT`WWVģ IߤilLY2eB5APDti Ĵl]Ǿi}EyFhEYU Ӆ`SIi2Nn$]}l8IF˾Z+fi`"cnPŘTպKtCy+l#qPَr. VVvQT>^޺ RJqHn ̵֕-MnNx횄יޛ+jMޝA&VDA]Ab$ƜU L<1)-VpI SnjjT"8 aHL,vDIj]p.VΔom&UbНӬj/8ėɜnA6LZE1őL\F/nfɹa/85idܾ*o: ,&pLBZP(@0vjirJE4# ]uRJqᜠQ'DX| eL[Ȃ4YNwh)Ob~Llla1\@܊Dji11ELj4/w RqHU2r3nnEnS 1nh:X-\ ӂ|P!W CPW]A.0be|lSiMUg2mŅO l)3AXX'Sd5c.E 5CK6"lD˞^]:qP3I.x1%lp]E}âJ硚6Ϻ5GT4^88òj[i.D0buI"6 [XHQMtNWAIiŴl}Y3^`eڢմӦTHM5NKUN`[:Ҧ(r]RWf` 9ṵ'JMs^]ߋգJ *Vp`K-4etD-rĖjsxmN$"E0֨YLdl0!GpLwܥ@Gl"fcvDxa;R#!vq;bE#I&@0qhն[b&I3|Yf|p˲҅L)7MMsC"ChF|vNjY1swv?Fx4[:Bko0pE` q6I> m =ٝݴaDApO _Zɵm4=DkXlf 0((чBLZGH{"OJtOtM*XOKg8R'9OwBs#ݒnxSyׁ܌VaV#\=YLҎ_V-MFSvUNg ~5̼8KJi"\AB및 kl@}ͤOC84kٱ((#KIJRDXfIDAd{()DEH+t]BOWmD;Y\/_.'K3DY* S䳤tzJKdkeRUnRA򪷶ձo~gfptHlpIsYDpbttrPH dgWrgKŖʼt8DVTTK9ez HLt8ȵnMEluZA=8h=ܷD-4LH>G7\,.9Z P'Fl%DV=K;ˮ\>I򾓺NvY`-ݹs{.m~,Vs1XGLR88M.zOS:^ΛG_`!)w՞@xss+hBhpq֬+]B[8 &QU fJ6!X+42AZ=FЛǐ:=JŌi~t2A7(SJTKKТ=k-۵mӪ,]D)UP(*m]IM-$N0zcTZ0Q4Yn|HXVFPڂѡIΓhf"Qb,Vb1JR ^ fQ6Gɳ{{by^8Gƒ($jo5 Ccyx:Oa$F{}d_ -4Gqɴ„K jLA &n3)x-ƻdl2^!Z4N**7\(LB '~Z|2o2 I-˯(< i> $G) H,;T E3Z@ ,Y;̉򫤲< 4l)"Zl:%K$fٓ73 ̣:R$ Pq> LlL Ԧ@l:LBI+B:Uή7GOƂ >=J4?CN9="L;s(]$%+,mBSQ7aK!uƣRnc)"ÃFV98w/D3IX*LāX2+ $}I;:C@{iHJj$.(ܐ M׌GyFMjH 4wUPTe^۹g+ P(-$r F:zHӣFbpN0?`l6J>iˆ4&ɍ5zR;Hn*pQ;TmW:gZS%:l+jq ȸ^/O^o硏^驗?3K)$KݎԲ;,&yW_"_?4X@.P LAF1X ^P pCK1DHB< >bU_M$aJjr8a €_j K:D%.MtE)NUE-n]=BOfTkAӠ&E 0[ =}HA4!HE.t#!.l$rIPi,:D}^0ReJMʔ1OB.9./QړS/La41Le.t3]zL^'╋h ftjYYjAp+otČT%Q=O}t&5p-4r4'd,9yw otL'aހEwF`DӰyҟ%5IQRT0wURãL爚.!YID]ډSB'(qm#6?olI$eUUn=^2DOCOZ^P 6^; :^J)WXj[2дt !u%(ה(NmAlH@!JZ |DajaQZծL,Ac EriK1tID<ܐfDR#)ɬyC\&U/NZNKaɻX>@ +[{D'';O/u k]=bX0xZ]Ƴf@"[ Or_ o)/ͳf *t5JvAP򧹀DEQU0=d!Yn1r]TG6ˤ3ab^pH,D(9:/j$(5rkޣ@u#<ۙϐs#fDAMfфOiST^}s h(o vv.ijŎڻ#m'jXզ.Fj3p`,[IK 5 W 6AdFBldVԗv]d W{6AMnkMnrgiK֟mYbNmo c=rϻݲ~um$xR7N3ڍ$ <5 8TW(;E=oUF}x# Rvd#ÁZ5Qd **p-SrBp!(ZPDټLN!g'Y\  i(sHın5Lf,+gRRe ;[GWYHcۅ]AHoU YwM ab6 ;ȍ+ȣ~#XHap~t|S8 YgΌ17ɍʞ+Z u3>);i8ŴFJzߐ==4o6)s:Ai},ep:cL%Ə?%5C/g4,,i"? XEc"ƣd/e*M6NA|L6+8wNPD $0)r(|!QH:3+J2zFbl dc#YJoNb&Da܅L> Wh^ @=#(4xc}NxfejB!n I s(`̉`Tr.;: % W܀ *@e 4F<"Nq"2鄢 m$>(* ' T ΐ?+LJv*fPG  0!`#b Q$$B3 ]bQ%:B HR'Q%,hc>ao%d kb*c%n;|`8UdDX!бuѕ_Z$D{Q)3$#_4F>/.):e("cuʤvx_A"3B]N=V#}3P%FR[>tcX2)P*VwfҦ"#'72n --*Lb<MlײR&c}O%6 2c&%^*\o&$4R&j(Q{ȧ'Hd.A+t" n o /&M#n$@ 1iZfgk:-l6qZR!/C//54p0c%@LX,v"g|C6LE}.S7r0;n"8Es8[B ^")Wtcj0'b5d6o|,#_JDB0Glbi$9?#k\r %ᶌG22B? )2Q~#ZHq A%Hf""3j*FJ2L1B|xtO%I%ThLNPR%#BM3-?sCήLl>H4$bD'ECAiA)C=pqh۳~te2 (C39a(f1*( nvXg nhOeŘ1, 礦`O3g>,(.*&XQQD37jR!8DRnj:SԮ't$pnk! Q2/>#"&2NWHNKU5$ʕTc615<0=~YrFh&3Bo8ZF~-#)pOG"P#T)NOMO`uq [e/HHJ%b[O*\&|4HcK#,n"P/AtH1ea!X%\VN;4c/f>6%jgEafPO V5Bi7e=BVl#dK4Ou,Bd<"Lhhƌ"32Hs0a /[ &Dk081CB# qb`JOJ1>3q&"P,NAC2)5bo#qojFH4X ]2P^ "0yUvooPCVp MPw ?wW%ꭨc1pqܵ4_.ec7kW*[TmϱN#bq$Rϰ=LLj#cfg:mLr_"1f%9َc::x)*W [1ie$6[r&h!&Tj#&@Qtj:U2ddvtWYt }*pnՍab`[&+љ&s2ss "ڗt"N^Np[1&RcBPdr v bUm9=''HxGyP~{lMxP2Vt> @>MML(^B>'JHꗾ胇\(( RqB,>~H0h@+_mO-?/_m,4ގg]>0?2-j+,-cI%mGI/hhxZ($*ޟ5j|?? G-kWmBLbb/<0… &4Pa%ZQEG^uJZN -fm &+nFΚŲ@G#_WTBEq/X5֭\z 6رd˚={⥎RGҥxܷx*t pwp_mtT,74U38y-7kѪfN|rI-[ <ċ{MKXb;&"Nl{:"uɳ9ዷ.Aɀj e!)]BRTT!Vq .`c!݄&W^w7h"g6텴#W[hɶ*6 nP! >HdFr-qeԝRdwe(XaQhQpU\_%Ri!Ւ yhFn34_u_/+i~0aR6U/!d.ꠒ^cwmWaneY_MjsC9wS[F{FdDa ʈH(HPh;. *>{K8d5igH KIZ#$B,+dengi+ђnBD j`U| r"Lr&r*r. sZ5ltp̳8GsEAL_9749LecIӉ|f1J6K-f-TNU?Mwvߍwzw| xxM/yzEz )`d#LD/3r^MqybY\ou? {cbPO[$Ÿ}t>Hҋ/.FJ}>,EDг`NC\>e`N_¾K_ГBOtSǞiU$̖R3]-~ed|zi&L6srNpӌ^ҟ<"Np1llR+WH O(7e u=4 H6 M-p!FR!XM9M/Ͱ 9U£(&##D OSofĉ$Q3v55i L$Q͡Lh Ǚ3iQٹS =- PT?+ r4a~vRn ~D¶VZǺ4X~P*iF V<gR@ IIo`K׬%6$yf@T$JHj(OfAsO <5i'C$-HqKћFB7, " tHk\¦K2U Ez$-S&aWa-rlG): fk}K΢5ZZڟbaN@' -oeBᐨF$)ݨ=G1ʴQq Ӗ*&CIJ@#氅̀ |5-h PCMG0BCgT*=uQљ&\؋FxJ8٥z]>#}%O){Ta!e-D~{x'jy#&PRc0D,!pCUJnN*{=Q ũfZawZѤa!+  = s&H,mNbA1Q:%ri F/S}C~Xl'hv0.6wjq~WGktuW}Qh&{F@{wTTF7d^C'hr^M{GFr"Kyd0d4#Ua*1 EPy?Zju9%ZeM"deIRaw6ZAeJI_C`dSK qY8[xM~_C6QM^P+"DQx6YSFh$jrcav]Lfs*)ATeDfD`WI 30x~kVKuR&FSA^)*T"62](%=NuU'p l,%Bkv`3n%DtD6(dd/Z`T1RR.X 5:r1RY9Q`&&tf'0uAEE`K4 8?$]n'%1#)x#Q]e鸎L^-6Y?"%1I~t x4} FR.'Sh$#eLdET',HD#S()yjQkdQ_Ѕ[abPTB$%qqBav5 >a*:dAOV_̓p>NDY1S*11d/j5$} FSt B;u6#"8瘓gna/HB癠)2BD]WIxy!L GzV~g[Cu Fy񗉅+0qb-sM 57(@]@{v8tC^SQ?Eu=01Iԗ1AeT0_T3wX>X0e(M29|b0Da&{61zdХ$@lg 3* (Ad¢h"{΅y(h XAtAC%B{b)zOYIzi+qc;Ga<Q"sEٍOUriQT\S@IIHF3&`G݅WDv2N5Ig:'::=UGT1Vs!LBjE7BV8ANemL s†q%uryf9fC3qIWīGk4+<$A)W3H㵪͊ZJwM cD%FtjA;AT)T18+,QBH\Air89prv5#>b7'>!.z4.DUTCDz 1Vmb3"#Hz{Ci=K67!.U@-CPAoЅm"z@[1("*"PL[۪9ԔPsS&&w?:riGZOBkI!z^"桊9VT|)}SEDaP<ﱛH{CB[{xkj9 L4Q>{3k*{w+=k+\:_{S1%3b{D`gJ;*u$%Q;ѥBk+GDuuI:0AYs"dk6+ K{+Y2uׄug 3C<0kjn-"9{ 1Q-"8FP&Ii  ": e2Up5pJe-wGFi-Z&DTxOOkAvJJJaB\ʃR% EA915}4W^vP&l`'qB瑊RRlrEs/~AN?Hɛa=5K,1@؁-؃M؅m؇؉؋؍؈!}ˢ"!,؁4v|FqM'~5;Q~:;F ۽ۿ M؎\$KbAϔM; aMgkH'2*4A##=QDE$`4 yascٛm?}!))R-eM!KPmqk5rH+]/6B1-#N%]S=}֜M)ǝd:ɍ)ma--h.AtBn'~}ԥ!&Q.@ڂ-ٙߙr1*"bG*/B}2B#A8rԇ ={%};) <.S$6~܂?f- 4s%rNJ&y-ݝ |%U}!zi);4^y;~Cb*/@l:"U+++ ,0n~خݼϑ $_!i} fHr\!}yfR 'KlK9ՎA)N AZ+<3&` &SuS!_25L43>E%/AJ0@R3F4>@@13 AڑE1 fSA) 76+K8~8P388VZ8W7#_ob_wf?7~S Jh9kDDdTluF]2_5!a/?ϭܮ܉/<%.SDbl9:*kh+ԀQh3s@t4?m@YW>8%?]/O>6/A9/;_>O>%t`Aʈ` El:hjp60#~56 c3ꮜsBqH&f&2 ¶:wtWfr֖+ DxE⫡C7j+lX P<<ĒVHpNnq+hTp,@^Ɉ rsaCG9.THcYވҚkZJL1˯Nd*0'ݰ(-¢yhL A *hSWn bȑkDNkM(ݐOzYW(ȼ/*5pɒ4P!LptkԽӉ/isCQ*Th(N&*z8A'TRd{=8-7ɺ`thbC{9y`˦8C $2SͧD/k"nKԛ6%, )#nl^ȼ0R/B~ÉhZz "o RwL%F$o£,=&z/*82|mDʣ)' ^zOpγ6SBJBz2tҭP+<@@M̳@ "Zө2"~@osȧ)C22ݜ4HN{:jsRMӀҪՔ.6֊,I>"n4a-v+THSjU ڑh/Z *W 136uЍwuTzqz.ڳV5֗BydK69K^KyHnGs4fIW0Oa';*Li'&O8\ԣg_t6)>*#󑨤T|Α2D ͤOք> l8c~'T+o2T]o l:*<1wƈ!)leSwwWOeF8ڢA lX3RR( %" Cɪ3:Oї(G-Zɦ*])(sJyHٌhBKODxQ#cW=[C,f{wi04M+D-Hn+> иe3aŇ)ӠyC7CeD٣Ö!T9Q<>3 ƥDzSݢ!6 iQ-9qJ iIdr9$Z  FO'P^GS/903!<!ۺ"GԬOyCiGPA3z\yRM/[tRu.sD7r<锧 Td;f UÁ*\9*QMyR wBiHC`Q]z("u֦]Av B焋7 ,c35Q+Ĺpz U,qb>&yn"а PnFGJ/H+1Qd.*d Ҷ rNll0Tb˥'OARV1ow64 .CQ !!Η院YA=Z,9APOYK&j2.ʦ/k!VUiS}ӫ"AhQϭ뿺Z+% CN'LfIw xCģ] y/H7y (lfy x#n|9DPtjB}͘S%2p̀g~ ٖN^@{Ԑ3 k#hNb +-@,mi31pPa 7%۾3'C?SP Ē 互$Ųi34 9!Yxm@&Ix5@QK+, kwA%qZ6dy o5 [;!68xy$3d?r76 Ұ%BĔ;88y"P]3HoBß 7x6[)Z@C<$Lo ݘC[75)hZ46٦t>S? T@T=-?5TAS8:e>FGETIF-J}HԓyTNNO5E]PTO`-!3Ϛ EP TY3+@-U^U_U` VaVb-Vc=VdMVe]VfmVg}VhVimVZE\մUa Iş$ UxRS@HWu]WvmWw}WxWyWzW{בIb}B~W~B׃B-~m؁RYUX׊MXaX.XA؉uY X@x5`٫4ViZ WAYYY ZZ-Z=ZMڡ=mZRZSѩmبZ,Z[GhNiYc1W;pZx5J~TSY[[[YuRMѫܫ%e҇=ئ. U>R [M[qWk۔]F+Uۿ]]m]=}ޡZ] X۽۽] ު]\ެ =ލ]'}-&k@Iƕ`^:8}]]_e\%^E܋u=}#Xu0@@ \da >ɼ=hCp` }`6R*]) gʯ|sva@Δ=`$䜟 LlI_b"vU~XX&&N؎eX*6(\)f*^(Y,f>,y!mͭͽa>IEM.`Sm "dB[#E|uedBuRZZ텈㹸P\IMSTeBeY.Cd[>e*qIŖ* H# W0LXek杭e][epv3f"R4%ڊ95׌@ig{g|֢~B~gg.g6dіׄhBNB^0>S1^@{iGGiiiiiu雎j>jNW~W`=Q&Ű`˽ 9\u5:5*$pvZ2k_+FkZo~F-: :F r]1$hB+hq,hX$n_Ɔh~^52}lnd׾hNf~>ܶhvGZfaˆ?2^≗&D3]4)#$ȴoc0DDZ7hƂVvɟ(#zUx oRJAщd8po10sB2CwDlF٩*'(.g2D?@O9YI0/ߊ{7kH&'T2|בzƟj|) 㥰YlJ“L/)'U $9_ J*TJH(fҪ<152 l)$|&s("ک*0fLQ6,(@(s*kˬݸ)xe˕[0t Znzeo'Yf!ǖ i%lXʆ }]9 Z kբm%LZyhh ̘JBbE'nR$IX7:pɔ<:%JBJuYN29@G$P-~%JW#Ny 芷&Tf k΅|fTΛJo9:,wKbŗI?Mܔ'(3ragaWS "?&xMeOSuWk [K !m-WNDbXdevq\s͒_hݥi{Uq6V[oE\t9lW|!Ē`զPGD! /yde;]vX R-YB℣vHB$A!i!˓2e4!w -䓗`d^a&khf^l "myQM.E{JIidR[y:F,)[*SB`iQnBg19:du ڝu(MtҭmncD>Qe8jZ!Xevj8@dPN#{ƹAׯZ+L *}TblD1m[R}RT$p-'. V%=JQ!q9 YrŰ0}K̯InyH.*SlI|/DC)t:=QlA0;ɰYc-P& b@[ne'ᐣaEVvrcN X`RC}cNXTg<n}6mfGFMUf?5^E:]Ə^zOzjS)-I{ajS~~^EͯWzX>-SqzŵN;M1xrKI H,QC0P=RZ$?_ 0VaȤ8g1ili:ۗxÊPly5`v3 L{T*^TD:V e,[//Q m(c%3ы'= =Q88EZΎP"Hi}leHnjL#HN1Tꄌ\<>qrU+H aVӝ17R+x Iy~)_9%&6v֢f iIOLaQc 6դƗ9^XN%똈DJjΙQ4QYmтpN9|B4'$Ԡ>LBK+,D椒2L2Rd*4-qyu*O#$Ĉ! E$LeG "T BH"e"HD73k"45M⛳1jķu/ڳs)J`E q|a҅5-bO^x-u? CTꆢjiZXyU[V:3`[M3x!  qC!/1FA| TC c;دtn469iU|K?fJ@k4y+X :f0"8i}g{-O(淿!)l-EyqB 'wDIxn\U$&vڈLƋ,$/뙋|Tq%b7l2={%%E;b;WQa4 Lst!s/+%9tw]Lx2ÞLx}}^qG6Q σ8 )a=\|Hϣ֐UҝJ;oab/1M'%h"!??%;5 IE$-EZ&`3MȊl;&HxwiH*^R]H5o{n'C uZHy?IwZ2*y ǃ"&!l[zE@,a(*%?;FsxJXd,Օ%tiFP'"9㛥sCQP}' ߛ;'BEh4Y1X`%gqkY.UƋ./pUT1/.C4jKF%n1yNTr,glƼt-E~8 Ȝ8 6 NGvL+Gt ԓ΂ RɅG@0Q[MĔ Ĵf$D|l"HIDYګT ("#f`k-M0ĔMU]"hl\N"ub=MSXI*FkJNAeqit)I uS-L13QTY y8 uDUŋKt&zGOmb~#lp!9Fʴ1`Cȿ)P H`qDP4&ц d&%Ix#yiƟGDFȚZek|n:m GX!`͜05YAkEQM䋒J,ѱД Q~ Ф6]y*J\-_,2Nc^΂ IW"ܪjADϜ1PT%G\5+JQHi(Ux!$\$=H4LVy$#Q$#ٖi^5ސǥIͣTʒJ ؊Y' LJŠǼiل7L,~r n}I/DGS~$Rܲ`2" *r+e΂ ЦceiHI^al2 V bDl22MGŰKuwm! A|Ba0Gvҭ \Zmk8 +i}GiŐqPnݾ5|Np!|nmdiPFM u.fK8mCέ cLo\f\njDDn (dFZ.LFDd՗(RSS%v}ADT!{0Y`TfKP -l@oхt*P**ˊ:-HoAp گ3لQH{Y%[I_5Z@]0Iӗ.1Hz@,JEIsLґGKC-HM_43v՜|T4E"g4THrMI.!|Xo8j=(ckLl_aip||eT%GM|c8@[z~mn hDD`mHbQgPO]̌+_Li/_)dGŶjc؊|ҹ6rKvpDj%w,wd dmeu?v# +yy\f3fT<=# ZF_u5zdR yN!H,kﯬs$EĀ;2F\ϑ-uNYِH<t/CF o.K mxܩLe0mJD DqޑxUbɉ畃+LyZ0DZiq~E,fv/lZ?Ј! ->42(|!MDZ48gmzA#2ʹ,ɎD'ܟwwlJoZR  [ŜfcPTpYzvX?#9d6"^KlE8A EP!qdfՑ~ɜW{L{Ȅ `8t Jjlc8A~ CU >17g\څ&a<3rPזHȃƺ_ɗOӻ)Gu|(;󊤬r<#_E.#xbXW.ED1'y(@ 'F/C0i0ezDl%T1 u yxF578ؘn([ܯ=}bfGJT/}AL>S7旛 ,pF0VEm-.1;_݇QSQtˮTҖ &NW-镺?p30 Ґӕ܍xkɔqylZWf]fB'ΚE+O-nPtC#-n nEI g<9;)ЗÈD @y8@W||p'DGy1~:[A.k5b̙)tpM!iTnҁinQoDbԨC+O5YbYha騭;.QH:InF=᭴iA R^#h[F۾"ۗ3{"5cK "ihlރJsC<(<^lSjt=,Np$U@`JG 0o~7g*4HZw&I+LNrG~Kha)DwSTUb2vh(IV'F D MsVD*u@&2!z#EuMqp$5$AQ >g0IE@jSb9hБdJBJf !D#|@)7bBAj2dEacOD$vkץApR NC b"S"Rx$@0r;zDMJ/AJMxÃ-@<5rl9ȞW_YI>VUyQ*n|BdhA:XC )b&xT U tTI:Ӹ4[ 6(7bŖ QrJx" R R9ck3/buNr e H]n>I0[+ $pq(gtS'kdr(UDAv.8GJ?P0_J* '² )V>Dcc_l.} $AwHocEѶfub}M;_% 놭yEM""vȎbdJyjC9EZGQ(K-pgF9 pXV) 4= ,V+ _@K<X9bN,d0ebtL0. #1;cYR##BPE$+`DyTu!wejT\\8ɭkr9sI^H.ᑗVҧ Y4 `qz FÍ G,ˑW_pi0(:w,pHWTGnGl:t6tQk4NTC[r;AXfDNs%Z]sG.2 })1EJgMY)9&m#PC1QhZ+ClgKH[ Y2O)$wn],>F`=+q *g|D2oRs{zUt:~W0 ?byrȨO4ǛEE@kdw0" iE/9981 y7,W& SwA9@1[=82b*\DH&IB+()$c'T&|)Kq\+L7ldE5jŪbBcS'bE _eh~*+:(TQBL2O{F1m23`F|ڧp%<ƒ B*.,l2^pq#HB rBD(.k~B$R`RRKӢ44F#wfHZ9Ġnd0-\&Rά#Et\$M&1̮B1 *A`9-i4 $q-DHd.R(:@%D4{915 ;`UdJʃ!.j&C>s!D8x<5Bؑ)5&x߬:R#qS,N"5/YsԳ=i$vur"qCdl*sUfN$& &d.)C&gyBqR0ݸ&$5C>U8bb)iD(P Bo&( [>(xh(.԰ ,27&DS@"4FIIVEF+3{"F1AgC1JAbit34C!TM􌺆=gn Nԙ9Z*b@&:dnBbQ0D^`pQ0B Y:m# ="p.(ݺS *Ic'm(/6Xl#@-2dL!l+N)8Ăiҗ$BqX)/YWc}eVVOT'mqeTH:,F1,,'?"UaFUV(j^Y D[?W!5Ɉ4nS`DC+lDfȰ"o,O'>(k7^bThEr }M_j{>-bFiFI+BBvT;83|BJΊtf[bXQBv$Bs!~B qBj┌u'RA%ƮdJH`ᇦ$0Dč uqNb4Vq 0j#*̿Et7& &u#YKQ! 8vu> {BP tx 8W^U0J(W~Q縢"[jB=Ӭѕ@4i@AJH%\ƌCCh:pӢM<}%=8l;_bŦƸ,Rf=K0&Q(\6Be?&&Gpx#2<-J~':8(e W>ˉiVWX Ċk",&>Jg 4C|cJh04I7t8þlCàKZr1l;^wBC2(t(SKp #*^PS* `IULdȑ2l,NţHu"1cC@qOwNx4f -s <#- a0Ņ!§ LFq#DeKE%(尪n75+"P6YG͒kD: hUDCDO\Yr*1_d8dE/K̼uIԶ p #$|;cn̉2:C;tTuq_ʫ!in4MzUdϙ% $:O.E:QA36? UpiXF"u{|4HHt]`fiIަq1K")FeܫfqJ!`MPKQ} ߻]g>c=9н_a͏qOBޭޥ3%ڍ'3f}9#4K~$sR/|å70^jucĸ|+HœP";S>b;` y!&Oi'%7hEF0#U^5ZrRD@QER"Bb˼"`k?$ΊHo)0Q6T aHDrH %91A' G& ۋlar},m3Ɛ$DlL:2(QxcvE[-.:(5VʍU(꘱gz kCqIW<*ʄF!dEo[ xc+F֊(.ka!Ce1`~.ghBCf`>f8‑BGq%Id /LR CS)9$a0LK;3t{BM]11%n)(V.sZ['Mn嚍P,<=;I"*շ!DF L#mB<[b2bQ4G6NH:x!^i>Dy81sNw`3 Rε08ԕ#uc)O6#x~q5?$ϛHK#-'LD||uZy()_TIOoVE3ie2 `'C~R" &{IAɢ"uYf~d}_E[O*E8:ܯ4aE3;~v%ط YZ.Ub';Wk7oNT6_Lc6CB/FayE/p8 01"Qe$&#A.NYܴ4"TqcQa<}~KMo$sKHWp%/#6M+-uY1`%5V҃U>у2 B:DUq@XOJHG}"*q(ْW6hX5kdׂ '#[GtE(Ah;-H!LV CGR㄃W`gx8b50ᓂFyU(Dew3r' &')q@JaH7yg@#Z)D{}SQQt% K#vhXӇXV5u#8ŲIaY\ʸyA&094Sy.<]%1[.>P2١F(8XRGz5e,R: :5{W\uDG(c.>'9{?a&Ri!1[#^H)iu|%ls|4FuC1cT^SC!cW#X**SaqcY-PL(k[wW$a3f$83!YB;Ed&-!&zBB12tH܂0rʎk8M{t^pYx9#  ҁ7aBah%ק7V'DA)25J(I.$ɤJ" 8 7_τ{Þ}8wV$QU:seC6A/,b8 ) *9Tl|2(X58k`usqn6%U8\aD9N2v-3~1Xm#[O LtMDN+F~R8 :{m a@K :89UYR/{ԕ+$_--.@+,"I.r93Xp52 Ď"z*U8m6pKhఓҁ1Hve;(NMhOA'/f0gV dm-|/6cuk!)m~8!1ˈAF=q >ÊB5k)v);<!U󸭋8_=4xƸ !oqSL 30%[s0Ρo)KL:}|4Jgy1Z3Q'Q̩("i.B@!$8cikD^<ǯE(±7v%^ByqڪLL:L")@P*Vvy*.8P_RrD$ &ބS넶iDGfD)HRs4zaQƀ|q2$hs(lapD21 x0O92d#g10m[O|/ I7ɔ*,cLȥ L 9]Fpr|8ǧm|L1lb*\œy.7YH0 2cIT֕)O$$ARP܊KB8#8H=\t{&|ǜ9Ab*?Y\tOqqi%h3v23;K,wQu;0FoqNpLJ ,͔Apw|##ֽH{p-1KQ~x׵h<#+f'cy=(rwI>YX^Aް"+i5|ѽJqMIX- !"AmF.2̝<%нyC >blfD#/@ԣjAP@*4:1Xa1-C1S!EtewEb TNhyq 8$.|Ƣ"LFS! +Z\"7xPmDRMNfKɠЌ<`T;hdUNQqnp[ʹ^ge/!2DNꚫ/[RhB/^y.^8Q- 5TBXZ2(-q'r~~PQg勐[EKkIm `j8 S)3M߾iECh d8Ie3K /phW`KD맳lt02+%rw*2^Wɸ^/ T /!C(y3O6/X5*>q'm(K /e<k1fgK:ϛY\;mqa%+*jM\OqOl#xXHЗYG(5%e?]`8 ?v1"ȆOR*EL L0 m2'>Mo1Wxu/1{ 3 ߚ3P&RA\_0~Ay.&!׻7my*3Ѯ8m8жq -7W\2늯[*$O-[|YxfutFaGt/^0GZukZ gV,4]^qQqӚ}@gqS>7$춫-G,#(1 :<cH.L&e+@4 ' Ԏ;Z =&LBvZHCM)oj*khr8Vp%B*v0xꠓªK!"k&j0.%$k枋. k '2sGśB00h)yt,S Dɱ%$@) 4'cS"T+51,!L,BRFPɛYҪ.hS#H22"TqR(ӫL+IY.l +a9T,j֡?lZJ 1LJEbG[Xv,&+6cCRw=uh[C 會N( ʍZdc/9j52͆#7. +BCŢXq^ebͮV&} &ò^Tbv& p57PFz- Q\;Ml%L)VPuY-ˀ#m j1hug{j3U3\.#,,0v/ہP-"!µ<$þ'3Nٜq;s=g$Xw˪]Ę&<\ќvϑނ(](75]lǪu ""6,Q-YRv)L̺ǭq rOô i>e37#ZEDS>n"Zɍ Z&+V2%1EpC>؎ Ǽդ)7"1,(NHt"=0E6dТ(g´I8Y Va&;XE2Aj$ Š7, -n8!c6̍[(g )9Hlr̪ +9c-.S:$ɮVG`6OI1OeJ[7W*AU,IऩIXv zSR9H0R0!LlZi .EGM,gȂ@B#a7ؘ/pBқ4oq+7׼I{N%@'L' 6ĪvgBzg۲.{լi&k]BR.>{ v -ZP@F.Z+ę&d#eÞ>&&N^c左-ut"tEφY: MB ΰ;saKn6Q]Sa"kusduu&v[|tZ"WXDSet[6_>`@X)ѹ(,F# #:(8e]/ޡLu{O|-O!rRw\>{ yʄ)xjViU~|x,<4~}%|̦G<fd Su6Y-9/yĨyTFqZ\ph'腶Pm,D GX`A x`?@F@̃r7@4'q2,x44"Mi|vQ@?A?' 4!Cr8~H,IOLˎt,$ :$Y!0롱P.(,ⴀɒB'0K,J@AJBpK '$yH#, @ZK'dz-+z0?p;)a̞ICqIbҏC+a kLLģ̹Lu#[E0bDTLTp̰p]!<(˨(TlTmcU1Zd Y%\ԲAbVXYТ T cL BI D@Z][8SOбTO[}~؀؁%؁؃-%`؂%46a@l #1,΋(b`3(y{ wX r F眈ؿp Dr \[D4i٣<.sZ$WΏ: V`YpZZHՒ*LwqK")uX}XW ~ջ %]XH9[<<<̮݉4QVk0 26kbQ}V%RD=X ջZ`<X 59`<c4VUx9AڈmkI] e^J _]Q93]@#-?p؜N}?֐02 sLȈ}`˃}%y}W]1PP{  'Н0 ᭬a²!za,b La^֎aADP+]Y4,@i052RQ[1z&$L_Uu#J"v 0c~"#[3,`OIyJ MuDmЂ }A+9-a`~-1͙[ӌ P-O3 !8u"*?4Be+`ȥh NOeVD0Cq_Zy PHUeب D.0efA,{UY^:fsVV,ZW޸1ԫu4wR ~m+hhU g߄8ݒڂ} Š$_@¸l-_Y1+>Ni1X(qsq[  ?$@`:rT!sНȞ~5뗶ɦv%ӳ; MNꯩ-  &rB bBg5U=$nn m#n. RpU7V_?YߞɐϠ0fd9JAj8`D4H1gcTX;e#cT Akl96@bd!wW P o'.^Lpv'xldBU;4%Q-59QCiӵ9, ?qFp4ziD7-Z"Da)A:E\N.l-DJqڒ]#}8R ^f gd6ێeP~(nb2S|fdjآjEc#vIOt17x[X, 5 ]Qy^ ^`~/4E"Emlv^y\ٴO3]NȵK`1ZG/.iş)g;]40_0ŵ-f轔nE^Wcz[_xV7+׶\i&L,Ő GUZI#HQH-hf%`X8Vd殝d^+,pEr,s"I(!6YQB暲D\jsw0MJ]r9%EB: c 0& FHC )'ZGRJ0'*F{WTYA"6k a,DF\)LM[@7|g@CY9"gPjhr!Y Iɀ/Ҥ5e1MnS8iW=,J\j ^ X&-__KĞ3'0Y˱E91%0n[2 ̓7iql^0@s:4FMQ-RFEaO`j;O7`sn:#φ͝ ԟ] GKD(<^!a>g[ F %$)O /PGIAᰄENeǀ^F ZO Wz#1ړQL8SMW$L$$Rbލs~Hũo!#Ox$vz% OI`b׺'ouLkCZ'sՈ@(,dfjVh5e9^iDوtXEN, {HRS\FXբm(idu'0f+BU)); VDPTP2P[ׁQ}{Z) bK}4s=NMoy)V@hsRj44&7׉Nj;((U{.0!IBf.AXyeEc^d#>.L]etxF\NrvXO@hs3&qU&K,$Ņx V;!r>dLƼ;%%Ahz#41"Mt!7C珘yLb j!'4kezŗp$um⿈EcMnd<]ʏMղ؉ǐKvQHQHwa9I@c{w#0nh1_?}o\/xɎ KGʅkT0 uǦkm$+ޘʶ\IU*1KHCy@aF#MY{q80 = k޹1R>eAa?ɭ핗(5=_&a2wN?N=SrFxUi>DFtg~QlD~&igg^GhiN<`8}\_l!UM $(nh/z8x w@VK,Tm&]"Sfd5yLJ/Oż^@+ ~jo >BJ^f$>XD/7*0KbŲPzh8 aaߙ *ʶp }l_J& __Y\MlY^&K2 S:f6Pn[g KkDb@dmkt`bQmimF$m\`[ilmܬzz B.n:ED %#6[HdC-x]Bo\#Ɖ]`A: <mctr}1Hή dǿVjy+gE-@np,<)Bciopo,#ZD."J,Zίŋ~U/no%ەD„HT`UхgAI`}t +]HG qŚPa 0Ѹ'X(5^5U34;J`ԭ \p Ұݰ.od$:yd pHZ \U1[0+ 7\M #H/@2p#1 &5ߙe mȭ!Atj & )WqIʖ,% 2`.XBFr0{$*2G-sF}-4`U3_ d/ r9+7h4K!3>Z|[Vi뎠E> >hq:iv*Р|: '4˲ %gqs2c-$ M]oSW o=N]H~R.q {w7,|yOm}D'rb<`݋#~- %z> @VZRx-ҢU`jmk_W%RaG֡CKthGj!QH X`… 8P5n9RR&59KKY,tN>UjTtA gm*VSNjM5 ѨSj%ʼn$n~v+mѵi!<Ϊe5.w-'7s67 $hfv;畚FͪVA/<eQB{rHUVH%qpE* <h}[\!74-j;ϛZk-I$Z/@p ɱqɀbVŵ%npF I#Fʛ0CL0r@xF=[Bo4 0j%p/2bpN@V:ѿ$GP" &ntTqp§If*"*u]{=4hKT:204vNMUZȐUVT$0H< 8tm3ֵ T'uQEAf1hj#C#[\ W:6.$29cjXAќCb}rLkB?[@zWȰo2NVQWR%E {Z- Qbh~ ho++M%,񴔂HKj饗-.n@襖)+Y/$7F[mn(nKxzm\n6ip' 2 {q{<;>0 ) ,B% KpڳKd#7GDnƞUaR';}k؆2f}Z3cnM{;%"b,!UHpF¶{yl)|$[O68_m6|ш4'4w*.A,(̈́!%Ճ&P*CI } yA t@ HCNbch8Tn%:HU/tB|/n~dm9[ќe4C"r̉ 4\mŷM)lPw;ŇC;gM@N;| kIp 2 } ~Ks$RP"NsJ_ZJ$gѓ#E ger_,R2d p nJs\ZX\f0 %WhĖNߤ8 船Y-PZ_U6Pii̬ !@2$g {1gR|XPBj17B~BFt%<RkU=iT[tH| JU^T !ٔ[BqP;/ҲEVrb LUd4"<|@ؐ@)C[ܰ,R#Q3¹_< ;! `Ae/#l,IUM N8M(h;jH]^  %&P-KYQ@ *ͤ]_}bÐpw#j~ x"Z6kBZ$aq"t?9Nr] 8W2 RUIɌ]WِUPtjILa=EQq-q|<)B뎐# }u\ DX2ÊI!@Ac̪Kw<>`/2Ddw$>Xd"(^ ˅2fg!&I.sqDdZ$_"(jJ\:tg20P$-"\h!DOpWD$9ZpŖ`u*0l.00XTl̄V , ?"P-0|$܏d݄ur1XzP@ > 0@pENI#!<d"4ͪo%0KZ$>$#2e%PgR5o  C1o8,,HlXFb!Vъ$#)^1$bq5#j2nEp$>zo l+\Ȧm7m tfiġkG b0Z7LZd0-U :m1:1+>d9qID% Scn-!+X. nEg/h9# gDJrPr x#>Xu΢^bDFJ@4JnJ!vRxIZ4*$Q2ܥC%?)C ,CsR׮2rb(OB*G,_)U*mX"Wprc$+IJ"%&G&% "1%V^'S.Qjj+@|$@\(Wlo#F82E3jO%!^db6I%'b87UgpȮbJp2$3l9G:p6s|vsb3)w)4 `"D=nIJ<&$>r8za׬(iC *9bb5i36J:g&=G*NAP 9/he4<$pan#faG<8 c|H@+D irgdUz1^dGǧG;b/#lm2Hss'x )'HoT#!CGOpt8:fH$L# ?`?v$<( G|T4*PPJ:BU/Q"hR5Yoqv)`fo I@4J*##.2 CA 4q2*'O`YE} rr[ F0J[(1ĜBYQY{6,3uJdE ڵGZcEu6d1=X9O}cUT^u^b8.[%(Us@RkJ&{prȣl `>mHzH2H6C@1+M$blgJmkv0x>~~4F C l'7-?֣n" O$$6P# nDg !vm,HDnkDLrV4ԢZ7lAbx~te epTxK`Gr?L-A<8gww@X1X/Imz!0D8dQֆW"~[1pPx&#"&c@ >D1tL=P*^Z^ q~[DAPb7m.v4Ph"֗|} Dd6:M4$xEX>14h0J| hz#C~-k!V{W$cHu\x{Db 0XB! p-` "#ZJz|쩂 JbU"$b !Os Pu^ D2yl*fCx pl#F3&Z#,)Kht< TGMc˸Q},:"& ɸUDpIy옑+T҃X$p ?h x8CIH DBK ҩ `֎[h9sg|a8&&3 6C"懞RˎTu<@P4jTP]-.Κ~<{.s<# &G{rF;$(~׏}DIصwiY1XcÐ(T*ݒ>(8dcWBbRBêC,SQē"$tFbG+n-N^R̗5m⑶P'藖fm. >e=5LJ裗Q;=i{+DW0t4I~ 05 -;aD<* a.E|R\'";>IH&Y' B aqB1MbxXŰf~8W BtΥdo R[ux3C%DdI|^ajSyD|*hw9]OtE^-q!QxCD}E^d0 /|/p,q_~F[0S_g΀]c}8qBpca8_J6*Ј0T\m<˖)@$ O)\`8$[L,\K"w9 3|W` Ťp8 mj(BGPY ŠfQy!9*4O;54AFq Į@/,H%րgJP2CD%K$EIMq &V/O@mU-AvEJ_(y"(|"+ I(LQ rA.}JB+_tTDn7T3!#9ԡ$Dq\mzIN'X+fVN0 (L3R)T$5%<;SX+N F9. 1<5O\E Y3& U &t9rC&\B8V(ۨN#1k*b@䡤,Cg:!JSAU' y9$ӌEJ].P0{]%Xծ~NIY-dju,Jrp}iX׮赳aUַS԰5ud^dL6ŪG r[+X">b.E.@BF+q}s,4nvuSpdbiNWb4uq!_)ZV4B˭-`$QqXHXs"_+aa:[MxB,`b1/ bn8}/bu ,pY&]퍸 Ve,.&P`s-X!{<8tLXU XN•P!'Wd6TbE61E])'kʘ ʶ/#g?(vp< 0O@+_&%#gwpˤObhP/GD>pvYNReQxbZ}*~l\'+= jaZ[! 'C!贩HiTھ5IVnZaI? >H/p!/nLtԬ,ylEJ#c/ƉD"$x @rɕG{AA*X wg%Ȯ!R}2%dx*:9SL3"q44A9<sȭ) H_—.cB&PT$Yq2cz$7>7aBΒ 8Z4}bXdp O% tV5L^\g> /W+Kԡr3*88mҨ*NPZzCG矛סI塋;w JU_=VVS֟][}rkWcQzg.{FշT}a^`X8ȁ!(#HgsQg6+-/3(0X58./9=A؂@@؃7A2ȄB4XQC(SHHHV[H<8_]hPI؅!eaCB#y BSYNo1ul֔J7|d7Wa1tO wO;MPd2c31DZHeaO|u"=5xR0p_d3!gdQ/ P2]zh#Y~8rRG(W8 wLdarH ׋H{`|Շ(ƘChHDdW (gqM OnQڈ{׍r\xCyju&X6JRWNBXX$X5~4SmFw!|&1SgF LWEIU9t 4Q!y>'}sMrT\D يS9U8r:ɑ'юq5K%gԇ)B, FFDRiLRYM4y")RGN iN3aY]Pf?88 T OHBŖ49Q`Pe~/`mkCy#)g _9J3癅1.W1FyxyUP&6[G"&/1Ab0aimSIVJM9|rfBfu9L;nN)YFTRrd665|VֹC@QWY\ALš8A$)^K1!l+/Z H x(!:~:Z 7CHřPtaGZe[t?2XA17!igV;Y^ #9Ԛf\KjcɦP2UVEo9Y\j-XqK 1gɞ3XW8w2mCp3i aGj2%uV(ӑ r'RF\ת/2a:>K3: ^V%waA=CɊgK.Q*jYwvz/G`u`Jdw nnCz%)R [Fz k5%kd71_6XO""r94D1(po!FD +Dm4"d#F .k ``J񪺨,9Rmp'@k1!r-XClZ iV[ck!%P$aE>Lˑ(0JU'YKiY6јa 1t8 iFDz(qFjZwFYr6$kjqp{]º9+BX<1wVA*znۡs{J|K#]J!h뮵aJAFH{vսkq1б'Zkb)'|˰[f)KJv:c<L9c3c9\9[ :@KZ|ǣ+l9y,+3sß–:ML:)<.,Ī;9IqoS A_0cZl=d=[<3Tٳ5i[L=d=LH`ZC=WWLƀl+s>PB9Ȗ `Ɔ3š|=xŅg|_lAD{ayl||U@h=?ƖlƠ eɘ\9qKD001Uhk(B;4-,8 Y|Nhi86ylM92K;2g rAA@LYX8 *"ҨwcଆWc(܃[3x*5O䢅 ,={6:-\&,*Q "% q)My Cx\T oQ2DH 3ųU@<HCeFc)S|hEDOȈ8Arik`PxxA/ n& di+6R+W=|Ȏը]b9aC9ဍO-'?8@ىxRȆb'G\MQD-.QGm?b+R9YQv㱕=S~a!QH80A. %&L|Iq9w͕/PKHL*Q.νYuV6՝L'qV`"On>X.pFgfKDT}Ґ}Z':daVbp)ȱ!W S#ި5!(v1[M(ԙQ 'N.P^ZLezٕe]>Y巻4mܖm$5Y/B寶'm+|XaQ`$!ƭP"JUxp|~a2cܷRؙKD.O:EysůZpc7, 0 V4FZ"[LxˎKKKXvn-\ry . Ob.NBLq (Y3O[S12a>JaQ[Wޞ.tR naƽ& KH 1֣MX^!Wt7P' v5//F G ^o#%Q gB鍊!,Waa4 )7jWe`)no[ld_-5|H!ArsdvNzv V"#._j? 37r69?l@Qah(Ľ#=lپuJfTF@G^xh%YuyJn:AGY-DMgN4sK|Yw +cpp( E em$yI/Z`v({ąˋ-F,h!,(腢Zh#+л /R.aETFc/?ub)-4pé2"(+ĔP>bҼ)ļb͉hçZH髑FBǘ~mClJ(TX q,5ZHĻ|)0ԫ@C@Z)ўt/EK`SȍYWҲKJ%:U*UPl(͞X6) FQ%i(fEH9F ,kSuȻ\[zdo\%gvqiXx#&_0ʔ9в@^' *D0^*>1S^F.w/z9H^b*NP<)Źv.<~>%ՠH^Զ֎xW㢰&Y2;8l/H$S5ӗ/;6ubmKM,˖p z^@8D=(s^nHחZtIDrfѝ قNﰢ)!E\Ȃ&jKg?^'c_u!or^}P'kUq!Y B,"'E^爐%3/ \:eZ5*Zg.u]f}Ea &AQ(4(4qm$&D!@, XSnBb*8"3EA& - ֝,zxM^J 6P؃)1*AJHH3E~$jS>2qT'@bk@wDrV @uְFxRzzZ@1q%5 uNz[9`'i!ˀ YkQʇDS j$jR*'XҋXEVE1IJyӯE9$Hg-(:5LYViYm M '|<瞾!bd(?GpڏTf2nGr֮Voˋ=w՞<@GOT<pk a[Oh aQ -?#ZdNxm`הDӉΤRJ[*쓕qR`kRkJCSìIvLFH!EXB%_EbG i]_rټL+$L]?Ĕe闺7iaDMхA,Q{ ҋm""r@[;SL;.NnECrƹ/`,";V䄢 }O5' ;EK ~ʣ(PwF`:'~\x`Gt,[2J"~B\ḷ#HĬ4 JRC%H-xgٿ1dULr*;P BpHV u[# ʚB "Y$VBk/HE=s$9и 94Ya›77̛Ry(Ώ˸*NTb?emЗ1O+ Cf册WᴝcתCKwL(jD"s5BIgiʁ#OTZRgfbf*D4DdZK&fK0uբ>Nn{/q%q $yYVo 6{'ohF ¼fDT9:b?x`J{+d,('cH0Tz-A +ep͹ǩj0>Oq8JũHriqJh~(rm:D)OnH^j;HۉP$+i D>򫉪 afHݫFfѐѬA?JӰpr4nLMq=d8o ?;K0J͍xIoja>>|:~@ ѐI> ^頎:㨛-8=؀IcK3ДĪ॒lLɔDI܈tI\ɓɘDITIɒɒ1^ɚ,ʛ$ʛLʗDʗIIIA(\JlJɣJIJtJ4 RJJdK ˧ʶ )茓xJKK L̒\O@ LlL|LHLL|6B4GLƼhDɊ0 |M؄MڬMٴːMt,A&vMTM`'wD=`2#!46\abEVsVqIZ="Y[ƜٝCeH;)C` qZڌ;E֪eƳYYZF[ۢ5[E%ڸZԓۛڼYb"!![=;U٦}Zh5m]}]׍]؝]٭]ڽ]]]]] ^^-^=^M^]^mمԬ$M^^^^^^P-_=_M_]_m_}_______ꀎ[`&`_>N`~``` ` ` ``a.a6a>aNaFa^+_oaaaa a!a""b#Nb$^#nb%vb&~b)b*b++b,b-,b.c/}`4>c5Ƈ4f5nc8~c9vc::c;c<;c=c>cAdBdCC.dD^dEnD~dFdG8E(RLdMdNMeOePeS.eT&eU>UNeV~eWVeXeYe\eG]e^^e_f`_.faBXffnfg~fhfifjfkflfmfnfofpgqgr.g;mtink-1.0.16/html/align2.It.gif0000644000076400001540000001167710376041214014245 0ustar jjfuseGIF87aADAZZ@@dddw@@| Z@}d\!e @>/"D/@<࿿>w"dE"v|Zk@,L@W|Z@Ld5| dZB\ T@͈d e |q1#4e |PZ5 :dje L &9|Ze dkdd0d4 EG@@88jrjLh FG@@|PZ5jd|LȣEV$d \WEx8pjkj,H*\ȰÇ#JHŋ3jȑ Cqɓ(S\ɲ˗0cʜI͛8siJQ&*]ʴӧPJJիXjʵ֤W׳hӪ]˶۷p*lչq˷߿pR;tÈ+^̸ǐ#KL˘3k̹Ϡ)%,K;S^ͺװcFݒ6˹}* ~wSLq-)rУKN=s׋^^qOov*|j˟}{)G]{ER `Vu79XZ ]%Ȕvؙ~͕~XT`.pX8JHTHeR=7@c4Xc-$GhZYQb`θPvᔅU`:8c\tdrJiXyW2igi!N:(zb"xeYczzgyjyCꭸbkapZ鮹+l|ZݯB:JW"kkV۳&Phv+kne@4+k,lp$訧ꬷ90nβ} w t8R3/}W}#=g?n>t?=zoS_f@|ރ'p#Z@/~sW@ k&@~|8HZO~*ۈ@b>h:ЀKal8Ĺm+H?d{w(ω(4qAaхJdaHBъ"BF)q|+#.awjh;Z" H-ы#HH9rdc%]G>dhF0|s$):n2u\ _ٺ~҆[%s 2r"IL^,}xD&H'KMFxϼ6_حwf6IN2zL:ɶsΒ'4iMyh~M@JЕMB pЅ:fk(D'JQIh.ڑz HGJҒ"JWRvw4ZJӚ8ͩNwӞ@ PJԢHMQ28թx*T_>TX*ԏ@ SQihM W'UUJ׺dMW Wլv `S׽:U$|&&: ),CW.hsf*Y lH2Ҟd-ִ̘O*lWZ{L bշ0a*p_ W'EpIR\,5ɍs]aэMgUUz3l+$Iz;f}q\Rl8.L+SZunq2]vu nK xa'U af8ÿ| _C!&elWX^pQlb6AT|[Ŷ/gL` 9s<[YK%,a*`2<-Uqe39aV3Ӽ1@rug47'ۭndΙps3c9Ύ79ps^HCZlrh^:Δ67mOs'E[ˆV)j]Ǧ}HλWb[ؤֱ{i 5 Ύ/Kb}Yڵ=jE3Zf55W [_ϻf6Û&|YCnel9fPYeF7vm\YF;~5rV4|$hnOW =Ә&Vf'60ҙt>9;vrK\o0ozd/v5wu~{YbxhMz4/g9֣ &=Ҿzsx@z|-qӼOr?}_~e{llmubo6rE:wd؀R bLfrXo-wrm'y@XnBX~'cv}WcWWvGZ86ÂWix-kl(nsx%tXw.8Z]r\}؈HȈ8?VxTyA~؆UpWx-ctw{؊NJ8ljVBDYxHJؔNP8TVyZI\ٕ`b9uXf9h*lnr{tYwx)zz՗~iZ5 Yy)X٘ؐyYvy.鍚IiقHixɚIّٛ {Yuȩz™ٚɗ9YکPٝIP9UO虞i6d5Y]s5Vӟ5O34zG 9٠whP =ꚢyUZ4s(*3*,Ӣ.20(3426z:ʋz= Q<3D:1FzJ0Lڤ P*R:QV?JY:PXڥ'9@ 깥)i퉦/gnbڒdʥq lw 6p6^ӧ*Z0q@ӨJX *ڏj~J:Zʪséڡ:ګIZꠐ ԙ+zZ3Zߺz:纩zJﺨZ*zk ۥ k ; ۤ{Kۣ{!K#%')+[-/ˡ13K5۠79{;K=?ACE[G+IK˞MOkQ;S U۝WY[[ ]_a[c eg{ikm[oqs[uSpGdC h􂬂z,ڷZU 3#dUdu2B4bU˷luX!Xۦ2BbJ+}Tn[[;U eu0;[{țʻһN'5[{؛yvIsQ5;OS:NCM{5PJ5[{ۿ>˼<\|V34?33|A3a,$/96KQ+k"*|- /(3|5S+\nǒKt0?p\EBaV,80ĆtDtadWrب|mFf0 j Ƿ}< [g^HoTlPqḃpa` ǩSsPY7l9̳\쳙L <,[; ê<3 ʰ1<P˺˼˾LSa9Q,qdw,|- $\<|^>-R|<\;mtink-1.0.16/html/mtink-chooser.Fr.gif0000644000076400001540000000506610376041214015641 0ustar jjfuseGIF87ajmj,@0I8{ B8`hctmxN /b&!Rl\$$TED]KLznc5IWQ}|"zU~ žŧ֒[}#Ђ/@} `q FGEmwGC~\ؑ$I#QyJ'_l s_M1eɳϏIm TgN4*]ʴӧPQՆʘGkUM)K~eե؀`n ФدYU:P@E˷߿^rAÈ|ǐ#7ؔ˘3kƫ#nfjjAJK"ӎ(7nڑY!>,0Z+c}1Bɾ˻5NسkνËOypҫ_Ͼۣ-zܱ|@BGVWq }c@Ć: b$hPA,ajɸ⍉,c2K0S+@Vm=Rd+0ck6:#8fdWZDEA C?s9EpƩc#%ݩ|;ERne[hSW֠cybJϋ^vh2%V*L%^,47Z3nZ(NlzIkM:kejkB5lF&6F+N{)ntY["fٸaj!"kK!C =6)0ɋ"0dm 7G,Wlgw1/'$li̷TT2.8&</O`E )aaX(`6H4(LQƅbh3sPA_'& Fp/ h?ZA}E4!PtGT4l3\WnfzcNUn9^9$*T뜻~1 i iQ2/2ޒȻLy{ɸfwC{k|ԫ krZ_,>`b??y*A<%};>j0 ׿ |DI7A`UJ`'+_ X&lHER`_>N RU ƐQ<| s5ĤE|&:1X4, 8*6eQOTED@t˭5NVYxølQ']|^( ƱxR>q%| I9]"F:򑐌IL$A9+AHX!. .Iv$&F9\(i!F ) D&#~2B,K! v~3$g3~NA::J):V}y4 N);d:AgK#r(4PU6x/+{^ cCl*4[X+PV#?.7y~GE>:`.FO*A;}Lӧ.S̅k%&n.ͱݙ2hg߭ɹӝcw;>sz2Zi ^eễKD2KcF|l_/ӻ__8 _H|~ߖo[ T}%`y~DH7~~Y|zcޯ+O?8(OϿ;mtink-1.0.16/html/micon.gif0000644000076400001540000000052710376041214013613 0ustar jjfuseGIF87a00beb,00@I8 Hdhĝ@Dk*x>ʴa8,f*YȌz.R?kzm:\wE%Ydx05-1BȷaZrTYZJLyi`bip>?@'ilD/G}Q5*ew–]W~97hȋT"JKoUXn&ccri)`7dQ/"D/@<࿿"w"ddEv|DZk@,L@W|Z@Ld5@ dB\T |q1#ԩ4e |Z; :je L&9|Zdkd04 G@88 jjLhF|j|.ȣV$.@@d \ݠWEx@@8pjkj,H*\ȰÇ#JHŋ3j܈ЀǏ C8`ɓ(S\ɲ˗0cʜI͛8A9@@ J@ɢH*]ʴӧPJJիXj zjO?JٳhӪ]jW_N}۶ݻxKԸ\LÈ+^̸ǐ#KL˘3k<0Н.AMӨSF-eo=/۸sލRJcJ)pȓ+_8RE%:سk]w#7/-?]M ig_tcx\^|6JA蠃 " I7!"H@$wgN}X^ -"*(@J#z/rcPZhTHΨ(8PnWgG^複KNb8fhfY\g]$gإ>gvufPkY垊^{_ZqFkR'6(&N%ꪬ5j`jh}j^ީiꮳ j%,w ٳF+VkJG+k覫+k:)xj,) @,W 7élg Clgqk,$RaRl,2(k4l*Ŭ/<:Dmq*L4MG-3=%f\w`-dmhl6'|uHomx|wqO 5Hn'vq1.Wnf;c砇.ۚL訋ꬓڬǮzz;n#^>anϾ.\w(Pb?T EЊRTܨC4.ݓH c YXF7nݪ G цs" hG0r-/ol% y%插q8r텉4&IArF|,6Rr.1FsdILL2x. a3 jZswӤ6 Լ93q<#':Κ)za4G~ @Z MA{8@D'JъZͨF7юz HGJR#(JUz> vϚڔ%8GR}(]7=Л"ɩ\,EETTԪ@ݩPAթz՞UJCrՠDW ϰ3+LMt+OGշn$vū`󭆝k:V=IbPV}ɶhِt mKz؝>uUk]Wϖ泮lCBZCHNفv[fuJ\bO{\.w_-K;Y▫%*hY Zjwemx]z/o ]BVR~}ٻrW ^,ZuYW=/x0JړW ,|ao/ s0ec`[ؼzK Wꍭaغ έo<\-QYٯlv[[3!o]:斘Yc>3XaXmfɛl_93'3]B ClF7 (bJ? ҦUemN t9RkF-M~ZtgWϴ5jl=AZ |g¦abR#(6llh[%f󵷽l7HԊܴUht䦶ߍx{}-bx&8mRT5|&_#/dߓ^ڊ$?U3rC+խfvo5H^emzs>< 7̵[ͥ]F_w[s'/6Λ`By&bY>qC ewwt wl{ڻ>囓{%ao6nx=u!y›ˎ2r?w<^ķzas]Ga駞fyo]m7~z}s~v~dgGwzwx|zhqcp\eyxugpAwx"\Ig%\67bEyMuCw"(r8u'9+؃&HxYu_g}iorxs}6dR8U@1Tk.vXxxo&NHf憆ebDztpGlX4jjg} 7{5}nQgy=[7tGth2q{ [8~VwWs!xtswu}y1X|Y{}'{gigFg~hbw苰膡*8X_(T^ƌVn~(rWs;~H{Z7s38a(H0~ ׎/tq$w82xt28Vii ih~yfYCvaՑ9[ 5$X&y*W,ْl0]rU8YM8ɑ:錯ד&ByTDY7uHYSJs붓+oF^ՔZVV9mƓ]YPrR nc_miILlgyYmIe@}syW\ⴗ| N~I5YRs4KӘi4D33y=3ٙ6I39.S2&Wh洚)2XeɖNZ8&NÙSSԹ0y)0ٝSX j Y뙘49Aix|ȟ7oy)Zfy \Joh)viڥ^`LZ ZIy6jM\ʦqItvʠn6~{ 0BJꥏZz: ڣZꢧzꡯ*꠵*ꟻj:úzJ ڝͪzJʜךJʛߚjʚ皚j: ڙzJZ+˗ ; ۖ ;ەK[+!ۓ#%;' )ے+-{/K13579[;+=?ːA5Qm0E]eE} crP{ Y^ YGKZ0uX)8Ƶ]+}5hXWmo;0KKVsKJZ۸TYSf|{KTT;i/SՅ x/;[{+jRPEP;[{6|z`+2&K2[m;OB-[oUR;[{țʻ;[{I,Cܻ1 1[s0껾 Ӿ+.A:5Qlۿ6.iN{Nxjd ]4L") ޫ'HfN1yxq^+Apx0!(/AjV[)D\9>Lj$aq--_g菻(1gŦg) ظӘFm~ ܉cY:7{i\yX0ų(}a,Ie7Ĩ[],tȃ,[(zXf|ŜGƐ bܺ9u*uE炮\'촗ƻ\5\l\4 FLȾL,s̻͋ͅ|#/|]<\|ջ/lg5,}V*1[ }ї- "=8&}(*ҥ;mtink-1.0.16/html/align1.Hu.gif0000644000076400001540000013230610376041214014235 0ustar jjfuseGIF89a`$,Ŕď,`dؔL8JMNLĴx$|`|~Lش,|DLhДL|ddfdѴ|䐭_BhHP4δרyHĤ;Q|1L̟HK(ό\az7܌AĩtߔĴt?3v4pߤTi\dNd᩾Lʨu4ʁhдh<\ʘhʷրRؼjzL—az,><>JWNTTľmzTuzddtԪlTv,Tؼ4LTl!,H*\ȰÇ#JHŋ3jȱǏP;(!Dy%Kv0]<9Jl>yS'v8w J(PH{DRKBtͣ?obŚԦ_V}*Uh]άpj #'AX7oX^Ä ;1i1Ɛ7fdʋ1K˼y '?ovgҧI^z ֮Yvv+'jmAN|^uƋ+O.<3@ $ O/ˣ7~ᓏ>o__Hzy ȃ B~R3r0!#"~b""2;!#,H4;4x>8;CǑH1(J*9ʓLB9JNF1VB[r()f$QgvIf$lYHlFf!q.vYq'FK!jh!A< !2wrL0ቦlک'npʩj꧚ꩪj*kjkުk5뫡z2,2,кq"wqf{Gd-|b@6rG_ E#[؋o/TPB# 0B?,q/7Wl7w, # (C7&a7= 7̆|2(=7r=sG%<@$Iՠ[Zgbg@gPbͶitmw]7q=ހ7ބǝg':v3@ W`y&:޹(!C A%b~= }QH<u#61Lt)>X*^5h+0VBEF]e ۀ(WH! uc@,챏MGŜr`S,"9BrIeBJ'R (0!J0\)(.s1%0QP@( 2 39{ :p4{d8 [ Ι[);N[g z !D! a ?`1!Jҕ0}iE2 6+DaDY§8OCY@Rd NCa Z\FU9"!^hd&MR+^VV5[eKZڒ ,`Ke1j:֙ 7'k:3A:,u\(!Ð3.vRfчEv;C(z7M/yj7:\?@>dFw6 Y,cy#>U2i0\Y HGzx$#MĚT(Ub P@ʀ1cWUo,!c՘ ,$,= ph6eh擧lqV;.3 ;shNs4 -nK[:/thwK!>pG Ї;-])(:сKI[ҕ^,(iKWo/MQӤFSUZ,4Mk0,0w  d2D",@=mHu65n+ߦ  >w׍v2V1` { px 7ƒ |eG LPsC@}Kšh`:.vE'}euQtj'NuO;ήu@X|0‹bZO,xBHYFS0t2`0Sc8=5,@~e^(@@ !>ƿ{B8p/? 1G~`2d>a{T/C5o~7 oԿgG 0Wh6P 6P 3W]P(<g)g>pp`q`,x.ȂUWR-H&`8x:8HXx?hAhBGLXMNP8m < mZh۠]hR`a8P!*R iA G'440 y0  x@h h8  H(ddƐXH@#v@v@}v}#P #d`vP v X hUh!~8ՠ֘ب ؍((]3X t\ @` 8HHH h @h@ AHyI YY!#!y,0ّ2I MMM AYG Hl LOzk &k@ kP[ٕ0b@@ eyH4@4X hz (h IX9@hq0A`qvY q8AP i!A`UY!`Pĉ P3ʉ ]];1\PSQM@MC\!乞㩞ɞYGPyG Y`)M ʟZڡ '# M @/@ 7WwH0 <Ő ŰHJDJzJJQH@VZπ"Yڥp  p Icdzl gpp0q*q  # yڧA :Apy!6ڨ6ٚI!ι;! :\ڪ \;%ҵgI5 0 / M* @ڞIЭڭ:ڟZ@jઞʮڞJʮz* `⺮ `[陏0p !W'% %0 +EjFZ@6[  9x xY D OдP p d:U{Ip"pIp[pqpa `hkIPqosA`q{ AA0;!`jk[j[0 F{ ع%txM a '`aM'0ëǛۼ;[{֛ػ۽ Sp SzM 1 KPEE@% E<E   |0'|pp{ -/Wp p<\?y@P FyLTP`pP\jjb jpb\m\0r\FFF`ȁlȳp;{Xs&LKɑɞ+' ܼ,' ʴkʮʱ ;ˡL˳+˸L'ʜ˵<\̿|̧ \ a0Sp͜ތР%|% -PP| - ΀ `}пO ={*{W#]{`(myPyJ1@P5};y0@[B wڰssڐO}P|pV{<``\p _Fp | |?@|5ppq- (tuל Ͱ؊Mؑ؈mؕ}ؔٗ- ʌٖٝ]MM`١ ٛٹ٧وښ}ا ,.@- ۬lS׌}< Ͻـm-ލ ,Π b 0  X0OP@NT`p~&`"m^[~ y*#^p&**`)>0Ps\rPnV9 `OmȬ`eh} R l=t.0!] 'g\r}o>ׯis~ns.@x|np}~{ . nrnN.j暞z g gpg. P Z .ZP` Z` 77Ʈ̎ b. پT0X@@T .ѐ{`&{n`p n*`*P_ss O / | | /| |(,// F 1o1101ǰ)Bs.PFG. FEJRT?V_X/Woi_RY][aif_]OVpjy . 8 `0 Z  p 70 o?ޠX /.X T ܀р&@O[ p[*~* ?_ҏ`s@(?'_(/2p  )%/./ CcqO>QD-^ĘQF=~RH%MDY' rSL5męSN=}TPEETң8)dTU^VZ~J/cҠAD \D{[K.\"Eۇna}q܇^P뗒ۺ& Ipqڵuǝۙ޼Xk8̘ 3\PGf\V[VolD(a2qw Lq]!7ײqPgƻhn5.6k/n ͊so83>8+4 \rI*Jв"HT.X;N&LH 90k>E,$-P 5mTP5妳 +/b1L,'%ɻ|r`\SN0];-cٺQv̾:LRJ*ҋ9, ѿ32%BIL3*9ЎSIH0Q%TKpqu098\a45Eq*)D5벽ϰw>X@NiYX$> -;C1N9aU\X}ssTGl6.z9֭1|v~42```` v]x9[8wc#{+_+VN>V`Y}7݇=,gyθ/yUc?Q|eVZB2za#Og/Lc%1I+÷hK-RMK$_ O ӰխӺ0=ʊdahΠ]< s# #tOu_8ј>Uԍgsl̓gX⍗y0<}朷NUbv_sr3\'O+^u(ucƪD=q\dbr 5n]*2Y&{7\c"sA`,BU⋵6e;beILAt.फVx'=͈# p51<,Њȱ!ٶM`ˈg$T#ܭ.!!Sk%<,5Ub dCfPpbb I0ĔˀE=uID.Ùp:Mӥ< XF,g׀gF\tɫ"rkw񌏆%M6$ g0%ײ\d7[.."5u"/m ⛄Le Ҕ'aܓ L7M`K,1_Vd!!9M|7L$˃bA@:QBIH oF9H4i:;]6X]zcE9fc\#锧)]*:jRHw3ٳTx6k*I`X)ISp9ђC ʤeU.ũWVGL,Ttrs"{.VO^uWo9I= g±!tcALKhMB1tU1jQz*f'ei0OF:jϸ/Mr5#zY]$JK} dUW]]q3v.u̝s\UPڴ}.pU_K\Xځۛ2֊]-ܝ+G ÃoRĄ8B|f6kvs<7Yvg>{s=hA:Ї&4 hF/ъt#8 9wWr uE=jRԧFuUjVկue=kZַuO d`p1_u=lbFvlf7ALiHvvmnw/T;½nv7y]_¦1y o~wSo1o.xp7<@{| \Wu4Vk8Cq;o|+|/5-!󑗺o>ꝿ9a>tK⪩]cq!yPOQgu9s7*W\ zAC]4E]o=]g'9{3f^wyxKywƏ7g0.y?cy׳R)C} "0zky붇}gosx-|R&nA<_̿;gַ_^;~ȺLcA[=,@#?S\s s s?lc>=k?S?@sT+A@ᓖ>07<<K;;s=tc <'I3"t:d'6iۿA(T!.D#709@/C5\ Ӵ`c:.L7@:3?D3XBjȈ, EdĦ5(1r)Z ,.JAMIc"'  *bV$+"LOuiqϫܟJ :| JSPq$AJwBJj& qM#y#Y2(0d48,z9.6!W DJ^idyP2|8Z!-ѢД6ʨtQ&Qݐ)>RP|"-w DQ+2˶0RP-oYR9]̀&,= 1# ayj)z퓐=z`LyT:ްLM@ՠ .È)T 2L[S] Q־ I"xTbU:qUjVϲNbjIy#m%^TK2e#Uv'2'x (-Ē-r,Q1+c*JJYkp!z֝XmA(}d+ѐ|" QJ \y`YpR,B\ }Y1" xX2ɪjBu}ڙkQY%5גKaTIUCs@*9H9OZ"۴$KڐBg٘* 0 KI җYZB\[ڹ|ܴmm-P-͙,)-O Fɏ ! ?§ʰ)U1LMO= X$e eKj !T e1 ܻ%") .N KEXI@/еV$jVPpfe ANŒXS~ Nq\Sap` N, aEӰa&`U`TɝAa $G:+Rb,9NEH#OԵm!ÌW GL c!S6`CDVEfFvGH^2 p/ dC;h؉3!6AN$d(# eVd$KBV! KeBnV~e"S#H[fZ2YNeaf]aeU\^ehdUjk.fWe[^vofk`&\2se#;nmvf_Npng!Sfxf{~Uei&{xr6t2tf2dM6J2zD=٨MvMfhMLhhfhi蕾fi6v蔶&靶difiiii6꟮ifjNfiJJJꬮ2 մ jfv뷆븖빦뺶뾶dJL0=#CƋFLFɶGxZlJk28#LjG|T25~l^2)~~'6жHVmV^GlS|m#H#0#h!¦CHh *Ĺ#Uxg~tYF2V\fmn2vo޲ضoofH.Flno'Hr?2gTlƌ&쮆po,=*Hۖ2wgpюg7q&cm\plFqET&2"wm#$Vn>&?Ͱ foq./r2qp3W5w2?/;Gݦ np/SNSvq=,qY0E,tn^o-sWt.rEC! JI6CkwPoo#f lD!E_sh] p6݁>~`W`U`_9~ FaGGmdFHP,z$HD G|5f\m2jG[uwWSᦜyHq(K'NN_%%JJIyeS,Dx֣NE^f01ٜ@) s;_6OuG6%onYH-wS mNc[ai!OIT:GPK[^w{ÚX85 z|`,;-~ϳ (B@MOzE4bE4`lk]p lTpxf+_.*t82Zx 1Ak/21+XOQ8#BӕXi4mԣ D?faػFۃ#ǜ#'&+, X &c+E K &!!daxM|o|ql2;~)FS)bΒqPzR4}Es|K 2dC1 CX/0ܞ$8~"Xe|p\3vk,Snmad:Ӣv|sQoe fO$!K<ݭhiEWntsgUzqe2u՘ϑX(fgW<{:X*ztդl_VV dvw26PiԕgH2qwd#0x>uN&W4Y+f9~{S]:SIcK}髕qsӀ'Ѝ%#!sM5, i9oڰnt_`"أKʭ}Ndg_dۭ&ege gʝקێSXJSyqzGھkk8Jt}uMXFk{=uG{#\3oގ|3L,NW*"7KtKOa2spr NP͠1e|!%W"Ds%Ƒ% XK MI__}` >LPQxRW$VR_IȁEJuѢ(H]gJ-lV- y q`"_IRJ@I܌Zd˂Ta;ⳐbM!%ƣW /&# M٘  FHta62}KJ!k`"ʹJWD"0-JIh 1*#%1bX ^Fӯ;eE <Y$>^ʙx1ɴL1d@zHK&>Ɉ 㩌PeYu1( ҅bE)Ğ-N 1V4uU_EV˵(8j@e#@&/2Hb*@Tf>C6<\"^ 55 aFى_V`^ 6]^R RZ9U$&y%eeyEqJC,B,TFJH!G*X%mu&BӦYo|X+%]yߢUg|Bd$DemBML"joE=c΢}Vڀ(zO2tZaEܽ y,L<аMl!J}ތ''eB t:ƇE9cy|g~[qeMV66RݑFhɄ5_՞ih'cuձhSGe"6fL,Y^="qfx1])!䝨ȭދdWvo] y(\C͑ݤb< Ye%&Ɲt[EQM\L YH"hyG, ߵK2e JŽdkAN#ΫL*ƟπHd8obh=.aZbDc Z!> eźҧ_=hՋW߬j0w(i29 :TMv&Ԩ,^߿*̣F9#&I!6*1hZЯR,WAYJ*b R%bTmu-Xf-=^%0L*]بۚnR F I^i ǜ0Qi0Zez%.V 2 Ţ⢉κce2 .J.:qMjӍBL̬Ƅ؉IMޭdMΚaWn% b£^I.|ĬYYtO0yLl_V؅p/p-p-,ZGnXVprҮ>KII"n8a9er109d jZ=p Bz4pL+$΋[ ɆazzbeԤ!„e]`.Q9fCŒ!Px-a|&hn4XH ClK>bx} Ҳ/Ϫ JN JJf]fad*S#2.gӀ6“xo=9+UFҫAr\M 1ȇݢBzq©JF֚!,%-֡jVr' ^-ĠB**/[ARGAe`$ 3Dh cѲ.NU%r Җ9ۛ6$ (Z$vc-²e,Cb%3P. )m鰲zJnT]+] ngH5ޝS3V %3 LҸOSYyndI8DzER4,)u 3Qu&YT~2]MO(0 8ۖD `*gr!qf~L38gG |TYj/ I_L0..{lV6OU{i?jMlƵE5h F MX KffC:PyTu7tTOP*Swr`'6E5 j$Sh.J! Bm#z΂Ts-F6}z&NjQA[+Hr2QO >o .dB4bz w"uvWK_hC}MXH22mT"iǟaoCqtSt|K\UԇrZZ:P7ԉ. *zcĈH.M5xkotɤZ4y_,KD?d &kwzpD 3KiI)itIƊtk*<5&ib9bZK۽)ȈG( f03}j|/|wy N]y0Ce)xZ7G0LBT´^h#&sO4UkC3:KBZ׳YɁDHjo?zR@vQ\Sjʦ79w(F,R(e.3b,@P8MRWU_2FyS]7zS9OoǷo zL0qu}ɰgb ^<7޹w;/[&s|7у.'XUvOݫ|w(*W.v^ nU,hFqS\(>+rCz0/yVo~z/?+Z=6ٶ83X!er1^缪"r%[^C3 5)]] +e)^z 8R~=ku=JM޲G4fcϽ9˼"k;}[$q37pc̘W#qGa>Q}]ien0]6=tF,dû`XM .ޢJfTXCR17w={&;ԸWY| mٕSmL>1 :{P]]L<`EY-=YE[5x|b^EN1ꃃOѥxIQF-^<|W.~k. P<]DG{}f44DZZU:)h^}іŲ)x3R$ :WѠt$}mv9#Yܣ0nl*(AX \̱zUX}jKRj1eE,PB?"QS,KEQQsNl[rr'"&I)o/OK%DThD9bD`Ԋ( )ڛM@œe$.PF }kS6M_I3A &:$FD`Z 9: sHBccv fS29W+MbC6{@ƽ*a=l|ڲC+P!7PyjApHoD?V)*]m=[ `Q(*LV@93\6OP`:6f:#]( c( ujC* :,qJyyr3HX i @7$,;"N.GV4F!LaU =QXoVI"H cˊxMZ+Y\ ĝWF{)9bHȰNqt eό_^.mǣ"\ nQl3lt"JڮEutHST~NShJdԤ+7_Z,.9t@c-`;Wv˸j*V]B)FlR@=\#Ylg;q]GblIV+QʪfN=GhMr]ST;чM+y_ J ;'N)clA/̳ŀ4s!:yC]&+!=혋h |d"!hsNKNjiaVwyD>|el(x `n[ <\/Դ3EPT4Q|nq@ K9,KRo\5Ӹ_7*Rܱ-k-^qN];c:"10,J7&hTO+dž4g;%}רNK~֝/= +'q~ֆU޻glO4mLjqU.= v< MÍ#ѐ1n ^sb.01Sz KW<գi /b,p趂x&JwNon=cTv+]8h/EB_j޼n +6bK)L{p "iuqOShlGP"+'o BGRQGgW&-NzV"o \hONʱ/X8p&mC% ˆqpj^Cav.Po,**r2pr<|Ge쥢,B˩rGx2 Or4dčKLx DuPPq}orbnx#į =B.6r/m Xvj4ļ]+4:0Z(ST"l"/*$mRQ*MoNI|Q q,!δH X, 6^/lP$ߦ .$/) U1",K! \b(t,SO3B*7lC3ǀd,cg' R-f8./iIm)h2/`c2yk<7Tf3Ie:Et|J:B:1qDϥ\6a0Ðg&Noj#p$ڔ(#V2Ci dHmr+R1? DCH@ 6/Nt(O~SN4TjlL+'4V%VN`*Dl{0l< S|h1H, iUZ BԵ0D I95q4rT4PD@ 44MdհD|lV.FZFٱ\?d55r I-U4|a$vp$׀aBdɯ:6~aLx)(uCxpQ)RM2L/OZ62> {MMY5~05H$ 0mGE  Ĕ_3rOrt-"U#.iYq!Kk?mDFRa hA*96T^mqB*iF5nqn ei[08MSE3W(;50!*/U\ٓ~z4ֲ<)=>Uϓ |,ЏfA L [IBw5@<WO/)gJh/R$%ww 9qNV,OCu(W15"lP@MIr5mQOrإJW|郒s&Ao]u&aƮlBS6zQf5/[jPUS^Bg`n|QSD8QJUtv1]i%{ibUWi *neC%eKgx&9"J/vb } z]U8eOt}TsW8"T2GawaV/ZѬXkzEZF'4Xp9MWaDZKwgJ}n:?\7w[Xn6Ebb`RZKpmWԏZ6!sacaJ @*V$"clcX[U1h{SlTtXBf-IjE͑teD"qK'GM8j3dyE;%ҤlpY}}zI{ju^4NbXy%Qj؀m֫Y"zm[($leΓOә/m&ԡ-VXP[H5cc-rv WL$}9NZ"Z!;8| ,02. \j8N͉ K#5TF'b 7.Y@)%Έi]踊MZj\_,r/zlV8hwAyH'o}x1FISxG{eiz=:E5~KEopz(a8&w;:OU@ڔEy4;Vm(*~>׹G Vß>R6Çpuu ̬NǨ"H+x}JɾK }8(l'/c-iįJOyyƣsLV)lGıQjT"tt>٫1m*I\eK̇vLMi};FޣT{SLi3cgK+[emN4j!BDw* f[אVX9\ܘ𞦒2@b1=zqu7^鰑rZZ{+$g^rcnh&֏`J׎j;|ͽK󚖪Pot-ک1tE|;n`L<{ӶW]wqޒw|I9V9ӯwք{%f휞9vעN0MD2̧9zV"Ƈ@RبrKz7v;G텨iS%":G2$UbG#Njԝ}!ÁhC:֡RyYBlAqo Վhk#ժD1εv∁# <0a"lBACZؐ%!BА!G(\9PD !Bp6i_*}\Pbǥ1r4cC 2}*DJzZpkS~E uذ_ c֎]jl,A_" E$,{dfMC8u$Iar0l޴re\sfuh~>ymw㮮*g%vXm]g,|&.\GI$(L$,[ቫ=qJ_}jl}^^ъ_~`DM3yG97(1N=EF e4 Hxgx"*lgf`vx^F\_(Pa44e,fdL3rYcD}R r4Rbۇ܊͗Ж>nVVkcT^Ȣe9Z#)fxF4Ѓ˄9vdJ&'} 'xyU&'pGEJcYty逛jΈ_j1v5  Rlju`%} œI*X&ri~&~\}ʬY1%dRsp=86! I6Pk5d f^Q@N,|zZr" fGZGDhh+~lQ _ ni Zfj!6 Ϟ T>caKRP +4 e'R,%r:-p{-vrv^:6*ɞhfn9e9K2%0\?!%ϯo\:yâ'4z3pL*N>%8&X[*Y mׯk#}hiFl_Ws. s>V4%0!YLl>u}{ 89J|xQtÞ YDmJ78aߩf)f_$&f&M%KJvCilDF/Vl2"SiǩMkݾh"jD `( ǂ&Deag!V:-s;aAH 2siܤ6 yLd]}GE._0աOQl9ӝg ,TqyR ׵645IE V/=j0㽄8or`JO j2i9Nf:g%jʊͫiwH$d' r¢ȽaQ@!:X4Sf`nnpc[-KsALǨ&2d9}5!ȁ9,'` :#Fِa BXӐtgR$̏nEHĠA;=)XqmbjRȳ}e4f=6>w@z}>_/ZZuiE[1 ɜcR@z sԲh,Ɋb`f% B5k2(/DK $蚊٭;_ːjԄ=i(AIȪ 1%MD ӵINX֨{s^Q;𺪜켔cn)>Ī:3:ɣAV%Y3XUn003*2hՒлS#t?DNv;Xi&R"Dk4_MjjՃ"P,hKͳ k6rS kgNO+3~q W/$DD%N7PC>he]K诽 QdOJE/B@ڪ Jt-r6EEY >?\Yzٕ$]9=d^\fMIhҫwz,+Lrs6[Kf\ iF\kNI$duV*HhYVZJuw=tH t&vKyzRmˬT(; s0Av{KIڹB\nʍ ddE>2v5zw|NP kRJiB5f:Ҫ$H1@ꉺ զfnrKADM1}}U5N2`@D|Jo-xJFB˺y3ߜKo̒{lpۆ4Z F1tJc.ٟs/E?JLf Nc-.'P߻q-`\IRR̢=|1̝!/J*?~&| 6UT犗qm }<$ 9Q-km Ut劶}ɶ;lM~H晒FkGL3{k=:^i5Q(Dԑ],v>|$x@e"iptcG PslrPq?fmWQ}@+xg2vEP&|uen3}q6lQ&hxCfeքr=qQ5tPU#M~D+J6eu6y&Hx&F'"{(ToNkB-OQUC$%2%[$<2VB{W(=tg<EH^#_LLhusQ/g#QGEuv8uqdfc`wv^T'd_wi6ZgvvLVhPU;XB'sXr8y#w>_Fx|Hyz)34gW#ȉcmuV{V w5g"S"Q(ub,dhvާtawaq%v`y;D\'Bq4xR- r ,@zLx[b 3~SfiVq%R!"wX3GHрY{izW;Vw}dv|ɗ!qXgWcSd.xVxSKr[WRGOX>&P%!A` 82dp:'4a4iGVp2nR"!ksU/˱W*s:d\쥌kT$hTXTtk45xj8t$A,hӅUL9AT})Z޸i{a1dZ+|9Iw]"mMcxM7muw'w&Yxqxj qi9G 4rqgIY8E8pǥ4cJ؎nz(gThx)D{偗72Ϩg-gA,@M*w]T/ԷUaGNĥEIQH's- 4u$-u>x7JD`kGڨAjk%~ [!'Ty2b9TCʎ* \$jo-K j|-!QW)gܳNJZFLvgBO21W֛蠋TzChux:Vvپht9 V2WA}8%V`Л۞LTuYZBW#rF4QpCѶ JW(r @&vʷ՜T)7Eυ a%ӫ*j8;euQ<ڗBhܼ\끪, wIȴQVkePҽ^2.#G^Sa4?nuv֪󜌕eEUmA8%lc]*û%ݻDYr@€D=Šlr͍J/Չfvo'q2eB̲Exd[4i οh!فJxܢE ?ƬH|ZL-yvj&o`qz-씅g{=$ܱ C3]4!ClΝ`{ѡ${-g=ItAH)U}PUCԑM4ܶ5mL =_֩%݄:]M i&2߯A@Q#0GL=1pe]v.-"q ֑`㢹)=#!3~0-ޝ *a*q#|tIWS[m׭mcd^阡#M]MT]Nf٭ KaRNN v8.~;>ٌ)]FNCҔ"N+=ꗾ7NPn%OjP 5`뷞5 $a "yN Hne~WN.}.*.]3H0Y>n^`w.rCv5|"wz9$_;굑Ds] nns> Ovftu"yTDH6,M3>*3Y.6uާAd 6Q >zH2_oOn`$nL xa3heKncO1N!?b#iF5#8t+mSM,u ޑ_x3OisqdnBbneK< iY^A@` NT<6O͏4O`^bMG+z/Oy2r0z1gvկ"y= _ (1 "G2T)S =$ȑAD@1!B: EE dRʖ1eΌM9kIΜ0w)JH)RKF50u*զ@nJhWPyT`Ub4䪆 VH*:~ I@ 0Xaĉ/fcȑ%O\e̙5o2AP qxDc޽ Er"i!ϹuouD-3UtgNJetw ^*yѯgz/_5ߟ_?|<lO@+<0ͱ@f닶$ M$?իqѽ/;il0DN)u<1k4dẕ)ReLĒ'cGHJM$m C4/J$p4AIXƤAp(9X*cQAƠ>c9>дT\ Ob4AbPΠ3<=h $GPD%FSJ-mMABCO …3t3fW]s]_5IВ =4QK}RI]>-)Z6-k[G=(ՃXTRad%so m^}WXGUtL}Y?5d@ &5[a*IUsmMW׉3fp+0#p@55#A cI䰤PKu +aa;:Wu%HRL~[n5 X>>7 Q=x馟iꫳzt=8l<} P?UZm9N,Tq }WiѨYjA1^s[F6SaܢD'/TYֿnOk_t6 9.P `4\Nx;հB.U88-/ڟNxlsz5«5ht&x* Ҭ~oߴ=!v*aN;᥉߭d@ċUb"tEx9'4l+Wcya2۸w8 ŻwUS8ςV4Mf-C=zj7BxXKX3+tCU:Կv _FCoZlAQu0j r?YaCX9:ug-ʪѣgwv(wيΏZt/_A\s1 {J$*#r>>`A|9ˈ> h 6!W3b)%o; !âAuʩhs:2!Y'"%B8&<>H<:;kr)"ÖHA3UR-0c Zz"W1g) K(!ða2ȕK([;E\ĒЪQLB<Ēٟ< W!Rj Ү9DʬR2;i;&ܡ*ڳP M<޳#%CxEc"o+pܩ*?s]JQ)ow-j(*l!wc)7 9RAPJa C/|H_Sdk |Fh@S#14Jc^Z0p:7{;뚖?Sb3 qwùʔY3B`XЉ, [Yή hQnd2UZ 塕aX>b3)ny)*g9ۖz ƻMS#|v i9<K2E%r%66*0oz,$ԛ *YJh4̸Q is6ń&$I93E}3 ̄B(Nr[ITǚ4jwrPK݁;FGMH-ρ鯸U M,3"JtCQ- T1ǜALj)90AMnNjJ~,!ۉ)G )vE{cY@Հy^K yC9L9$jc:#M;;s4ȅm+!:ɀXH +k;ҀEX"]Ԇ ؚ5(x"䐣B=($fLI(JsSDY Q."n [F-G:9߹%/?-$M"32mh@J#m"49]jIHt8R 1RR$a Y Kn6Q`b*LTN; V!/ 24``=0m!Ya!0,)TJ˳0=;)$\NeaH: ,#@b`@H\KEꐸ;KeLi"׹Qo#Ao_-Ěcu6b"@nGA" 49 K{XCJ-J>1d:E:&#Pފ5j?]h@BDQJ1EO48ܹOp#`gfh8P!ȃ !AϬp P&CF>GO;[9 Q֖ Ey{p_`[g<7+`v&:$ě[&A]ƯSQ<&hh:V 6Vgj5ՈZ^BZFaS[l81G:%foOCZiqUղ>K⚳٧!c67=Rf-OAڔl.}ѻUA6jFB1FFQL1*Ck벊Ք.A0YE]LV&WîE4alm֭0-(MᨌHdlfƝa % aP:&C8Jl$6)\bb0DQMhj;r B|O E~*2+t\ݢ\ ŒA+NdU!ĭ=kM>QEEo"K?^ta.Ua7JN)pQ#MSqaFoBp>نIoVDg[O^F0 D;LbŇ7T׈ u98YBV@X-"=*=8I!Zh/V_r,i#n(E"kVA+Nm"] 6STցZ7 O m2[!їGsբ8ȓH`j=tQ6@O^ wAO`cU2aE7>*v%&M= Z7E-1Bs-vD+5",%J}fGW`RcbW}LBxL6((_Q]w!Ca6J|zZ5Ee1WOr u@;NrX f٤ DT'k. WZ".(.줱T:E4Yi%" '9Ǟgv7hFYh @;jU &^9cņX,=D.Ic%xN[.t-L4=}w򗩈&tT,**io]M J^B6WPg;KQ",}JLyWsS%T::$Sgk#ROmAՖHu~iXqm&'mQfI'$ou&ބ/$90D%de%%ȬU^J65rUFrHP%C4)vrΒPP)m9|`o0gPpB\s0k`O?D|^3bx|ɌUQjsQRd^8J0.Gh1 |.&SK2 a&f|i0(4*im2 f88Q4Фr]$$hteL>03T;tJ7" [utnY1tXǸf>qz43di^E7 b";R1^E2)𒼈sNh.LGA} :EBT+rvc 5lt(N8EE$nIб% hD.sEhib?'cD^ d=1 2jNG,0P˸1~zTiCY',&M@q.P~BRv,MAU%nu18HEZĈ:/, M /I]I:a!-AJba"`4ZC"M]ᨹ&@~i2aCGBbԷV_TdT0-lKAxX  5E \[Nx[2HX cp^ ջ $nve Dp?U~b貊L! N;;9 X=U & vl"zڼRa*a6}<,`ؤ!SxG`&{<#?[)o⇉DVNLގZCV##K4v2V &HY #LN v`,b]IUqk#30\鬒){^t9yuGG% QZbU1I3k$ LLɃu `ƶZAyuUdX'eZq`{< )xAqv5m>mH@,F\@_՞1,/#m.)pO4 xƊyn2=fiWUL9+5]D>΂Qױ 47s'2d#a%1D{Jto>p*TNcO0M ݑJk13Kǫ uOtE*kЉ;xveʅA]ſ0ym0SA$]D Fup 䓃VEZ 5SVt^Iߣw󞉋x@,O(JNVIڷظ׵w{shT|O93a6%3g:~s_}J~#f[n)w'tI2}oWeFȓqDxXpmDiIy0N.`MHTEHD`LȇtnvLw AjMx|)qLhDM䓮1[|UѠI NWeuCYj TX@ =a]A@AEG^5 aBg y]p ,0, pB4DjY G\`脔iP#B=Kpe & G;AˤН FŕAMUUiDjFhUTѦHVb;ŔDPlD_c$O0 u0V1^mV3ZH(L"6:H֞/zC089VQWdU0: τZQIB"h׍00sD/ _!BIdլLF]AfT,FFZkQgDMR]"<G AYϯ\]|APB ZԸCOAf 蒳.1W XZ2%J@]YBYE`FAJѝV˵T]^ i84_fE} $gE^ s(%l&g$hޏIDaj RoA| !eptNEĴy M"KTM WvtF(%FQʞ}0Ż[IB{T vXtnbQ\ )%y TO^?zkP\X%o^DU6p^z΢XJprEi'Aݰ?5t!~^\БZAɇs@p`AٸsfaEz%0BWE%J,TfQE|GvIJ—^#  57`ppLf\f`XPJq˚]ƞ Sl b<HQuSQKL2NQtKXOyPHmd'ٵo53}NɮmrD5{beB]H2&W/-S"tW1ȴ?2FbӍ ZV%4"惴G%u$(6gt\߳j:IģJ bC; /l*aM[^,Xgpݢg ͫ ;5$oPEܛLN0ONi/0j\p!MkX6Y>O[$0$ |aUΔ[SLέ꘺(`V6EucboNAvmiDHe'e sS`M(PV*^3rV|'qqzT-ڪ>ڔ1jJRSAuMˑaqzۤ"h% &`7Zv2M)TŚ w|@~@DhS!p|Oaʧ"G$HHHǎx*^ #㎕}q [N⋗ł{1pv+Sr"r#39mE$+GϓX+PDzdI yy7+׉Dc99E?lYn7aDebrp,J$LdiYbb4`Y_!`$ MEceHHT%Jԛ@̰!a7 Wzw،Q!8>O*K;4&Įzztӊ ܠ{KΈPǰІ`zp,9>^,5/yWr- UQB|Ǟ!(ushӖqwGiz ))\y*%ȋaA4 uHrK"Tѳ^SG5WN}؏ySݥbDVzL?$oK0toj(yܛՕ%%qfVlȴu4|! н?ڦ^Ysu*G$8RRI28~/=iX%zg.ǵ<ǯ8+\K `fKXJ+]45= R} T)*혆rD%߭+[{[D#ݙl| `/M0k9q@^.aD@6A IH "aPd "-bYȰVXX)AyL$VRboDڋ9ܜB|ъ+lFmؒDDXKDNYdE@($n@P%d0€ A96z?q ۈ>, 5|s7?s? #d" K#1jP 9DQbi47\ ea4&$`q8MS&5ba,-HZeGmĒV6ݜ]{7~3&$uTYM:5g_BYqJEbx,fAIsR >^~%-5ޘ=vM(9U^]~emux蠅fDf5Njp$k"-XXZĊ*;A-RAZnZ/OQjjO;kc#*O+Za&BkiSتkZ {k+/M7=.-Oo96ӁK}`F@初%gX ޠÂBA/L3dJ*T},2+ĊL99>'5#1Nh@"JO֓> }zb~3 _ƳAoU|uِB@0jfg%[` 9 ag>BB+Il752 1S ^0fC  \ GC@0nQ B a0CNv"PL.viUrOA&:ŀ[Dc+xDmrDH:# 8a#4HƐIJҘS9*$7 F&;Mmw)%ON)"=\˙1GR]6YH&-D)Jbo\W, "Iv%nTk.,Y5D# GE|KrS &T& eLrJ.El9:G]gϺמWlzܥ+x2fN#G!V"۝Di9=J`8'QҋWKo,{X,W /a +^YMy`n׿7/d_{}y#K?00G땿|?~؏y«v!_!ϤQ&)k&k9 rD" ^j5'`Rď[^V. mT7P$ŽhF,A/kF"<0RmĠ G.I#O(/^dYn)S`* >(x&ĭW09 =\>DC.~/ W6Prv0.zP 0g\e S OK$OWL(,`R6~ȜI0i PGHƺ; Hd9Fzfl$DЬp*W\,vT >BLh(jtyVl 'uDQlnGP4B4Z{@qjo Guua'rXXVK̊nb`” >`LHb0pʄY d߄2*>Ir'CoԢIW6Bc)iThm$n .ީs(Blܧ9(lXȄhJH4kIf<.R=*t1 ,6 rv#,Hy4ltIԧȫ&%K0-(O%C=B%nBaW0IVDJ&2d4Zᄩ,=Ti0+u32T}6#>Ey89 r%wJ#8b&S#2"bz_hWjbd$;N :%r%ռ" @+XD 8XBÆ #OD3R(E >T7NMOl; "D8< p)DGXBj169+ 7x2km0("lPR Eo#+%F BdzxXS(F;3"Z)`` 4.B;s3'#;#ZxJ#X"bXwnCZ')bZfS5t *ܴ:e!#4.@s^p! #fI*j6AJ3BDA "U=TĪ4b8uR8$f"&-B(DN#̐GTsfd*R"DaSˢSU eUcJŲU[]i ePk@JeⴜhOrv~5ZLJQ|HdC(:gn 2ksfN,ǂq.{ q+͕0cTY땔mTn  ,+Jl?k5!tUS5_"!@B !H{ e#>a%bO>ǔ#bUIgjvkU?ZGWrh ":YR"+gKV1=,+(F䄍Z{:$ƒ!-J\J<,n@њ%S DI; pL3֔00*~l(?pADUWNUD j%vj}6ODcG%-&S45;>7qD7jE`OU lvT$t&ps{qWU&{)"{8ADD.⢖cH|&WNpEO4;n%܂HO*T0eP_x]Z"rV]fN*g E*f*kf>vc"fW{]w{Eu15Ȝ4r"t%GT=1iJD[A@ZG)Et{U5D-bvBD\#UŵHCh-^! @/gB4L5N*\8֦SsCtB6!Xs48x:%ު^-#E6yH>N{dق+Z/lwmpvCJ{=p6*(czƆ3r:sލ1~L+(Uu$${!JURu+Cv?BJPj fje u"D+n;[Kޤe#~CRP"!AA MWBT=%+M Db]_b ms$d*Hz*.sLm'&Xb1TIQ|$Ȣ~:*豅z !v0xͰFߍq'xPU#V+o|ovNwsJ;So:P^Gz :KQD.FxuF)ux9Zd3D#sG[6&iV݈rC<dU׺C"JU)9C&¦D,H22) Gf#Wm0b;"Mso{ZYUU-obU>$l7kDКCLfT}қS (Veih~(GwB{%='ԨA|K2*k((Ox{VZ$HZsvKIh+޶@7&h&X<9:e#Tvb7,LiW%loZXVX%ߍW:\D& L&lk- ^ӑwӠ;,Bt^)Cw4:t%(KT&6E=:b#4r~#;1Ci+2GǔCT+\̆%>F [,>/e]SۃD}֪ET=QH4GVVoL(,՗\X7ڞiU8]\ D>gqE02[xֲBNCKbY ~.4qC> D$U<1.|p\= BD:PU?#seuGPf;M| j}w¤kTdfVUkJB9u&h'%Bj2 #ʤI} ETCP!1@(B"b s"(VtIHb"È<6`r&(`Vp1$29 e>$*tfI";2t.@(E>rxS$&QE14yaHg{^mh%hӢ&\cVeD( ٧&3ʉ'BIT,>}G:LnffO h0u,Z4Ͷ3ʄXaJ.EVYGE̯CuhH&LZKXӬZiڊB | r$ɐ #i'Q!E7]5 hV55!(}LS%siPU$\z}$6P}1|B6$UeI(dž,׃^u!H^ކqmPR]ƙ$ 'HY!Mep4PVqQYFeg XnADUAn.]VC0KLp.e0Y_ot=aTyW}FH_u$t640 b4&(QYaU'KɁbX KgЗҦ{.)hHGBhdBjnueT:Ұ6ZRጬ%zݸ}FȖwI`aBvReEWXsg V7LdC.^%lNifWuIfD4;0U;<,t> tHTK3=tG;-T+fT[}̂8=` ]5cC-c7MvU{f%WdpyIRx{8V #Xd8~a"T%.xRzkoDMDIشn{ԹI!o{M%X:7ęgV(0I EQ-jO a( M-$DE1zoS`AGLX:HUZPJHRsR G! mDPIv, o~}@I[dNތelLn*WE8 +4P!X~ع#` 8FD *_ @4qxWG Rc3`Mn2LTl(i9o2"7"%ƁHD9U#ATGf!Okd&-|RJY2YJʄHro\]vҗVI:iyPNJae2,XeEod/CmbV"U9NT"ؖ9=M!# `%kBX]1Vi$?2AQ2A*Y׭*Mhܣ $"xh]g:Ѝc0S( ɥ2lrQY4N}@%9LhDP`5GRGiԢu*rv ++VGvVo4aJX$kd9ĦV,$Q3PUU(G{$s" Cf1fe,6.SVA'Acd?0`\֨Zh]:(@*5QZ4S7OEilW ۺ4f_׿z3I*qa67iY٫Ldv6:\Zk  &3p' a K- wxj$G(NW0VqGåؘ7qgpcXt{7zo|{&@CO;'N[ϸ7{4;mtink-1.0.16/html/AJOUT_IMPRIMANTE0000644000076400001540000000120410376041214014342 0ustar jjfuseSi vtre imprimante n'est pas connue de ttink/mtink, il est possible de l'intgre. Pour ce faire il est neccesaire der crer un fichier printer.desc et d'ajouter la description de vtre imprimante. Vous pouvez galement modifier la descriptiuon d'une imprimante existante. Le fichier printer.desc doit, aprs sa cration tre copier sous le rpertoire /usr/local/lib/mtink oder /usr/lib/mtink. Le rpertoire doit tre crer avant de copier le fichier. Le fichier printer.desc contient des lignes decrivants les diffrent aspects des imprimantes. Un fichier d'example se trouve sous le dossier utils. voir galement utils/rdPrtDesc.Fr.txt. mtink-1.0.16/html/NEUEN_DRUCKER_HINZUFUEGEN0000644000076400001540000000144010376041214015635 0ustar jjfuseWenn Ihr Drucker nicht in der Liste der untersttzten Gerte ist, ist die Chance, dass Sie Ihr Gert trotzdem in mtink/ttink einbinden knnen, gro. Sie mssen ledidlich eine Datei printer.desc erzeugen und darin Ihren Drucker beschreiben. Sie knnen auch die Beschreibung eines vorhandenen Druckers modifizieren, das ist oft leichter. Nachdem die Datei printer.desc erstellt wurde, ist diese in das Verzeichnis /usr/local/lib/mtink oder nach /usr/lib/mtink zu kopieren. Zuvor muss natrlich dieses Verzeichnis erzeugt worden sein. Die Datei printer.desc beinhaltet Zeilen, die verschiedene Aspekte des Druckers beschreiben. Eine Beispieldatei befindet sich im Unterverzeichnis utils. Diese Datei wurde unter Zuhilfenahme des Hilfsprogramms rdprtDesc erstellt. Siehe auch utils/rdPrtDesc.De.txt mtink-1.0.16/html/UJ_NYOMTATO_HOZZAADASA0000644000076400001540000000112010376041214015305 0ustar jjfuseHa a nyomtatja nem tmogatott, j eslye van, hogy az mtink/ttink-et a sajt nyomtatjhoz t tudja alaktani. Szksges lesz alkotni egy printer.desc fjlt s bemsolni azt a megfelel helyre. A lers(desc.) elkszlte utn n is tud szerkeszteni egy j mtink/ttink verzit. Egy kis segdprogram van ehhez szolgltatva. A printer.desc fjl klnbz sorokat tartalmaz, amelyek lerjk a nyomtatja adottsgait. Egy mintafjlt tall ehhez a utils knyvtrban. Ezt a fjlt kell hasznlnia azrt, hogy az mtink/ttink-hez szksges C-forrs fjlt elkszljn. Lsd mg utils/rdPrtDesc.txt mtink-1.0.16/html/OLVASS_EL0000644000076400001540000002266710376041214013342 0ustar jjfuseMtink egy llapotmonitor EPSON tintasugaras nyomtathoz. Ttink a konzolos msolat. Szksge van egy ktirny kapcsolatra a nyomtatporthoz. Ha a rendszere nem teljesti ezt a kvetelmnyt, csak nhny funkci lesz elrhet. Ez bta verzi s nincs teljesen tesztelve. Az mtink megfelel beszerkesztshez ellenriznie kell, hogy a Motif, openMotif vagy Lesstif runtime s development csomag teleptve van-e. Egy gimp plug-ins is benne van (gimp-mtink). Megjegyzs a klnbz portokon tbb nyomtatt hasznlknak. ------------------------------------------------------------ Hasznlni tudja az mtink.sh szkriptet az mtink meghvshoz az alkalmas konfigurcis fjllal. Tekintse meg a szvegeket ebben a fjlban. Megjegyzs Linux s USB-hez: ---------------------------- Rgebbi kernel tartalmaz egy hibt az USB nyomtat port olvassakor. Ha bizonytalan, aktualizlja a kernelt. Megjegyzs FreeBSD-hez: ----------------------- Hozzadtam a /dev/lpt0 ... /dev/lpt3-at FreeBSD-hez. A nekem meglev verzi (4.5) nem tmogatja a ktirny kommunikcit az USB-nyomtatkkal. Ha az jabb verzik tmogatjk ezt, hozz lehet adni az eszkzlistt az ismert eszkzk vgnl (cfg1.c fjl) s jelentse a vltozsokat. Az mtink felptse: -------------------- A Configure szkript ellenrzi a szksges komponenesek megltt s megalkotja a Makefile-t. A Configure meghvsa utn egyszeren rja be: make, s a binrosok ltre fognak jnni. Ez mkdik klnbz Linux sszelltsokkal s Solarison. Rendes krlmnyek kztt nem szksges mdostania a makefile-t ezekhez a rendszerekhez. Ha egy msik opercis rendszere van, lehet, hogy szksges lesz mdostania a Configure szkriptet, a forrsok tartalmt s/vagy a makefile-t. Krem kldje el nekem az n ltal vgrehajtott mdostsokat. Ha a gimp, vagy brmelyik komponenes nincs teleptve, vagy nem elrhet a plugins nem fog ltrejnni. Telepts: ---------- rja be "./Configure", ez fogja ltrehozni a makefile-t. A "./Configure" jelezni fogja, milyen opcik engedlyezettek. Az els lps utn rja be: "make". Root-knt rja be: "make install" az mtink s a dokumentci megfelel teleptshez. Egyszer felhasznlknt rja be: "make install" a plugins megfelel teleptshez. Az mtink program megprbl olvasni s rni a prhuzamos s USB portrl/portra. Ha ez hibs, javtsa ki helyesre a belltst az eszkzfjlhoz vagy futtassa az mtink-et root-knt: - Vltoztassa megfelelre a hozzfrst a porthoz: chmod 666 /dev/ - Mdostsa az mtink helyt a megfelelre: cd / chown root mtink chmod 4755 mtink - Eszkztippek: A szvegek csak nmet, francia, angol s magyar nyelven vannak. Ha az Mtink.res fjlt tmsolja az ~/EpsonUtil-hoz, hozz tudja adni a sajt nyelv szvegeket. Ebben az esetben nzze meg a tooltip-et tartalmaz sorokat: s szrjon be egy j sort sajt nyelv eltaggal. Pldul az alaprtelmezshez (angol) nmetl EpsonUtil*mainWindow.ok_PB.tooltip: Abondon the\nStatus Monitor. EpsonUtil.De*mainWindow.ok_PB.tooltip: Status Monitor\nverlassen. -- < language = german (de) Ha telepteni akarja a plugins-t, msolja a gimp-mtink-et a $HOME/.gimp*/plug-ins/-hoz. Ha a gimp tbb verzija van teleptve, vlassza a megfelel knyvtrat (pldul: gimp-1.2 a gimp 1.2-hz). Az "Epson Status Monitor"-t az Xtns (Kit., azaz kiterjeszts) men alatt fogja tallni. Figyeljen, hogy az mtink-et olyan egy olyan knyvtrban kell tartani, amelyik benne van a PATH vltozban. Eltvolthatja az mtink-et a "make uninstall" paranccsal. Informcik megkapsa a nyomtattl nyomtats kzben: ------------------------------------------------ Csak egy program tud megnyitni eszkzfjlt a nyomtathoz, tovbbi programok nem tudnak csatlakozni az eszkzfjlhoz. A maradvny tintamennyisg megkapshoz nyomtats kzben programoztam egy kicsi szervert, amit rendszerindtskor kell indtani. Ez a szerver csatlakozik a nyomtathoz s felknl egy megnevezett csvet a nyomtatsi folyamathoz. A kommunikci az mtink-kel vagy a ttink-kel akkor rendben lesz az osztott memrin t. A szerver figyeli az elsbbsgi hvst az j nyomtatsi munkhoz, s ha egyet tall, a nyomtatsi adatok begyazdnak az EPSON D4 protokollba s elklddnek a nyomtathoz. Ez teszi lehetv a nyomtat lekrdezst az llapotrl, azonostsrl s a maradvny tintamennyisgrl, a nyomtatsi adat s informcis/vezrl csatorna fggetlen. A szerver az etc/mtink szkripten t tud indulni, amit az /etc/init.d-hez kell msolni. Linkeket szksges krelni a megfelel rc.d knyvtrak alatt is. A dmon egy porttal foglalkozik, s a start szkriptet eszerint kell mdostani. A program helynek az mtinkd dmonhoz valban megfelelnek kell lennie. Ha ezt a tulajdonsgot akarja hasznlni egynl tbb nyomtatval, az mtink szkriptet eltr nv alatt kell teleptenie, gy, hogy a megfelel dmont tudja indtani. Nemzetkziests: ----------------- Nhny nyelv tmogatva van, angol, francia, nmet, olasz. trk, magyar, bajor. Az mtink tkutatja a krnyezetet a LANG, LC_MESSAGES s LC_ALL vltozkrt. Az els widget elnevezss vlik a megtallt nyelvnek megfelelen. Az els kt karakter van kiragadva, s a legels van konvertlva a fenti esethez. Az alaprtelmezett forrs szerint egy widgethez lehet: EpsonUtil*ok_PB.labelString: Exit EpsonUtil.De*ok_PB.labelString: Ende Az els sor az alaprtelemezett (angol), a msodik a nmet szveg. Ha fordtst kszt, vagy javtja a szvegeket, krem kldje el azokat nekem. A mellkelt Mtink.res fjl tartalmazza a jelenlegi forrsokat az mtink-hez, ezt a fjlt tudja hasznlni a fordtsi munkhoz s ezt a fjlt kldje nekem vissza. Ha gy tesz, krem szrja be nevt/email cmt/URL-jt a kzlemny szvegekbe az n ltal fordtott, vagy javtott nyelvhez. Ha nnek ms forrsok szksgesek, pldul ypu font, krelni tud egy EpsonUtil fjlt a home knyvtrban s illessze be a mdostott forrst ebbe a fjlba. Ne feledje, hogy egy forrs lerst EpsonUtil-lal kell kezdeni. A ttink-et szintn nemzetkziesteni lehet. Ha egy Ttink fjl megtallhat ezen knyvtrak egyikben: - $HOME - /usr/lib/ttink - /usr/local/lib/ttink - /opt/mtink/Ttink - . A fjl be fog olvasdni s az angol szvegek kicserldnek a Ttink-ben tallt szvegekkel. Jelenleg csak egy, az angol (alaprtelmezs) s nmet (Ttink.de fjl szolgltatva) van tmogatva. Bajor nyelv: ------------------ Krem indtsa az mtink-et a kvetkezvel: "LANG=by mtink" Bitte Mtink wie folgt starten: LANG=by mtink Hibk: ----- Lehet sok, jellezze krem milyen problmi vannak. Megprblom megoldani azokat. Tennivalk: ----- Dokumentci, segtsg szvegek, tbb teszt, tesztels klnbz nyomtatkhoz (Nekem csak egy van). Nyomtatk, amelyeknl minden mkdik : -------------------------------------- Stylus Photo 890 enym sajt nyomtat Stylus Photo 1290 Ez csak a 890-es A3-as vltozata. Stylus Color 400 SJK Stylus Color 580 Glen S. 07-APR-2002 Stylus Color 280 ??????? ??-JUN-2002 Stylus Color 600 S.B. 12-DEC-2001 Stylus Color 880 Marc R. 09-DEC-2001 (megtallhat: www.Pro-Linux.de) Stylus Color 900 sajt teszt 19-DEC-2001 Stylus Color 980 sajt teszt 17-DEC-2001 Stylus Photo 700 Arni 10-DEC-2001 (megtallhat: www.Pro-Linux.de) Stylus Photo 750 Karlheinz 29-DEC-2001 Stylus Scan 2500 Alberto 16-DEC-2001 (fejigazts nincs tesztelve) Stylus C60 Andre 26-DEC-2001 Stylus Photo 895 SJK 12-MAR-2002 Stylus C80 Ronny 16-APR-2002 Stylus C70 Ronny 05-MAI-2002 Stylus Photo 820 Gene Heskett 25-JUL-2002 Stylus Photo 790 Steven J. M. 27-JUL-2002 Stylus Color 580 Glen Steward Stylus Color C42UX yq DEC-2002 Stylus Color C42US yq DEC-2002 Stylus Color 777 Tosi DEC-2002 Stylus Color 480 Tokai F. 2003-JANUR ... Konfigurcis adat ismeretlen nyomtatkhoz : -------------------------------------------- Forduljon a fjlhoz a utils knyvtr alatt. mtinkd szerver: -------------- Az mtinkd egy kicsi szerver, ami lehetv teszi a maradvny tintamennyisg kijelzst nyomtats kzben. Tovbb egy USB nyomtatk hasznlatval kapcsolatos problma megoldsa ezzel a szerverrel. Ha tbb nyomtat van csatlakoztatva az USB porthoz, a portot nem fogja tudni hasznlni mindig egyidejleg. Az mtinkd felkutatja az usb portokat s kimutatja, melyik nyomtat van csatlakoztatva. Ha egy nyomtatt megtallt, az mtinkd felknl egy csvet a nyomtat elrshez /var/mtink/. Egy httralkalmazssal is el van ltva a cups-hoz. Egy EPSON C60 nyomtat teleptshez ki kell adnia a kvetkez parancsot root-knt: mtink-installInitScript /etc/init.d/mtink start lpadmin -p C60 -E -v mtink:/C60 Figyelem: --------- Nmely nyomtat nem mkdik megfelelen, ha rgtn a bekapcsols utn fogad kdot. (A LED mutatja, hogy adatot vr). Megjegyzs Netscape 6.21-hez: ----------------------------- A /netscape/run-mozilla.sh start szkript hibs, a 0 egy visszatr rtke van mindig visszaadva (legalbbis a sajt verzimnak). A netscape 6.2 helyesen mkdik mdostva a szkriptet a kvetkezkppen: Keressen a ''$prog ${1+"$@"}'' fel s adja ''stat=$?'' sort hozz, miutn megtallta a sort. Keressen a kvetkez ''}'' fel egy sor elejnl s adja el ezt a sort: '' exit $stat'' ====================================================================== Krem kldjn jelentst a problmkrl vagy a sikerekrl: jj.sarton@t-online.de mtink-1.0.16/html/rdPrtDesc.Fr.txt0000644000076400001540000001451310376041214015020 0ustar jjfuserdPrtDesc: ---------- Cet utilitaire permet l'extraction de la descrition des paramtres pour les diffrents imprimantes et la prsentatin de ceux ci sous forme lisible. De plus il est possible de gnrer le fichier descriptif en language c a l'aide de rdPrtDesc. Syntaxe: rdPrtDesc -p|-c -p rdPrtDes cre un fichier lisible comprenant les donnes de toutes les imprimantes connues. -c rdPrtDes cre un fichier en language c a partir du fichier printer.desc situ dans le rpertoire courant. Le fichier gnr peut tre utilis par ttink/mtink. Les donnes des imprimantes dja connues sont bien sur prises en compte. Fichier printer.desc: --------------------- Ce fichier contient des blocs dcrivant les diffrentes imprimantes. Chaque bloc se presente de la faon suivante: .PRINTER .name: Stylus C20SX .colorsNb: 4 .mainProt: D4 .stateFlg: True .exchangeFlg: False .exchangeSeparateFlg: False .cleanSeparateFlg: True .resetProt: D4 .alignProt: OLD D4 .idFlg: True .passesNb: 3 .choicesNb: 15 .colorPassesNb: 2 .colorChoicesNb: 9 .alignFunctionName: - .END Le mot clef ".PRINTER" dclare le dbut d'un bloc descriptif. Chaque bloc est trmin pas le mot clef ".END". Les mots clef entre ".PRINTER" et ".END" correspondent des charactristiques particulires et sont suivis d'un argument. Prre de noter que le charactre '`' a une signification particulire lors ce qu'il se trouve en dbut de ligne ou sil n'est prcd que de charactres blancs ou des tabulateurs. Le nom de l'imprimante, tel qu'il est retournu lors d'une interrogation de l'imprimante doit suivre le mot clef ".name:". ".colorsNb:" informe ttink/mtink du nombre de couleurs utilises. Les mots clef se terminant avec "Prot:" dsigne quel protocol est utilis pour la fonction donne. Les nouvelles imprimantes peuvent, grace au protocol D4, informer l'utilisateur quand la quantit d'encre rsiduelle et a l'etat de fonctionemen de l'imprimante (impression en cour, ...). Le protocol D4 utilise pour ceci des canaux indpendants. Le protocol D4 dfinit galement un certain nombre de commandes faisant double emploi avec des commandes existantes et permettant parfois une meilleure fontionalit. Malheureusement, l'implmentation varie selon les modelles. Pour cette raison et de plus pou assur le fonctionnement avec les imprimantes ne connaissant pas ce proptocol, il est possible de paramtrer diffrent mode: - OLD L'imprimante n'utilise pas le mode D4. - OLD D4 Utilisation d'une commande ancienne imbrique dnas le protocol D4. - OLD EXD4 L'imprimante connait le mode D4 mais l'imprimante doit tre mise en mode de compatibilit. - D4 L'imprimante connait une commande speciale D4, celle ci est utilise. ".mainProt:" declaration du mode par defaut. ".resetProt:" declarearion du protocol pour la commande de remise a zro. Certaine imprimante D4 connaisent cette commande mais les rsultats ne sont pas cey escompts ( Stylus Color 980 et Stylus Scan ...) ".alignProt:" Cette commande (alignement des ttes) n'est pas accessible directement par le protocol D4. Il est necessaire de declarer aux moins OLD. Suivamt la catgorie de l'imprimante il faut ventuellement ajouter EXD$ ou D4. Les mots clef se terminant par "Flg:" (pour drapeau) sont a suivre par les mots False (faut) ou True (vrai) en fonction des possinilits de l'imprimante. ".stateFlg:" indique si l'imprimante peu retourner des informations concernamt sont tat (imprime, erreur, ...). ".cleanSeparateFlg:" un faible nombre d'imprimante permettent le nettyage des buses de faon selective. Dans ce cas dclarer True. ".idFlg:" La Stylus Scan 2500 and probablement laStylus Scan 2000 ne retournent pas la chaine d'identification. Mettre le drapeau sur false pour ce matriel. ".exchangeFlg:" Un certain nombre d'imprimantes (Stylus Color 480/580) ne possde pas de possoir permettant l'enclenchement du processus d'change des cartouches d'encre. Une solution logicielle est neccesaire pour celle ci (valeur True). ".exchangeSeparateFlg:" Les 2 imprimantes suscite ncessite l'envoi de commandes pour les 2 types de cartouche d'encre. La valeur dot tre True. Certaines imprimantes sont pourvuent d'un poussoir pour le changement des carouches et accepte cependant une commande partir du logiciel. Si vous dsirez avoir cette possibilit, placer la valeur True pour le mot clef ".exchangeFlg:". Les mot clef se terminants par "Nb:" concernent l'alignement des ttes. ".passesNb:" ".ChoicesNb:" ".colorPassesNb:" ".colorChoicesNb:" Les 2 premiers mots clef prcide le nombre de passes et de choix pour l'alignement standard. Les 2 mots clef suivant permettent de notr les paramtres pour l'alignement des ttes couleur. Si cette possibilit n'existe pas il est neccessaire d'affecter 0 ".colorPassesNb:" Le dernier mot clef a t introduit en raison du manque de la fonction d'impression des lignes d'ajustement pour la Stylus Photo 820. La valeur est normalement -, pour la Stylus Photo 820 il faut inscrire Pattern820. Installation du fichier printer.desc: ------------------------------------- Ttink/Mtink recherchent le fichier printer.desc dans les rpertoires suivants: - /usr/lib/mtink - /usr/local/lib/mtink - /opt/mtink Si le fichier est trouv, celui ci est lut et la recherche est abondonne. Si vous direz modifier la description de vtre imprimante, vous pouvez extraire les information a l'aide de l'utilitaire rdPrtDesc et effectuer les changements souhaits. Aprs cette operation il suffit de copier le fichier sous un des rpertoires cits plus haut. Installer une nouvelle imprimante dans ttink/mtink: --------------------------------------------------- gnrez le fichier printer.desc dans le rpertoires .../mtink/utils et executez la commande rdPrtDesc -c > ../model.c Le fichier model.c contient les donnes de la novelle imprimante ainsi que les modelles dja connus Avec "make; make install" vous pouvez compiler et installer les programmes. mtink-1.0.16/html/mtink-chooser.gif0000644000076400001540000000464510376041214015275 0ustar jjfuseGIF87ajmj,@0I8}dg gg *P߯འ08z-0I{CJP):2`U%5zXutf=[&{*FaN~}po rsRQqwu s tx\uPpˈ,ȍ!a(\CFbŋ)ø"G;9Ǔ(1,!J)%I͛8s2\%=œQfȌGihR  OΫ(y2Kׯ`Ê=ܥcӪ]6>ɝKr޸}uOт'\Cxcđ7N%Jύ=ӧXͺװc˞M۸s{1 N[y6I9_6w#dZOѮ<}tWEX߯߀8KtAv& K ) YY+)vLX.BaJh..`8Ɇ>  ?Kd6e5ɓtDXf8o!x$ uSPYuRUUdRHGMUfF UUmq%`@!%fjY矀tgy<}BU=~6ehUJf: 3vi3jꩨꪬeO (drF+&a6!NXȮRb/ulxP{La1c+k覫kqk\08WZO4[ }5 vo{㉗屡{dt1i<nLpΡa]|W(Wwk7^xk4wCsl/l͹w3sԖa-jwXvմlֶ٦jM+nǍ#r׍݀p6#QXI :- y/8/RZvw瞇ᢗ^X5Vr8 NP3啢Ӿ@JھhTHN2 <6ɍZ(h5(yfiFZRC{T&&E͉~fдIjM$)Ya(APR`oA}M z0 /RdO6S s.d> ("ZK"&:P8.)H-Vk/jڲ8/ kc 9ELc-FDzǸ;q(#6,1miܑ ˗H.:t|$8/Yd}ZNz ~RqmPJTZ+gim@LO.33Xb2<.L[R +23a`5YxFMY`Ȥ{L̘XȦ X4e:NDӚF;:ijYӢxbt a$Ҽx.Tbۙt|si4-5sXuxvZd$##͒Ebg8|;S 'G9QR$=eiӨg%",l¤0F@qVծvҌ$#)ֲ fM+%ѪֶĊnU+YŹv5Byx` H vl(*"ˀE#bYQh3HqYpVE\U}V*$X2=l+uF+F!.nq[2ڻe+tHRsֽPGz.M44:ecc8v%Q/8+$QO{B1ET 3!#1x^{'UX_yx#0boKaOCms魉>"#;!\%$#'8}ЄNvrPVȧ0 TC=(`S\x3q,嗼is\@4s|)vBte #sb8e |J2LM{->r`reO42 ../mainSrc/tres.c mtink-1.0.16/html/mtink.It.gif0000644000076400001540000001401610376041214014201 0ustar jjfuseGIF87a{}{,@I8ͻ`(dihl B, o`8x<-(,Ȥrl:TUשzffrQom, ds`ܒMr`curtwQtvVl2n4qcˢϞ 4P*\Ȱ{ڙ6aňCw:'t"\ҝg2I͛8sD`̝@ JhΞy~](F$UfU+ש`~u,ӳː۷p&SLxݫ. URUbkb*ꨤj驪j*J뭸Ũs\*@K2cl6ۡ6AY66-:-xR$PFeUZ-n.Ўƒq]Zpًo떾NejlndEէ0.rqX",kp2ym\X^1q+(ri;s_ZΪ)a)=´*X9uQtP,eɩȼi>)o>5pmx|uG%4t^A2I^SQ1țۛ#-Gdg,ز,+ 9^nz>&o'G/WogwS_WAOAI$xPB7`axEh'H!$P>mp/|'H ZZh@ 2/u(L W/A`/C'6xk$ Ix&0#'H*:V̢(E# ^'С +*ݕ5]QV5CcK[Ƭo]Ύo|IHYʍ4c"sHyű.$'IJZ̤&EpFY(GIR`vW4.ʓZ,quHČiD-`RɩcbL2׃Y`i̦6if:&T+FMLU-{H[1|Y5(>~;f:pjA50І:DeIsZSiESFQW(~r MB+EҒ(THsA/՝\ Jg +$Nwj@NJT H-QTM*M*ժ΄V*l(uVׅձ5e=Z]wϜjpe&bt]ZW5opYfmY(:>,vO0k]qXزY-Q*:FEkd PaiPFI;M4uYiUn 9Aڷ c)kџs*tK.v-sn+VѬx?1su TѶٯ5i;RU,w͉L`N;x}&L Wx01 fCL+apU q&*F@3uKoз" \cx}qlUA}Lb `_,.H2n,@,S|/35"w~>{c2''؃MF;z߽*I[z%䢦7N{Z^,ֻu?Blfْ󶸽q7v 76άcUpqqb Wg[q|ͱ7cF xs򵮳'dՕ>5yB ;9*Y+Wӣ%Է =:=ڎ&9?{VO.Օjyy9s{i{|.!nOgPn51;>_t x7Dm[NOWz+]g{T.F_UonXOa\j 'jub]t}C-b+}Ϟ7UM? $|{w8|}{ ؀"ėlRxp~@5yZy8$X~ zHS-tŷt284Xˑg!W:T<؃D@TB8;UFxSH gvL]K RQTXtXMZԅ^H`4dHfxejFl؆",lZtp`uZp8+r(_%ZktPH7XrHBme7X3xJAr:q\F\u]gX~ZU^XZ9`3Xo^%x8hF8EX$EW֗xV7(qhe9Z~\xqX}HxM~h[ȍ6Sh\H3384vi8|D5uD{Ahs+aZcXwpiY2Ӈ1s 9)q!YE76&Kr2SAH8<DquIKy/ML57TUNxDZy\ PC]{a|U__ 5;CY}_sh{WpU^-3QtX@ytg8i a n))Y/wC{Q>8I\yٕn;]YJg9_pfٛa9YRp`ƙʹI`ȉhA-vؙڹٝ޹b9Yb C<ϙgI@$sbyIaЃ>@: 2KFgd6? JfW zRf_6??6f擡":ivicpg @e0ZhdI8ݹC֣ǩB:+vgM@Z0@*eruih je2J@eDzX:<ڡB?TAb&lc@ e:Pc+:t*YxzmX@w0kꞓ?pz`u֜Iꨄ E*cyzE6r:Rxɒz,ڪ+nzjjuʖDjEQnǚڬ0TD@̪DEKk*/w*k=նkzצȊDHmDB* jEmۊmmk9DF֭(/Dk!qD,4$-m骰6튭f.[&Wz\<@[Fn$;EGLklI;^PKS:dVXb\[^[{Kids[#[lˊh숒)9z8Ɨs+FU*7ḘYqZ_ ۸#*;RK*6Tf;J!UfOsxw(+r)0նȻ뻻J׻r5/eG ūK+)+KG'u(9њ蛾3p+h4!L[.o!}H}'^q5zXv 0mv-،C&x\!䋃ٽ \%"<"&q,\`{B6:ܓ=]+l;KkĆ BELCL|PQܼR\KZC),+b\EE"yjƝYJ2 p>\>v#{n,6H%">϶N^D 3· ~Fo[U:o4&P~o]>-a"pNSN9/_n np;Y]ϙO /!!8~4>̫_ s-8͕RUP] ~ݴ8-x1/>?9FNX__}wn[h@PN@r!2T2.`i/zm o Id6c4gЇĐvI/Ԃ5Rp68 V$~,ŭ4A/<>A&. Ū.57.˺?DE'SR,VۋH.X1Z̳NNOAQTE,#$;[ Pf<2Fkp lE!^`vp\jy4zAtuXx垿ZoTᣂ+6C& lG!E$Q#%UdRIr)]Τ`M*bOA*fPI.eBQqd֤ZUYnWaK lYiծe[qΥ[]y_w cSaĉ/fcȑ%O\e̙5oYE&]iԩUfkرeϦ]mܹu ;mtink-1.0.16/html/UEBERSETZUNG0000644000076400001540000000320610376041214013661 0ustar jjfuseAnmerkungen fr bersetzer. Die Dateien Ttink.En (englisch) und Ttink.De (Deutsch) beinhalten die Ressourcen fr das Programm ttink. Diese Dateien befinden sich im Ordner utils. Nachdem eine bersetzung vorgenommen wurde, kann die .c Ressource-Datei mit dem Hilfsprogramm 'bldRes' erzeugt werden. Falls 'bldRes' nicht vorhanden ist, kann es auch mit "cd utils;make bldRes" erzeugt werden. Die Generierung der Ressourcedatei erfolgt mit dem Kommando: bldRes Ttink.en Ttink.de .... | sed 's/\.En\././' > tres.c Wenn die Datei tres.c erfolgreich erstellt wurde, kann die Original-Datei mit der neuen Version ersetzt werden: mv tres.c .. Nachdem die neue Datei in das Hauptverzeichnis kopiert wurde, kann eine neue Version des Programms ttink erzeugt werden: cd ..; make Sie knnen natrlich Ihren Namen, die Email-Adresse und Ihre URL in der Ressourcendatei eintragen. Bitte fgen Sie diese Daten in Kommentar-Zeilen ein (!). Senden Sie mir Ihre berstzung, damit ich sie in das Packet einbauen kann. Die Resourcen fr mtink befinden sich nun ebenfalls im Unter- verzeichniss utils: Mtink.gen (Allgemeine Ressourcen, die nicht bersetzt werden mssen.) Mtink.En (Englische Texte und Default) Mtink.De (Deutsche Texte) Mtink.Fr (Franzsische Texte) Mtink.It (Italienische Texte) Mtink.Tr (Trkische Texte) Die .c Datei kann mit folgendem Kommando erzeugt werden: bldRes Mtink.gen Mtink.En Mtink.De Mtink.Fr Mtink.It Mtink.Tr > resource.c Nach der Fertigstellung ist die Datei resource.c in das Hauptverzeichniss zu kopieren. Danach kann mit make und make install eine neue Version von mtink generiert werden. Jean-Jacques Sarton jj.sarton@t-online.de mtink-1.0.16/html/mtinkc.Hu.html0000644000076400001540000000647310376041214014553 0ustar jjfuse mtinc.html

Mtinkc nyomtatóválasztó a több EPSON nyomtatóval rendelkezknek


Az Mtinkc egy kis segédprogram, amelyik engedi hívni az Mtink állapotmonitort
egy adott nyomtatóhoz.

Az Mtinkc megvizsgálja a <i>~/mtinkrc[.konfigurációs szám]</i> fájlt és mutat egy kis listadobozt legalább két választással (az aktuálisan konfigurált nyomtatók) és egy pontot az új nyomtató hozzáadásának konfigurációs fájljaihoz.

mtink-chooser

Források

A következ források vannak az mtinkc-ben szerkesztve

*background: #cccccc

! for Motif 1.2/Lesstif make look as for openMotif

*TopShadowColor: #eeeeee
*BottomShadowColor: #111111

*foreground: black
*shadowThickness: 1
*XmSeparator.shadowThickness: 2
*visibleItemCount: 4
*XmList.background: white
*XmList.foreground: darkblue
*XmList.highlightThickness: 0

! default resources
*dialogTitle: Mtink Chooser
*title_LB.labelString: Mtink: Printer Selection
*ok_PB.labelString: OK
*cancel_PB.labelString: Cancel
*new: Add new printer
  
! german resources
*De*dialogTitle: Mtink Auswahl
*De*title_LB.labelString: Mtink: Drucker Auswahl
*De*ok_PB.labelString: OK
*De*cancel_PB.labelString: Abbruch
*De.new: Drucker hinzufügen

! french resources
*Fr*dialogTitle: Mtink Choix
*Fr*title_LB.labelString: Mtink: Choix imprimante
*Fr*ok_PB.labelString: OK
*Fr*cancel_PB.labelString: Annuller
*Fr.new: Nouvelle imprimante
! hungarian resources
*Hu*dialogTitle: Mtink választó
*Hu*title_LB.labelString: Mtink: Nyomtató kijelölés
*Hu*ok_PB.labelString: OK
*Hu*cancel_PB.labelString: Visszavon
*Hu*new: Új nyomtató hozzáadása


Ha egy új nyelvhez akar forrást adni, be tudja szúrni a következt az .XDefaults fájlba vagy a $HOME/Mtinkc -be:

Mtinkc.Fr*dialogTitle:           Mtink Choix
Mtinkc.Fr*title_LB.labelString:  Mtink: Choix imprimante
Mtinkc.Fr*ok_PB.labelString:     OK
Mtinkc.Fr*cancel_PB.labelString: Annuller
Mtinkc.Fr.new:                   Nouvelle imprimante

Be kell állítania az Fr -t a saját nyelvéhez, például olaszhoz It-re és illessze be a helyes fordítást a kulcsszó után.

Lásd még

Állapotmonitor az EPSON tintasugaras nyomtatókhoz
mtinkd a szerver a D4-re alkalmas nyomtatókhoz
ttink egy tty bázisú állapotmonitor

mtink-1.0.16/html/mtink.Hu.html0000644000076400001540000005736010376041214014411 0ustar jjfuse mtink

Mtink

Az mtink egy állapotfigyel az EPSON tintasugaras nyomtatóhoz.

Az mtink-kel megjelenítheti a maradék tinta mennyiségét és a nyomtatója állapotát.
A fúvóka ellenrzés, fúvóka tisztítás és fejigazítás mveletei elvégezhetk.

Néhány nyomtatóhoz, mint a Stylus Color 480 és Stylus Color 580 szoftver szükséges a tintapatron cseréjénél. Az mtink tudja az ehhez szükséges parancsokat és támogatja ezeket a nyomtatókat..

Tartalom

Követelmények
Mtink és az EPSON kommunikációs protokollok
Hogyan mködik az mtink
Nemzetköziesítés
A parancssoros opciók
A fablak
A konfigurációs ablak
Fejigazítás
A kis ablak
Hibák
Lásd még
Tennivalók

Követelmények

Az mtink részére szükséges az openMotif, Motif vagyLesstif library. A megfelel befordításhoz meg kell gyzdnödnie, hogy az X development csomag és egy az elbb említett   eszközkészlet   telepítve van (runtime és development környezet).

Az mtink kétirányú kapcsolatot igényel a nyomtatóval.

Linux

Ha párhuzamos portot használ, gyzdjön meg arról, hogy a kernel vagy a modul (parport*) megfelelen van konfigurálva. A 2.2 kernel családoknál a "CONFIG_PRINTER_READBACK" paramétert (/usr/src/linux/.config fájl) kell 'y'-re állítani.

Az USB nyomtató port modul nem megfelel a régebbi 2.2 és 2.4 kernelekhez. Ha USB portot használ, szüksége lesz egy újabb kernelre, vagy módosítsa a /usr/src/drivers/usb/printer.c fájlt.
Ez a módosítás nem komplikált. A következ sorokat kell módosítani:

static ssize_t usblp_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
{
    struct usblp *usblp = file->private_data;
....
    if ((usblp->readcount += count) == usblp->readurb.actual_length)
        usb_submit_urb(&usblp->readurb);
 return count;
}

erre:

static ssize_t usblp_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
{
    struct usblp *usblp = file->private_data;
....
    if ((usblp->readcount += count) == usblp->readurb.actual_length) {
          usblp->readcount = 0;
          usblp->readurb.dev = usblp->dev;
          usb_submit_urb(&usblp->readurb);
          return count;
    }
}

A módosítás vörös szín és vastag bets.

Solaris

Nem rendelkezem saját Sparc állomással, ami kétirányú kommunikációt engedne a csatlakoztatott nyomtatóval, így nem tudtam tesztelni az mtink-et Sparc Solaris alatt.
Az újabb munkaállomások el vannak látva egy ecpp szolgálatkész porttal és engedélyezik a kétirányú kommunikációt. Ha ismer egy ilyen munkaállomást egy EPSON  ink jet nyomtatóval, informáljon a körülményekrl.

Mtink és az EPSON kommunikációs protokollok

Egy új kommunikációs protokollt alkotott az EPSON amikor a Stylus Color 740 és Stylus Scan megjelent a piacon. Ez a protokoll (D4) az IEEE 1284.4 alapú 1.5 draft és engedélyez egy kommunikációt az eltér logikai csatornák közül. A f elnye, hogy a program egy speciális parancsot tud kérdezni vagy küldeni a vezérl csatornáról még akkor is, ha a nyomtató foglalt (nyomtat).
Ez engedélyezi egy port megosztását különböz eszközökhöz is (nyomtató és szkenner).

A D4 protokoll végrehajtása nagyon hiányos a régi nyomtatókkal, és szintén nem hibamentes az újabb nyomtatónál, mint a Stylus Photo 890 (a saját EPSON nyomtatóm).

A D4 protokoll követelménye, hogy a nyomtató ismerje az EJL (Epson Job Language) nyelv néhány részét. A legfontosabb parancsok az Exit from D4 mode parancs, ezt ismeri minden D4 kommunkiációs protokollt támogató nyomtató, és a Get ID parancs, amelyik utasítja a nyomtatót néhány információ (modell, megnevezés, támogatott nyelv) visszaadására.
A Get ID láthatóan nincs támogatva a Stylus Scan 2500-nál és talán a Stylus Scan 2000 -nél vagy a Stylus Cxxx családnál, ami igényli a D4-et a Get ID kiegészítésének.

A régi módszer az információ szerzésre a nyomtató állapotáról az EPSON REMOTE parancs. Ezek a parancsok végrehajthatók új nyomtatókon is.

Az mtink ismeri a különböz protokollokat, de a szerz nem ismerheti pontosan az EPSON által kiadott valamennyi nyomtató adottságát. Ennek köszönheten némelyik nyomtató nem az mtink elvárásainak megfelelen fog mködni, azonban könnyedén elkészítheti a követelt módosításokat.

A nyomtató adottságainak leírása a model.c fájl elejénél van elhelyezve. A legfontosabb mez a protokoll mez és az id mez. A protokoll meznek tartalmaznia kell a következ szavak egyikét:

  • PROT_OLD   Ez a nyomtató nem tud semmit a D4 protokollról.

  • PROT_NEW  Ez a nyomtató minimálisan végrehajtja a D4 protokollt, Exit from D4 mode szükséges.

  • PROT_D4       A nyomtató támogatja a D4 protokollt  a fontosabb nézpontokban.

Ha a készülék nem ad választ a get ID parancsra (EJL és D4 verziók) valószínleg a parancsok elküldésekor lesznek problémái. A nyomtató lekérdezés le lesz tiltva, ha az id mez tartalma False a True helyett.

/*   name               colors prot      state exch.  e.sep  cl sep reset             id   */
   { "Stylus C20SX",         4,PROT_D4,  True, False, False, True,  PROT_D4,          True, 3, 15, 2, 9, NULL },
   { "Stylus Color",         4,PROT_OLD, True, False, False, False, PROT_OLD,         True, 1,  7, 0, 0, NULL },
   { "Stylus Photo 750",     6,PROT_NEW, True, False, False, False, PROT_NEW,         True, 3, 15, 0, 0, NULL },
   { "Stylus Scan 2500",     4,PROT_D4,  True, False, False, False, PROT_OLD|PROT_D4, False,3, 15, 0, 0, NULL },

A model.c fájlból kivonatolt adatokban láthatja, hogy a Stylus Scan 2500 nem szolgáltat azonosítási információt, de szükséges a D4 protokoll. A  Stylus Photo 750 a D4-re alkalmas nyomtatók elsgenerációjának egyike, a kommunkiáció csak akkor lesz rendben, ha az Exit from D4 parancs befejezdött a szükséges REMOTE parancs eltt. A Stylus Color egy nagyon régi nyomtató és nem tud semmit a D4 protokollról. Végezetül a Stylus C20SX kéri a D4 protokollt (a régi Get ID nem mködik).

Az említett mezk modosítása teszi lehetvé az mtink mködését a nyomtatójával. Kérem informáljon az eredményrk s a model.c fájl változtatásáról.

Tekintse meg a gimp-print dokumentációt a parancsokról:
http://gimp-print.sourceforge.net

Hogyan mködik az mtink

Az mtink els meghívásánál ki kell választania az eszköz fájlt és a nyomtatót. A kérdések után a nyomtató ismert adatai betöltdnek és ha az id mez True-ra van állítva, az mtink megpróbálja a nyomtatót meghatározni, ha a választása nem megfelel, másik nyomtató adatai fognak betöltdni. Végezetül a konfiguráció (nyomtató modell és port) beillesztódnek a $HOME/.mtink fájlba.
Az mtink következ meghívásánál a konfigurációs adatok beolvasódnak és ellenrzdnek, ha a csatlakoztatott nyomtató "id able"-ként van meghatározva.
A $HOME/.mtink fájl törlése az mtink-et az els meghívás állapotába állítja.

Az mtink két részre van osztva, amik egy osztott memórián át kommunikálnak. Ez engedi a program X részének frissítését és elkerüli a printer code funkciók tévesztését az X-környezetnek megfelelen (idzítés, megszakítások, ...).

Az X-rész nem megszokott X programként van felépítve. Az mtink különböz XEvents hurkot tartalmaz a munka könnyítéséhez. Minden alablak saját hurokkal rendelkezik ésmeghívva a visszahívó funkciót csak akkor tér vissza, ha az alhurok maszk visszatér. Ez engedi az értékek visszaadását a hívónak. A nyomtató interfész meghívása hasonló módszert használ..

Nemzetköziesítés

Az mtink-et nagyon könnyen más nyelvre lehet alakítani. Jelenleg az mtink tud angolul, franciául, olaszul, németül, magyarul és néhány szót törökül. Hozzá tudja adni a saját nyelvét, ha szerkeszti az Mtink.res fájlt és bemásolja azt a home könyvtárába EpsonUtil néven.
A nyelv forrásnevét a LANG, LC_ALL és LC_MESSAGE változókból kapja. Ha például a LANG környezeti változó értéke fr_FR, mtink vár az EpsonUtil.Fr forrás megtalálására (ahogy a környezeti változóban található, de az els nagybet).
Ha a keresett forrást nem találja, az alapértelmezett nyelv az angol.

Például:

!!! default font for English and European languages
EpsonUtil*title_LB.fontList: *-helvetica-*-r-normal--14-*-*-*-*-*-iso8859-1
EpsonUtil*fontList:    *-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1
!!! set the font required for turkish
EpsonUtil.Tr*title_LB.fontList: *-helvetica-*-r-normal--14-*-*-*-*-*-iso8859-9
EpsonUtil.Tr*fontList:    *-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-9
....
!!! The default (english)
EpsonUtil*previous_PB.labelString:    Previous
!!! and thetexts for german, french, italian, turkish an hungarian
EpsonUtil.De*previous_PB.labelString: Zurück
EpsonUtil.Fr*previous_PB.labelString: précédent
EpsonUtil.It*previous_PB.labelString: Informazioni
EpsonUtil.Hu*previous_PB.labelString: Elz
EpsonUtil.Tr*previous_PB.labelString: Geri

Ha fordítást készít, küldje el nekem a munkát. Kérem illessze be mindenhová a nevét, email címét, url-t és amit még akar.

A parancssoros opciók

Normális esetben ezek az opciók nem szükségesek. Ha az mtink-et nem jelzi ki egy másik kompjuter, mint amire a nyomtató csatlakoztatva van, megadhatja a kijelz nevét, mint például: . mtink -display computerName:0 .
Nem szükséges abban az esetben, ha egy X-szerver mköödik a nyomtatószerveren.
Az mtink indítható ssh vagy rsh burkon át, ha elérhet:
ssh serverName /home/jj/mtink/mtink -display workStationName:0
A használni kívánt nyelvet is jelezni tudja:
ssh serverName LANG=fr /home/jj/mtink/mtink -display workStationName:0
ezzel például az mtink francia nyelvet fog használni.
Kérem vegye figyelembe, hogy nem minden böngész mködik az elvárásoknak megfelelen.
Az automatikus nyomtató detektálás letiltható az mtink indításánál a -noAutoDetect opcióval.

Az mtink is több nyomtatót támogat egyidejleg. A --config <configuration number> opció engedi a konfigurációs adatok olvasását/mentését a különböz fájlokból/fájlokba.
Ha a <configuration number> 0 vagy nincs -config <configuration number> megadva, az ~/.mtinkrc van használva. Ha a <configuration number> nem 0 a fájl neve kiegészül a ".<configuration number>" számmal (pl.: ~/.mtinkrc1).

A fablak

mtink main window

Az ablak fels részén láthatja a detektált, vagy a konfigurációnál megadott nyomtató nevét, itt például a Stylus Color 480.
A maradvány tinta mennyiségének kijelzése grafikusan és számmal is történik. A mérsorok száma a nyomtatótól függ.
Az állapot kijelzése tartalmazhat néhány adatot a nyomtató bels állapotáról, például: nyomtat (a nyomtató foglalt).
Az alatta lev gombokkal lehet kiválasztani, milyen folyamatot szeretne végrehajtatni, az utolsó gomb nem aktív, ha a nyomtató nem távogatja (követelmény) a tintapatron cseréjét.
A gombok legalul néhány információt adnak az mtinkrl, vagy itt lehet kilépni az mtink-bl. A Segítség gomb teszi lehetvé, hogy megtekintse ezt a dokumentumot.

A konfigurációs ablak

mtink configuration window

Kiválaszthatja a kedvenc böngészjét a html segít fájl megtekintéséhez, és jelezheti, hogy indításnál az automatikus detektálás engedélyezve van-e (alapértelmezésben engedélyezett).

Böngész kiválasztása:
Beírhatja a böngész nevét a beviteli mezbe, vagy nyomja meg a [ ... ] gombot és válassza ki a böngészt a felbukkanó fájlkiválasztó ablakból.

Az mtink ismeri a néhány böngész által követelt parancssori opciókat (Netscape, Mozilla és Galeon) és azokat annak megfelelen indítja.Más böngészkhöz, mint a Konqueror, Gnome-help-browser vagy az Opera nem szükséges speciális opció, és használni tudja azokat is.

Néhány böngész nem mködik, ha nem a megfelel asztal van használva. A legjobb választás ebben az esetben egy olyan böngész, mint a Netscape, Mozilla, Galeon vagy Opera amelyik nem függ egy egyéni asztaltól, mint a KDE .

Automatikus felismerés:
Az Automatikus felismerés engedélyezése gombot ki tudja kapcsolni. Automatikus detekciós módban az mtink megpróbálja azonosítani a csatlakoztatott nyomtatót.Ha a nyomtató egy régebbi modell, mint a Stylus Color 400 / 600, ... és a nyomtatót nem ismeri fel els kísérletre, az mtink küldeni próbál egy kódot, ami néhány karakter nyomtatását okozza. A további elnye az automatikus felismerés letiltásának, hogy az indítás egy kicsit gyorsabb lesz, de ha csatlakoztat egy másik EPSON nyomtatót a számítógépéhez, jelentkezhetnek problémák.
A beállításokat módosítás után menteni kell. Az adatok a $HOME/.mtinkrc fájlba íródnak.

Fejigazítás

Az mtink engedi a fejigazítást. Ez a tulajdonság nyomtatómodelltl függ és az ablak megjelenése modellrl modellre kissé eltér lehet.
Néhány nyomtató, mint a Stylus Color 480 és 580 kéri a fekete és színes fejek külön kiválasztását az igazításhoz. Ennek megfelelen a fablak kapcsológombokat tartalmaz a fejek kiválasztásához. Másik különbség, hogy a nyomtatási minták száma eltér (8 vagy 15). A mveletek száma is különbözhet modellenként.
Nem tudom garantálni, hogy a kód küldése a nyomtatóhoz mindig jó. Ha ezt használod, tedd a saját felelsségedre.

mtink alignment first window

mtink alignment wait window

mtink fejigazítás els ablak

mtink fejigazítás várakozó ablak

mtink alignment setup window

mtink alignment last window

mtink fejigazítás beállító ablak

mtink fejigazítás utolsó ablak


A második és harmadik ablakot háromszor fogja mutatni (nyomtatómodelltl függen).

A mini ablak

Ez az ablak csak akkor látható, ha az mtinkd szerver fut, vagy az rc file .mtinkrc a "/var/mtink/..." elérési útvonalat tartalmazza.

Ez a kis ablak zöld szín, ha minden rendben van, narancs, ha a tintamennyiség kevesebb, mint 10 %, vagy vörös hátter, ha a nyomtató nem elérhet, vagy a tinta mennyisége kevesebb 5 %-nál.
A bal egérgombbal az ablakra kattintva megjelenik/eltnik az mtink f ablaka.
A jobb gombot nyomva tartva és az egeret mozgatva lehet ezt az ablakot a képernyn pozícionálni.
Az utolsó pozíció a ~/.mtinksess[.configuration number> fájlba íródik, ha az mtink be lett zárva az ALT + F4 billentykombinációval, vagy az mtink fablakának vezérl menjével.

Hibák

Valószínleg sok.

Lásd még

Index
mtinkd szerver a D4-re képes nyomtatókhoz
mtinkc a választás több EPSON nyomtató közüll
ttink a tty alapú állapotmonitor

Tennivalók

  • A dokumentáció javítása.

  • A dokumentáció lefordítása.

  • Teszt több nyomtatóval.

  • ....

Szerz

Jean-Jacques Sarton
jj.sarton@t-online.de
Xwtools Home Page

mtink-1.0.16/html/align2.Hu.gif0000644000076400001540000011625510376041214014243 0ustar jjfuseGIF89a`$,Ŕď,`dؔL8JMNLĴx$|`|~Lش,|DLhДL|ddfdѴ|䐭_BhHP4δרyHĤ;Q|1L̟HK(ό\az7܌AũtߔĴt?3v4pߤTi\dNd᩾Lʨu4ʁhдh<\ʘhʷրRؼjzL—az,><>JWNTTľmzTuzddtԪlTv,Tؼ4LTl!,H*\ȰÇ#JHŋ3jȱǏPGPKyreʗ+Mt&L2O$Ξ@w#G&5ʔSHkJu)Q3@ЪO`IcسjJ-!NBaܺwu2Ws䄰ˆ+FixLdN.gvy2gy9ΧM;I݊ԫ[Uuލwz.wkTFНISAv> }{w{1D9ʑG GFd@)eQF!UB(De]Z饘aE!ce!mF mҹfЩgu2g. !U !PIbzv駘R*jjjjj*k5ZknP 2, ,Ⱥq"wqF{GD -\b@~"@斋"P4ko[ o)ᄂ[0/p/ ?BC̆/Hw !|7"1<ߨ(†ͷ|O2áp$}'x"@5D-u XG]uSW5x6dk _Mڙ6g-7seMwxo0'Ng㐣HNTN, xS˳J*򼲊s<RA<Ǔb|<ΓO>g=)c3FBݏߍ ^0tC0ٯ̟WN`'@ R(uHI "(J#G$b h"*LX%Kh6ZCW ;t6(2JRX,P# m|cc`X}c E9PF U(ÑJ@" JZʘ yPФR D*WJt% ^Y@, { e:0_3ԁ=`e2S E I &6S@mv3L8g `0- p3&1Qc>O h> 4l!Ä.4DgPNF3э };,pEJeQ4 +U,r ,,=@Ne䠨~dRHD65pjT PD+BHҪ*)SdMk,1e\oK@1}iM*s ִf:L\g5pv%c%+fayէ!9C@P>@`P݆D =pK;)H*6TM\憔 %t׈3+w#Y,kD#>S2h0վYG@*U~TF He4Xʠ)I!(B@ar16V²,*gi2d@d,a5G/{ɀ/d4M"KӜd69 NΦ |d'KH=K+QvY''Zb6tٺCk׬nCx3lg~~4! @=hF+сN4!B;ϖn43}i,A5?Bb uA(m|>xm Z/C$Rȭ+ ԡ׿PaSN2hf3MOư2cPBLj p 0ns@ex1`xۻewdlcI2`8x~ΆC 'F.eZ n Av֞ƿ \ @ Bw Kp@B/p8s.Nt5Eѕg9LG[]O:su/Zz՛J_ 'C`{2.@w] 4p*LC9<;aT1lk@/^ @Pa4=gzq#Ƹ}8 @c =xO|}2 հ}{D ~j0>S0~U FR*ؠ x V_wa(Ze6f>ppq./G@G0r `m $8&X(x&H>.)(r2x) 'h:-/+1X# k#(L!R SA 煅74cHPdc n؆q8rH`h xxzyh 8(d`xd؈vd #@@0hd#P v`X87G'qqPaf+@ /҈ؘ h߈ r h@ x ؎r!H8xrX!ȍH 8xȏX HM  M zБ Yk`*-kSl԰u< BY 4`Hy@L x@tHKY W"]h  diX#n)q0@tiq@qP q|vȗ6 vi)Y`P!Uذqذ]U] f(+!8m&Miʙ i9IGɜəީɜ hy 陝 G9ɞ iy yI  M @x 00Ga0В1Ő )kТ/ -J4H:π=*x" C Dz"CK IPq#@Vj0[s)AAA q{IiAjq tAx`!UЧ!` ʨ!Z\کubrJA P:BM@ M`PʪйI@ʜJjy` *Һ9zz0ܪa a0a : @*S0+x%xQ& 0Pk* [ E   x=zH+ . 2 p̐8+̐ BW`qppI۴O[q0 U{S  AAo`dj퐶f k! r[j`\ki 0 \k; `Jhf$0a 0a pMp ka;K@ۻ;[[K0 м0 В %н  АpPEE ` EۿOPO  E̠p|〳 p̀p{ |Wp p%| `q`A` p+yP y=APP@jFl\PP P@V\\d0FpjFo`oq|0Yji>וZNn. א~Mpulx~.. g~jp~gg֔ ~Pg  Z@..0 ^֠֐7~-ޠ~ Ď .. ^X@ 0 0TpPm`` ny^**y0@|P0   | / _ `|0|P/*!OF 21䴐P>f.0D?BF_J. DPRZV]NX?^TbU_cej[/\ot 8|Z ZpZp p Z0 ? ? 7`-p @@N ?OOX T `OT ?&ʯ@  %/* !*/2`1_1 1p !@ DPB >QD-^ĘQF3ri`"I(DRJ-]SL5męSN=}'H>q$TiPK>ETUޔzсGMRcA% DL,Dbэ۳zX\ XN>Dͫ޳@YN j+,& Z"Zfvo- J]z- 8`f3^6Ȓ5YΟCKzPdG-dgiK#V1w/673s,@Kt׶k2 :ڭ<#s(8>բ+-[\28 *:)I, 宼ʢ3:K3cȀ9-JIBނMK/pƊ>s1%s+QGt H!#-\J3&|Xo/-,# {+,+`Lt \G7ˊ3 ;2:lɴ,ҮtKlKD0dˢ2Iդ7{s8BR;E1UBWnDx1Tmaz E[ap3Uʾ+.Rj@Bc9El G9ث/6-7–#ܲѼ}vm-x-^-t~75bJgw\kbGL 1ntc͙͒axJ9[ Q%7s%/>c|,ɣIX2UD. r3KQt,2EJ6ӺЊZp9 dkĬ2%':ĘA5u;<Fq>|c#[JY`9FKͷ<2?#Fg JtW2.ׅ=3%-$rwӶw;4T,Fd74k2pI/_?UiwgP7>u5)dg(% u{^~Cmo_AL~w_jt(20Y ^S̊JjB!n9Z3I"U ,Iq!~J#lP2`fbkp!D <1>7½$X>Hk2'rq, 2f>a&FB721+bs*bM3[`r/ȇuƚAq,Q7ͤ9Up/qi)a8KRӌu Y/R^ҥ \k׮:ݑ΀K_R@6s·FVvCJ)# ьeԨYE/3& AB0Sķ!skYf."<ӝD湙+$>{jLj d-t&4aх5Җ$E|E3IJ!kmj-ȴ ugDbqF)I-FEH2-*]6ʰk3ȩ0vCd$9֋!Tj?YVuDL h+`)OSV=QۺTρ13r+bWoeQ;cհu?-lb%Vϵ/n5\{f|VA3/ ,YA+BPJz+I*Ψ5$D8&КDúF-7F\geܦ*ՅaC}ff}Hn 59>wѝnScg J$ w]"F:!nyzmo _d%Hox3⚗}0s`J2 u#v/cD^Ģ*Wdӳ?r{s=?ZІ&hF#y6v+P%4iNwӟuE=jRԧFuUjVկue=kZkqJֿv=lbFv5}lY;> ljWvQ,\VI$fnFw}mfK&3IВuwcׂ!%oGx} %p$x%.T⨮-Qs|6O.˻y9}qK~97{v7r>̤">9~71w:ţ_<4Go}]uѳ~p|Jwҧqwf:t=lO>v{ZhW#vVݣw}u>y]o|^x| __3귟>񫿹u~z+|-מW}WyG!|[}珰/%=vzw?o[|sg7}t;-vZ|~|'?=7~68z#@ss>C˻˻{@ʋ@{=kt7 -a䶳s#S󣻹?@@<7f k="6Ӌ#p8JPI8A#7"*,6KB8[ŐB}+0$b:A 2t7?~S B8<#'ň6B4ĉ3g8 0PC`p$a0\IٙrtDYBI Z,쒜yL-K[Ġ)I* BIu~Œrɋ}a, =Ah ͪ Ƽ͐L#9[qxMӔݘ+҈ zyjbb֐MMrQ9#נ(-(>H͜t5謬)hՈ &OԬbJ˗ 8$^MMϔ};iR( aԓ=IX.,':P++J$}(kiYښW !јȱ }Y! ݙK-@ UR ͪۂ6ɿ SQ'Q U*"-ɖ, Xƀ&-"8]S3S/d_JCM ¡|'k<3 9 Bq(@`"ɺbUpU1YS-19\ 4P <XBdIf @bYZV\ RjQTRY^!-qk*Ujݚ*Y&l1`LJT%\ '<>Q-1zع*R* ®-AXb Y0ѝUVDِF2ˈX8|8ٔ=0uZ䩨m8Ь5!شZ) [Y Hm[+h>!>$h34E,ЍX!ѐV*ԋĐ"ʚZm `(\^ /٬џ)]m偋b]"pa΁}@*u. ]%WRZWBJ]\U)uؽօ=ޗ+EݟY\X=ߙ!| e_^_9B' . XEZq^h/U)Iᩯŵ!0_ΐHi[`NNuIr*qE͋#aqY.&Y _=΄!AnMɸharhZ(Vf(bq {/T &#-KPpMaB*ɔ).Y1a \c^E)NPfGQ&R6S9d@IӛVFX6v ?&̝!kQlKV\Q#eb&ded&f^bvf^QNTg^UNfVfafc1`floo>^.pfkfgngk6gS1j&zg om>fwVfpi^2VvfpFrfmuufvr{h"3U){{Lf哆eC0K#WveYWF铮Ni锖ijX&jfNj^j6j~jjF>jj>^8 I΄Jk# .#:5:&6FVfvdžȖlj1kC> 0ȵEŸfTF#'DigdT&XFNl՞)#8[Ȃm4[mF$ՆRl#mD2ZmS";nG>fn 6h7XeQBF< .nh ȅ&vH}Ha,ooqof{mon>2 Zpn^pNnp+kϞ>΄&PqͰL=pP<3TD>%m%Gr_n2njDF>Yjq~k!50C^nm*gr#E"Gpo%sfrs:#W8O@p>*or7g>s&m>r,'2O/^q B@Awr'(_t=?H> s#Ys /GU?\oZuX'gU2K1KE-.t$\JesoV2^sGdOrv_rGrWuycWnutu\wf?~2L.WC1 Dq8+v)m}2ٮx|uYo~b!GgtOw-\0"s 4]xcgpyy'y'zynWi4t94YSgr1x2?&SPf#h{_ yy$v9zFyXh{eT/rE:{(S1O_2EW?ʟ|O_r0i0JlN-Qq!3{}"| +$+~}o&r_Em1v|˿|}/{~W?O#~~w/7#H  L@ >t8Ł%.Ĉ7VT!I lѢD&!<$͎+q*9%D"RА!JRJ(O$&C8O$yIG|4kˈq=ƜlŨ.ǚ)g勶\r6 Xq޾OeM7Xx.aϋ;lg<#4ТGD 8YŪܱf'+Scv?=vyr^:ҕ_^;wny9w/_Z9{WnSPE);(@ R]V@0G$v0itLȵǓZPsqa}z]YbHkvYx0ڄ5ތnf"|X{Y-ƟDZamaVH%D l:]xf/ʈdC)8Qff!uܹ'vӘ)bt*Zf/$ՓIzOB$ EYߦPBD!Ughfrmjy֣fx#R榘)+ƧdjXyΘ笸 }YҟEI0zo@0yYHX&rxo.l-Vf;hI (yFPȱtQApg:hr&BB! $/Tr)(}o RpQY♪)}rҵ.}d>MDH۴M3TK =iX-$(PЋ شԭGQF2fZrQ14c?!}4j ]}(+.(TK]mxS*mg-8[fu[gib[[O njEjݨ>kbJ{ 1m|V6SkYC:7|Hۇr|ƘGx7T!|W߆"uIsĆ8a-qW I ( nln$#eaX\wM*Yn$EY 'A v+NCEʁ[QxA$2Q{c3aduaC`ۓ҆N(8#߂c-4Ay=b蒈*q}A>a|ZR(F\񖨾u,RXf3+Xvipѥ7N\CVe|w#)bsxEؙ헹%2(•F`d( ĥKp+rsՒK4d2'L"&2tF@A͒g,L+DS-ْvCRuk8I!V& tFYv&$2(ѳ=M:B ?0ff\H XѺ>f%cIҵrȆzT_L5RczyxOt( m bSxEAJKD%YƄUjN^aiU`@T$ܲpg"=A*=nD1l.$DP)D!N*iQZbم+<2 K6V@&1<+"U̪ԈD k )X:H2qdA)wj\'@FQ^RLHma"fUKmЃjR\4bqĢvEc&ҩ> e\ Cu龌i(."l5xRW\d;IEZ]K#gCJ, R; =-2"x 2}J{hU6-9;f%|8St=>KӉ8l\jJ }Z7kQ]($$a~E0<&P]öAEƒio>R Id0*ØF PE#M̙s?5K8DM_MGf4/{j$cwzai6V*V/ϚdYܬ:]mxY,wUKo{6Y#Rc|dY_vLRCߒI5.Ց.Tdn&e2umZ{ৣWB̪֥toA8 ٟbFղVĐWIrxTطdIjSsOG_]Uː1jr5(ٸ5@2R9b6UYj!|P'-V|N_@3#.SA?Xmc/ѓ}L0m副܋e,Š,wn(qq PI{➋ W9p^*vo[AB hN^kk-h5w2w}n-%U\ե޶1]A^}+9^ EWֱ qYI @Rp܍cӳ%5!\t%[GP?YEBO@'IѰ.[򆸜A Nы5ء`ѽ ϛmjT_Wj_UCQuI=cmU`c)]5R p5 Wq" JYܾ5,eC@ nK"E졿޶!ubʠ+rڑ La x[ΐ 4u\15a"`i_.Z`U#.6W+Jc*]`d$]mԡuE)*݀#E#]cX &W$En Za $&SA ٔԟ-P$ 5: ea-b.Ec3_ A!^HtPʵk]mT%  PbNQU$*V`bcLzf>R|(ГGa$%X$@&" r>cUYr9%镣RF9VɂYA, *IۄҸ( PqHTR#~I-.S^TfA:$CLPZ;R Q$,µZEVRr%?%`Q6&u R>e[u~#l݆Beɖ)"b,dmzXaf!_``n> ShISt5)$c+`S  `cx%B ֍< T2;c c^[nEх %|" Pa\Ӥ]feJ1!R9e(y6阅ڂ !ڏ]SnfM"f~d.F%ibʥ ,qQ`܁ԗgGލMXdu Y`"$YQG&fChP EZ ^#BzZEh ◱z%槍N0Ii7* dfx⥀B} %At"(>i1Sja`c& fdfFEFj^D# )H!2NHi@M*@!+Ŷ^@\Kޣm* l!E"~(a ajm݂:e! [=.^vZa4.*Ɯ UH$PW| (s֑vm$-aJe\4騦*䔾$rqN)ţf, 퓨rlɲr*.6ϼ^iYt-t~Mz'TXJT\-\f-v]检wjbt#&G1X"jc.rf]/&u`&`~Vg ȞҞ9.f#mmܵ숮gOValn ( ,p-v]Q&#̎QYMNzU K2i ˑ%V !Og/u[ff*,.՜50 U^ .3rJmpS _e!k,wيivսQrtsv%!p,8,Cp#]*Ij/>}i*bJƜ 8[nj4* íq(-Rߵ.9J>e$iK:ݱN9U^R|^Jmvs\2l|'rqqEqn^DG0ȭQEAt@cs#*rWG\v . )&>N m9 ٱ5`3o~oi&eL`_FIsa`s5 ](0Mi'%.LClV.䆩18J#o7~p(+XTS*'AZ[;Sew Zovu"ir( 2q#p5BVr*3C%YwW*bMF0Gۮβ&\/WeJ⨑+|/!F"L#h?[ֆ[gC<}HS+4C)`N7P@{⷇ 7v+h#ڶ!Uf$x<Ū6 , ar ڥ3{[hAfbsv,#4k7b7b]^+,eMD^r04 =R.lg#T{ZR=v2A,);0/Q,"uowAFlzf'6/f> /0+[{Q ~0BfPKg'h ;2* 'Nߴ^k3k,ZE{&m@tSjNdyGgoW7vWOMLQZ l2׍*cb%q e 3MBu2GZ;+}f{ 6N3ȁ3P2m87V =kyS6Ź%s6Ѵ,rZ<~o[nJ{\wG{i61{V5Ѷ;C}rIef?Ï, Ⱥec >>9-c9<tvcYުxA Bv Z?zùW~?O ýιӧ*~%x{+*ODZTٳ|0Ӧ_38z87zX2U#{dlJ㊳=/J|+bv;Ǻ6@49r@Diar& 4dhPdhP9qDP"IZED/ xp@0YSgN4}iPE'ҞO_ dhRSy&֞3yzuj٧c}v5U)P >dHF+*Đ# }$iADfz۠f!mTmd:^v(׵m/[ mgۄTV׭z&{iA_4zhWFF2<jX_CI FI Y{e9ҳil죩jUE+{iZ1/o&2נy @)\M¦O28 4Ѷi2(X55Ƴ+ʫ.@#+餅h6fN>FL0ˎ'*/{^ڌ4\Ӭ+G>c/2L2:./CkF15tQJÜF012B<>4M(5ʫ@9ǃ/"%IdeIGE_)KnJMBE$oJ,-q>2!+LuW8հS~[4bJb/>#"4`PC~mE-Q`s*T}-4Ă1zu M=_M7Y`7y)Vb4i9"B_=t=tXrxn8ksz! 6EGbukw3R9~oS/} {S34fئBB͞_.)KDŽԡ."<$\-#t[[ţ{k(Kcfz[mvrOksaE\me8SٔX%|! 4䤨,y[`#.2)OZCsȡW~tڨ@" UƳ/4y.,of1M*~y" дr䮐jf1ɇ5b?X&r!l6]J[ c0OE)#î I 3uJW7EEBye3x%7+l8R2!$_&tٔ}.[(˜kbb ,U)dxtAB9Wq#Q"N*܍vTrbPb,-lq)Ƞzad+(t [I~U7鰐B#Z˖%YHMj^!qfU"Ҝǃ/r ca!J!4Aӟ8}I\: X΀af\D"A8$_W f]s1=J !P|;!wNPiQX82+آm\,DzZD}F:h.TSj(aDg ,DH%M2"`O%=V=No$hF53 r=j̔9o@s;'ʞy~ڋdAqp)qēq[kRJ'A7mmզ+AIRb4Չ~Uu|pEp"I]U\Z-H:}hJȳ_ wEQYf MLc> ɰyOG3Ҹ· R KzzBMk' '.$ob/{)[,oՔ-{xNF[NԽ;H&XL꓀3vRât{(w/HTF m &000RFV"ӿI\q?L+ -p/&)ze5Џqѹi/ $+kU SWBVT6};"tTjg p!)}(Յ. 'A V ]U4\k\G1ke[XŸ~bfqcgE}r0ɋ&[g:Q- ab4/MnidCڨMwbQ>ʹ$ LVJC.,YQ#'&wq-~nɧ bI+Q$,~1Op2'ҏK4yldn8QL TزXf/Vq lof/*p.1۩ƏR6##`^"M*i6' ~5(n"-"[8r1W5|#7057o{g[F4l:340\!@@j)g޳^1D paktl = kH?0Eoh.l!;c+ F e*^4 h6 F,Rj "7=@YvRg:B3w"b,mH7JVg*uTS"dC) 1լ(cP)-8s/Xr06Hue_ƃ 5jOǕI[Q8jts,Ϭ`XGSX52ERJ2VIwTQ0œq&.@1OH L,#xg9 ҳEY3Efn MJk`SQ4/KE7&!c03 N]&at:3QN;7 bqH:_tTuob4"/*T d_u(&";/r5(*0ǧrl*0?F QE3'%7&DZO "DVc,epPh*?1['r#0.tghY~ζ?LOfÀ& YPQ7C42' Mi#7TT46v[VRHlpBM?Jdv!Lv"w#RC 3MOq ?/*Sa+FfeH=Z!}B 4t,*awriE$جT^s CTIwc[g:2Iqzp&/:86p6Mv fWy- {a/{;h.N˿ 11+z'vUg{%e&?E"% &jpG2td&H:`#l4G0FO4/3"S QO8-tw -O#_}z YlT'up qOhU[KhflF[)eojoLd }埬6k-*?Y$gypgH h5zKFg?VVhTsb6WlmFYeW廦)7E w#pbV!ِ'FX癈ɪ h3 afPQr8 UVnGSR᎕ogVB̸f9lR@U$hR&r#UѰ|vU60jvZذiC tQh Ywlo%iF5yύҎkq2K y/zYbMk"{7ǖ G٥3 '޶*SKpZ~XIS38ƈ9lnvou#9\TrLmh ;6gJՙ8oIr$B}$Z2Vg=/5]#5_v q[22`'.\ZA Dxߚ&b|ݐWp<3eZ* jN [ 4F_8ML;]Yꗰr zHUd2cG |-p+TKJ[@mNOؒ8Csi&\P-VrBb죣/"eTū39Q<6QYJqRyaB ,(MY5yK\[}z_.m!qbot.c{QF@]%ئFAjkƻ԰=ڐMU I]T >C>Yq}ہ؝z3&;1p^bp .z rQNM9rq%ة|Y}ؕ s;nך SGJͿiI>}s[Oa\\v[sQ ==5O{NɎ pK BsIQ#JaϓGf,OvE)EuTzO~ڄevϲt(vVb}d]#y1Kz}rJI:B[r%%fU1=Mr7g0 ֪Nͪ`y] s}o*oY/oK>XzRܔ6>XJufFA_]BZA5?'@sU_\r_|NCR퍂|~n;@.Gkt}ep"H'}cÅ2Y3'C^ $wLU֌bQ 8]w[vxy5W]w/mQ~q[]?FD,z( DUt>W_>J]iE%ٖ%69iy ىi!MQH1X !0vpJe8g]jVb6+SQ֕iF9`''z%}V[}}.5{DLta wٚ*b*謲6k-iZ݂dx6I0$F4A$$DPho̜VVJ-+Z4.r 4XZ& l3v0rAd8pq-ß .fi9Ɏa]SAZޙ Oкn_Jƒ1CVmVr)c vehf%%Q)Al5)fA[5QQx6WFl xmV6w}ϑ6àgp\d osd}1'gJYx5ڜ\,C0g яzۗƬ7q.>a(jW(J@NR\ORݕz'R1hQJ8썰r4\ sѩ So"誂 cj.%) RD(¸! ojQ+Rf<: -a QHM&}!(;.`VՇa 6mPAR[S9hLx3Չ(GZ)M ̗J)?>B"!gPR5.SR1d2"vPǿ=eXF$K,#c͖7 όӷD_ jqoc;!b FB>T%0'T`زF j6 "~tp!R9]"E`*jMܥ Y@ba-yrk윧/ Oj ԛ. \aFuϘi!ОkAdg˨ӛ^џI?MSccmRWڋ zEletO?:5F84RV[!yFo&j$ctWO%{ꕕ:E$԰Ur 'cMvoԢUPR* M|(( ;* r8͕n-HԷRjؔT6՜U "[ROoqRAڤM@X1e2J54M]3;J|o~}ZW 0b[CV`}Q_Zҳ걐Gڅ~le(-34Kϙ~ {`Z۾E|a "1&PabeX$tBޓ >$H"W$|xȸi(1dsjZKфd\!+w1oZS/#Wg\ĞqƊԄ*i5ȶ_(@YnGEj7xds=KwIO'=b .jH4D@S7gFQKt&<#& k֏☯8"ʲb&v.pX? ƫE8UJ5PUr_=8'"~d97@Lz]#:UV$xh{6CtdtobiK}_OG777awVa`}7de2pku oRSG2|c-!@}FVD}dTiVV bFQC/Z~vj*`8\rLT'7r7p d+J(6L0v.T 8xcC +0xHB:NUcavo05? Wqammg$;CUzeݢ"Px%]n VsBvsbhTmgɘƈ8a$a?B~w 4NHr`Jm⊐1t}*v(V|^3x5hh(n2YGa[D 8}(a8g+s-oZ5SH<ַw ;?TØiRi iy!<am~$Wyv.GG^uQ#镔pEGu݉ 4L䗙7|y겆Fxrgzٚ8q]UaR8BLY94"{NVfj}NF1ٍtƋ9g0z'IEW59Vk50"jWY ʓI))R=߅H3(}|su~qFHF3/'(P*j Z$L$zXg8Wԉh ȠA8g,J_?k&iEgL]Q}Xs] R.7t&C ':ꘝw:hԎX@^d)?9z IyJ}0~šy(X8D< jzVYWREEI#藒 wDЁ[&rc'p./JWYխħ#F1wj}ū^iГX۪6,I,˜r=O8[ƱHcy7ivR5P(v;dr'4pC Yi%B}UFUkqD1rgS%,Gmrmڊ3;IF[敕iE}.;aN=זkcbbAǔ5*y Gʶp*yʜ9˄S[A vR[ B#tqì|i79hi9Sj/~ǚk*O?v<9rG2hmZP<)z [\X{zθ?;& *:g_)Vt +;rKijs*q sB-\Kՠ\رJ5C>ЁY Z 1(> iа&!aozUdtkgd6m[kܺn4 !Mu.`nU<";ZH k!ia58ʑ5T6dVP9j "*%_Up^h%[G%lzwrV1xR#/kg$G;p _{N!QFO3:M@!C #zdI@sc#6ƜťL:J!%+P{:Q4,P˦iK\8؜(CU {ȨRxIP]Nbo1aH1<85yMΊnw_7JdJfvrZTCqG@DmьeyjSIjدYntWb5;i ?(GZɴZP5̀th*ګ\Cw2MQV9"3o4)Lb(_ɢw; i<ܬ ,Fy<#LuN5QK!eLG$!(kի|v=8fƎG4R,L*cχDqZbJL{;|XShjJ9vCǶfoOe,$eڗ>"C "l屜0ux_elj̦EnN G_j}Grq9M iMmsB/ #vmy/ňbE~4'4yS;`1"/LuۧllL<\עN>}.YB"AmD3f'\Fr˛gZ mwi4SP&z\1̄K:(dvQܣYlT}6X΄0*jd,}Uҁ'-^GOԼl\Lj䭑ԍ>F%W7}OB!b ݯiMޝKwv"S PqqtXW .mJ s.svg@P_.E¥#ha-H~ ]%uK+9 Vʋ=<1e^ ҈v@[Q.6,9K|4,iT^1?Dhz5 kJc>Ό!긿njcy-Q'j]AyFYk^o 3Z_K."?D!=sZt{OX0^~+ 'tǡY$L {>>U_]HO,y*qD>}͟|ʤ}$S;?)K?̥-(/?4r!A4zOrV]:ʝ|ktn9) /z~|7 uߘݶa9w};Swش+۱O[HD˿G $X& &D8!C FHQE ftXQG!qbH$7diqƃMY$MGf|fJ)]ɒ%hQ ::H,PS9IJDЧG`q$Ԡ!Źsg͐洩ďs66m]=Ӣ3`zhwqΘ%eAp1;AT)YE)'NtؤIM *S 3V6.wϙP> ӯ핻8hۍB ]!# `yD(e5Zװ #;;q#vйn{-!,? h-@2L}1F3X:*"`=5J*H 1G6T ȃȑv17pI( PkÕ+MEDSDpJV>` %4 #:(I83 G`i$ <.+DD/QJ+̄Q>b$@[0*d87SFIQHW9 8 1ʄOeJ[E PҺ<л*ڽj +Ýs^DA[=5 ̓R$5-=/S"pYYaC3ڐ;-*3d[%^V PD^)eBXٕw䓛KALSr ZSiꂃh+n';:hV_:qa9 O)a fmIduM I䖻%GQZ]mA+mNi8~pYC`P(qE~ZPpxĭUĭP]OgWNVPk"15C#0'%3ْo̽]޶b},tA˚SBg?۴KR'(Ҙmٜa b!4pZWYii8`w;d=DN_\A7e +4,BQ2Ħ~R?(Q_endJ$3!u۠-]H’ԨCS.}xÂE\,lTBܠ$FI:PeO\]R%^ˌT&E^.Әkfz|hXD r/}hXaZH 'yn^p ׽R#d&CMx|H#\2 JF9f@wݜHe_tևiQt|445U z|'G)d!IyR3@4&2jIV0[,qf:8Gu32RcEO@6u/3+jBȤ5 ud''U |^m;rIy/S r6aǼ@vciu @$&)Yy>Љ |m'XWPK>~HEת1Uy00$TOMV-$bޛ|#v,!tta:Dہls*[Q]zSw ߁xNw}8p4nk,5 %ɚj|=AFD5?̦T8穣LKsZr2G܊wUޕwvɋe^2 zYN,b?6 S]g]fYa*h5X$>FYkLA>Nt٬XR웢f eD7e NDo{9aĘczloIf|z.hnvnf<צjCbUStbaZev qDmqU1ȞaLP`S]=o{gC]Iv&.Dcy81rC!E\|TJ}>a̸\H[Yfzb=A:+t1y/mg=ftΧ_O:ԛtr:aw`s{k:"sQm:$7i>>p.q7{ȇ ߤz_.L./sϿ%z%GB^ IԖQ񮊶5kU9~ݵ;'v[Gl+s]7Fn^S]O_Ag7% UdHnz6l{7jKy'[8|+˧3`9җ D1 :C*vKxk/R@⽼ 6,7o +j8Al + -Lػ0d;?y+#"cȉ`9 @L$c?"Eq&"x1#}ɴ7,3Iy1biq/13ЌQ -i4 <9+xOX"鯯i9ϯ9PO z1FePm5B}aOPr++aOi8LX-%FmIU"[U?y?bQ``I88aZݦ @X W"U0mػ\oU; ? e Eֺ"4)\4 A,mu0rp}qa!lteQ+0VNT\XVg-9U|UUVV0-1YՁU]5^MXL+a>x>`^L}'KI̐QO}TgmշbJuH] MrӀABeԤ\/\kMW9n;Ec(4Uu<ڗ6=>UouP+oS]Rz6؛MgZ>X v,Vni>eWpnIFRUexp-qqcpZ&pO˭XEEi m8cTCRSm`-`ϾU|ޯc%6qc41=kSge[O=$>g,s0s2 =O,^*bXs*JgI'Z\$>7?*EHP'tyޒm1e"GW֓u]\smӗ'U}~+N~'Uwث_ Ul}%57݋` $j ޳$VEeZ~GKVwWf}@ ßc~YB.Gu*~s6e 8,(`>}&1vq$8L`V OaD(q!I" jH'#YX5BE!"T8LO}$шc*g砡Il,+rPڵ+aVpF /"3YA(@uqj5+ 99Ϋ %Eq۷9?u&&ҁΞ eJቊ;*,򰇮ņl]BN3v]zǓn]qbq?KrM$9wmч6kÅwםUXiH&.ISO%U 2E,L2%ko2CmBw"5Um7P,vF8gzmfvv}՛DbD#(b)8iG_]qT=v!4H,g90Ja{y8bxz=m9]Q(#6#Ql;hI%".9['\yEgq658!6hy&s9Ђ >TTYŝps4miZnɑ@!Flda W2Ua:+Pŗfk_ cbe]^-NTzl¤_Nz\s8Ek6]s.`Xx$x j«ֱ:b{Ҋmz;L,C{G"2 1,bFcm!ﵶJN'N Ug6",IX~AgxYe,}#GmD|'CW/JQPEuNtt*7q-thtZ+DDiY^=GٻAKIGI*1 H%udWiSoۜNy-^Z2m9mGl0DڛRv.){;٠SyU6FH ״TzQrCptgדnHð`$C;1E&:=*]KH:2ل"\]`JJaCF9@EI[Y. Jqa)`DV74Z`w=K t1)GCĥvyȿCXʜ4@"*kI D%0A@0T԰UNa>¢&i+DOD촫XdC0X]93]+iZIb&DEF+qީ #<̓0xO>YT!CHE\&3gB3Ҝ&5iMkiq4mh4vU]dkj0)E4^%I"F'}(FPnDܳ43KXyd<&'TtHl<'poQb%Yڤ`3NfE*)O{ӟVҚ)PL*x XtP#3gb*8U)cDOhs TGup23>=pu+"\hQ-脏C Dhځ\dh6B0J>a eR%-iKkӢ6]-kS̶jH,5S2 xQEN^jӨ +,5]!^}ҢF#ߪ*A\klb!=zB,de-m>c]8 n?13/r 59-|[#ж60+lZC(sy2AE/YEQ2$}fDM$ktCd}r2!(O>fI_i%G#VccE,C.~BءNQ"SJ.Alɪ`&F: 3SOrhH5c^,(QZ;Xh2ZmND%ۈ@r02cv^V{*EE\VD$#$LCwˍaMZCbAmd`'h|kt˟¿2J$2\ YP pI\ 5i 0Ň[YHPy q-JRMPI &*ZGC-\ឈQḆ$LDsK#}]ŤcP! , aěŇAXmA!UiWA,NS DU!c\aVHDl!]QAMpaބgWdq!CBXKd!R , LBQ"(bNq\֘Yn^pȕ  ) dN-Ԋ"ϐotHXĐv"_R`աh6L:Nt} e"\X*ÙHĕIYI&Ѣ|\ Z0IJd]/ϢjY[JaϏHO\AgPEXion!)lH}ID6-)K&(Lgװ@ s 1ĐS&] DB֬^ܛbcۊ\YJt0^^Iȼƀ^yN. L%ކ4GhTFid1Ly5De;"Um^՜|L8Xxs:mXć˚$x&X,g)ӭJ)*SE0/y1B^"S% fKQe  dJP@!a=gXEzTs8'Hz\$% \0bɐ]D;34sy=K#Zy ԇ?w-0tTD% t:>b^L{)ݚQsFѴ* II\e&0/ 9d2IbJ\#4 a.UbWXXΥIΠ}vhP,vW CԌg婚-@^Px_5E P\bN.S(R_ j c&^Vؒ@5YgeOԀuf7D٠^d SapPf31VN*X+j%I,%id0Ouhjn51x8%A%O{Zm`w3w$!!ʀ(aMehhxΉ Isa:"G`l\qd1,)kD|CpɀSˍ)-F`f)ef!jeTJJAa3kQQ88 IyfRy _rJ O(fu 9y^4y1_/-D0 Eݤ݅'\QD YRhIJpۖl'm`|iGq%*FҸbT 604c8}OdČ-ILz-Н4EämM)ȦM\਱vϲj9TF,_Ɛ}\NllXF;d/Ij8(@|Ny F^zM:!vVM2.c7n,' #ioTe8hfQXJ*<(H [8IWRVS "|y/bgLZ8ϝ%v:3֣uWBE aX ~~#+~33K}}씳t 4U2z :u{Kqn/I/ZG }]Ǔ~X38U0_a,z>—᨝JCte14>YMQOȁִ>O/" \ E$0 ϰcY2l laA䰐# T&zHe>Vb DfAuQ". -̸0`Ch+JFUaL6̹OA,ia̤^|G{p` 6|pׯ/c\;P!C$%"DeJtr`O2'gRDj|I&Yt=zXTd1Za[ң3V I3%tJ.p+MrތS/ZsӃʡ)4j-r&}ڎK 7 LLX昋82d3bhD5Մ 2.NAD9L0t 9"\r"r pkqŠZbGөFQG1+v#2X8$zKN\)Eb J4I#1{@,OC5dDS(JE^SK@y̒ыERI7l 1ӌL)#Re)A' :3TO .X9%8qZR"YkHXWY6ǎXaVMe bָfV\vVG6\xS)aCXUsf}ak1D&6qI׀!` -1Na*8ړg5nYD$!4`'kUQ$LϦer-&QȪbQpcYd Y2+5ZFs큔Rۊ *J^G7Y7*bMX&m!"iH%*6."`;j砇&r⨎V#qqn~}mڼ[?\4,p%`y蝏魗곿^~/}?۟~察VP X@ T@>)XA JPe& zCЄ T"HG>$)YIK^&9IOv GYJQ4e*YJW+eYK,~.sK_/LbӘ,2Le6ϔ3jNӚ6Mmzg8 NseNwO@ ZP^;mtink-1.0.16/html/configure.De.gif0000644000076400001540000001201310376041214015007 0ustar jjfuseGIF87aADAZZ@@ddde w@@d}\!@>/"D/@<࿿E%wdEv|Zk@,L@W| Z@LLd5D|dZ@BUdJ|Z@ :@@͈d j|q19#@@@4e |Z; :dje L &9|Z@dk@@||ZZdd0d4 EG@@88,jrjLhFx|Z;jd|LȣEV$d \ݠWEx8pjkj,H*\ȰÇ#JHŋ3j܈ЀǏ C8`ɓ(S\ɲ˗0cʜI͛8A9@@ J@ɢH*]ʴӧPJJիXj zjO?JٳhӪ]jW_N}۶ݻxKԸ\LÈ+^̸ǐ#KL˘3k<0Н.AMӨSF-eo=/۸sލRJcJ)pȓ+_8RE%:سk]w#7/-?]M ig_tcx\^|6JA蠃 " I7!"H@$wgN}X^ -"*(@J#z/rcPZhTHΨ(8PnWgG^複KNb8fhfY\g]$gإ>gvufPkY垊^{_ZqFkR'6(&N%ꪬ5j`jh}j^ީiꮳ j%,w ٳF+VkJG+k覫+k:)xj,) @,W 7élg Clgqk,$RaRl,2(k4l*Ŭ/<:Dmq*L4MG-3=%f\w`-dmhl6'|uHomx|wqO 5Hn'vq1.Wnf;c砇.ۚL訋ꬓڬǮzz;n#^>anϾ.\w(Pb?T EЊRTܨC4.ݓH c YXF7nݪ G цs" hG0r-/ol% y%插q8r텉4&IArF|,6Rr.1FsdILL2x. a3 jZswӤ6 Լ93q<#':Κ)za> 5~ (j)Ђ&=B3G*ъ*h@1юޓ )/ T+/vKx+dʤAsf|/Z6[Zy%sI搸%prZZ"yXo+KU4%MяvJi4,[iϖFu] YҬvIjOxGSVԵYa;EsO$<6rکԎue{Xf_:֏=vmquJ]ybz{سg|uC sz6]oF7|nx[p?tMѦaVJKd(_oi6<={?57jOWk˼.+|Gg58e:n>3??>5XEh}}WoW4~qW~lxig.zz"y$Xw((z!Az.O044(O6x#:Q9؃@xR<8%FNHsńՂPQK8WVhPUM\4^l'Qb58ze'g7p˗Z$sR]hP FgjohgFwx]{8}}iuXW5sUfmZfh冉!r](h%qYVWVm/77~=劭&U f~mvm¸uov&(8QnhUw(q8oFqn8'؊،捽[јpX؏(7FkhhwzȆamF[[i%H~ۦ!'odioԅvSga(Oxz7ڧz;=@3B96SFI3H.L2N&R\XXDX2Zu^iN]3d]Rx;jwpYwjIPeH5(tgtOɗnoyfFx hvFm-gIxՓ6xo6f9)jǎXؓdfrhXt\ǙXmYIuifXn!Y}՛h X`.hxGɌoyYɐ(BUǑyIE(樝W$y)ZۉtvX◝fIhYy%7HxYoh~x϶(ȒٝdXs}i35 ^*.f1*N92/JN7j5s"6DaAʖmɣ`vL:NN]R TZcnOD\MfubZ\dZthz3tnZ/G QW(٢v*APZ:3|5=:)1q9j7@Y5_oh-9iȨjx (iY(fHo-Znjꕰ*o7r$y(Ib #jD٩H8hdY[(n9i-qsDW:uʮ2:ӳY2kY ۤ k[iz˦j% mױ$˕&{_* )۲e0z:?36," mtinc.html

Mtinkc the chooser for people which own mor EPSON printers


Mtinkc is a little utility which allow to call the Status Monitor Mtink for
a given printer.

Mtinkc look at the file <i>~/mtinkrc[.configuration number]</i> and present a little list box with at least 2 choices (the actual configured printers) and an item for addind a new
printer to the configurations files.

mtink-chooser

Resources

The following resources are compiled within mtinkc
*background: #cccccc

! for Motif 1.2/Lesstif make look as for openMotif

*TopShadowColor: #eeeeee
*BottomShadowColor: #111111

*foreground: black
*shadowThickness: 1
*XmSeparator.shadowThickness: 2
*visibleItemCount: 4
*XmList.background: white
*XmList.foreground: darkblue
*XmList.highlightThickness: 0

! default resources
*dialogTitle: Mtink Chooser
*title_LB.labelString: Mtink: Printer Selection
*ok_PB.labelString: OK
*cancel_PB.labelString: Cancel
*new: Add new printer
  
! german resources
*De*dialogTitle: Mtink Auswahl
*De*title_LB.labelString: Mtink: Drucker Auswahl
*De*ok_PB.labelString: OK
*De*cancel_PB.labelString: Abbruch
*De.new: Drucker hinzufgen

! french resources
*Fr*dialogTitle: Mtink Choix
*Fr*title_LB.labelString: Mtink: Choix imprimante
*Fr*ok_PB.labelString: OK
*Fr*cancel_PB.labelString: Annuller
*Fr.new: Nouvelle imprimante

If you want to add resouces for a new language, you can insert the following into your .XDefaults file or the file $HOME/Mtinkc:
Mtinkc.Fr*dialogTitle:           Mtink Choix
Mtinkc.Fr*title_LB.labelString:  Mtink: Choix imprimante
Mtinkc.Fr*ok_PB.labelString:     OK
Mtinkc.Fr*cancel_PB.labelString: Annuller
Mtinkc.Fr.new:                   Nouvelle imprimante
You must set Fr according to your language, for example for italian It and put the correct tanslation after the key

See Also

The Status Monitor for EPSON inkjet printers
mtinkd the server for D4 able printers
ttink a tty based status monitor
mtink-1.0.16/html/mtink.gif0000644000076400001540000001265410376041214013634 0ustar jjfuseGIF87aK{}{,K@I8ͻ`(dihzB+ @ tq]߷NpH,ArL(SZ$0 ě-S U ,iovN<__gh`RKjO,.dqÕC~rG`A Iܼ)T<* `X>Şt-` p&mB`fትux و((#G0LҠ2@T$r1`$&ΨU*ecP WfTViXf喖'V>-ˎbrB&*R暝H)Wp6$t$rO:Մi)ha*SIm楍k'n/ꉯ6 R!6,NJ+J"+R߂-Lf[@^Dz kK+RҤX%j%_ Fw.G,Wl&[IWn TE2i $ ns6w(9 -23&gϧ(Л}W4AmkI崹 wmV*-dmh#zp-tmx|Ķx" "'oxR8Wn"y !1}ꬷ:IfII/|:)q0'8(5M9?߼7K`*Ez;1M?'{]t?&1g-5?UnJ7z y@M.L%T@< `\S "Ȇw#$n"lf3S9i! G!Q6T+페{(R"Cˋ_ Ř,2~$!jX\$[30l$(2(Nz (ǣGqJGB$qVˑ ܣWI[Ќ +^R;(OT$ˤt5LINdX2[@E24E6]/-ԟnhL%ЩvYr0ғ^9E=}DX HHS%!6T<Kg,*?uѽXfZ'C7 G~ 4QAԔ)-G Dġr6Qv3>i7vctU96Y&l<),(a2j0՘U9Q=jn2ke|d<5x uEj3[}xͫ^7 `K؈`Mbk:6}c-Gյa%rlD% -dV"&ɡqhlw[n\ RΉ.ʐƝt8(Xw {\s]- wrAspZ Dwf(mz 72|6V̀ [.LͭoM;*VSw'L Hi,{pTN bo{̻6who Aʱ=(!,.Dl;sCX\3$>'(KVrLb-{`Ng *WG*~2_kJRX EM~^s!h-޲.S`nuN5N_-gx/r4{IuWjH8Qȕqz^c.sR$xqKh==ρqKNҗvrIk${' u =1?>|hө,:GQa Xn#<(oʩ )-Gx')!t<I|)x\_8 >#N{}eOk7ϽSN}L%8v WB|λi2 | c4WS:KJWj S { #S=Uhf'*q M5 85:E.6uSxFou5ncS"/R,#yD-2&eRHM@%2UQa,łyGQRD/9HO xH@-ٔN6Vy6\_ZZy_^3UXlX]]5mYm95\s%,\E2iٔoy]p]^M]9S`\c^Ub\NP^%Y;5TɘeYx]ⵗJ99Yᥗ0\00%8@)yWZɝ靜9iY)rԷٞw}I(KŠY*y2bIfz=@=߀e aV``@v .6= 1fd= J )J2&*=!Zc&cH1 e- +a? 'd0d'I֡JFd/Z- N6UFS/6c2 d7VJlӓA)V cnʡu:4flXi}<J VZ*ģԟtŸzک:*w,'Bz"3U~8LnF3/Ǎsgr捈f{}ԪڍG4i 0֬X'jں4D*@ :Sq<7tz=H{>*d}uV;kk#Zx }a{j|XyD|5Z+ʇ\l.;+)+u|w:AkD[ѭHPິEskB꺮R;%qJʵ] [(p4$ڰh˯m۶r[ln˰;ᷩ$E "Ɨ n{ *{gYgN[ 4@!nDke;%@+@kMK[1SKz`;{dwOfn ti[ыx+֫vsK뺸;|u*8,KSҾ[{{y +[FlklW;ûG:y)k-\/l{ ߛq+:>|g6G[yēxSuL̆DvsQj0a=R-&Ē-ؕ1ȔM Q.ˍ=޳,>NqS-g?>OGކ}@ng]PsާC-f0 f@]. H^cym -D {"链{Bn2nB8MIMӠѩ~ꨞ^`*Ԑ#0W؏9hz4{Q$U12h&q `~-:R&NkU~wHt).)Dċꎎz8 F~& KmU g?!p^+ v>kd(Op(O/g$g5[8H, UN~fרj 6eڸ(FaΏMxF? L!.Sľ1^a2dLjqprtvxz8~:p_ϓ;mtink-1.0.16/html/ttink.html0000644000076400001540000000476410376041214014045 0ustar jjfuse ttink.html

Ttink

Ttink is a terminal based status monitor for EPSON inkjet printers.

Syntax

ttink options

Arguments for ttink
Mandatory:

    -d device_file --device device_file

Optional:

    -m name --model name or numero
        without this the printer will be autodetected

Order (only one order may be given):

    -r --reset reset the printer, will not work in the same
maner for all printers.
    -c --clean clean nozzle
    -n --nozzle-check print a nozzle pattern.
    -s --status          (default)
    -a --align-head head alignment
    -e --exchange-ink     (not all printers) exchange the cartridge
    -i --identity        print printer identity

The -model option is needed for devices which don't reply her identity. In this case you can enter the name or numero of your printer as printed out by ttink -l. Device which require this option are the Stylus Scan 2000 and Stylus Scan 2500.

Ttink and mtinkd

If you use mtinkd, the little server which allow to query the printer while a print job is active, you have not to enter the -model <printer name> option for ttink, you have to start the mtinkd daemon with the corresponding option.

The device file name is not for example /dev/lp0 or /dev/usb/lp0 but /var/mtink/lp0 e.g. var/mtink/usb_lp0.

Bugs

Probably a lot.

See also

mtink
mtinkc
mtinkd

Author:

Jean-Jacques Sarton
jj.sarton@t-online.de
http://xwtools.automatix.de

mtink-1.0.16/html/LEGGIMI0000644000076400001540000000341410376041214013015 0ustar jjfuseMtink un analizzatore di stato per le stampanti EPSON a getto d'inchiostro. Hai bisogno di un collegamento a due vie con la porta della stampante. Se il tuo sistema non soddisfa questo requisito solo alcune delle funzioni potrebbero essere disponibili. Questa versione beta non completamente testata. Per compilare mtink devi assicurarti che siano installati i pacchetti di sviluppo e a tempo di esecuzione Motif, openMotif o Lesstif. Viene anche fornito un plug-in per gimp (gimp-mtink). Nota per Linux e USB: --------------------- I vecchi kernel hanno un errore nella lettura dalla porta stampante USB. In caso di dubbio, aggiorna il tuo kernel. Nota per FreeBSD: ----------------- Ho aggiunto /dev/lpt0 ... /dev/lpt3 per FreeBSD. La versione che ho (4.5) non supporta la comunicazione a due vie con le stampanti USB. Se nuove versioni la supportassero, puoi aggiungere una lista di dispositivi alla fine di quelli noti (file cfg1.c) e riportare i cambiamenti. Nota per Solaris: ----------------- La comunicazione a due vie non sembra essere possibile con Solaris x386. Con Solaris Sparc puoi usare mtink se il tuo sistema ha il file dispositivo /dev/ecpp0. Il percorso per make di solito non incluso nella variabile PATH. Invece di "make install", usa "/usr/ccs/bin/make install". Compilare ed installare mtink: ------------------------------ Digitando "./Configure" verr prodotto il makefile secondo le opzioni passate. "./Configure --help" dice quali opzioni siano disponibili. Dopo questo primo passo, digita "make". Come root digita "make install" per installare mtink e la documentazione. Come utente normale digita "make install" per installare i plugin. Puoi anche deinstallare mtink con "make uninstall". Per ulteriori informazioni, fai riferimento al file README-mtink-1.0.16/mtink-all.spec.ORG0000644000076400001540000001165610376041214014252 0ustar jjfuseName: mtink-all Summary: View status of and tune Epson printer ink cartridges #Icon: Version: 0.9.54b Release: 1 Packager: Keith Amidon Copyright: GPL Group: Applications/Publishing URL: http://xwtools.automatix.de/english/startE.htm Source0: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-root BuildRequires: gimp >= 1.0.0 %package mtink-all Summary: A status monitor for EPSON inkjet printers Group: Applications/Publishing %description mtink-all The Epson utilities include a plugin for gimp to access Epson print cartridge maintaince functions. A server allowing ink status read while printing on Epson printers is also provided. See documentation in mtink package. %description The Epson utilities allow to display with the Linux kernel 2.2.x the remaining ink quantity, to perform a nozzle check, or to clean the head. # ------------------------- prep ----------------------------------- %prep %setup -n mtink-%{version} # ------------------------- build ----------------------------------- %build ./Configure -p %{_prefix} make # ------------------------ install ----------------------------------- %install rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT%{_prefix}/bin mkdir -p $RPM_BUILD_ROOT%{_prefix}/sbin cp mtink $RPM_BUILD_ROOT%{_prefix}/bin/ cp mtinkc $RPM_BUILD_ROOT%{_prefix}/bin/ cp ttink $RPM_BUILD_ROOT%{_prefix}/bin/ cp mtinkd $RPM_BUILD_ROOT%{_prefix}/sbin/ mkdir -p $RPM_BUILD_ROOT/etc/rc.d/init.d/ cp etc/mtink $RPM_BUILD_ROOT/etc/rc.d/init.d/ mkdir -p $RPM_BUILD_ROOT/usr/lib/cups/backend/ cp etc/mtink-cups $RPM_BUILD_ROOT/usr/lib/cups/backend/mtink cp etc/installInitScript.sh $RPM_BUILD_ROOT%{_prefix}/sbin/mtink-installInitScript cp detect/askPrinter $RPM_BUILD_ROOT%{_prefix}/sbin/askPrinter mkdir -p $RPM_BUILD_ROOT/usr/lib/pyink/ mkdir -p $RPM_BUILD_ROOT/usr/lib/pyink/tmp chmod 777 $RPM_BUILD_ROOT/usr/lib/pyink/tmp cp pyink/pyink.py $RPM_BUILD_ROOT/usr/lib/pyink cp pyink/pyinkHTTPHandler.py $RPM_BUILD_ROOT/usr/lib/pyink cp pyink/Pyink.res $RPM_BUILD_ROOT/usr/lib/pyink cp pyink/spacer.gif $RPM_BUILD_ROOT/usr/lib/pyink cp pyink/README $RPM_BUILD_ROOT/usr/lib/pyink cp pyink/pyink.sh $RPM_BUILD_ROOT/usr/bin/pyink.sh if [ -f gimp-mtink ] then GIMPPLUGINDIR=/usr/lib/gimp/1.2 mkdir -p $RPM_BUILD_ROOT$GIMPPLUGINDIR/plug-ins cp gimp-mtink $RPM_BUILD_ROOT$GIMPPLUGINDIR/plug-ins/ echo $GIMPPLUGINDIR/plug-ins/gimp-mtink > gimp-plugin-files.lst else echo> gimp-plugin-files.lst fi mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib/mtink cp utils/printer.desc.bldin $RPM_BUILD_ROOT%{_prefix}/lib/mtink # ------------------------ clean ----------------------------------- %clean rm -rf $RPM_BUILD_ROOT # ------------------------- files ------------------------------------ # remember: %config, %config(missingok), %config(noreplace), %doc, %ghost, # %dir, %docdir, %attr(mode,user,group) %files -f gimp-plugin-files.lst %defattr(-, root, root) %doc html/* CHANGE.LOG %attr(2555, root,lp) %{_prefix}/bin/mtink %attr(2555, root,lp) %{_prefix}/bin/ttink %{_prefix}/bin/mtinkc /etc/rc.d/init.d/mtink %{_prefix}/sbin/mtinkd %{_prefix}/sbin/askPrinter %{_prefix}/sbin/mtink-installInitScript %{_prefix}/lib/cups/backend/mtink %{_prefix}/lib/mtink/printer.desc.bldin %{_prefix}/lib/pyink/pyink.py %{_prefix}/lib/pyink/pyinkHTTPHandler.py %{_prefix}/lib/pyink/Pyink.res %{_prefix}/lib/pyink/spacer.gif %{_prefix}/lib/pyink/README %{_prefix}/bin/pyink.sh %{_prefix}/lib/pyink/tmp # ------------------------- changelog -------------------------------- %changelog * Sun Dec 28 2003 Jean-Jacques Sarton [1.0.0-1] - Version 1.0.0 * Sun Oct 19 2003 Jean-Jacques Sarton [0.9.57-1] - Problems while ink low fixed. * Sun Jan 12 2003 Jean-Jacques Sarton [0.9.54-1] - Translation of resource into danish (Mogens Kaeger). * Sat Dec 07 2002 Jean-Jacques Sarton [0.9.52-1] - New version of mtink. * Sat Oct 19 2002 Jean-Jacques Sarton [0.9.51-1] - Change for rmp 4.1, new mtink version. * Thu Oct 03 2002 Jean-Jacques Sarton [0.9.50-1] - Add for rpm packages * Sat Sep 29 2002 Jean-Jacques Sarton [0.9.48-1] - New version of mtink * Fri Sep 27 2002 Jean-Jacques Sarton [0.9.46-1] - A few modifications. Call Configure with the option -p /usr * Thu Sep 26 2002 Keith Amidon [0.9.44-1] - New version ? (maybe old version was really this one, this is correct version number now at least, obtained from CHANGE.LOG instead of website.) - Install askPrinter executable as part of mtinkd package, as the only place it seems to be used is in the mtink init.d script - Determined location of gimp-plugin dir using gimp-config - Updated build/install dependencies * Wed Sep 25 2002 Keith Amidon [0.9.39-1] - Original package mtink-1.0.16/etc/0000755000076400001540000000000010665176047011640 5ustar jjfusemtink-1.0.16/etc/mtink-cups0000755000076400001540000001115610376041214013646 0ustar jjfuse#!/bin/bash ### MTINK CUPS backend ### Derived from "ptal" backend from Mark J. Horn ### ### This program is free software; you can redistribute it and/or ### modify it under the terms of the GNU General Public License ### as published by the Free Software Foundation; either version 2 ### of the License, or (at your option) any later version. ### ### This program is distributed in the hope that it will be useful, ### but WITHOUT ANY WARRANTY; without even the implied warranty of ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### GNU General Public License for more details. ### ### You should have received a copy of the GNU General Public License ### along with this program; if not, write to the Free Software ### Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ### ### A copy of the GNU General Public License is available at: ### http://www.gnu.org/licenses/gpl.txt ### INSTALLATION ### ------------ ### To use this script, copy it into your CUPS backend directory, which ### might be in /usr/lib/cups/backend or /usr/local/lib/cups/backend. ### Name it "mtink". Make sure that the script is executable by whatever ### user ID cupsd runs with, and then restart CUPS. To make the script ### executable, run "chmod a+rx mtink" (assuming that you named the script ### "mtink"). ### ### In order for CUPS to detect your MTINK-connected printer at boot time ### it will have to be started *AFTER* mtink. If it isn't, then ### CUPS will not detect your printer, and you will not be able to ### configure, nor print to your printer. ### ### You should then be able to configure printers in CUPS with the ### devices you've configured. ### ### This single script can be used to support multiple devices. Each ### supported device needs to be announced by the script when called ### without arguments. CUPS determines what printers are available ### when cupsd starts. Thus any additional devices that you add ### will require a restart of cupsd. ### ### DEPENDENCIES ### ------------ ### This script is dependent upon built-in commands in bash. It has not ### been tested against other non-bash shells. I don't expect that ### it will work with them. You are invited to test other shells. ### Please let me know if you have any success. ### ### This script depends on the correctly installed mtink drivers ### available at: http://xwtools.automatix.de/ ### ### This script depends on the following programs being in the PATH ### basename, cat ### If these commands are not in /usr/bin, /bin, /usr/bin, ### or /usr/local/bin on your computer, set PATH below to include ### where they are located. PATH=$PATH:/usr/bin:/bin:/usr/bin:/usr/local/bin ### Uncomment for crude debugging output # DEBUG=true ### Where we log debug stuff to: DEBUG_PRINTARGS=/tmp/printargs DEBUG_PRINTOUT=/tmp/printout if [ -n "$DEBUG" ]; then echo "Args: $0 $*" > $DEBUG_PRINTARGS echo "Arg1: $1" >> $DEBUG_PRINTARGS echo "Arg2: $2" >> $DEBUG_PRINTARGS echo "Arg3: $3" >> $DEBUG_PRINTARGS echo "Arg4: $4" >> $DEBUG_PRINTARGS echo "Arg5: $5" >> $DEBUG_PRINTARGS echo "Arg6: $6" >> $DEBUG_PRINTARGS echo "Arg7: $7" >> $DEBUG_PRINTARGS command -V basename >> $DEBUG_PRINTARGS 2>&1 command -V cat >> $DEBUG_PRINTARGS 2>&1 declare >> $DEBUG_PRINTARGS fi ME=`basename $0` if [ -z "$*" ]; then for DEV in `ls -1 /var/mtink 2>/dev/null` ; do DESC=`basename $DEV` if [ $? -eq 0 ]; then echo direct $ME:/$DESC \"Epson Stylus $DESC\" \"MTINK $DESC\" fi done exit 0 fi ### For raw printing, $6 is the file to print. For driver processed ### printing, $6 is empty and the data to print is in stdin. FILE=$6 ### When advertising multiple printers, the script has to be able ### determine where it should send real print jobs. This is done ### through the environment variable $DEVICE_URI SENDTO=${DEVICE_URI#${ME}:/} if [ -n "$DEBUG" ]; then echo "SENDTO: $SENDTO" >> $DEBUG_PRINTARGS cat $FILE > $DEBUG_PRINTOUT FILE=$DEBUG_PRINTOUT fi ### We need a lock in order to avoid that more as one process ### write to the pipe. The server will work as root, so we have ### to do this externally, locking the pipe or setting the right ### to read only do not work. while [ -f /var/lock/subsys/mtink.$SENDTO ] do echo mtink:$SENDTO busy; will retry in 30 seconds... 1>&2 sleep 30 done ### cleanup at exit trap "rm /var/lock/mtink.$SENDTO" 1 2 3 23 13 15 ### create the lock file touch /var/lock/mtink.$SENDTO ### process the input stream cat $FILE > /var/mtink/$SENDTO STAT=$? ### wait a little bit so the last data are proccessed ### by the server sleep 5 ### remove the lock file rm /var/lock/mtink.$SENDTO exit $STAT mtink-1.0.16/etc/installInitScript.sh0000755000076400001540000000401310376041214015636 0ustar jjfuse#!/bin/sh #set -x if id | grep root > /dev/null then : else echo you must be root exit 1 fi if [ `uname` != Linux ] then echo sorry this script is only for Linux exit 1 fi # check for wanted directories RC_PATH=/etc if [ -d /etc/init.d -a -d /etc/rc1.d ] then : # this is OK else # possibly a SuSE $#!@.... if [ -d /etc/init.d -a -d /etc/init.d/rc1.d ] then RC_PATH=/etc/init.d else echo LSB must be supported, Distribution too old ! exit fi fi uninstall=0 if [ $# -eq 1 ] then if [ $1 = "uninstall" ] then uninstall=1 fi fi myDir=`dirname $0` if [ "$myDir" = "" -o "$myDir" = . ] then : else cd $myDir fi PATH=$PATH:/usr/sbin:/usr/local/sbin:`pwd`../detect: if [ $uninstall = 0 ] then START_LEVEL=S14mtink STOP_LEVEL=K61mtink if [ -f /etc/init.d/mtink ] then : # ignore copying else cp mtink /etc/init.d fi chmod 744 /etc/init.d/mtink for d in 2 3 4 5 do ( cd $RC_PATH/rc$d.d if [ -h ${START_LEVEL} ] then rm ${START_LEVEL} fi if [ $RC_PATH = /etc ] then ln -s ../init.d/mtink ${START_LEVEL} else ln -s ../mtink ${START_LEVEL} fi ) done for d in 0 1 6 do ( cd $RC_PATH/rc$d.d if [ -h ${STOP_LEVEL} ] then rm ${STOP_LEVEL} fi if [ $RC_PATH = /etc ] then ln -s ../init.d/mtink ${STOP_LEVEL} else ln -s ../mtink ${START_LEVEL} fi ) done # detect all EPSON D4 able printers modprobe printer >/dev/null 2>&1 modprobe ppdev >/dev/null 2>&1 sleep 1; for f in /dev/usb/lp* /dev/lp* do name=`askPrinter $f | grep '[:,]D4[,;]' | sed -n '/Stylus/s/.*:EPSON Stylus \(.*\);/\1/pg' | tr ' ' '_'` if [ "$name" != "" ] then if echo $f | grep usb > /dev/null then echo -name $name -usbbase /dev/usb/lp else echo -name $name -dev $f fi fi done > /etc/mtinkd.conf else rm /etc/init.d/mtink* rm $RC_PATH/rc?.d/*mtink* rm /etc/mtinkd.conf fi mtink-1.0.16/etc/mtink.ORG0000644000076400001540000000246510510144044013317 0ustar jjfuse#!/bin/sh ######################################################################### # # Start / stop script for mtinkd # # In order to be distibution independant, the server known a few # extra commands: # start # stop # status # # other typical commands as restart are implemented as # call from start and restart # # Author Jean-Jacques Sarton # jj.sarton@ t-online.de # http://xwtools.automatix.de # # Version 0.3-Mdk 29-08-2002 # ########################################################################## # define the device file, adapt this #DEV_FILE=/dev/lp0 DEV_FILE=/dev/usb/lp0 # Special options, adapt this # add name of printer NAME= # use the first line for USB printers, the second for parallel port printers SPEC="-name $NAME -usbbase /dev/usb/lp" #SPEC="-name $NAME" # where the program is located PROG=/usr/local/sbin/mtinkd case $1 in start|stop|status) echo "$1 `basename $0` for $DEV_FILE $SPEC" $PROG $1 -dev $DEV_FILE $SPEC RETVAL=$?;; restart) echo "stop `basename $0` for $DEV_FILE $SPEC" $PROG stop -dev $DEV_FILE $SPEC sleep 2 echo "start `basename $0` for $DEV_FILE $SPEC" $PROG start -dev $DEV_FILE $SPEC RETVAL=$?;; *) echo "Syntax `basename $0` start|stop|status|restart" RETVAL=1;; esac exit $RETVAL mtink-1.0.16/etc/readme0000644000076400001540000000131610376041214013003 0ustar jjfuseThis directory contain a start/stop scripts which can be copied to /etc/init.d/ (mtink.ORG) This script is as far as possible OS / Distribution independant, the binary can look for the proper pid and kill the corresponding process or tell taht all is OK. The return value i as usual 0 if all is OK and 1 in case of error. This script must be adapted for starting the server correctly, the device file must be known. You may also install it automatically (under Linux) In order to do this power on all printers and call the script installInitScript.sh Warning, this wil only work for newer LSB compliant systems. The detection of printer is performed by a special binary which will not work with all kernels ! mtink-1.0.16/OLVASS_EL0000777000076400001540000000000010665176047014652 2html/OLVASS_ELustar jjfusemtink-1.0.16/Makefile.ORG0000644000076400001540000005242410664777156013171 0ustar jjfuse# This will work for Linux and Solaris prefix=/usr/local setUid=1 gimpVersion= DBG = -s -O # comment this out for Solaris LIBXP = -lXp # xpm header an library, if no entry, xpm will not be used XPM_INC = -DXPM_XPM XPM_LIB = -lXpm # for me, test with Lesstif #PI=-I/usr/X11R6/LessTif/Motif1.2/include #PL=-L/usr/X11R6/LessTif/Motif1.2/lib # You may specify the Motif library version you want to use here # path for library will be included in the binary, as well as the library version #MOLIB = -Xlinker -rpath -Xlinker /usr/X11R6/LessTif/Motif1.2/lib/ /usr/X11R6/LessTif/Motif1.2/lib/libXm.so.1 # the libXm.so.1 is under the standard path, we need only to tell wich lib is to be loaded #MOLIB = /usr/X11R6/lib/libXm.so.1 # this is the standard and will normally work. # normal value MOLIB = -lXm MOINC = #MACINCL = -I/usr/OpenMotif/include -I/sw/include #MACLB = -L/usr/OpenMotif/lib -L/sw/lib MACOSLDFLG=-framework IOKit -framework CoreFoundation -L/sw/lib -lusb -lpthread $(MACLB) MACOSCFLG=-DMACOS=1 MTINK_CFLAGS= $(DBG) -I. -I./$(SRCDIR) $(PI) $(MOINC) -I/usr/X11R6/include -I/usr/dt/include $(MACINCL) -DWAIT_FOR_PRINTER=0 $(XPM_INC) -DPREFIX=\"$(prefix)\" $(MACOSCFLG) LFLAGS= $(DBG) $(PL) -L/usr/X11R6/lib64 -L/usr/X11R6/lib -L/usr/dt/lib $(MACLIB) $(MOLIB) $(LIBXP) $(XPM_LIB) -lXext -lXt -lX11 $(MACOSLDFLG) # Modify CC to cc if needed CC=gcc # Set rm RM=/bin/rm # I must be able to build a static linked version of mtink # this is not for you #LFLAGS= $(DBG) -L/usr/X11R6/lib -L/usr/dt/lib /home/jj/MOTIF/motif/lib/Xm/libXm.a -lXp -lXt -lSM -LICE -lXext -lX11 # Adapt this if necesssary GIMP_INC = -I/usr/include -I/usr/local/include -I/usr/include/glib-1.2 -I/usr/local/include/glib-1.2 -I/usr/include/glib -I/usr/local/include/glib GIMP_LIB = -lgimp -rdynamic ############################################################ # The programs we generate PRG = mtink mtinkc ttink mtinkd $(DETDIR)/askPrinter SRCDIR = mainSrc DOCDIR = html UTILS = utils SVRDIR = server DETDIR = detect CHODIR = chooser ############################################################ # If you want to get debug informations DEBUG = -DDEBUG=0 -DPTIME=0 #DEBUG = -DDEBUG=0 -DPTIME0 -DSIMULATION=1 #DEBUG = -DDEBUG=1 -DPTIME=0 ############################################################ # time out for reading from // port, value in msec. RDTIMEOUT=-DRDTIMEOUT=20000 ############################################################ # exit after at least 10 seconds (time in ms) WRTIMEOUT=-DWRTIMEOUT=2000 ############################################################ # Our objekt files OBJ = $(SRCDIR)/mtink.o \ $(SRCDIR)/rw.o \ $(SRCDIR)/d4lib.o \ $(SRCDIR)/cfg1.o \ $(SRCDIR)/rdPrtDesc.o \ $(SRCDIR)/fsb.o \ $(SRCDIR)/cfg2.o \ $(SRCDIR)/alignbt.o \ $(SRCDIR)/scrtxt.o \ $(SRCDIR)/resource.o \ $(SRCDIR)/rcfile.o \ $(SRCDIR)/cmd.o \ $(SRCDIR)/tooltip.o \ $(SRCDIR)/wheelmouse.o \ $(SRCDIR)/usbHlp.o \ $(SRCDIR)/micon.o \ $(SRCDIR)/checkenv.o \ $(SRCDIR)/access.o TTYOBJ = $(SRCDIR)/ttink.o \ $(SRCDIR)/rw.o \ $(SRCDIR)/d4lib.o \ $(SRCDIR)/rdPrtDesc.o \ $(SRCDIR)/nXcmd.o \ $(SRCDIR)/usbHlp.o \ $(SRCDIR)/rdRes.o \ $(SRCDIR)/access.o SVR_OBJ = $(SVRDIR)/mtinkd.o \ $(SRCDIR)/rw.o \ $(SVRDIR)/cmd.o \ $(SVRDIR)/d4lib.o \ $(SRCDIR)/usbHlp.o DOC = *.gif *.html all: $(PRG) $(UTILS)/bldRes $(UTILS)/rdPrtDesc $(UTILS)/chckRes clean: @if [ "`echo $(SRCDIR)/*.o`" != "$(SRCDIR)"/'*.o' ]; then $(RM) $(SRCDIR)/*.o; fi; >/dev/null 2>/dev/null @if [ -f mtink ]; then $(RM) mtink ; fi @if [ -f mtinkc ]; then $(RM) mtinkc ; fi @if [ -f ttink ]; then $(RM) ttink ; fi @if [ -f gimp-mtink ]; then $(RM) gimp-mtink ; fi @if [ -f $(UTILS)/bldRes ]; then $(RM) $(UTILS)/bldRes ; fi @if [ -f $(UTILS)/rdPrtDesc ]; then $(RM) $(UTILS)/rdPrtDesc ; fi @if [ -f $(UTILS)/chckRes ]; then rm $(UTILS)/chckRes ; fi @if [ "`echo $(SVRDIR)/*.o `" != "$(SVRDIR)"/'*.o' ]; then $(RM) $(SVRDIR)/*.o; fi; >/dev/null 2>/dev/null @if [ -f mtinkd ]; then $(RM) mtinkd ; fi @if [ -f $(DETDIR)/askPrinter ]; then $(RM) $(DETDIR)/askPrinter; fi distclean: @make clean 2>/dev/null 1>/dev/null @if [ -f Makefile ]; then $(RM) Makefile; fi; @if [ -f etc/mtink ]; then $(RM) etc/mtink; fi; @if [ -f mtink.spec ]; then $(RM) mtink.spec; fi; @if [ -f mtink-all.spec ]; then $(RM) mtink-all.spec; fi; ############## COMMON AND frintends ################## $(SRCDIR)/d4lib.o: $(SRCDIR)/d4lib.c $(SRCDIR)/d4lib.h Makefile @echo Compile d4lib.c @$(CC) -c -o $(SRCDIR)/d4lib.o $(SRCDIR)/d4lib.c $(RDTIMEOUT) $(WRTIMEOUT) $(DEBUG) $(KERNEL_USB_BUG) $(MACOSCFLG) $(SRCDIR)/access.o: $(SRCDIR)/access.c Makefile @echo Compile access.c @$(CC) -c -o $(SRCDIR)/access.o $(SRCDIR)/access.c $(DEBUG) $(MACOSCFLG) $(SRCDIR)/rw.o: $(SRCDIR)/rw.c Makefile @echo Compile rw.c @$(CC) -c -o $(SRCDIR)/rw.o $(SRCDIR)/rw.c $(DEBUG) $(MACOSCFLG) $(SRCDIR)/rcfile.o: $(SRCDIR)/rcfile.c $(SRCDIR)/rcfile.h $(SRCDIR)/mtink.h Makefile @echo Compile rcfile.c @$(CC) -c -o $(SRCDIR)/rcfile.o $(SRCDIR)/rcfile.c $(CFLAGS) $(MTINK_CFLAGS) -DWITH_X=1 $(SRCDIR)/fsb.o: $(SRCDIR)/fsb.c $(SRCDIR)/fsb.h $(SRCDIR)/mtink.h $(SRCDIR)/wheelmouse.h Makefile @echo Compile fsb.c @$(CC) -c -o $(SRCDIR)/fsb.o $(SRCDIR)/fsb.c $(CFLAGS) $(MTINK_CFLAGS) -DWITH_X=1 $(SRCDIR)/scrtxt.o: $(SRCDIR)/scrtxt.c $(SRCDIR)/scrtxt.h $(SRCDIR)/mtink.h $(SRCDIR)/wheelmouse.h Makefile @echo Compile scrtxt.c @$(CC) -c -o $(SRCDIR)/scrtxt.o $(SRCDIR)/scrtxt.c $(CFLAGS) $(MTINK_CFLAGS) -DWITH_X=1 $(SRCDIR)/cfg1.o: $(SRCDIR)/cfg1.c $(SRCDIR)/cfg1.h $(SRCDIR)/mtink.h $(SRCDIR)/cmd.h $(SRCDIR)/wheelmouse.h $(SRCDIR)/model.h Makefile @echo Compile cfg1.c @$(CC) -c -o $(SRCDIR)/cfg1.o $(SRCDIR)/cfg1.c $(CFLAGS) $(MTINK_CFLAGS) -DWITH_X=1 $(SRCDIR)/micon.o: $(SRCDIR)/micon.c $(SRCDIR)/micon.h Makefile @echo Compile micon.c @$(CC) -c -o $(SRCDIR)/micon.o $(SRCDIR)/micon.c $(CFLAGS) $(MTINK_CFLAGS) -DWITH_X=1 $(SRCDIR)/rdPrtDesc.o: $(SRCDIR)/rdPrtDesc.c $(SRCDIR)/model.c $(SRCDIR)/rdPrtDesc.h $(SRCDIR)/model.h Makefile @echo Compile rdPrtDesc.c @$(CC) -c -o $(SRCDIR)/rdPrtDesc.o $(SRCDIR)/rdPrtDesc.c $(CFLAGS) $(MTINK_CFLAGS) -DBLD_UTIL=0 $(SRCDIR)/cfg2.o: $(SRCDIR)/cfg2.c $(SRCDIR)/cfg2.h $(SRCDIR)/mtink.h $(SRCDIR)/cfg1.h $(SRCDIR)/cmd.h Makefile @echo Compile cfg2.c @$(CC) -c -o $(SRCDIR)/cfg2.o $(SRCDIR)/cfg2.c $(CFLAGS) $(MTINK_CFLAGS) -DWITH_X=1 $(SRCDIR)/alignbt.o: $(SRCDIR)/alignbt.c $(SRCDIR)/alignbt.h $(SRCDIR)/mtink.h $(SRCDIR)/cfg1.h $(SRCDIR)/cmd.h Makefile @echo Compile alignbt.c @$(CC) -c -o $(SRCDIR)/alignbt.o $(SRCDIR)/alignbt.c $(CFLAGS) $(MTINK_CFLAGS) -DWITH_X=1 $(SRCDIR)/checkenv.o: $(SRCDIR)/checkenv.c $(SRCDIR)/checkenv.h $(SRCDIR)/mtink.h $(SRCDIR)/cfg1.h $(SRCDIR)/cmd.h Makefile @echo Compile checkenv.c @$(CC) -c -o $(SRCDIR)/checkenv.o $(SRCDIR)/checkenv.c $(CFLAGS) $(MTINK_CFLAGS) $(SRCDIR)/cmd.o: $(SRCDIR)/cmd.c $(SRCDIR)/d4lib.h $(SRCDIR)/cmd.h $(SRCDIR)/mtink.h $(SRCDIR)/model.h $(SRCDIR)/al820.c $(SRCDIR)/align.c $(SRCDIR)/alC82.c $(SRCDIR)/bldpcode.c Makefile @echo Compile cmd.c @$(CC) -c -o $(SRCDIR)/cmd.o $(SRCDIR)/cmd.c $(CFLAGS) $(MTINK_CFLAGS) $(DEBUG) $(RDTIMEOUT) $(WRTIMEOUT) -DWITH_X=1 -DSERVER=0 $(SRCDIR)/nXcmd.o: $(SRCDIR)/cmd.c $(SRCDIR)/d4lib.h $(SRCDIR)/cmd.h $(SRCDIR)/mtink.h $(SRCDIR)/model.h Makefile $(SRCDIR)/al820.c $(SRCDIR)/align.c $(SRCDIR)/alC82.c $(SRCDIR)/bldpcode.c @echo Compile cmd.c as nXcmd.o @$(CC) -c -o $(SRCDIR)/nXcmd.o $(SRCDIR)/cmd.c $(CFLAGS) $(MTINK_CFLAGS) $(DEBUG) $(RDTIMEOUT) $(WRTIMEOUT) -DWITH_X=0 -DSERVER=0 $(SRCDIR)/resource.o: $(SRCDIR)/resource.c $(SRCDIR)/version.h Makefile @echo Compile resource.c @$(CC) -c -o $(SRCDIR)/resource.o $(SRCDIR)/resource.c $(CFLAGS) $(MTINK_CFLAGS) $(DEBUG) -DWITH_X=1 $(SRCDIR)/mtink.o: $(SRCDIR)/mtink.c $(SRCDIR)/d4lib.h $(SRCDIR)/cmd.h $(SRCDIR)/mtink.h $(SRCDIR)/cfg1.h $(SRCDIR)/model.h $(SRCDIR)/checkenv.h Makefile @echo Compile mtink.c @$(CC) -c -o $(SRCDIR)/mtink.o $(SRCDIR)/mtink.c $(CFLAGS) $(MTINK_CFLAGS) $(DEBUG) -DWITH_X=1 $(SRCDIR)/ttink.o: $(SRCDIR)/ttink.c $(SRCDIR)/d4lib.h $(SRCDIR)/cmd.h $(SRCDIR)/mtink.h $(SRCDIR)/model.h Makefile @echo Compile ttink.c @$(CC) -c -o $(SRCDIR)/ttink.o $(SRCDIR)/ttink.c $(CFLAGS) $(MTINK_CFLAGS) $(DEBUG) -DWITH_X=0 $(SRCDIR)/tooltip.o: $(SRCDIR)/tooltip.c $(SRCDIR)/tooltip.h Makefile @echo Compile tooltip.c @$(CC) -c -o $(SRCDIR)/tooltip.o $(SRCDIR)/tooltip.c $(CFLAGS) $(MTINK_CFLAGS) $(DEBUG) -DWITH_X=1 $(SRCDIR)/wheelmouse.o: $(SRCDIR)/wheelmouse.c Makefile @echo Compile wheelmouse.c @$(CC) -c -o $(SRCDIR)/wheelmouse.o $(SRCDIR)/wheelmouse.c $(CFLAGS) $(MTINK_CFLAGS) $(DEBUG) -DWITH_X=1 $(SRCDIR)/rdRes.o: $(SRCDIR)/rdRes.c $(SRCDIR)/tres.c Makefile @echo Compile rdRes.c @-$(CC) -c -o $(SRCDIR)/rdRes.o $(SRCDIR)/rdRes.c $(SRCDIR)/usbHlp.o: $(SRCDIR)/usbHlp.c Makefile @echo Compile usbHlp.c @-$(CC) -c -o $(SRCDIR)/usbHlp.o $(SRCDIR)/usbHlp.c $(CFLAGS) $(MTINK_CFLAGS) $(DEBUG) mtink: $(OBJ) $(SRCDIR)/d4lib.h $(SRCDIR)/alignbt.h $(SRCDIR)/scrtxt.h $(SRCDIR)/cfg1.h $(SRCDIR)/cfg2.h $(SRCDIR)/cmd.h $(SRCDIR)/mtink.h $(SRCDIR)/cfg1.h $(SRCDIR)/version.h @echo Link mtink @$(CC) -o mtink $(OBJ) $(CFLAGS) $(MTINK_CFLAGS) $(LDFLAGS) $(LFLAGS) $(RDTIMEOUT) $(DEVICE) $(WRTIMEOUT) $(DEBUG) $(KERNEL_USB_BUG) -DWITH_X=1 ttink: $(TTYOBJ) $(SRCDIR)/d4lib.h $(SRCDIR)/cmd.h $(SRCDIR)/mtink.h $(SRCDIR)/model.h $(SRCDIR)/version.h Makefile @echo Link ttink @$(CC) -o ttink $(TTYOBJ) $(CFLAGS) $(MTINK_CFLAGS) $(RDTIMEOUT) $(DEVICE) $(WRTIMEOUT) $(DEBUG) $(KERNEL_USB_BUG) $(MACOSLDFLG) -DWITH_X=0 ############# PLUG-IN ####################### gimp-mtink: $(SRCDIR)/gimp-mtink.c Makefile @echo Compile and link gimp-mtink.c @-$(CC) -o gimp-mtink $(SRCDIR)/gimp-mtink.c $(GIMP_INC) $(GIMP_LIB) ############# SERVER ######################## $(SVRDIR)/mtinkd.o: $(SVRDIR)/mtinkd.c Makefile @echo Compile mtinkd.c @$(CC) -c -o $(SVRDIR)/mtinkd.o $(SVRDIR)/mtinkd.c -DSERVER=1 $(CFLAGS) $(MTINK_CFLAGS) $(SVRDIR)/d4lib.o: $(SRCDIR)/d4lib.c Makefile @echo Compile d4lib.c @$(CC) -c -o $(SVRDIR)/d4lib.o $(SRCDIR)/d4lib.c $(RDTIMEOUT) $(WRTIMEOUT) $(DEBUG) $(KERNEL_USB_BUG) $(CFLAGS) $(MTINK_CFLAGS) $(SVRDIR)/cmd.o: $(SRCDIR)/cmd.c Makefile @echo Compile cmd.c @$(CC) -c -o $(SVRDIR)/cmd.o $(SRCDIR)/cmd.c -DSERVER=1 $(CFLAGS) $(MTINK_CFLAGS) mtinkd: $(SVR_OBJ) Makefile @echo Link mtinkd @$(CC) -o mtinkd $(SVR_OBJ) $(CFLAGS) $(MTINK_CFLAGS) $(MACOSLDFLG) ########### Chooser ############## mtinkc: $(CHODIR)/mtinkc.c Makefile @echo Compile and link mtinkc.c @$(CC) -o mtinkc $(CHODIR)/mtinkc.c $(CFLAGS) $(MTINK_CFLAGS) $(LDFLAGS) $(LFLAGS) ########### printer detection ############## $(DETDIR)/askPrinter: $(DETDIR)/askPrinter.c @echo Compile and link askPrinter.c @$(CC) -o $(DETDIR)/askPrinter $(DETDIR)/askPrinter.c -I. -I$(DETDIR) ########### utilities ###################### $(UTILS)/bldRes: $(UTILS)/bldRes.c @echo Compile bldRes.c @$(CC) -o $(UTILS)/bldRes $(UTILS)/bldRes.c $(UTILS)/rdPrtDesc: $(SRCDIR)/rdPrtDesc.c @echo Compile rdPrtDesc.c @$(CC) -o $(UTILS)/rdPrtDesc $(SRCDIR)/rdPrtDesc.c -I$(SRCDIR) $(UTILS)/chckRes: $(SRCDIR)/rdRes.c @echo Compile chckRes @$(CC) -o $(UTILS)/chckRes $(SRCDIR)/rdRes.c -I$(SRCDIR) -DRESCHECK=1 install: install-mtink install-ttink install-desc install-plugins install-askPrinter install-mtinkd install-start install-cups install-pyink install-mtink: @#echo install mtink @if id | grep '=0(root)' >/dev/null; \ then \ mkdir -p $(prefix)/bin >/dev/null 2>&1; \ if [ -d $(prefix)/doc ]; \ then \ mkdir -p $(prefix)/doc/mtink >/dev/null 2>&1; \ (cd $(DOCDIR); cp $(DOC) $(prefix)/doc/mtink); \ else \ mkdir -p $(prefix)/doc/mtink >/dev/null 2>&1; \ (cd $(DOCDIR); cp $(DOC) $(prefix)/doc/mtink); \ fi; \ cp mtink $(prefix)/bin; \ cp mtinkc $(prefix)/bin; \ echo "Mtink installed / installe, installiert."; echo ; \ if [ $(setUid) -eq 0 ]; then \ echo "Make sure that $(prefix)/bin/mtink has read/write access to the device files."; \ else \ chmod 4755 $(prefix)/bin/mtink; \ fi; \ if [ "$(gimpVersion)" != "" ]; then \ echo "Do installation of plug-in as normal user."; \ echo "L'installation du plug-ins doit etre effectuee avec le compte normal."; \ echo "Um das Plug-in zu installieren, muessen Sie als normalen Anwender eingelogt sein."; \ echo ; \ fi; \ fi install-ttink: @#echo install ttink @if id | grep '=0(root)' >/dev/null; \ then \ mkdir -p $(prefix)/bin >/dev/null 2>&1; \ cp ttink $(prefix)/bin; \ echo "Ttink installed / installe, installiert."; echo ; \ if [ $(setUid) -eq 0 ]; then \ echo "Make sure that $(prefix)/bin/ttink has read/write access to the device files."; \ else \ chmod 4755 $(prefix)/bin/ttink; \ fi; \ fi install-pyink: #@#echo install pyink server #@if id | grep '=0(root)' >/dev/null; \ #then \ # cd pyink;\ # ./configure -p $(prefix);\ # make install;\ #fi install-askPrinter: @#echo install askPrinter utility @if [ `uname` = Linux ];\ then \ if id | grep '=0(root)' >/dev/null; \ then \ mkdir -p $(prefix)/sbin >/dev/null 2>&1; \ cp $(DETDIR)/askPrinter $(prefix)/sbin; \ echo "askPrinter installed / installe, installiert."; echo ; \ chmod 755 $(prefix)/sbin/askPrinter; \ fi;\ fi install-mtinkd: @#echo install mtink daemon @if [ `uname` = Linux ];\ then \ if id | grep '=0(root)' >/dev/null; \ then \ mkdir -p $(prefix)/sbin >/dev/null 2>&1; \ cp mtinkd $(prefix)/sbin; \ echo "mtinkd installed / installe, installiert."; echo ; \ chmod 755 $(prefix)/sbin/mtinkd; \ fi;\ fi install-desc: @#echo install printer description file @if [ `uname` = Linux ];\ then \ if id | grep '=0(root)' >/dev/null; \ then \ mkdir -p $(prefix)/lib/mtink >/dev/null 2>&1; \ cp utils/printer.desc.bldin $(prefix)/lib/mtink/printer.desc; \ cp utils/printer.desc.bldin $(prefix)/lib/mtink/printer.desc; \ cp utils/*.align $(prefix)/lib/mtink/; \ fi;\ fi install-plugins: @#echo install plugins @if id | grep '=0(root)' >/dev/null; \ then \ PLUGDIR=`./getGimpPluginDir.sh`; \ if [ "$$PLUGDIR" != "" ]; \ then \ if [ -f gimp-mtink ]; \ then \ cp gimp-mtink $$PLUGDIR/; \ echo "Plugins installed, installe, installiert."; \ fi; \ fi; \ else \ if [ -f gimp-mtink ]; then \ if [ -d $(HOME)/.gimp/plug-ins ]; then \ cp gimp-mtink $(HOME)/.gimp/plug-ins; \ echo "Plugins installed, installe, installiert."; \ else \ if [ -d $(HOME)/.gimp-$(gimpVersion)/plug-ins ]; then \ cp gimp-mtink $(HOME)/.gimp-$(gimpVersion)/plug-ins; \ echo "Plugins installed, installe, installiert."; \ fi; \ fi; \ echo; \ echo "Installation of mtink only as root."; \ echo "L'installation de mtink necessite le compte root."; \ echo "Um mtink zu installieren muessen Sie als root angemeldet sein."; \ echo Devi essere root per fare questo.; \ fi; \ fi # On slackware install start script to /etc/rc.d instead of /etc/init.d install-start: @#echo install start part @if id | grep '=0(root)' >/dev/null; then \ if [ -d /etc/init.d ]; \ then \ cp etc/installInitScript.sh $(prefix)/sbin/mtink-installInitScript; \ cp etc/mtink /etc/init.d/mtink; \ chmod +x $(prefix)/sbin/mtink-installInitScript; \ chmod +x /etc/init.d/mtink; \ echo "$(prefix)/sbin/mtink-installInitScript installed / installe, installiert."; \ echo "/etc/init.d/mtink installed / installe, installiert."; echo ; \ else \ cp etc/installInitScript.sh $(prefix)/sbin/mtink-installInitScript; \ cp etc/mtink /etc/rc.d/mtink; \ chmod +x $(prefix)/sbin/mtink-installInitScript; \ chmod +x /etc/rc.d/mtink; \ echo "$(prefix)/sbin/mtink-installInitScript installed / installe, installiert."; \ echo "/etc/rc.d/mtink installed / installe, installiert."; echo ; \ fi; fi install-cups: @#echo install cups part @if id | grep '=0(root)' >/dev/null; then \ if [ -d /usr/lib/cups/backend/ ]; then \ cp etc/mtink-cups /usr/lib/cups/backend/mtink; \ chmod +x /usr/lib/cups/backend/mtink; \ echo "/usr/lib/cups/backend/mtink installed / installe, installiert."; echo ; \ fi; fi uninstall: @if id | grep '=0(root)' >/dev/null; \ then \ :; \ else \ echo You must be root for this.; \ echo Vous devez etre root pour ceci.; \ echo Sie muessen root sein.; \ echo Devi essere root per fare questo.; \ exit 2; \ fi @-if [ -f /etc/rc.d/mtink ]; then rm /etc/rc.d/mtink; fi @-if [ -f /etc/init.d/mtink ]; then rm /etc/init.d/mtink; fi @-if [ -f /etc/rc.d/S*mtink ]; then rm /etc/rc.d/*mtink; fi @-if [ -f $(prefix)/lib/mtink ]; then rm -fr $(prefix)/lib/mtink; fi @-if [ -f $(prefix)/bin/mtink ]; then rm $(prefix)/bin/mtink; fi @-if [ -f $(prefix)/bin/mtinkc ]; then rm $(prefix)/bin/mtinkc; fi @-if [ -d $(prefix)/mtink ]; then rm -fr $(prefix)/mtink; fi @-if [ -d $(prefix)/doc/mtink ]; then rm -fr $(prefix)/doc/mtink; fi @-if [ -f $(prefix)/sbin/askPrinter ]; then rm -fr $(prefix)/sbin/askPrinter; fi @-if [ -f $(prefix)/sbin/mtinkd ]; then rm -fr $(prefix)/sbin/mtinkd; fi @-if [ -f $(prefix)/sbin/mtink-installInitScript ]; then rm -fr $(prefix)/sbin/mtink-installInitScript; fi @-if [ -f etc/mtinkd.conf ]; then rm -fr /etc/mtinkd.conf; fi @-for userDir in `cut -d':' -f6 /etc/passwd`; do \ if [ -f $$userDir/.gimp-$(gimpVersion)/plug-ins/gimp-mtink ]; \ then rm $$userDir/.gimp-$(gimpVersion)/plug-ins/gimp-mtink; fi; \ if [ -f $$userDir/.gimp/plug-ins/gimp-mtink ]; \ then rm $$userDir/.gimp/plug-ins/gimp-mtink; fi; \ done @-PLUGDIR=`./getGimpPluginDir.sh`; \ if [ "$$PLUGDIR" != "" ]; \ then \ if [ -f $$PLUGDIR/gimp-mtink ]; \ then \ rm $$PLUGDIR/gimp-mtink; \ fi;\ fi @-if [ -f /usr/lib/cups/backend/mtink ]; then rm /usr/lib/cups/backend/mtink; fi @-if [ -f $prefix/sbin/mtink-installInitScript ]; then rm $prefix/sbin/mtink-installInitScript; fi @-if [ -f $prefix/lib/pyink ]; then rm -fr $prefix/lib/pyink; fi dist: @make distclean 2>/dev/null 1>/dev/null @( NM=`pwd`; NM=`basename $$NM`; cd ..; rm $$NM.tar.gz 2>/dev/null 1>/dev/null; tar cf $$NM.tar $$NM; gzip -9 $$NM.tar ) vdist: @make distclean 2>/dev/null 1>/dev/null @( \ VER=`sed -n 's/.*V \(.*\)"/-\1/p' mainSrc/version.h`; \ NM=`pwd`; NMS=$$NM; NM=`basename $$NM | sed 's/-.*//'`; \ cd ..; \ rm $$NM$$VER.tar.gz 2>/dev/null 1>/dev/null; \ if [ -d $$NM$$VER ] ; \ then \ : ;\ else \ mkdir $$NM$$VER; \ (cd $$NMS; tar cf - .)|(cd $$NM$$VER;tar xf -); \ fi; \ tar cf $$NM$$VER.tar $$NM$$VER; \ gzip -9 $$NM$$VER.tar; \ ) spec: mainSrc/version.h mtink.spec.ORG mtink-all.spec.ORG @VER=`sed -n 's/.*V \(.*\)"/\1/p' mainSrc/version.h`; \ PLUGDIR=`./getGimpPluginDir.sh`; \ if [ "$$PLUGDIR" != "" ]; \ then \ sed -e "s@^Version:.*@Version: $$VER@" -e "s@^ *GIMPPLUGINDIR=.*@GIMPPLUGINDIR=$$PLUGDIR@" mtink.spec.ORG > mtink.spec;\ sed -e "s/^Version:.*/Version: $$VER/" -e "s@^ *GIMPPLUGINDIR=.*@GIMPPLUGINDIR=$$PLUGDIR@" mtink-all.spec.ORG > mtink-all.spec;\ else \ sed -e "s@^Version:.*@Version: $$VER@" mtink.spec.ORG > mtink.spec;\ sed -e "s/^Version:.*/Version: $$VER/" mtink-all.spec.ORG > mtink-all.spec;\ fi rpm-all: @( \ if [ -f mtink-all.spec ]; then rm mtink-all.spec; fi; \ make spec; \ make clean; \ RPMD=`rpm -q --eval=%{_topdir} --specfile mtink.spec | grep -v mtink`; \ if [ -d "$$RPMD" -a -w "$$RPMD" ];\ then \ VER=`sed -n 's/.*V \(.*\)"/-\1/p' mainSrc/version.h`; \ NM=`pwd`; NMS=$$NM; NM=`basename $$NM | sed 's/-.*//'`; \ NMS=`basename $$NMS`; \ cd ..; \ rm $$NM-all$$VER.tar.gz 2>/dev/null 1>/dev/null; \ tar cf $$NM-all$$VER.tar $$NMS; gzip -9 $$NM-all$$VER.tar; \ cp $$NM-all$$VER.tar.gz $$RPMD/SOURCES/; \ if [ -x /usr/bin/rpmbuild ]; \ then \ rpmbuild -ba $$NMS/mtink-all.spec; \ else \ rpm -ba $$NMS/mtink-all.spec; \ fi;\ else \ echo You must be root for this.; \ echo Vous devez etre root pour ceci.; \ echo Sie muessen root sein.; \ echo Devi essere root per fare questo.; \ exit 2; \ fi; \ ) rpm: @( \ if [ -f mtink.spec ]; then rm mtink.spec; fi; \ make spec; \ make clean; \ RPMD=`rpm -q --eval=%{_topdir} --specfile mtink.spec | grep -v mtink`; \ if [ -d "$$RPMD" -a -w "$$RPMD" ];\ then \ VER=`sed -n 's/.*V \(.*\)"/-\1/p' mainSrc/version.h`; \ NM=`pwd`; NMS=$$NM; NM=`basename $$NM | sed 's/-.*//'`; \ NMS=`basename $$NMS`; \ cd ..; \ rm $$NM$$VER.tar.gz 2>/dev/null 1>/dev/null; \ tar cf $$NM$$VER.tar $$NMS; gzip -9 $$NM$$VER.tar; \ cp $$NM$$VER.tar.gz $$RPMD/SOURCES/; \ if [ -x /usr/bin/rpmbuild ]; \ then \ rpmbuild -ba $$NMS/mtink.spec; \ else \ rpm -ba $$NMS/mtink.spec; \ fi; \ else \ echo You must be root for this.; \ echo Vous devez etre root pour ceci.; \ echo Sie muessen root sein.; \ echo Devi essere root per fare questo.; \ exit 2; \ fi;\ ) mtink-1.0.16/Themes0000644000076400001540000000664310376041214012230 0ustar jjfuse!!!!!!! Themes for mtink !! I have tested mtink with a few xpm file from the xfce/ project !! and fill this files with resources for xpm which give good results. !! The pixmap file which is to be used must be in the current directory !! where mtink was started or the file name must be absolute. !! !! The path I use here was found on a SuSE 7.3. !! !! If Xfce is not installed you will find the xpm files in the !! subdirectory XPM. Copy the wanted xpm fle to a proper location !! and correct the pathes below accordingly !! !! If you want to use themes, simply xopy the 3 following lines to !! the file $HOME/EpsonUtil or insert them in your .Xdefaults file. !! or to the File $HOME/EpsonUtil. EpsonUtil*XmList.backgroundPixmap: UNSPECIFIED_PIXMAP EpsonUtil*XmText.backgroundPixmap: UNSPECIFIED_PIXMAP EpsonUtil*XmTextField.backgroundPixmap: UNSPECIFIED_PIXMAP !! If you want to have the title lable with a white backgroung !! copy the next 2 lines in your file and remove the ! !EpsonUtil*title_LB.background: white !EpsonUtil*title_LB.backgroundPixmap: UNSPECIFIED_PIXMAP !! The next entries are examples. Peek the 2 lines of the next blocks !! and put them in your resource file. Don' forgott to remove the !! comment character '!' at the begin of the line. !EpsonUtil*background: #c7c7c7 !EpsonUtil*backgroundPixmap: /usr/share/xfce/textures/metal.xpm !EpsonUtil*background: #a6a6b6 !EpsonUtil*backgroundPixmap: /usr/share/xfce/textures/Ultrafina.xpm !EpsonUtil*background: #a6a6b6 !EpsonUtil*backgroundPixmap: /usr/share/xfce/textures/bronze.xpm !EpsonUtil*background: #dfcbb6 !EpsonUtil*backgroundPixmap: /usr/share/xfce/textures/cheese.xpm !EpsonUtil*background: #616d96 !EpsonUtil*backgroundPixmap: /usr/share/xfce/textures/craters.xpm !EpsonUtil*foreground: white !EpsonUtil*background: #ffefdf !EpsonUtil*backgroundPixmap: /usr/share/xfce/textures/ground.xpm !EpsonUtil*background: #ffefdf !EpsonUtil*backgroundPixmap: /usr/share/xfce/textures/paper.xpm !EpsonUtil*background: #ffefdf !EpsonUtil*backgroundPixmap: /usr/share/xfce/textures/Ultrafina.xpm !EpsonUtil*background: #ffefdf !EpsonUtil*backgroundPixmap: /usr/share/xfce/backdrops/Arena.xpm !EpsonUtil*background: #cfcfe7 !EpsonUtil*backgroundPixmap: /usr/share/xfce/backdrops/Bluedrops.xpm !EpsonUtil*background: #cfaa8e !EpsonUtil*backgroundPixmap: /usr/share/xfce/backdrops/Desert2.xpm !EpsonUtil*background: #bebe8a !EpsonUtil*backgroundPixmap: /usr/share/xfce/backdrops/Dry.xpm !EpsonUtil*background: #419e41 !EpsonUtil*backgroundPixmap: /usr/share/xfce/backdrops/Greenslate.xpm !EpsonUtil*background: #868686 !EpsonUtil*backgroundPixmap: /usr/share/xfce/backdrops/Greydrops.xpm !EpsonUtil*background: #dfdfdf !EpsonUtil*backgroundPixmap: /usr/share/xfce/backdrops/Greysea.xpm !EpsonUtil*background: #ffcb61 !EpsonUtil*backgroundPixmap: /usr/share/xfce/backdrops/Wood.xpm !EpsonUtil*background: #ffcb61 !EpsonUtil*backgroundPixmap: /usr/share/xfce/backdrops/Worm.xpm mtink-1.0.16/mainSrc/0000755000076400001540000000000010665016555012456 5ustar jjfusemtink-1.0.16/mainSrc/rdRes.c0000644000076400001540000004540610665010277013705 0ustar jjfuse/* file rdRes.c * * Read a resource file and handle the stuffs for internationalized * printting. * if the wanted text is not available in the internationalized * version return the default (english). * * Copyrights: Jean-Jacques Sarton j.sarton@t-online.de */ /* * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include "tres.c" static char *msgOut = NULL; static char **resources = NULL; /*******************************************************************/ /* Function mfgets() */ /* */ /* replacement for fgets, allow simple editing */ /* */ /*******************************************************************/ static char *mfgets(char *buffer, int size, FILE *fp) { int c; int i = 0; buffer[i] = 0; while( i < size-1 ) { c = getc(fp); if ( c == '\b' ) { if ( i ) { i--; buffer[i] = 0; printf("%c %c",c,c); } } else { if ( c == '\r' || c == '\n' ) { if ( c == '\r' ) printf("\r\n"); buffer[i++] = '\n'; buffer[i] = 0; break; } printf("%c",c); buffer[i++] = c; buffer[i] = 0; } } return buffer; } /*******************************************************************/ /* Function freeArray */ /* */ /* free all memory allocated to an array of strings including */ /* the array pointer */ /* */ /*******************************************************************/ static void freeArray(char **array, int no) { int i; if ( array ) { for ( i = 0; i < no; i++ ) { if ( array[i] ) free(array[i]); } free(array); } } /*******************************************************************/ /* Function addFallback */ /* */ /* add the fallback resources to the resources read from file */ /* */ /*******************************************************************/ static void addFallback(int entries) { int actEntries=0; int newEntries=0; if ( resources ) { /* add the fallback resources to the array */ while(resources[actEntries]) actEntries++; while(fallbackResources[newEntries]) newEntries++; resources = (char**)realloc(resources, sizeof(char**)*(actEntries + newEntries + 1)); if ( ! resources ) { resources = fallbackResources; } newEntries = 0; while(fallbackResources[newEntries]) resources[actEntries++] = fallbackResources[newEntries++]; resources[actEntries] = NULL; } else { resources = fallbackResources; } } /*******************************************************************/ /* Function skipSpace */ /* */ /* advance up to the first non space character and return a */ /* pointer to this position */ /* */ /*******************************************************************/ static char *skipSpace(char *s) { while ( *s && isspace(*s) ) s++; return s; } /*******************************************************************/ /* Function terminateLine */ /* */ /* remove the trailing \n an return the line lenght */ /* */ /*******************************************************************/ static int terminateLine(char *s) { int len = 0; while ( *s ) { if ( *s == '\n' ) { *s = '\0'; break; } s++; len++; } return len; } /*******************************************************************/ /* Function readResourceFile */ /* */ /* read the external resource file and build our storage area */ /* */ /*******************************************************************/ static int readResourceFile(FILE *fp) { char buf[2048]; char *s; int len; int oldLen = 0; int entries = 0; while(fgets(buf,sizeof(buf), fp)) { len = terminateLine(buf); if ( entries && resources[entries-1][oldLen-1] != '\\' ) { s = skipSpace(buf); /* correct the line lenght */ len -= (s-buf); if ( *s == '!' || *s == '\0' ) continue; } else { s = buf; } if ( *s == '\0' ) continue; if ( resources == NULL ) { resources = (char **)malloc(sizeof(char*)*(entries+2)); if ( resources == NULL ) { entries = 0; break; } resources[1] = NULL; } else if ( resources[entries-1][oldLen-1] != '\\' ) { resources = (char **)realloc(resources, sizeof(char*)*(entries+2)); if ( resources == NULL ) { entries = 0; break; } resources[entries+1] = NULL; } if ( entries && resources[entries-1][oldLen-1] == '\\' ) { /* line continuation */ resources[entries-1] = (char*)realloc(resources[entries-1], len+oldLen+1); if ( resources[entries-1] == NULL ) { freeArray(resources, entries); resources = NULL; entries = 0; break; } strcpy(&resources[entries-1][oldLen-1], s); oldLen += len -1; } else { resources[entries] = strdup(s); if ( resources[entries] == NULL ) { freeArray(resources, entries); resources = NULL; entries = 0; break; } oldLen = len; entries++; } } return entries; } /*******************************************************************/ /* Function checkRessourceString */ /* */ /* compare the key with the resource string, return NULL or the */ /* message string found */ /* */ /*******************************************************************/ static char *checkRessourceString(char *res, char *key) { char *msg = NULL; int len = strlen(key); if ( strncmp(res,key,len) == 0 ) { if ( res[len] == ':' ) { res += len; res++; while ( *res && *res == ' ' ) res++; msg = res; } } return msg; } /*******************************************************************/ /* Function _searchString */ /* */ /* search a string in our resource array and return it */ /* if localized string is not found return the default string */ /* if nothing is found return NULL */ /* convert resource strings as made by Xt */ /*******************************************************************/ char *_searchString(char *lang, char *key) { char **msg = resources; char *defaultMsg = NULL; char *localizedMsg = NULL; char *s; int utf; while( *msg ) { /* go to the first . or * character */ s = *msg; while ( *s && ( *s != '.' && *s != '*' ) ) s++; if ( *s ) s++; if ( *s && lang ) { if ( strstr(lang,"8" ) ) utf = 1; else utf = 0; if ( !utf && s[0] == lang[0] && s[1] == lang[1] && (s[2] == '.' || s[2] == '*') ) { /* may be that we have found the wanted string */ if ( (localizedMsg = checkRessourceString(s+3, key)) ) { return localizedMsg; } } else if ( utf && s[0] == lang[0] && s[1] == lang[1] && s[2] == lang[2] && (s[3] == '.' || s[3] == '*') ) { /* may be that we have found the wanted string */ if ( (localizedMsg = checkRessourceString(s+4, key)) ) { return localizedMsg; } } else { /* check for the default string */ if ( ! defaultMsg ) defaultMsg = checkRessourceString(s, key); } } msg++; } return defaultMsg; } /*******************************************************************/ /* Function searchString */ /* */ /* search a string in our resource array and return it after */ /* converting as made by Xt */ /* */ /*******************************************************************/ char *searchString(char *lang, char *key) { char *s, *t; char *msg = _searchString(lang, key); if ( msgOut ) { free(msgOut); msgOut = NULL; } if ( msg == NULL || *msg == '\0' ) { ; } else { /* replace '\*' with the correct value */ s = msg; t = msgOut = (char*)calloc(strlen(s)+1,1); while ( *s ) { switch(*s) { case '\\': s++; if ( *s == 'n' ) { *t++ = '\n'; s++; } else { *t++ = *s++; } break; default: *t++ = *s++; } } } return msgOut; } /*******************************************************************/ /* Function printText */ /* */ /* search the string referenced by lang and key, then print it */ /* according to the passed format arguments */ /* */ /*******************************************************************/ void printText(char *fmt, char *lang, char *key) { char *msg; msg = searchString(lang, key); if ( msg ) printf(fmt, msg); else printf("\nMsg <%s> NOT FOUND !\n", key); } /*******************************************************************/ /* Function fprintText */ /* */ /* search the string referenced by lang and key, then print it */ /* according to the passed format arguments */ /* */ /*******************************************************************/ void fprintText(FILE *out, char *fmt, char *lang, char *key) { char *msg; msg = searchString(lang, key); if ( msg ) fprintf(out,fmt, msg); else fprintf(out,"\nMsg <%s> NOT FOUND !\n", key); } #define fgets mfgets /*******************************************************************/ /* Function askYn */ /* */ /* align head stuff, ask for yes/no or similar things */ /* only the first choice is checked. Other inputs are */ /* defaulted to False */ /* */ /*******************************************************************/ int askYn(char *lang, char *yn) { char in[1024]; char *answers = searchString(lang, yn); char *s; if ( answers && *answers ) { fgets(in, sizeof(in),stdin); s = in; while ( *s && isspace(*s) ) s++; if ( toupper(*s) == toupper(*answers) ) { return 1; } } return 0; } /*******************************************************************/ /* Function askNo */ /* */ /* align head stuff, ask for pattern no in the range first to last */ /* */ /*******************************************************************/ int askNo(int first, int last) { int number = 0; char in[20]; do { printf("%d ... %d : ", first, last); fgets(in,sizeof(in), stdin); number = atoi(in); } while ( !(number >= first && number <= last) ); return number; } /*******************************************************************/ /* Function askForChoice */ /* */ /* Print a list of choice ans a number from 1....no */ /* then call askNo and return the the result -1 ( 0...no-1 ) */ /* */ /* */ /*******************************************************************/ int askForChoice(char *lang, char *choice[], int no) { int c = 0; int i; char **array; char *s; array = (char**)calloc(no+1, sizeof(char*)); for ( i = 0; i < no; i++ ) { if ( choice[i] == NULL ) { freeArray(array, i); return -1; } else { s = searchString(lang, choice[i]); if ( s == NULL ) s = choice[i]; array[i] = strdup(s); c = strlen(array[i]) > c ? strlen(array[i]) : c; } } /* print choice textes */ for ( i = 0; i < no; i++ ) { printf("- %*s (%2d)\n", c, array[i], i+1); } i = askNo(1,no); return i-1; } /*******************************************************************/ /* Function initResource */ /* */ /* Read textes from an external file */ /* */ /*******************************************************************/ int initResource() { int i; int entries; FILE *fp; char homeFile[1024+8] = { '\0', }; char *homePath = (char*)getenv("HOME"); char *path[] = { homeFile, "/usr/lib/ttink/Ttink", "/usr/local/lib/ttink/Ttink", "/opt/mtink/Ttink", "./Ttink" }; if ( homePath && strlen(homePath) < 1024 ) { strcpy(homeFile,homePath); strcat(homeFile,"/Ttink"); } for ( i = 0; i < 5; i++ ) { if ( path[i] && (fp = fopen(path[i],"r")) ) { /* read the file */ entries = readResourceFile(fp); fclose(fp); addFallback(entries); return 1; } } addFallback(0); return 0; } #if RESCHECK int searchCmp(char *key, char **res) { char **cmp = res; char *s; char *e; while (*res) { s = *res; if ( *s == '.' || *s == '*' ) { e = strchr(s, ':'); if ( e ) { if ( s[3] == '.' ) { if ( strncmp(key,s+4,e-s-4) == 0) { return 1; } } else { if ( strncmp(key,s+1,e-s-1) == 0) { return; } } } } res++; } return 0; } void checkForMissing(char **refRes, char **cmpRes) { char **ref = refRes; char lang[20]; char key[100]; char *s; char *e; while (*ref) { s = *ref; if ( *s == '.' || *s == '*' ) { e = strchr(s, ':'); if ( e ) { if ( s[3] == '.' ) { strncpy(key,s+4,e-s-3); key[e-s-3] = '\0'; } else { strncpy(key,s+1,e-s); key[e-s] = '\0'; } if ( searchCmp(key,cmpRes ) == 0 ) { printf(" <.%s>\n",key); } } } ref++; } } int main(int argc, char **argv) { FILE *refFp = NULL; FILE *cmpFp = NULL; int entriesRef; int entriesCmp; char **resourcesRef; if ( argc < 3 ) { printf("Syntax: checkResource refFile cmpFile\n"); exit(1); } if ( (refFp = fopen(argv[1],"r")) != NULL ) { if ( (cmpFp = fopen(argv[2],"r")) != NULL ) { entriesRef = readResourceFile(refFp); resourcesRef = resources; resources = NULL; entriesCmp = readResourceFile(cmpFp); printf("Missed resources\n"); checkForMissing(resourcesRef,resources); printf("Resources not expected\n"); checkForMissing(resources,resourcesRef); fclose(refFp); fclose(cmpFp); } else { fclose(refFp); printf("can't open file %s\n",argv[2]); exit(1); } } else { printf("can't open file %s\n",argv[1]); exit(1); } return 0; } #endif mtink-1.0.16/mainSrc/alignbt.h0000644000076400001540000000163710376041214014243 0ustar jjfuse/* alignbt.h * Copyright (C) 2001 Jean-Jacques Sarton jj.sarton@t-online.de * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ extern Widget createAlignButtons(Widget parent, int *next); extern void popupAlignNextWindow(Widget old, wConfig_data_t* data); mtink-1.0.16/mainSrc/wheelmouse.h0000644000076400001540000000176110376041214014776 0ustar jjfuse/* file whellmouse.h * * Event handler for wheelmouse */ /* * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef WHEELMOUSE_H #define WHEELMOUSE_H #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif extern void xmAddMouseEventHandler(Widget w); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif mtink-1.0.16/mainSrc/rcfile.c0000644000076400001540000001415510663503156014070 0ustar jjfuse/* file rcfile.c * * Read and save configuration data * */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include #include #include "mtink.h" /*******************************************************************/ /* Function readRc */ /* */ /* Read the rc file */ /* */ /*******************************************************************/ void readRc(int idx) { FILE *fp; char rcPath[1024]; char line[2048]; char *s, *e; if ( snprintf(rcPath,sizeof(rcPath)-100, "%s/.mtinkrc",getenv("HOME")) == -1 ) { /* try to get a buffer overflow */ /* don't allow this */ fprintf(stderr,"Sorry the HOME directory path is too big\n"); exit(2); } if ( idx ) { strcat(rcPath,"."); sprintf(rcPath+strlen(rcPath),"%d",idx); } if ( (fp = fopen(rcPath,"r")) ) { while( fgets(line, sizeof(line), fp) ) { if ( strncmp(line, "BROWSER:", 8) == 0 ) { s = line+8; while(*s && isspace(*s)) s++; e = s; while(*e && !isspace(*e) ) e++; *e = '\0'; if ( browser ) { free(browser); browser = NULL; } browser = strdup(s); } else if ( strncmp(line, "AUTODETECT:", 11) == 0 ) { s = line+11; while(*s && isspace(*s)) s++; e = s; while(*e && !isspace(*e) ) e++; *e = '\0'; if ( autodetect ) { free(autodetect); autodetect = NULL; } autodetect = strdup(s); } else if ( strncmp(line, "PORT:", 5) == 0 ) { s = line+5; while(*s && isspace(*s)) s++; e = s; #ifndef MACOS while(*e && !isspace(*e) ) e++; #else while(*e && (*e != '\r' || *e != '\n')) e++; #endif *e = '\0'; if ( actConfig.dev ) { free(actConfig.dev); actConfig.dev = NULL; } actConfig.dev = strdup(s); } else if ( strncmp(line, "PRINTER:", 8) == 0 ) { s = line+8; while(*s && isspace(*s)) s++; e = s + strlen(s) - 1; while(e > s && isspace(*e) ) *e-- = '\0'; if ( actConfig.name ) { free(actConfig.name); actConfig.name = NULL; } actConfig.name = strdup(s); } else if ( strncmp(line, "MINIHELP:", 9) == 0 ) { s = line+9; while(*s && isspace(*s)) s++; e = s; while(*e && !isspace(*e) ) e++; *e = '\0'; if ( miniHelp ) { free(miniHelp); miniHelp = NULL; } miniHelp = strdup(s); } } fclose(fp); } } /*******************************************************************/ /* Function saveConfig */ /* */ /* Save the configurytion data (printer model and port) into */ /* the file $(HOME)/.mtink */ /* */ /*******************************************************************/ int saveConfig(int idx) { int stat; int pid; char *homeDir = getenv("HOME"); char *fileName; FILE *fp; if ( actConfig.name ) { if ( homeDir ) { fileName= calloc(strlen(ConfigFile)+ strlen(homeDir) + 50,1); if ( fileName ) { if ( ! idx ) { sprintf(fileName, "%s/%s", homeDir, ConfigFile); } else { sprintf(fileName, "%s/%s.%d", homeDir, ConfigFile, idx); } /* the datas are collected, write into the conf file */ /* If we was started as uid program we have to set */ /* the effective id to the our own uid */ if ( (pid = fork()) == 0 ) { seteuid(getuid()); if ( (fp = fopen(fileName,"w")) ) { if ( browser ) fprintf(fp,"BROWSER: %s\n",browser); if ( autodetect ) fprintf(fp,"AUTODETECT: %s\n",autodetect); if ( miniHelp ) fprintf(fp,"MINIHELP: %s\n",miniHelp); if ( actConfig.name ) fprintf(fp,"PRINTER: %s\n",actConfig.name); if ( actConfig.dev ) fprintf(fp,"PORT: %s\n",actConfig.dev); fclose(fp); exit(0); } exit(0); } else if ( pid > 0 ) { /* wait fror process termination */ wait(&stat); } } free(fileName); } } return True; } mtink-1.0.16/mainSrc/rcfile.h0000644000076400001540000000151510376041214014062 0ustar jjfuse/* file rcfile.h * * Read and save configuration data * */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ extern void readRc(int idx); extern int saveConfig(int idx); mtink-1.0.16/mainSrc/cfg1.h0000644000076400001540000000162110376041214013434 0ustar jjfuse/* file cfg1.h * * First configuration window * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ extern Widget createConfigurePrinter(Widget parent, int *next); extern void popupCfg1(Widget old, wConfig_data_t *data, configData_t *pData); mtink-1.0.16/mainSrc/rw.h0000644000076400001540000000024110664600621013244 0ustar jjfuse/* File rw.h */ extern ssize_t devRead(int fd, unsigned char *buf, size_t sz, int to); extern ssize_t devWrite(int fd, unsigned char *buf, size_t sz, int to); mtink-1.0.16/mainSrc/fsb.c0000644000076400001540000001507010376041214013364 0ustar jjfuse/* file fsb.c * * File selection box * */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "wheelmouse.h" static Widget targetTextField; Widget fsb; /*******************************************************************/ /* */ /* NAME: cancel_CB */ /* */ /* FUNCTION: exit */ /* */ /* INPUT: */ /* */ /* OUTPUT: */ /* */ /* RETURN: */ /* */ /* REMARKS: */ /* */ /*******************************************************************/ static void cancel_CB(Widget w, XtPointer a, XtPointer b) { XtUnmanageChild(fsb); } /*******************************************************************/ /* */ /* NAME: ok_CB */ /* */ /* FUNCTION: exit */ /* */ /* INPUT: */ /* */ /* OUTPUT: */ /* */ /* RETURN: */ /* */ /* REMARKS: */ /* */ /*******************************************************************/ static void ok_CB(Widget w, XtPointer d, XtPointer c) { XmFileSelectionBoxCallbackStruct *cbs = (XmFileSelectionBoxCallbackStruct*)c; char *s = NULL; char *t = NULL; /* get value of widget */ XmStringGetLtoR(cbs->value, XmSTRING_DEFAULT_CHARSET, &s); t = s; while ( *t ) { if ( t[1] == '\0' && *t == '/' ) break; t++; } if ( *t == '\0' ) { XmTextFieldSetString(targetTextField,s); XtUnmanageChild(fsb); } free(s); } /*******************************************************************/ /* */ /* NAME: createFileSelection */ /* */ /* FUNCTION: create or popup the file selection box */ /* */ /* INPUT: */ /* */ /* OUTPUT: */ /* */ /* RETURN: */ /* */ /* REMARKS: */ /* */ /*******************************************************************/ Widget createFileSelection(Widget parent, Widget target) { Arg args[10]; int n; Widget wid; targetTextField = target; if ( fsb == NULL ) { n = 0; XtSetArg(args[n], XmNdialogStyle,XmDIALOG_FULL_APPLICATION_MODAL ); n++; fsb = XmCreateFileSelectionDialog(parent, "fsb", args, n); /* not help button, ... here */ wid = XmFileSelectionBoxGetChild(fsb, XmDIALOG_HELP_BUTTON); if ( wid != NULL ) XtUnmanageChild(wid); XtManageChild(fsb); wid = XmFileSelectionBoxGetChild(fsb, XmDIALOG_FILTER_LABEL); if ( wid != NULL ) XtUnmanageChild(wid); XtManageChild(fsb); wid = XmFileSelectionBoxGetChild(fsb, XmDIALOG_FILTER_TEXT); if ( wid != NULL ) XtUnmanageChild(wid); XtManageChild(fsb); wid = XmFileSelectionBoxGetChild(fsb, XmDIALOG_SELECTION_LABEL); if ( wid != NULL ) XtUnmanageChild(wid); XtManageChild(fsb); wid = XmFileSelectionBoxGetChild(fsb, XmDIALOG_TEXT); if ( wid != NULL ) XtUnmanageChild(wid); XtManageChild(fsb); XtAddCallback(fsb,XmNcancelCallback, cancel_CB, NULL); XtAddCallback(fsb,XmNokCallback, ok_CB, NULL); /* whell mouse handler, we need the list for dir and file */ wid = XmFileSelectionBoxGetChild(fsb,XmDIALOG_DIR_LIST); if ( wid != NULL ) xmAddMouseEventHandler(wid); wid = XmFileSelectionBoxGetChild(fsb,XmDIALOG_LIST); if ( wid != NULL ) xmAddMouseEventHandler(wid); } else { XtManageChild(fsb); } return fsb; } mtink-1.0.16/mainSrc/usbHlp.c0000644000076400001540000004437510665007322014064 0ustar jjfuse/* usb.c * * Copyright (C) 2001 Jean-Jacques Sarton jj.sarton@t-online.de */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* This file is a wrapper for using of libusb on MacOS 10. * * The file contain wrapper function for the open(), read() and write() * calls as well as the initialization code for the usblib * Some portion of the code was borowed from the sane project * */ #ifdef MACOS #include #include #include #include #include #include "usbHlp.h" #include "d4lib.h" #include "mtink.h" #include "cmd.h" /*#define DEBUG 1*/ /* Storage for our informations */ #define MAX_DEVICES 100 static int libusb_timeout = 10000; device_list_type devices[MAX_DEVICES]; static int usbClose(int dn) { if (dn >= MAX_DEVICES || dn < 0) { #ifdef DEBUG printf("usb_close: dn >= MAX_DEVICES || dn < 0\n"); #endif return -1; } if (!devices[dn].open) { #ifdef DEBUG printf("usb_close: device %d already closed or never opened\n", dn); #endif return -1; } else { usb_release_interface (devices[dn].libusb_handle, devices[dn].interface_nr); usb_close (devices[dn].libusb_handle); } devices[dn].open = 0; return 0; } /************************************************* * * usbOpen() * * open the usb user interface to printer referenced * by int idx * *************************************************/ static int usbOpen(int idx) { int status = 0; struct usb_device *dev; struct usb_interface_descriptor *interface; int result, num; devices[idx].libusb_handle = usb_open (devices[idx].libusb_device); if (!devices[idx].libusb_handle) { #ifdef DEBUG printf("usb_open: can't open device `%s': %s\n", devices[idx].devname, strerror (errno)); #endif if (errno == EPERM) { #ifdef DEBUG printf("Make sure you run as root or set appropriate permissions\n"); #endif status = -1; } else if (errno == EBUSY) { #ifdef DEBUG printf("Maybe the kernel printer driver claims the " "printer's interface?\n"); #endif status = -1; } } else { dev = usb_device (devices[idx].libusb_handle); /* Set the configuration */ if (!dev->config) { printf("usb_open: device `%s' not configured?\n", devices[idx].devname); return -1; } if (dev->descriptor.bNumConfigurations > 1) { printf("usb_open: more than one " "configuration (%d), choosing first config (%d)\n", dev->descriptor.bNumConfigurations, dev->config[0].bConfigurationValue); } result = usb_set_configuration (devices[idx].libusb_handle, dev->config[0].bConfigurationValue); if (result < 0) { status = -1; #ifdef DEBUG printf("usb_open: libusb complained: %s\n", usb_strerror ()); #endif if (errno == EPERM) { #ifdef DEBUG printf("Make sure you run as root or set appropriate " "permissions\n"); #endif status = -1; } else if (errno == EBUSY) { #ifdef DEBUG printf("Maybe the kernel printer driver claims the " "printer's interface?\n"); #endif status = -1; } usb_close (devices[idx].libusb_handle); return status; } /* Claim the interface */ result = usb_claim_interface (devices[idx].libusb_handle, devices[idx].interface_nr); if (result < 0) { status = -1; #ifdef DEBUG printf("usb_open libusb complained: %s\n", usb_strerror ()); #endif if (errno == EPERM) { #ifdef DEBUG printf("Make sure you run as root or set appropriate " "permissions\n"); #endif status = -1; } else if (errno == EBUSY) { #ifdef DEBUG printf("Maybe the kernel printer driver claims the " "printer's interface?\n"); #endif status = -1; } usb_close (devices[idx].libusb_handle); return status; } interface = &dev->config[0].interface->altsetting[0]; /* Now we look for usable endpoints */ for (num = 0; num < interface->bNumEndpoints; num++) { struct usb_endpoint_descriptor *endpoint; int address, direction, transfer_type; endpoint = &interface->endpoint[num]; address = endpoint->bEndpointAddress & USB_ENDPOINT_ADDRESS_MASK; direction = endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK; transfer_type = endpoint->bmAttributes & USB_ENDPOINT_TYPE_MASK; /* save the endpoints we need later */ if (transfer_type == USB_ENDPOINT_TYPE_BULK) { if (direction) /* in */ { if (devices[idx].bulk_in_ep) ; else devices[idx].bulk_in_ep = endpoint->bEndpointAddress; } else { if (devices[idx].bulk_out_ep) ; else devices[idx].bulk_out_ep = endpoint->bEndpointAddress; } } /* ignore currently unsupported endpoints */ else { continue; } } } if ( status == 0 ) devices[idx].open = 1; return status; } /************************************************* * * usbRead() * * read from the usb channel idx into the buffer * whith lenght size * *************************************************/ static int usbRead(int dn, char * buffer, size_t size) { static char rBuf[512]; static char mBuf[512]; int pos = 0; static int len = 0; ssize_t read_size = 0; if (!size) { #ifdef DEBUG printf("usbRead: size == 0\n"); #endif return -1; } if (dn >= MAX_DEVICES || dn < 0) { #ifdef DEBUG printf("usbRead: dn >= MAX_DEVICES || dn < 0\n"); #endif return -1; } if (devices[dn].bulk_in_ep) { /* with libusb on linux we need a buffered read !!! */ if ( len > 0 ) { if ( len > size ) { memcpy(buffer, rBuf, len); memmove(rBuf, rBuf+size, len-size); len -= size; read_size = size; } else { memcpy(buffer, rBuf, len); read_size = len; len = 0; } } if ( read_size < size ) { len = usb_bulk_read (devices[dn].libusb_handle, devices[dn].bulk_in_ep, rBuf, sizeof(rBuf), libusb_timeout); if ( len < 0 ) return len; } /* part of info into buffer (read_size>0 rest into rBuf */ if ( len > 0 ) { if ( len <= size - read_size ) { memcpy(buffer+read_size, rBuf, len); read_size += len; len = 0; } else { int consummed; memcpy(buffer+read_size, rBuf, size - read_size); consummed = size - read_size; memmove(rBuf,rBuf+consummed, len - consummed); len -= (size - read_size); read_size = size; } } } else { #ifdef DEBUG printf("usbRead: can't read without a bulk-in " "endpoint\n"); #endif return -1; } if (read_size < 0) { #ifdef DEBUG printf( "usbRead: read failed: %s\n", strerror (errno)); #endif usb_clear_halt (devices[dn].libusb_handle, devices[dn].bulk_in_ep); return -1; } if (read_size == 0) { usleep(100000); return 0; } return read_size; } static int usbWrite (int dn, char * buffer, size_t size) { ssize_t write_size = 0; if (!size) { #ifdef DEBUG printf("usbWrite: size == 0\n"); #endif return -1; } if (dn >= MAX_DEVICES || dn < 0) { #ifdef DEBUG printf("usbWrite: dn >= MAX_DEVICES || dn < 0\n"); #endif return -1; } if (devices[dn].bulk_out_ep) { write_size = usb_bulk_write (devices[dn].libusb_handle, devices[dn].bulk_out_ep, buffer, (int) size, libusb_timeout); } else { #ifdef DEBUG printf("usbWrite: can't write without a bulk-out " "endpoint\n"); #endif return -1; } if (write_size < 0) { #ifdef DEBUG printf("usbWrite: write failed: %s\n", strerror (errno)); #endif usb_clear_halt (devices[dn].libusb_handle, devices[dn].bulk_out_ep); return -1; } return write_size; } static int decodePrinterType(unsigned char *buf, int len, int dn) { char *s = buf; char *t = buf; int i; if ( buf ) { for (i=0; i < len; i++) { if ( strncmp(s, "DES:", 4) == 0 || strncmp(s, "MDL:", 4) == 0 ) { s +=4; t = s; while(*t && *t != ';') t++; *t = '\0'; /* remember the printer name */ devices[dn].prtname = strdup(s); return 0; } else { s++; } } } return 0; } /********************************************************** * getId(int dn) * * get the printer identification string * normally the printer shall support the D4 protokoll * *********************************************************/ static int getId(int dn) { int wr; int rd; char buf[512]; int state; char *iBuf = NULL; /* try non D4 read of printer description */ wr = usbWrite(dn, "\033\1@EJL ID\r\n", 11); if ( wr != 11 ) { return -1; } /* wait a little bit */ usleep(100000); /* and read back info supplied by the printer */ rd = usbRead(dn, buf, 511); if ( rd > 0 ) { buf[rd] = 0; decodePrinterType(buf,rd, dn); } else if ( rd == 0 ) { /* no info returned, disable D4 protocol */ wr = usbWrite(dn, "\0\0\0\033\1@EJL 1284.4\n@EJL \n", 27); /* wait a little bit */ usleep(100000); /* and read back info supplied by the printer */ rd = usbRead(dn, buf, 511); if ( rd > 0 ) { buf[rd] = 0; decodePrinterType(buf,rd, dn ); } state = callPrg(GET_ID, devices[dn].devname, PROT_D4, 0, 0, &iBuf, NULL ); } return 0; } /********************************************************** * usbInit(void) * * initialize libusb and return the number of EPSON * printer founds *********************************************************/ int usbInit(void) { struct usb_bus *busses; struct usb_bus *bus; int c, i, a; int dn = 0; char devname[1024]; int found = 0; memset (devices, 0, sizeof (devices)); usb_init(); usb_set_debug(0); usb_find_busses(); usb_find_devices(); busses = usb_get_busses(); for (bus = busses; bus; bus = bus->next) { struct usb_device *dev; for (dev = bus->devices; dev; dev = dev->next) { int interface; if (!dev->config) { #ifdef DEBUG printf("init: device 0x%04x/0x%04x is not configured\n", dev->descriptor.idVendor, dev->descriptor.idProduct); #endif continue; } if (dev->descriptor.idVendor == 0 || dev->descriptor.idProduct == 0) { continue; } for (interface = 0; interface < dev->config[0].bNumInterfaces && !found; interface++) { switch (dev->descriptor.bDeviceClass) { case USB_CLASS_VENDOR_SPEC: found = 1; break; case USB_CLASS_PER_INTERFACE: switch (dev->config[0].interface[interface].altsetting[0].bInterfaceClass) { case 7: /* printer class */ if ( dev->descriptor.idVendor != 0x04b8) /* EPSON vendor ID */ { break; } found = 1; devices[dn].libusb_device = dev; snprintf (devname, sizeof (devname), "libusb:%s:%s", dev->bus->dirname, dev->filename); devices[dn].devname = strdup (devname); if (!devices[dn].devname) { return 0; /* no more memory ! */ } devices[dn].vendor = dev->descriptor.idVendor; devices[dn].product = dev->descriptor.idProduct; devices[dn].open = 0; devices[dn].interface_nr = interface; if ( usbOpen(dn) == 0 ) { getId(dn); usbClose(dn); if ( devices[dn].prtname == NULL ) { return 0; /* no more memory or printer not recognized ! */ } dn++; } if (dn >= MAX_DEVICES) return dn; break; } break; } } interface--; if (!found) { continue; } } } return dn; } /********************************************************** * * Wrapper for the open, close, read and write functions * * if the destination is the libusb the file descriptor * is be ored with 0x1000 *********************************************************/ /********************************************************** * mOpen(char *name. int flags) * * open vial usbOpen() if the name look like * //usb:: * or do a normal open() * *********************************************************/ int mOpen(const char *name, int flags) { int fd = -1; int i; int len = strlen(USB_PRT_NAME_PREFIX); char *s; if (strncmp(name, USB_PRT_NAME_PREFIX, len) == 0 ) { /* get number */ s = strstr(name,USB_PRT_NAME_PREFIX); if ( s ) { s += strlen(USB_PRT_NAME_PREFIX); if ( isdigit(*s) ) { i = atoi(s); if ( i >= 0 && i < MAX_DEVICES && devices[i].devname ) { fd = usbOpen(i); if ( fd > -1 ) fd = i|0x1000; } } } } else { fd = open(name,flags); } return fd; } /********************************************************** * mWrite(int fd, char *buf, size_t count() * * write to given channel the informations contained into * buf * *********************************************************/ ssize_t mWrite(int fd, char *buf, size_t count) { if ( fd > -1 && (fd | 0x1000) ) return usbWrite(fd & 0xfff, buf, count); else if ( fd > -1 ) return write(fd, buf, count); else if ( fd > -1 ) return -1; } /********************************************************** * mRead(int fd, char *buf, size_t count() * * read from given channel the informations into buf * *********************************************************/ ssize_t mRead(int fd, void *buf, size_t count) { if ( fd > -1 && (fd | 0x1000) ) return usbRead(fd & 0xfff, buf, count); else if ( fd > -1 ) return read(fd, buf, count); else return -1; } /********************************************************** * mClose(int fd) * * close the channel * *********************************************************/ int mClose(int fd) { if ( fd > -1 && (fd | 0x1000) ) return usbClose(fd & 0xfff); else if ( fd > -1 ) return close(fd); else return -1; } /*************************************************** * * bldFile() * * create speudo device file into the /vat/mtink * directory * **************************************************/ int createFiles() { char buf[512]; int dn = 0; while(devices[dn].prtname != NULL ) { if ( snprintf(buf,sizeof(buf),USB_PRT_NAME_PREFIX"%02d:%s",dn,devices[dn].prtname) != sizeof(buf) ) { mkdir(USB_PRT_DIR); creat(buf, 0644); } else { return -1; } dn++; } return 0; } /**************************************************** * unlinkFiles() * * delete all file previously created by createFiles() * ***************************************************/ int unlinkFiles() { char buf[512]; int dn = 0; while(devices[dn].prtname != NULL ) { if ( snprintf(buf,sizeof(buf),USB_PRT_NAME_PREFIX"%02d:%s",dn,devices[dn].prtname) != sizeof(buf) ) { unlink(buf); } else { return -1; } dn++; } return 0; } /************************************************* * * show available models * *************************************************/ void showModels() { int dn = 0; while(devices[dn].prtname != NULL ) { printf("%3d: %s\n",dn+1,devices[dn].prtname); dn++; } } /************************************************* * * show available models * *************************************************/ char *getPrinterName(int dn) { if(devices[dn].prtname != NULL ) { return devices[dn].prtname; } return NULL; } #endif mtink-1.0.16/mainSrc/model.h0000644000076400001540000000532410376041214013720 0ustar jjfuse/* file model.h * * List of know printers and flags * device and printer choice * */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef MODEL_H #define MODEL_H #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif #ifndef NULL #define NULL ((void *)0) #endif #ifndef True #define True 1 #endif #ifndef False #define False 0 #endif #define PALL 7 #define NO_PROT 0 #define PROT_OLD 1 #define PROT_EXIT 2 #define PROT_NEW (PROT_OLD|PROT_EXIT) #define PROT_D4 4 #define DEV_CLOSE 8 #define STAY_RESIDENT 16 #define TEST_DEV 1 #define GET_ID 2 #define GET_STAT 3 #define GET_IQ 4 #define RESET_PRT 5 #define CHECK_NOZZLE 6 #define CLEAN_NOZZLE 7 #define CLEAN_NOZZLE_C 8 #define CLEAN_NOZZLE_B 9 #define WAIT_STAT_04 10 #define WAIT_STAT_01 11 #define EXCHANGE_ALL 12 #define EXCHANGE_B 13 #define EXCHANGE_C 14 #define EXCHANGE_NEXT 15 #define ALIGN_HEAD 16 #define ALIGN_HEAD_C 17 #define OPEN_DEV 18 #define RELEASE 254 #define TERMINATE 255 typedef struct configData_s { char *name; int colors; int prot; /* protocol main entry */ int state; /* Bool capability */ int exchange; /* Bool capability */ int exchangeSeparate; /* Bool capability */ int cleanSeparate; /* Bool capability */ int reset; /* Protocol for reset */ int align; /* Protocol for alignment */ int id; /* Bool capability */ /* taken from gimp-print escputil */ int passes; int choices; int color_passes; int color_choices; int checkNeedReset; /* Photo 890/1290 have a firmware bug so */ /* we must send a reset after the check */ char *alignFunction; /* the Photo 890 require external code */ char *dev; } configData_t; extern configData_t defaultConfigData[]; extern int defaultConfigDataSize; #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif mtink-1.0.16/mainSrc/tooltip.c0000644000076400001540000004110210665007430014302 0ustar jjfuse/* file tooltip.c Version 0.2 Implement tooltip for Motif 1.2, 2.0 and 2.1 and Xaw* Author: Jean-Jacques Sarton jj.sarton@t-online.de Date: February 2002 Changes: 0.2: - new resources - tooltip widgets nor more destroyed and created again - removed main(), put this to mtiptoll.c - better handling of Menu (Motif) ---------------------------------------------------------------- This is a lean version which can be integrated in an existing application. The developer need only to add event handler with the function xmAddTooltip() for each widget which is relevant or call after the windows was build the function xmAddtooltipGlobal(). In this case event handlers will be installed for each pushbutton and togglebuton. Note that xmAddtooltipGlobal() is not available now for Xaw. The last work is to fill the resource file with the wanted tooltip textes. and a few values for the tooltip behaviour. Widgets: The tooltip widgets consist of the following widgets: - shell: tooltip_shell (XmMenuShell) - row_column tooltip_rc (XmRowColum) - label tooltip_label (XmLabel) Resources: The resource for above widgets are applicable exected the labelString resoource. New resources: tooltipPost The delay in millisecond for displaying the tooltip after a widget was entered (value < 20 -> delay set to 20 ms (avod a few problems) tooltipDuraction The time for which the tooltip will be displayed in case the pointer is still abovce the widget tooltipX X offset relatif to left border of "parent" widget. tooltipY Y offset relatif to botom border of "parent" widget. tooltip The text which is to be displayed. This is a new resource and correspond to the labelString resource. tooltipBackground background for the tooltip tooltipForeground foreground for the tooltip resource file example: Refer to the included resource file Test. Using within own projects: Copy the file tooltip.c to your project source. If you use XAW* define TIPTOOL_USE_XAW in order to generate the Xaw object file. */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include #include #include "tooltip.h" /* prototypes */ static void showTooltip(Widget w, XtPointer client_data, XEvent *event); static void unmapTooltip(XtPointer closure, XtIntervalId *id); static void deleteTooltip(Widget w, XtPointer client_data, XEvent *event); static void postTooltip(XtPointer closure, XtIntervalId *id); /* private variables */ static XtIntervalId postId; static XtIntervalId durationId; static XtAppContext app; static int init; static long postDelay; static long duration; static Position xOffset = 1; static Position yOffset = 1; static int enabled = 1; static Widget popup_shell; static Widget popup_label = NULL; static int pixelInitialized = 0; static char *Lang = NULL; #define BG_INIT 1 #define FG_INIT 2 /********************************************************************* * Function: xmTooltipSetLang * * Set the language name (name of the top form) * * Input: char *lang * * Return: - * ********************************************************************/ void xmTooltipSetLang(char *lang) { if ( lang ) Lang = strdup(lang); } /********************************************************************* * Function: xmAddTooltip * * Add the tooltip event handler for the given widget * * Input: Widget w * * Return: - * ********************************************************************/ void xmAddTooltip(Widget w) { XtAddEventHandler(w, EnterWindowMask, False, (XtEventHandler) showTooltip, NULL); XtAddEventHandler(w, LeaveWindowMask, False, (XtEventHandler) deleteTooltip, NULL); } /********************************************************************* * Function: xmSetPostDelay * * Set the delay for posting of tooltip. if the value is 0, no delay * will be taken in account. The time is in milli second * * Input: long delay * * Return: - * ********************************************************************/ void xmSetPostDelay(long delay) { postDelay = delay; } /********************************************************************* * Function: xmSetDuration * * Set the delay for unposting of tooltip. if the value is 0, no delay * will be taken in account. The time is in milli second * * Input: long delay * * Return: - * ********************************************************************/ void xmSetDuration(long delay) { duration = delay; } /********************************************************************* * Function: xmEnableTooltip * * Set the enable flag. If the value is 0 tooltips are disabled. * Other values enable displayin of tooltips. * * Input: int enable * * Return: - * ********************************************************************/ void xmEnableTooltip(int enable) { enabled = enable; } /********************************************************************* * Function: xmSetXOffset * * Set the x offset where the tooltip will be displayed * * * Input: int offset * * Return: - * ********************************************************************/ void xmSetXOffset(int offset) { xOffset = offset; if ( xOffset < 0 ) xOffset = 0; } /********************************************************************* * Function: xmSetYOffset * * Set the x offset where the tooltip will be displayed * * * Input: int offset * * Return: - * ********************************************************************/ void xmSetYOffset(int offset) { yOffset = offset; if ( yOffset < 0 ) yOffset = 0; } /********************************************************************* * Function: xmAddtooltipGlobal * * Add the tooltip event handler for all widget bellow the the given * topwidget. * * Input: Widget top * * Return: - * ********************************************************************/ void xmAddtooltipGlobal(Widget top) { /* get a list of all widgets */ WidgetList children = NULL; int numChildren = 0; int i; if ( ! XtIsComposite(top) ) { return; } XtVaGetValues(top, XmNchildren, &children, XmNnumChildren, &numChildren, NULL); for (i=0; i < numChildren; i++ ) { /* check for pushbutton and togglebutton */ if ( XmIsPushButton(children[i]) || XmIsToggleButton(children[i]) ) { xmAddTooltip(children[i]); } else { xmAddtooltipGlobal(children[i]); } } /* don't free children, this wiil cause a segment violation */ } /********************************************************************* * Function: postTooltip * * Manage the tooltip if the postdelay timeout was encountoured * * Input: not relevant * * Return: - * ********************************************************************/ static void postTooltip(XtPointer closure, XtIntervalId *id) { XtManageChild(popup_shell); XRaiseWindow(XtDisplay(popup_shell),XtWindow(popup_shell)); if ( duration > 0 ) { durationId = XtAppAddTimeOut(app, duration, unmapTooltip, NULL ); } postId = 0; } /********************************************************************* * Function: unmapTooltip * * destroy the tooltip if the durcation timeout was encountoured * * Input: not relevant * * Return: - * ********************************************************************/ static void unmapTooltip(XtPointer closure, XtIntervalId *id) { if ( popup_shell ) XtUnmanageChild(popup_shell); if (postId) XtRemoveTimeOut(postId); if ( durationId ) XtRemoveTimeOut(durationId); postId = durationId = 0; } /********************************************************************* * Function: showTooltip * * Build the tooltip and display it if the post delay is <= 0. * If the post delay is > 0 arme a timer which will manage the tooltip * later. * * Input: Widget w, * XtPointer client_data * XEvent *event * * Return: - * ********************************************************************/ static void showTooltip(Widget w, XtPointer client_data, XEvent *event) { Widget popup_rc; Position x, y; Dimension h; Dimension ph, pw; XmString xms; int isMenu = False; char *s; Widget top = w; Pixel bg = 0; Pixel fg = 0; if(event->xany.type != EnterNotify) return; if ( ! enabled ) return; if ( ! XtIsSensitive(w) ) return; /* get the shell */ while ( !XtIsShell(top) ) top = XtParent(top); if ( ! init ) { /* read the values for tooltip post delay and duration */ if ((s = xmGetResource(top, "tooltipPost"))) { postDelay = atoi(s); } if ((s = xmGetResource(top, "tooltipDuration"))) { duration = atoi(s); } if ((s = xmGetResource(top, "tooltipX"))) { xOffset = atoi(s); if ( xOffset < 0 ) xOffset = 0; } if ((s = xmGetResource(top, "tooltipY"))) { yOffset = atoi(s); if ( yOffset < 0 ) yOffset = 0; } /* some application will replace all background and */ /* foreground resources to a given values, so we */ /* have our own resource foir this */ if ((s = xmGetResource(top, "tooltipBackground"))) { XColor col, col2; Colormap cmap = DefaultColormap(XtDisplay(top), DefaultScreen(XtDisplay(top))); if ( XAllocNamedColor(XtDisplay(top),cmap,s,&col,&col2) ) { bg = col.pixel; pixelInitialized = BG_INIT; } } if ((s = xmGetResource(top, "tooltipForeground"))) { XColor col, col2; Colormap cmap = DefaultColormap(XtDisplay(top), DefaultScreen(XtDisplay(top))); if ( XAllocNamedColor(XtDisplay(top),cmap,s,&col,&col2) ) { fg = col.pixel; pixelInitialized |= FG_INIT; } } /* and get the application context, for timers */ app = XtDisplayToApplicationContext(XtDisplay(w)); popup_shell = XtVaCreatePopupShell("tooltip_shell", topLevelShellWidgetClass, top, XmNoverrideRedirect, True, XmNallowShellResize, True, XmNmappedWhenManaged, False, XmNwidth, 1, XmNheight, 1, XmNborderWidth, 0, NULL); XtManageChild(popup_shell); XMoveWindow(XtDisplay(popup_shell), XtWindow(popup_shell), x, y); /* the container, The class must be according to the toolkit */ popup_rc = XtVaCreateWidget(Lang?Lang:"tooltip_form", xmFormWidgetClass, popup_shell, NULL); XtManageChild(popup_rc); /* the label, class according to toolkit */ popup_label = XtVaCreateWidget("tooltip_label", xmLabelWidgetClass, popup_rc, NULL); if ( pixelInitialized & BG_INIT ) { XtVaSetValues(popup_label, XmNbackground, bg, XmNbackgroundPixmap, XmUNSPECIFIED_PIXMAP, NULL); } if ( pixelInitialized & FG_INIT ) { XtVaSetValues(popup_label, XmNforeground, fg, NULL); } XtManageChild(popup_label); XtUnmanageChild(popup_shell); XtVaSetValues(popup_shell, XmNmappedWhenManaged, True,NULL); init++; } /* get the resource */ if ( (s = xmGetResource(w, "tooltip")) ) { /* This is wrong, if lesstif 2.0 is used */ /* use always the old calls */ xms = XmStringCreateLtoR( s, XmFONTLIST_DEFAULT_TAG); XtVaSetValues(popup_label, XmNlabelString, xms, NULL); } else { return; } /* get position and dimensions */ XtVaGetValues(w, XmNheight, &h, NULL); XtTranslateCoords(w, 0, 0, &x, &y); XtVaGetValues(popup_shell, XmNheight, &ph, XmNwidth, &pw, NULL); /* calculate the x and y position fot popup */ if ( XtParent(w) ) { isMenu = XmIsMenuShell(XtParent(w)); if ( isMenu == False && XtParent(XtParent(w)) ) { isMenu = XmIsMenuShell(XtParent(XtParent(w))); } } if ( isMenu ) { Dimension wi; XtVaGetValues(XtParent(w), XmNwidth, &wi, NULL); if ( (x + pw + wi ) > WidthOfScreen(XtScreen(w)) ) x -= pw; else x += wi; } else { if ( (h + y + ph + yOffset ) < HeightOfScreen(XtScreen(w)) ) { y = h + y + yOffset; } else { y = y - ph - yOffset; } if ( ( x + pw + xOffset ) > WidthOfScreen(XtScreen(w)) ) { x = WidthOfScreen(XtScreen(w)) - pw; } else { x += xOffset; } } XtVaSetValues(popup_shell, XmNx, x, XmNy, y,NULL); postId = XtAppAddTimeOut(app, postDelay, postTooltip, NULL ); if ( xms ) XmStringFree(xms); } /********************************************************************* * Function: deleteTooltip * * unmap the tooltip * * Input: Widget w, * XtPointer client_data * XEvent *event * * Return: - * ********************************************************************/ static void deleteTooltip(Widget w, XtPointer client_data, XEvent *event) { XLeaveWindowEvent *cevent = (XLeaveWindowEvent *) event; if(cevent->type != LeaveNotify) return; if ( popup_shell ) XtUnmanageChild(popup_shell); if ( durationId ) XtRemoveTimeOut(durationId); durationId = 0; if ( postId ) XtRemoveTimeOut(postId); postId = 0; } /********************************************************************* * Function: xmGetResource * * read the resource * * Input: Widget w * char *resource * * Return: char *resource * ********************************************************************/ char *xmGetResource(Widget w, char *resource) { XrmDatabase database; char *type_return; XrmValue value_return; Widget top = w; char *tmp; char *first; char *last = strdup(resource); /* build the full resource name */ while( !XtIsShell(top) ) { tmp = XtName(top); first = (char*)calloc(strlen(tmp)+strlen(last)+2,1); sprintf(first, "%s.%s",tmp,last); free(last); last = first; top = XtParent(top); } /* get the class name */ XtGetApplicationNameAndClass(XtDisplay(w), &type_return, &tmp); /* and complete the name */ first = (char*)calloc(strlen(tmp)+strlen(last)+2,1); sprintf(first, "%s.%s",tmp,last); free(last); /* get Database */ database = XtDatabase(XtDisplay(w)); /* get value from the resource database,the class ist not */ /* is not important here */ XrmGetResource(database, first, "String", &type_return, &value_return); free(first); return value_return.addr; } mtink-1.0.16/mainSrc/mtink.h0000644000076400001540000000635410376041214013746 0ustar jjfuse/* * File mtink.h * * Copyright (C) 2001 Jean-Jacques Sarton jj.sarton@t-online.de * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef MTINK_H #define MTINK_H #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif #include "model.h" #define ConfigFile ".mtinkrc" #define QUERY_PRINTER 0 #define QUERY_DEVICE 1 #if WITH_X typedef struct appResourceRec_s { char *error; char *selfTest; char *busy; char *printing; char *ok; char *cleaning; char *unknown; char *addPrinterTxt; char *save; char *about; char *cancel; char *next; char *previous; char *ctTxt0; char *ctTxtC0; char *ctTxt1; char *ctTxt2; char *ctTxt3; char *ctTxt1_1; char *ctTxt1_2; char *ctTxt1_3; char *ctTxtP; char *ctTxtL; char *ctTxt4; char *ctTxt5; char *ctTxt6; char *ctTxt7; char *ctTxt8; char *ctTxt9; char *ctTxtC; char *exTxt0; char *exTxt00; char *exTxt1; char *exTxt2; char *exTxt3; }appResourceRec_t; extern appResourceRec_t appResourceRec; #endif extern configData_t actConfig; #if WITH_X #define CYCLE_TIME 1000 extern XtIntervalId tid; extern void handleTi(XtPointer closure, XtIntervalId *tidp); extern Widget topLevel; extern Widget mainForm; extern XtAppContext theApp; extern Display *display; extern char *browser; extern char *autodetect; extern char *miniHelp; extern int configFileIdx; extern int doCyclicScan; extern int usePopup; extern char *mainResource; extern char guiLanguage[]; extern Widget miconOK; typedef struct wConfig_data_s { char *printerName; char *dev; char *bt1; char *bt2; char *bt3; char *message; int *wait; int intVal; /* return value */ void *ptrVal; /* return value not to be freed, point to static data */ int colTb; int wType; int pass; int choices; Widget actWindow; } wConfig_data_t; #else typedef struct wConfig_data_s { char *printerName; char *dev; int intVal; /* return value */ void *ptrVal; /* return value not to be freed, point to static data */ int colTb; int wType; int pass; int choices; } wConfig_data_t; #endif wConfig_data_t firstConfig; wConfig_data_t newPrinter; wConfig_data_t exchangeCartridge; wConfig_data_t alignHead; #if WITH_X extern Widget createNoPrinterBox(char *); extern int decodeStatus(unsigned char *buf, int len); extern void SetSensitive(int flag); extern void refreshMainWindow(void); #endif #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif mtink-1.0.16/mainSrc/rw.c0000644000076400001540000000742110664775005013257 0ustar jjfuse/* File rw.c * * Due to some problems with the 2.6 kernels, I had to find a way in * order to make reading and writing from/to the device file /dev/lp0 and * /dev/usb/lp0 working in the same way. * With the 2.6 kernel, the read() call will no more be interrupted by * an alarm timer. Read on /dev/lp0 is a blocking call, read on * /dev/usb/lp0 will never block. * Both device has different behaviour and the kernel people seem not to * be able to understood the problem and fix it. * * Solution: If we open the device file with the O_NDELAY flag set, * both interface will return immediatly with the value -1 and errno set * to EAGAIN if nothing is to be read. * * Writing may be working for now without changes. */ #ifndef MACOS #include #include #include #include #include #include #include int inFromFile = 0; /* the two following functions are for testing. If we got a log * from ttink (status or id), we can check what happen and if the * results are as expected. */ /********************************************** * Read the next line beginning with Recv: *********************************************/ ssize_t readLine(int fd, unsigned char *buf, size_t sz) { int i = 0; buf[0] = 0; while( read(fd, buf+i, 1) > 0 ) { buf[i+1] = 0; if ( buf[i] == '\n' ) { buf[i] = 0; if ( strncmp(buf, "Recv:",5) == 0 ) { return i; } else { i = 0; buf[0] = 0; continue; } } i++; if ( i >= sz ) break; } return -1; } /********************************************** * convert the hex value to binary and copy to * the output buffer *buf *********************************************/ ssize_t convertBuf(unsigned char *buf, int sz, char *buffer) { int i = 0; buffer += 5; /* skip Recv: */ while(*buffer && sz > 1) { buf[i] = (unsigned char)strtol(buffer, &buffer, 16)&0xff; i++; sz--; } buf[i] = '\0'; return i; } /*********************************************** * Low level read function. The device is in * NON_BLOCK mode. **********************************************/ ssize_t devRead(int fd, unsigned char *buf, size_t sz, int to) { int rd = 0; to /= 10; errno = 0; if ( !inFromFile ) { /* Normal way */ while(to > 0 && rd != -1 ) { /* wait a little bit */ poll(NULL, 0, 10); to--; rd = read(fd, buf, sz); if ( rd > 0 ) { return rd; } } } else { /* Read from a file (test) * read a line, if the line begin with Recv: * put the code into the buffer */ char buffer[8092]; if ( readLine(fd, buffer, sizeof(buffer)) >= 0 ) { rd = convertBuf(buf, sz, buffer); return rd; } } /* at this point we are probably interrupted */ if ( rd == 0 ) { errno = EINTR; } return -1; } /*********************************************** * Low level write function. The device is in * NON_BLOCK mode. **********************************************/ ssize_t devWrite(int fd, unsigned char *buf, size_t sz, int to) { int wr = 0; to /= 10; errno = 0; /* if we are readinf from a file don't write to it * leave the function with OK */ if (inFromFile ) { return sz; } while(to > 0 && wr != -1 ) { /* wait a little bit */ poll(NULL, 0, 10); to--; wr = write(fd, buf, sz); if ( wr > 0 ) { return wr; } } /* at this point we are probably interrupted */ if ( wr == 0 ) { errno = EINTR; } return -1; } #endif mtink-1.0.16/mainSrc/checkenv.h0000644000076400001540000000151110664606177014417 0ustar jjfuse/* File checkenv.h * * Copyright (C) 2001 Jean-Jacques Sarton jj.sarton@t-online.de * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ extern int checkEnv(char **env); mtink-1.0.16/mainSrc/usbHlp.h0000644000076400001540000000157010376041214014054 0ustar jjfuse/* usb.h */ #ifdef MACOS #include extern int mOpen(const char *name, int flags); extern ssize_t mWrite(int fd, char *buf, size_t count); extern ssize_t mRead(int fd, void *buf, size_t count); extern int mClose(int fd); extern int usbInit(void); extern int unlinkFiles(void); extern int createFiles(void); extern void showModels(void); extern char *getPrinterName(int dn); typedef struct { int open; char *devname; char *prtname; int vendor; int product; int bulk_in_ep; int bulk_out_ep; int interface_nr; usb_dev_handle *libusb_handle; struct usb_device *libusb_device; } device_list_type; extern device_list_type devices[]; #define USB_PRT_DIR "/var/mtink" #define USB_PRT_NAME_PREFIX USB_PRT_DIR"/usb:" #endif mtink-1.0.16/mainSrc/alignbt.c0000644000076400001540000003323410376041214014234 0ustar jjfuse/* file alignbt.c * * Windows for head alignment * */ /* * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "mtink.h" static Widget alignWindow; static Widget alignNext_PB; static Widget align_TF; static Widget title_LB; static Widget separator; static Widget button_FRM; static Widget align_PB[15]; static int alignPattern = 0; static int loop = 0; /* create the coonfiguration window */ static void alignNext_CB(Widget w, XtPointer clientData, XtPointer callData); static void align_CB(Widget w, XtPointer clientData, XtPointer callData); /*******************************************************************/ /* Function createAlignButtons() */ /* */ /* Create the window for aligment */ /* */ /* Input: Widget parent not used */ /* int *next not used */ /* */ /* return: - */ /* */ /*******************************************************************/ Widget createAlignButtons(Widget parent, int *next) { XmString xms = NULL; Arg args[20]; int n = 0; char buf[10]; char nm[20]; int i,j; Dimension h; alignWindow = XtVaCreateWidget("alignWindow", xmFormWidgetClass, mainForm, XmNmarginHeight, 0, XmNmarginWidth, 0, XmNresizePolicy, XmRESIZE_GROW, XmNresizable, True, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); if (alignWindow == NULL) { return False; } XtManageChild(alignWindow); title_LB = XtVaCreateWidget("title_LB", xmLabelWidgetClass, alignWindow, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 5, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 5, XmNtopAttachment, XmATTACH_FORM, XmNtopOffset, 10, XmNalignment, XmALIGNMENT_CENTER, NULL); XtManageChild(title_LB); /* create a Form */ n = 0; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNleftOffset, 5); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNrightOffset, 5); n++; XtSetArg(args[n], XmNshadowThickness, 0); n++; XtSetArg(args[n], XmNnumColumns, 1); n++; button_FRM = XmCreateForm(alignWindow, "button_FRM",args,n); XtManageChild(button_FRM); for ( i = 0; i < 3; i++ ) { for ( j = 0; j < 5; j++ ) { sprintf(buf,"%d",(i*5)+j+1); sprintf(nm,"align_%d",(i*5)+j+1); xms = XmStringCreateSimple(buf); align_PB[(i*5)+j] = XtVaCreateWidget(nm, xmDrawnButtonWidgetClass, button_FRM, XmNlabelString, xms, XmNalignment, XmALIGNMENT_CENTER, XmNleftAttachment, XmATTACH_POSITION, XmNleftOffset, 5, XmNleftPosition, 20*j, XmNrightAttachment, XmATTACH_POSITION, XmNrightOffset, 5, XmNrightPosition, 20*j+20, XmNtopAttachment, XmATTACH_POSITION, XmNtopOffset, 5, XmNtopPosition, 33*i, XmNshadowType, XmSHADOW_OUT, NULL); XtManageChild(align_PB[(i*5)+j]); XmStringFree(xms); XtAddCallback(align_PB[(i*5)+j], XmNactivateCallback, align_CB, (XtPointer) (i*5)+j); } } XtVaGetValues(align_PB[0], XmNheight,&h,NULL ); XtVaSetValues(button_FRM, XmNheight,(h+4)*3, XmNresizePolicy, XmRESIZE_NONE, NULL); alignNext_PB = XtVaCreateWidget("next_PB", xmPushButtonWidgetClass, alignWindow, XmNleftAttachment, XmATTACH_POSITION, XmNleftOffset, 5, XmNleftPosition, 65, XmNrightAttachment, XmATTACH_POSITION, XmNrightOffset, 5, XmNrightPosition, 95, XmNbottomAttachment, XmATTACH_FORM, XmNbottomOffset, 5, NULL); XtManageChild(alignNext_PB); separator = XtVaCreateWidget("separator", xmSeparatorWidgetClass, alignWindow, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomOffset, 5, XmNbottomWidget, alignNext_PB, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 0, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 0, NULL); XtManageChild(separator); XtVaSetValues(button_FRM, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomOffset, 5, XmNbottomWidget, separator, NULL); n = 0; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNleftOffset, 5); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNrightOffset, 5); n++; XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNtopOffset, 10); n++; XtSetArg(args[n], XmNtopWidget, title_LB); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNbottomOffset, 5); n++; XtSetArg(args[n], XmNbottomWidget, button_FRM); n++; XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; XtSetArg(args[n], XmNcursorPositionVisible, False); n++; XtSetArg(args[n], XmNeditable, False); n++; XtSetArg(args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; XtSetArg(args[n], XmNwordWrap, True); n++; XtSetArg(args[n], XmNscrollHorizontal, False);n++; XtSetArg(args[n], XmNvalue, ""); n++; align_TF = XmCreateScrolledText(alignWindow, "align_TF", args, n); XtManageChild(align_TF); XtVaSetValues(align_TF, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomOffset, 5, XmNbottomWidget, button_FRM, NULL); XtAddCallback(alignNext_PB, XmNactivateCallback, alignNext_CB, &loop); align_CB(align_PB[7], (XtPointer)7, NULL); return alignWindow; } /*******************************************************************/ /* Function align_CB() */ /* */ /* Set the pushbutton to the correct state (armed/disarmed) */ /* */ /* Input: Widget w not used */ /* XtPointer clientData pushbutton number */ /* XtPointer callData not used */ /* */ /* return: - */ /* */ /*******************************************************************/ static void align_CB(Widget w, XtPointer clientData, XtPointer callData) { int where = (int)clientData; Pixel bg; Pixel abg; if ( where != alignPattern ) { XtVaGetValues(alignNext_PB, XmNbackground, &bg, XmNarmColor, &abg, NULL); XtVaSetValues(align_PB[alignPattern], XmNshadowType, XmSHADOW_OUT, XmNbackground, bg, NULL); alignPattern = where; XtVaSetValues(align_PB[where], XmNshadowType, XmSHADOW_IN, XmNbackground, abg, NULL); } } /*******************************************************************/ /* Function alignNext_CB() */ /* */ /* set loop flag to 1 */ /* */ /* Input: Widget w not used */ /* XtPointer clientData not used */ /* XtPointer callData not used */ /* */ /* return: - */ /* */ /*******************************************************************/ static void alignNext_CB(Widget w, XtPointer clientData, XtPointer callData) { *((int*)clientData) = 1; } /*******************************************************************/ /* Function popupAlignNextWindow() */ /* */ /* popup the mask and wait for user interaction */ /* */ /* Input: Widget old caller mask */ /* wConfig_data_t *data not used */ /* */ /* return: - */ /* */ /*******************************************************************/ void popupAlignNextWindow(Widget old, wConfig_data_t* data) { XmString xms; int i; /* only 1 button */ if ( data->bt3 ) { xms = XmStringCreateSimple(data->bt3); XtVaSetValues(alignNext_PB, XmNlabelString, xms, NULL); XtManageChild(alignNext_PB); XmStringFree(xms); } if ( data->message ) { XtVaSetValues(align_TF, XmNvalue,data->message, NULL); } if ( data->printerName && data->printerName[0] != '?' ) { xms = XmStringCreateSimple(data->printerName); XtVaSetValues(title_LB, XmNlabelString, xms, NULL); XmStringFree(xms); } /* number of choices */ for ( i = 0; i < 15; i++ ) { if ( i > data->choices ) XtUnmanageChild(align_PB[i]); else XtManageChild(align_PB[i]); } /* manage the window */ XtUnmanageChild(old); XtManageChild(alignWindow); /* preset middle button */ align_CB(NULL,(XtPointer)(data->choices/2), NULL); XmProcessTraversal(align_PB[data->choices/2], XmTRAVERSE_CURRENT); /* enter the private main loop */ *data->wait = 0; loop = 0; while(!loop) XtAppProcessEvent(theApp, XtIMAll); data->intVal = alignPattern; data->actWindow = alignWindow; *data->wait = loop; } mtink-1.0.16/mainSrc/rdRes.h0000644000076400001540000000253110376041214013674 0ustar jjfuse/* file rdRes.h * * Event handler for wheelmouse */ /* * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef WHEELMOUSE_H #define RDRES_H #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif extern char *searchString(char *lang, char *key); extern int askYn(char *lang, char *yn); extern int askNo(int first, int last); extern void printText(char *fmt, char *lang, char *key); extern void fprintText(FILE *out, char *fmt, char *lang, char *key); extern int askForChoice(char *lang, char *choice[], int no); extern void initTerm(void); extern void resetTerm(void); extern int initResource(void); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif mtink-1.0.16/mainSrc/mtink.c0000644000076400001540000031547510664767235013772 0ustar jjfuse/* mtink.c * * Copyright (C) 2001 Jean-Jacques Sarton jj.sarton@t-online.de */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "mtink.h" #include "rcfile.h" #include "cfg1.h" #include "cfg2.h" #include "alignbt.h" #include "scrtxt.h" #include "cmd.h" #include "version.h" #include "d4lib.h" #include "tooltip.h" #include "checkenv.h" #include "access.h" #ifdef MACOS #include "usbHlp.h" #endif #ifndef TEST #define TEST 1 #endif #include "micon.h" #include "rdPrtDesc.h" #define defaultConfigData configData #define defaultConfigDataSize configEntries int deviceHdl = -1; /* for write / read to / from printer */ char *prgName; int pc1 = 0; /* black */ int pc2 = 0; /* cyan */ int pc3 = 0; /* magenta */ int pc4 = 0; /* yellow */ int pc5 = 0; /* light cyan or red*/ int pc6 = 0; /* light magenta or blue*/ int pc7 = 0; /* photo black or glossy */ int pc8 = 0; /* glossy if 8 inks */ char *printerName; char *printerState; char *displayStr; int configFileIdx = 0; int doCyclicScan = 0; /* ask IQ peridically allowed */ char guiLanguage[10]; char *testFile = NULL; /* test */ extern int inFromFile; /* test */ Widget topLevel; Widget mainForm; Widget mainWindow; Widget clean_PB; Widget check_PB; Widget reset_PB; Widget cartridge_PB; Widget align_PB; int usePopup = False; XtAppContext theApp; Display *display; Widget createLayout(char *language); static Widget CreateScale(Widget parent, char *name, Widget top); static void help_CB(Widget w, XtPointer clientData, XtPointer callData); static void pref_CB(Widget w, XtPointer clientData, XtPointer callData); void setProgressBarColor(char colorModel); Widget title_LB; Widget legend_LB; /* scale widgets */ Widget scaleC; Widget scaleB; Widget scaleM; Widget scaleY; Widget scaleLc; Widget scaleLm; Widget scaleLb; Widget scalePh; /* scale labels */ Widget scaleCLb; Widget scaleBLb; Widget scaleMLb; Widget scaleYLb; Widget scaleLcLb; Widget scaleLmLb; Widget scaleLbLb; Widget scalePhLb; Widget pref_PB; Widget ok_PB; Widget help_PB; Widget about_PB; Widget printerState_LB; Widget state_LB; Widget pref_LB; XtIntervalId tid = 0; void handleTi(XtPointer closure, XtIntervalId *tidp); configData_t actConfig; char *mainResource; static int x,y; static int cmdCount = 0; #define ASK_EVERY 10 long inkTimer = ASK_EVERY; Widget miconOK; Widget displayW; #define NAME "EpsonUtil" appResourceRec_t appResourceRec = { "error", "self test", "busy", "printing", "ok", "cleaning", "unknown", "Other Printer", "Save", "About", "Cancel", "Next", "Back", "ctTxt0", "ctTxt00", "ctTxt1", "ctTxt2", "ctTxt3", "ctTxt3", "ctTxtL", "ctTxt5", "ctTxt6", "ctTxt7", "ctTxt8", "ctTxt9", "ctTxtC", "exTxt0", "exTxt00", "exTxt1", "exTxt2", "exTxt3", }; XtResource resources[] = { {"error", "error", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, error), XtRImmediate, (XtPointer) "error" }, {"selfTest", "selfTest", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, selfTest), XtRImmediate, (XtPointer) "self test" }, {"busy", "busy", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, busy), XtRImmediate, (XtPointer) "busy" }, {"printing", "printing", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, printing), XtRImmediate, (XtPointer) "printing" }, {"ok", "ok", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, ok), XtRImmediate, (XtPointer) "ok" }, {"cleaning", "cleaning", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, cleaning), XtRImmediate, (XtPointer) "cleaning" }, {"unknown", "unknown", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, unknown), XtRImmediate, (XtPointer) "unknown" }, {"addPrinterTxt", "*AddPrinterTxt", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, addPrinterTxt), XtRImmediate, (XtPointer)"Other Printer" }, {"save", "save", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, save), XtRImmediate, (XtPointer)NULL }, {"about", "about", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, about), XtRImmediate, (XtPointer)NULL }, {"cancel", "cancel", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, cancel), XtRImmediate, (XtPointer)NULL }, {"next", "next", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, next), XtRImmediate, (XtPointer)NULL }, {"previous", "previous", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, previous), XtRImmediate, (XtPointer)NULL }, {"ctTxt0", "ctTxt0", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, ctTxt0), XtRImmediate, (XtPointer)NULL }, {"ctTxtC0", "ctTxtC0", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, ctTxtC0), XtRImmediate, (XtPointer)NULL }, {"ctTxt1", "ctTxt1", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, ctTxt1), XtRImmediate, (XtPointer)NULL }, {"ctTxt2", "ctTxt2", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, ctTxt2), XtRImmediate, (XtPointer)NULL }, {"ctTxt3", "ctTxt3", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, ctTxt3), XtRImmediate, (XtPointer)NULL }, {"ctTxt1_1", "ctTxt1_1", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, ctTxt1_1), XtRImmediate, (XtPointer)NULL }, {"ctTxt1_2", "ctTxt1_2", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, ctTxt1_2), XtRImmediate, (XtPointer)NULL }, {"ctTxt1_3", "ctTxt1_3", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, ctTxt1_3), XtRImmediate, (XtPointer)NULL }, {"ctTxtP", "ctTxtP", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, ctTxtP), XtRImmediate, (XtPointer)NULL }, {"ctTxtL", "ctTxtL", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, ctTxtL), XtRImmediate, (XtPointer)NULL }, {"ctTxt4", "ctTxt4", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, ctTxt4), XtRImmediate, (XtPointer)NULL }, {"ctTxt5", "ctTxt5", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, ctTxt5), XtRImmediate, (XtPointer)NULL }, {"ctTxt6", "ctTxt6", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, ctTxt6), XtRImmediate, (XtPointer)NULL }, {"ctTxt7", "ctTxt7", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, ctTxt7), XtRImmediate, (XtPointer)NULL }, {"ctTxt8", "ctTxt8", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, ctTxt8), XtRImmediate, (XtPointer)NULL }, {"ctTxt9", "ctTxt9", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, ctTxt9), XtRImmediate, (XtPointer)NULL }, {"ctTxtC", "ctTxtC", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, ctTxtC), XtRImmediate, (XtPointer)NULL }, {"exTxt0", "exTxt0", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, exTxt0), XtRImmediate, (XtPointer)NULL }, {"exTxt00", "exTxt00", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, exTxt00), XtRImmediate, (XtPointer)NULL }, {"exTxt1", "exTxt1", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, exTxt1), XtRImmediate, (XtPointer)NULL }, {"exTxt2", "exTxt2", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, exTxt2), XtRImmediate, (XtPointer)NULL }, {"exTxt3", "exTxt3", XtRString, sizeof(String), XtOffsetOf(appResourceRec_t, exTxt3), XtRImmediate, (XtPointer)NULL }, }; extern char *fallbackResources[]; int decodePrinterType(unsigned char *buf, int len); int getPrinterInfo(); int decodeStatus(unsigned char *buf, int len); Widget createNoPrinterBox(char *message); Widget cfg1, cfg2, algn, stxt, port; char *browser; char *autodetect; char *miniHelp; int noAutoDetect; int waitForConfigWindow = 0; int setConfig(void); /*******************************************************************/ /* Function sigKill(int code) */ /* */ /* terminate gacefully if a sigkill occured */ /* */ /*******************************************************************/ static void sigKill(int code) { callPrg(TERMINATE,NULL, 0, 0, 0, NULL, NULL); exit(0); } /*******************************************************************/ /* Function setPrinterStateLabel(int state) */ /* */ /* set the printer state label accpording to state */ /* */ /*******************************************************************/ void setPrinterStateLabel(int state) { char *oldState = printerState; XmString xms; switch(state) { case 0: printerState = appResourceRec.error; break; case 1: printerState = appResourceRec.selfTest; break; case 2: printerState = appResourceRec.busy; break; case 3: printerState = appResourceRec.printing; break; case 4: printerState = appResourceRec.ok; break; case 7: printerState = appResourceRec.cleaning; break; default: printerState = appResourceRec.unknown; } if ( oldState != printerState ) { xms = XmStringCreateSimple(printerState); XtVaSetValues(state_LB, XmNlabelString, xms, NULL); XmStringFree(xms); } } /*******************************************************************/ /* Function handleTi() */ /* */ /* Timer function for reading the remaining ink quantity */ /* */ /*******************************************************************/ void handleTi(XtPointer closure, XtIntervalId *tidp) { char *retBuf; int ret = 0; /* call the get ink function */ if ( doCyclicScan ) { retBuf = NULL; if ( cmdCount >= inkTimer ) { ret = callPrg(GET_IQ, actConfig.dev, actConfig.prot, 0, 0, &retBuf, NULL); cmdCount = 0; } else { ret = callPrg(RELEASE, actConfig.dev, actConfig.prot, 0, 0, &retBuf, NULL); cmdCount++; } if ( retBuf != NULL && *retBuf != '\0' ) { decodeStatus((unsigned char*)retBuf, strlen(retBuf)); refreshMainWindow(); inkTimer=ASK_EVERY; } else { if ( ! XtIsManaged(topLevel) ) { tid = XtAppAddTimeOut(theApp, CYCLE_TIME, handleTi, (XtPointer)NULL); } if ( ret ) { inkTimer=1; cmdCount = 0; /* tell that we have errors */ chgIcon(0); setPrinterStateLabel(0); } } } else { tid = XtAppAddTimeOut(theApp, CYCLE_TIME, handleTi, (XtPointer)NULL); } } /*******************************************************************/ /* Function exit_CB(...) */ /* */ /* terminate the programm */ /* */ /*******************************************************************/ void exit_CB(Widget w, XtPointer clientData, XtPointer callData) { #ifndef MACOS if ( actConfig.dev && strncmp(actConfig.dev,"/var",4) == 0 && miconOK ) { popupIcon(x,y); if ( tid == 0 ) { doCyclicScan = 1; inkTimer=1; tid = XtAppAddTimeOut(theApp, CYCLE_TIME, handleTi, (XtPointer)NULL); } } else #endif { callPrg(TERMINATE,NULL, 0, 0, 0, NULL, NULL); #ifdef MACOS unlinkFiles(); #endif exit(0); } } /*******************************************************************/ /* Function deleteWindow_CB(...) */ /* */ /* The WM tell us that we have to terminate, save a few values */ /* */ /*******************************************************************/ void deleteWindow_CB(Widget w, XtPointer clientData, XtPointer callData) { int x, y; FILE *fp; char *home = getenv("HOME"); char *fileName; callPrg(TERMINATE,NULL, 0, 0, 0, NULL, NULL); if ( iconAskPos(&x, &y) ) { fileName= calloc(strlen(ConfigFile)+ strlen(home) + 50,1); if ( fileName ) { if ( ! configFileIdx ) { sprintf(fileName, "%s/.mtinksess", home); } else { sprintf(fileName, "%s/.mtinksess.%d", home, configFileIdx); } if ( fork() == 0 ) { seteuid(getuid()); if ( (fp = fopen(fileName,"w")) ) { fprintf(fp,"%d %d\n",x,y); fclose(fp); } exit(0); } else wait(&x); free(fileName); } } exit(0); } /*******************************************************************/ /* Function readSessFile(...) */ /* */ /* Read the value for the position of our icon window */ /* */ /*******************************************************************/ void rdSessFile(int *x, int *y) { FILE *fp; char *home = getenv("HOME"); char *fileName; char line[2048]; *x = *y = -1; fileName= calloc(strlen(ConfigFile)+ strlen(home) + 50,1); if ( fileName ) { if ( ! configFileIdx ) { sprintf(fileName, "%s/.mtinksess", home); } else { sprintf(fileName, "%s/.mtinksess.%d", home, configFileIdx); } if ( (fp = fopen(fileName,"r")) ) { if (fgets(line, sizeof(line), fp)) { sscanf(line, "%d %d",x, y); } fclose(fp); } free(fileName); } } /*******************************************************************/ /* Function about_CB(...) */ /* */ /* display the about window */ /* */ /*******************************************************************/ void about_CB(Widget w, XtPointer clientData, XtPointer callData) { wConfig_data_t data; data.printerName = actConfig.name; data.bt1 = NULL; data.bt2 = NULL; data.bt3 = appResourceRec.ok; data.message = appResourceRec.about; data.wait = &waitForConfigWindow; data.colTb = 0; /* show the about mask */ popupScrolledTextWindow(mainWindow, &data); XtManageChild(mainWindow); } /*******************************************************************/ /* Function check_CB(...) */ /* */ /* Call the check nozzle code */ /* */ /*******************************************************************/ void check_CB(Widget w, XtPointer clientData, XtPointer callData) { callPrg(CHECK_NOZZLE, actConfig.dev,actConfig.prot|STAY_RESIDENT, 0, actConfig.checkNeedReset, NULL, NULL); } /*******************************************************************/ /* Function clean_CB(...) */ /* */ /* Call the clean head code */ /* */ /*******************************************************************/ void clean_CB(Widget w, XtPointer clientData, XtPointer callData) { callPrg(CLEAN_NOZZLE, actConfig.dev,actConfig.prot|STAY_RESIDENT, 0, 0, NULL, NULL); } /*******************************************************************/ /* Function exchange_CB() */ /* */ /* Call the exchange cartridge code */ /* */ /*******************************************************************/ void exchange_CB(Widget w, XtPointer clientData, XtPointer callData) { wConfig_data_t data[10]; Widget actWindow = mainWindow; int idx = 0; int colHead = 0; char *command = NULL; doCyclicScan = 0; /* disable IQ cyclic scan */ data[0].printerName = actConfig.name; data[0].bt1 = NULL; data[0].bt2 = appResourceRec.cancel; data[0].bt3 = appResourceRec.next; if ( actConfig.cleanSeparate ) { data[0].message = appResourceRec.exTxt00; data[0].colTb = 1; } else { data[0].message = appResourceRec.exTxt0; data[0].colTb = 0; } data[0].wait = &waitForConfigWindow; data[1].printerName = actConfig.name; data[1].bt1 = NULL; data[1].bt2 = NULL; data[1].bt3 = NULL; data[1].message = appResourceRec.exTxt1; data[1].wait = NULL; data[1].colTb = 0; data[2].printerName = actConfig.name; data[2].bt1 = NULL; data[2].bt2 = NULL; data[2].bt3 = appResourceRec.next; data[2].message = appResourceRec.exTxt2; data[2].wait = &waitForConfigWindow; data[2].colTb = 0; data[3].printerName = actConfig.name; data[3].bt1 = NULL; data[3].bt2 = NULL; data[3].bt3 = NULL; data[3].message = appResourceRec.exTxt3; data[3].wait = NULL; data[3].colTb = 0; data[4].bt1 = NULL; data[4].bt2 = NULL; data[4].bt3 = NULL; data[4].message = NULL; data[4].wait = NULL; data[4].colTb = 0; for(;;) { command = NULL; switch (idx) { case 0: popupScrolledTextWindow(actWindow, &data[idx]); colHead = data[0].intVal; if ( *data[idx].wait == 1 ) { if ( actConfig.cleanSeparate ) callPrg(colHead ? EXCHANGE_C : EXCHANGE_B, actConfig.dev, actConfig.prot, 0, 0, &command, NULL); else callPrg( EXCHANGE_ALL, actConfig.dev, actConfig.prot, 0, 0, &command, NULL); } idx = -1; if ( command ) { if ( command[0] == 'x' && command[1] == 'i' ) { if ( command[6] == 'O' && command[7] == 'K' ) { idx = 0; } } } if ( idx == -1 ) { XtUnmanageChild(actWindow); XtManageChild(mainWindow); doCyclicScan = 1; return; } break; case 1: popupScrolledTextWindow(actWindow, &data[idx]); usleep(20); callPrg(EXCHANGE_NEXT, actConfig.dev, actConfig.prot, 1, 0,(char**)&command, NULL); data[idx].wait = &waitForConfigWindow; *data[idx].wait = 1; break; case 2: /* tell exchange cartridge */ popupScrolledTextWindow(actWindow, &data[idx]); break; case 3: popupScrolledTextWindow(actWindow, &data[idx]); callPrg(EXCHANGE_NEXT, actConfig.dev, actConfig.prot, 3, 0, (char**)&command, NULL); data[idx].wait = &waitForConfigWindow; *data[idx].wait = 1; break; case 4: callPrg(EXCHANGE_NEXT, actConfig.dev, actConfig.prot, 4, 0, NULL, NULL); XtUnmanageChild(actWindow); XtManageChild(mainWindow); callPrg(RELEASE, actConfig.dev, 0, 0, 0, NULL, NULL); doCyclicScan = 1; return; break; case -1: XtUnmanageChild(actWindow); XtManageChild(mainWindow); callPrg(RELEASE, actConfig.dev, 0, 0, 0, NULL, NULL); return; } actWindow = data[idx].actWindow; idx += *data[idx].wait; } doCyclicScan = 1; } /*******************************************************************/ /* Function reset_CB() */ /* */ /* Call the reset printer code */ /* */ /*******************************************************************/ void reset_CB(Widget w, XtPointer clientData, XtPointer callData) { callPrg(RESET_PRT, actConfig.dev, actConfig.reset, 0, 0, NULL, NULL); /* avoid that anythings called before the printer was really reseted */ cmdCount = - 10; } /*******************************************************************/ /* Function align_CB() */ /* */ /* Call the align head code */ /* */ /*******************************************************************/ void align_CB(Widget w, XtPointer clientData, XtPointer callData) { wConfig_data_t data[10]; Widget actWindow = mainWindow; int idx = 0; int colHead = 0; int command = ALIGN_HEAD; /* make gcc happy */ int passes = 0; int choices = 0; int val = 0; char *function = colHead ? NULL : actConfig.alignFunction; doCyclicScan = 0; data[0].printerName = actConfig.name; data[0].bt1 = NULL; data[0].bt2 = appResourceRec.cancel; data[0].bt3 = appResourceRec.next; if ( actConfig.color_passes ) { data[0].message = appResourceRec.ctTxtC0; data[0].colTb = 1; } else { data[0].message = appResourceRec.ctTxt0; data[0].colTb = 0; } data[0].wait = &waitForConfigWindow; data[0].choices = actConfig.choices; data[1].printerName = actConfig.name; data[1].bt1 = NULL; data[1].bt2 = NULL; data[1].bt3 = appResourceRec.next; data[1].message = appResourceRec.ctTxt1; data[1].wait = &waitForConfigWindow; data[1].colTb = 0; data[1].choices = actConfig.choices; data[2].printerName = actConfig.name; data[2].bt1 = NULL; data[2].bt2 = NULL; data[2].bt3 = appResourceRec.next; data[2].message = appResourceRec.ctTxt1; data[2].wait = &waitForConfigWindow; data[2].colTb = 0; data[2].choices = actConfig.choices; data[3].printerName = actConfig.name; data[3].bt1 = NULL; data[3].bt2 = NULL; data[3].bt3 = appResourceRec.next; data[3].message = appResourceRec.ctTxt1; data[3].wait = &waitForConfigWindow; data[3].colTb = 0; data[3].choices = actConfig.choices; data[4].printerName = actConfig.name; data[4].bt1 = NULL; data[4].bt2 = NULL; data[4].bt3 = appResourceRec.next; data[4].message = appResourceRec.ctTxt4; data[4].wait = &waitForConfigWindow; data[4].colTb = 0; data[4].choices = actConfig.choices; data[5].printerName = actConfig.name; data[5].bt1 = NULL; data[5].bt2 = appResourceRec.cancel; data[5].bt3 = appResourceRec.save; data[5].message = appResourceRec.ctTxt5; data[5].wait = &waitForConfigWindow; data[5].colTb = 0; data[5].choices = actConfig.choices; data[6].bt1 = NULL; data[6].bt2 = NULL; data[6].bt3 = NULL; data[6].message = NULL; data[6].wait = NULL; data[6].colTb = 0; data[6].choices = actConfig.choices; /* wait for printer */ data[7].printerName = actConfig.name; data[7].bt1 = NULL; data[7].bt2 = NULL; data[7].bt3 = appResourceRec.next; data[7].message = appResourceRec.ctTxtP; data[7].wait = &waitForConfigWindow; data[7].colTb = 0; data[7].choices = actConfig.choices; /* enter all values */ data[8].printerName = actConfig.name; data[8].bt1 = NULL; data[8].bt2 = NULL; data[8].bt3 = appResourceRec.next; data[8].message = appResourceRec.ctTxtP; data[8].wait = &waitForConfigWindow; data[8].colTb = 0; data[8].choices = actConfig.choices; for(;;) { switch (idx) { case 0: /* tell insert sheet and send DT command */ popupScrolledTextWindow(actWindow, &data[idx]); colHead = data[0].intVal; if ( *data[idx].wait == 1 ) { command = colHead ? ALIGN_HEAD_C : ALIGN_HEAD; passes = colHead ? actConfig.color_passes - 1 : actConfig.passes; choices = colHead ? actConfig.color_choices : actConfig.choices; data[1].choices = choices; data[2].choices = choices; data[3].choices = choices; data[4].choices = choices; data[5].choices = choices; data[7].choices = choices; if ( colHead ) { data[1].message = appResourceRec.ctTxtC; data[2].message = appResourceRec.ctTxtC; data[3].message = appResourceRec.ctTxtC; } else if ( passes == 1 ) { data[1].message = appResourceRec.ctTxt1; } if ( actConfig.passes > 0 ) callPrg(command, actConfig.dev, actConfig.align, 1, 0, NULL, function); } break; case 1: case 2: case 3: /* send DA cmd and tell choose pattern, send DT command */ if ( actConfig.passes > 0 ) { popupScrolledTextWindow(actWindow, &data[7]); popupAlignNextWindow(actWindow, &data[idx]); /* send the DA */ callPrg(command, actConfig.dev, actConfig.align, idx, data[idx].intVal+1, NULL, function); /* and possibly the DT + FF cmd */ if ( idx != passes ) { callPrg(command, actConfig.dev, actConfig.align, idx+1, 0, NULL, function); } if ( idx == passes ) { *data[idx].wait = 4 - idx; } } else { switch ( idx ) { case 1: callPrg(command, actConfig.dev, actConfig.align, actConfig.passes, 0, NULL, function); popupScrolledTextWindow(actWindow, &data[7]); data[idx].message = appResourceRec.ctTxt1_1; popupAlignNextWindow(actWindow, &data[idx]); val = data[idx].intVal+1; break; case 2: data[idx].message = appResourceRec.ctTxt1_2; popupAlignNextWindow(actWindow, &data[idx]); val |= (data[idx].intVal+1)<<8; break; case 3: data[idx].message = appResourceRec.ctTxt1_3; popupAlignNextWindow(actWindow, &data[idx]); val |= (data[idx].intVal+1)<<16; callPrg(command, actConfig.dev, actConfig.align, actConfig.passes, val, NULL, function); break; } if ( idx == -passes ) { *data[idx].wait = 5 - idx; } } break; case 4: /* send DA cmd from last pass */ callPrg(command, actConfig.dev, actConfig.align, passes, -1, NULL, function); idx++; case 5: /* print all pattern and ask for save */ popupScrolledTextWindow(actWindow, &data[idx]); /* send DT for all pattern and FF */ if ( *data[idx].wait == 1 ) { callPrg( command,actConfig.dev, actConfig.align, -1 ,0 , NULL, function); } *data[idx].wait = 1; break; case 6: XtUnmanageChild(actWindow); XtManageChild(mainWindow); callPrg( RELEASE,actConfig.dev, 0, 0 ,0 , NULL, NULL); return; break; case -1: XtUnmanageChild(actWindow); XtManageChild(mainWindow); callPrg( RELEASE,actConfig.dev, 0, 0 ,0 , NULL, NULL); doCyclicScan = 1; return; } actWindow = data[idx].actWindow; idx += *data[idx].wait; } doCyclicScan = 1; } /*******************************************************************/ /* Function parseArgs(int argc, char **argv) */ /* */ /* check for call parameters */ /* */ /*******************************************************************/ void parseArgs(int argc, char **argv) { while ( argc ) { if ( strcmp("-noAutoDetect", argv[0]) == 0 ) { noAutoDetect = 1; } else if ( strncmp("-h", argv[0], 2) == 0 || strncmp("--h", argv[0], 3) == 0 ) { printf("Syntax: %s [%s] [-config #]\n",prgName,"-noAutoDetect"); exit(0); } else if ( strncmp("-v", argv[0], 2) == 0 || strncmp("--v", argv[0], 3) == 0 ) { printf("%-8s: %s\n",prgName,VERSION); printf("compiled: %s %s\n",__DATE__,__TIME__); printf("Author : Jean-Jacques Sarton\n"); printf("URL : http://xwtools.automatix.de\n"); exit(0); } else if ( strncmp("-c",argv[0], 2) == 0 || strncmp("--c", argv[0], 3) == 0 ) { argc--; argv++; if ( argc ) configFileIdx = atoi(argv[0]); else { printf("Syntax: %s [%s] [-config #]\n",prgName,"-noAutoDetect"); exit(1); } } else if ( strncmp("-L",argv[0], 2) == 0 ) { debugD4 = 1; } else if ( strncmp("-f",argv[0], 2) == 0 ) { inFromFile = 1; /* for devel purpose */ argc--; argv++; if ( argc ) testFile = argv[0]; /* intead of /dev/... */ else { printf("Syntax: %s -f \n",prgName); exit(1); } } argc--; argv++; } } /*******************************************************************/ /* Function SetSensitive(int flag) */ /* */ /* Set the 'actions button' sensitive or not sensitive */ /* */ /*******************************************************************/ void SetSensitive(int flag) { XtSetSensitive(reset_PB, flag); XtSetSensitive(cartridge_PB, flag); XtSetSensitive(align_PB, flag); XtSetSensitive(clean_PB, flag); XtSetSensitive(check_PB, flag); if ( ! actConfig.reset ) XtSetSensitive(reset_PB, False); if ( ! actConfig.exchange ) XtSetSensitive(cartridge_PB, False); if ( ! actConfig.passes ) XtSetSensitive(align_PB, False); } /*******************************************************************/ /* Function refreshMainWindow() */ /* */ /* Set the scrollbar and the precent widget to the proper value */ /* */ /*******************************************************************/ void refreshMainWindow() { char buf[200]; XmString xms; XtVaSetValues(scaleB, XmNsliderSize, pc1?pc1:1, NULL); sprintf(buf,"%3d %%",pc1); xms = XmStringCreateSimple(buf); XtVaSetValues(scaleBLb,XmNlabelString,xms,NULL); XmStringFree(xms); if ( actConfig.colors > 1 ) { XtManageChild(XtParent(scaleC)); XtManageChild(scaleCLb); XtManageChild(XtParent(scaleM)); XtManageChild(scaleMLb); XtManageChild(XtParent(scaleY)); XtManageChild(scaleYLb); XtVaSetValues(scaleC, XmNsliderSize, pc2?pc2:1, NULL); sprintf(buf,"%3d %%",pc2); xms = XmStringCreateSimple(buf); XtVaSetValues(scaleCLb,XmNlabelString,xms,NULL); XmStringFree(xms); XtVaSetValues(scaleM, XmNsliderSize, pc3?pc3:1, NULL); sprintf(buf,"%3d %%",pc3); xms = XmStringCreateSimple(buf); XtVaSetValues(scaleMLb,XmNlabelString,xms,NULL); XmStringFree(xms); XtVaSetValues(scaleY, XmNsliderSize, pc4?pc4:1, NULL); sprintf(buf,"%3d %%",pc4); xms = XmStringCreateSimple(buf); XtVaSetValues(scaleYLb,XmNlabelString,xms,NULL); XmStringFree(xms); } else { XtUnmanageChild(XtParent(scaleC)); XtUnmanageChild(scaleCLb); XtUnmanageChild(XtParent(scaleM)); XtUnmanageChild(scaleMLb); XtUnmanageChild(XtParent(scaleY)); XtUnmanageChild(scaleYLb); } if ( actConfig.colors > 4 ) { /* 5.and 6. color, normaly light Cyan/Magenta */ XtManageChild(XtParent(scaleLc)); XtManageChild(scaleLcLb); XtManageChild(XtParent(scaleLm)); XtManageChild(scaleLmLb); XtVaSetValues(scaleLc, XmNsliderSize, pc5?pc5:1, NULL); sprintf(buf,"%3d %%",pc5); xms = XmStringCreateSimple(buf); XtVaSetValues(scaleLcLb,XmNlabelString,xms,NULL); XmStringFree(xms); XtVaSetValues(scaleLm, XmNsliderSize, pc6?pc6:1, NULL); sprintf(buf,"%3d %%",pc6); xms = XmStringCreateSimple(buf); XtVaSetValues(scaleLmLb,XmNlabelString,xms,NULL); XmStringFree(xms); if ( actConfig.colors > 6 ) { /* more colors, this will depend on model */ /* 7. color */ XtManageChild(XtParent(scaleLb)); XtManageChild(scaleLbLb); XtVaSetValues(scaleLb, XmNsliderSize, pc7?pc7:1, NULL); sprintf(buf,"%3d %%",pc7); xms = XmStringCreateSimple(buf); XtVaSetValues(scaleLbLb,XmNlabelString,xms,NULL); XmStringFree(xms); if ( actConfig.colors > 7 ) { /* 8. color */ XtManageChild(XtParent(scalePh)); XtManageChild(scalePhLb); XtVaSetValues(scalePh, XmNsliderSize, pc8?pc8:1, NULL); sprintf(buf,"%3d %%",pc8); xms = XmStringCreateSimple(buf); XtVaSetValues(scalePhLb,XmNlabelString,xms,NULL); XmStringFree(xms); } else { XtUnmanageChild(XtParent(scalePh)); XtUnmanageChild(scalePhLb); /* seven color, model ? */ /* to be set later */ } } else if ( actConfig.colors == 6 ) { setProgressBarColor(MODEL_KCMycm); XtUnmanageChild(XtParent(scaleLb)); XtUnmanageChild(scaleLbLb); XtUnmanageChild(XtParent(scalePh)); XtUnmanageChild(scalePhLb); } else { XtUnmanageChild(XtParent(scalePh)); XtUnmanageChild(scalePhLb); } } else { XtUnmanageChild(XtParent(scaleLc)); XtUnmanageChild(scaleLcLb); XtUnmanageChild(XtParent(scaleLm)); XtUnmanageChild(scaleLmLb); XtUnmanageChild(XtParent(scaleLb)); XtUnmanageChild(scaleLbLb); XtUnmanageChild(XtParent(scalePh)); XtUnmanageChild(scalePhLb); } /* display the state of our printer */ if ( printerState ) { xms = XmStringCreateSimple(printerState); XtVaSetValues(state_LB, XmNlabelString,xms,NULL); XmStringFree(xms); } } /*******************************************************************/ /* Function main() */ /* */ /* The begin of the world */ /* */ /*******************************************************************/ int main(int argc, char **argv, char **env) { ArgList init_args = (ArgList)NULL; Cardinal num_init_args = (Cardinal)0; Dimension w1 = 0, w2 = 0, h1 = 0, h2 = 0; Window win; XmString xms; char *s; int state; char *lang; char printerFound = 0; char tmpBuf[20]; Widget mainWid; int prot = 0; int i; char *deviceFile = NULL; /* make gcc happy */ char *retBuf = NULL; wConfig_data_t data; int configured = 0; char *errorMessage = NULL; Atom myAtom; char atomName[1024]; Atom wm_delete_window; #ifdef MACOS char prtFile[512]; #endif data.actWindow = NULL; /* check the environment first (avoid possibly vulnerability */ /* problems due to errors within the used libraries */ if ( checkEnv(env) == 0 ) { fprintf(stderr,"Sorry corrupted environment\n"); exit(1); } /* preset for building of windows */ actConfig.colors = 8; actConfig.state = 1; actConfig.reset = 1; actConfig.exchange = 1; strcpy(tmpBuf,"En"); lang = getenv("LANG"); if ( lang == NULL ) { lang = getenv("LC_MESSAGES"); if ( lang == NULL ) { lang = getenv("LC_ALL"); } } if ( lang ) { if ( strcmp("german", lang) == 0 ) { strcpy(tmpBuf,"De"); } else { tmpBuf[0] = toupper(lang[0]); tmpBuf[1] = lang[1]; tmpBuf[3] = '\0'; } } /* for help files */ strcpy(guiLanguage, tmpBuf); xmTooltipSetLang(guiLanguage); prgName = argv[0]; if ( (s = strrchr(prgName, '/')) != NULL ) { prgName = s + 1; } parseArgs(argc,argv); /* make the topLevel */ mainResource = (char*)calloc(strlen(NAME)+3,1); strcpy(mainResource,NAME); topLevel = XtAppInitialize(&theApp, mainResource, NULL, 0, &argc, argv, fallbackResources, init_args, num_init_args); if ( topLevel == (Widget) NULL ) { fprintf(stderr,"%s: can't connect to X11\n", prgName); exit(1); } XtVaSetValues(topLevel, XmNmappedWhenManaged, False, NULL); /* disable drag and drop */ displayW = XmGetXmDisplay(XtDisplay(topLevel)); XtVaSetValues(displayW, XmNdragInitiatorProtocolStyle, XmDRAG_NONE, NULL); /* put DISPLAY to the environment */ s = DisplayString(XtDisplay(topLevel)); if ( s ) { displayStr = (char*)calloc(strlen(s)+10,1); sprintf(displayStr,"DISPLAY=%s",s); putenv(displayStr); } createLayout(tmpBuf); cfg2 = createConfigureForm(topLevel, &waitForConfigWindow ); cfg1 = createConfigurePrinter(mainForm, &waitForConfigWindow ); algn = createAlignButtons(topLevel, &waitForConfigWindow ); stxt = createScrTxt_MW(topLevel, &waitForConfigWindow ); XtUnmanageChild(cfg2); XtUnmanageChild(cfg1); XtUnmanageChild(algn); XtUnmanageChild(stxt); XtRealizeWidget(topLevel); xmAddtooltipGlobal(topLevel); rdSessFile(&x,&y); miconOK = createIconLayout(topLevel, theApp, mainResource, guiLanguage, usePopup); /* pass the main window and not the toplevel, if we don't made */ /* this we will alltime get the default (english texts */ XtGetApplicationResources(mainForm, (XtPointer)&appResourceRec, resources, XtNumber(resources), NULL, 0); if ( configFileIdx ) { sprintf(atomName,"MTINK_ATOM_%d",configFileIdx ); } else { strcpy(atomName,"MTINK_ATOM"); } myAtom = XInternAtom(XtDisplay(topLevel), atomName, False); if ( (win = XGetSelectionOwner(XtDisplay(topLevel), myAtom)) == None ) { XSetSelectionOwner(XtDisplay(topLevel),myAtom, XtWindow(topLevel), CurrentTime); } else { /* one instance is present, pop up this instance and */ /* terminate */ XMapRaised(XtDisplay(topLevel), win); XFlush(XtDisplay(topLevel)); exit(2); } /* add protocol for closing of app */ wm_delete_window = XInternAtom(XtDisplay(topLevel), "WM_DELETE_WINDOW", False); XmAddWMProtocolCallback(topLevel, wm_delete_window, deleteWindow_CB, NULL); /* put the main window on the middle of the screen */ h2 = DisplayHeight(XtDisplay(topLevel),0); w2 = DisplayWidth(XtDisplay(topLevel),0); XtVaGetValues(topLevel, XmNwidth, &w1, XmNheight, &h1, NULL); XMoveWindow(XtDisplay(topLevel), XtWindow(topLevel), (w2-w1)/2,(h2-h1)/2); XtVaSetValues(topLevel, XmNminHeight, h1, XmNmaxHeight, h1, XmNminWidth, w1, XmNmaxWidth, w1, NULL); XtMapWidget(topLevel); XtUnmanageChild(XtParent(scalePh)); XtUnmanageChild(scalePhLb); signal(SIGINT, sigKill); signal(SIGQUIT, sigKill); signal(SIGSEGV, sigKill); /* read the printer description file */ readPrinterData(); /* read the configuration file */ readRc(configFileIdx); /* set the behaviour accordingly and complete */ if ( noAutoDetect ) { if ( autodetect ) free(autodetect); autodetect = (char*)strdup("no"); } /* for the case the given printer is not found into our knowledge table */ if ( autodetect && *autodetect == 'n' ) { /* assume printer is not able to return identification */ actConfig.id = False; } else { /* assume printer is able to return identification */ actConfig.id = True; } XmToggleButtonSetState(autodetect_TB, actConfig.id, False); if ( miniHelp && *miniHelp == 'n' ) { XmToggleButtonSetState(tooltip_TB, False, False); xmEnableTooltip(False); } else { XmToggleButtonSetState(tooltip_TB, True, False); xmEnableTooltip(True); } if ( setConfig() ) { /* the configuration contain a printer and dev entry */ data.ptrVal = actConfig.dev; printerName = actConfig.name; deviceFile = actConfig.dev; if ( inFromFile ) { deviceFile = actConfig.dev = testFile; } retBuf = NULL; #ifndef MACOS /* check for permission on the device */ if ( fileAccess(actConfig.dev, R_OK|W_OK) == -1 ) { errorMessage = "noAccess"; goto errorLabel; } #endif #ifdef MACOS actConfig.id = True; #else if ( autodetect && *autodetect == 'n' ) { actConfig.id = False; } #endif if ( actConfig.id ) { #ifdef MACOS if ( (state = usbInit()) > 0 ) { /* printers detected */ if ( createFiles() == 0 ) { if ( state > 1 ) { /* choose dev number according to given dev */ int i; if ( (s=strstr(deviceFile, USB_PRT_NAME_PREFIX)) ) { s += strlen(USB_PRT_NAME_PREFIX); i = atoi(s); } else for(i=0;i < state; i++) { if ( strcmp(getPrinterName(i),printerName) == 0 ) { break; } } state = i+1; } else { /* choose dev number according to given dev */ int i; if ( (s=strstr(deviceFile, USB_PRT_NAME_PREFIX)) ) { s += strlen(USB_PRT_NAME_PREFIX); state = atoi(s)+1; s = strchr(s,':'); if (*s) s++; } } /* build device file name */ if ((s = getPrinterName(state-1))) { snprintf(prtFile, sizeof(prtFile),USB_PRT_NAME_PREFIX"%02d:%s",state-1,s); printerName = strdup(s); deviceFile = strdup(prtFile); printerFound = 2; } } else { state = -1; } } else { state = -1; } if ( state == -1 ) { errorMessage = "noPrinter"; goto errorLabel; } #else state = callPrg(TEST_DEV, data.ptrVal, NO_PROT, 0, 0, &retBuf, NULL ); if ( state == -1 ) { printerFound = 0; } else if ( state == 0 ) { /* may be OK, ID is not always returned (C40,C62) */ printerFound = 1; } else if ( state == 1 ) { /* may be OK but no answer from device */ printerFound = 2; } else if ( state == 2 ) { /* may be OK and a D4 device */ printerFound = 2; } #endif } else { /* for unknown printers found via previous autodetect */ printerFound = 1; } configured = 1; } else /* no configuration file printer found = 0 */ { configured = 0; } #ifdef MACOS if ( ! configured ) { if ( (state = usbInit()) > 0 ) { /* printers detected */ if ( createFiles() == 0 ) { if ( state > 1 ) { /* choose printer model */ } /* build device file name */ else if ((s = getPrinterName(state-1))) { snprintf(prtFile, sizeof(prtFile),USB_PRT_NAME_PREFIX"%02d:%s",state-1,s); printerName = strdup(s); deviceFile = strdup(prtFile); printerFound = 0; } } else { state = -1; } } else { state = -1; } configured = 1; if ( state == -1 ) { errorMessage = "noPrinter"; goto errorLabel; } } #endif /* not configured or open of device ... failed */ if ( ! printerFound ) { /* in this case we have to ask for device file */ data.ptrVal = NULL; data.printerName = actConfig.name; data.wait = &waitForConfigWindow; data.wType = QUERY_DEVICE; data.bt1 = data.bt2 = NULL; data.bt3 = appResourceRec.ok; data.message = NULL; popupCfg1(mainWindow, &data, &actConfig); if ( *data.wait == -1 ) { errorMessage = "noAccess"; goto errorLabel; } if ( actConfig.dev ) free(actConfig.dev); deviceFile = data.ptrVal; actConfig.dev = data.ptrVal; XtUnmanageChild(data.actWindow); XtManageChild(mainWindow); } /* try to detect printer, data.ptrVal preset from setConfig */ /* OK or ask for device */ if ( data.ptrVal != NULL ) { /* ask for the printer, not configured */ if ( ! configured && ! printerFound ) { deviceFile = data.ptrVal; data.printerName = actConfig.name; data.ptrVal = NULL; data.wait = &waitForConfigWindow; data.wType = QUERY_PRINTER; data.bt1 = data.bt2 = NULL; data.bt3 = NULL; data.message = NULL; popupCfg1(mainWindow, &data, &actConfig); XtUnmanageChild(data.actWindow); XtManageChild(mainWindow); printerName = ((configData_t*)data.ptrVal)->name; actConfig.name = printerName; actConfig.id = ((configData_t*)data.ptrVal)->id; actConfig.prot = ((configData_t*)data.ptrVal)->prot; if ( autodetect && *autodetect == 'n' ) { actConfig.id = False; } printerFound = 1; } /* check if the printer is available and the right printer */ if ( printerFound == 0 ) { retBuf = NULL; if ( callPrg(TEST_DEV, deviceFile, NO_PROT, 0, 0, &retBuf, NULL ) == -1 ) { /* open or write not OK -> critical error */ printerFound = 0; XtUnmanageChild(data.actWindow); XtManageChild(mainWindow); goto errorLabel; } } /* TBD don't do this if no autodetection */ if ( printerFound == 1 && actConfig.id ) { /* first try with old command */ retBuf = NULL; callPrg(GET_ID, deviceFile, PROT_OLD, 0, 0, &retBuf, NULL ); if ( retBuf != NULL && *retBuf != '\0' ) { printerFound = decodePrinterType((unsigned char*)retBuf, strlen(retBuf)); prot = NO_PROT; } else if ( retBuf != NULL && *retBuf == '\0' ) { /* some printer (C40, C62 require the D4 ID command */ printerFound = 2; } } if ( (printerFound == 0 || printerFound == 2) && actConfig.id ) { retBuf = NULL; callPrg(GET_ID, deviceFile, PROT_D4, 0, 0, &retBuf, NULL ); if ( retBuf != NULL ) { printerFound = decodePrinterType((unsigned char*)retBuf, strlen(retBuf)); prot = PROT_D4; } } if ( printerName == NULL ) { if ( !printerFound ) { /* detection failed, ask the user */ data.wait = &waitForConfigWindow; data.wType = QUERY_PRINTER; data.bt1 = data.bt2 = NULL; data.bt2 = appResourceRec.ok; data.message = "Select Printer"; data.ptrVal = NULL; XtMapWidget(topLevel); popupCfg1(mainWindow, &data, &actConfig); } if ( data.ptrVal ) { memcpy(&actConfig,(configData_t*)(data.ptrVal), sizeof(configData_t)); actConfig.dev = deviceFile; } else { } } else { actConfig.name = printerName; } } else { actConfig.name = printerName; } /* search and load configuration data */ if ( actConfig.name ) { for ( i = 0; i < defaultConfigDataSize; i++ ) { if ( strcasecmp(defaultConfigData[i].name,actConfig.name) == 0 ) { memcpy(&actConfig,&defaultConfigData[i], sizeof(configData_t)); actConfig.dev = deviceFile; break; } } /* unknown printer, assume that D4 mode, disable aligment */ if ( i == defaultConfigDataSize ) { i--; memcpy(&actConfig,&defaultConfigData[i], sizeof(configData_t)); actConfig.dev = deviceFile; actConfig.name = printerName; XtSetSensitive(align_PB, False); } } if ( actConfig.name ) { /* read status and ink quantity */ retBuf = NULL; /* For test with a log file from ttink -d /dev/usb/lp0 -L */ if ( inFromFile ) { callPrg(GET_ID, actConfig.dev, actConfig.prot, 0, 0, &retBuf, NULL); } i = callPrg(GET_IQ, actConfig.dev, actConfig.prot, 0, 0, &retBuf, NULL); cmdCount = 0; /* may be that we have not found a device */ if ( i == -1 ) { printerFound = 0; } if ( retBuf != NULL ) { if ( *retBuf == '\0' ) { printerFound = 0; } else { if ( decodeStatus((unsigned char*)retBuf, strlen(retBuf)) ) { printerFound = 1; } else { printerFound = 0; } } } else { if ( !actConfig.id ) { printerFound = 0; } } if ( data.actWindow ) { XtUnmanageChild(data.actWindow); } XtManageChild(mainWindow); } /* save these data */ if ( actConfig.name ) { saveConfig(configFileIdx); } XtManageChild(mainWindow); XtMapWidget(topLevel); /* put the value we have read to the scale widgets */ refreshMainWindow(); /* advertise that the printer was not reached */ errorLabel: /* sorry */ if ( actConfig.name ) { if ( actConfig.name[0] != '?' ) { xms = XmStringCreateSimple(actConfig.name); XtVaSetValues(title_LB, XmNlabelString, xms, NULL); XmStringFree(xms); iconAddTooltip(actConfig.name); } } doCyclicScan = 1; #ifndef MACOS if ( actConfig.dev && strncmp(actConfig.dev,"/var",4) == 0 ) { usePopup = 1; } #endif if ( printerFound == 0 ) { if ( actConfig.dev && strncmp(actConfig.dev,"/var",4) == 0 ) { tid = XtAppAddTimeOut(theApp, CYCLE_TIME, handleTi, (XtPointer)NULL); } else { doCyclicScan = 0; } mainWid = createNoPrinterBox(errorMessage); XtManageChild(mainWid); XtVaGetValues(XtParent(mainWid), XmNwidth, &w1, XmNheight, &h1, NULL); XMoveWindow(XtDisplay(topLevel), XtWindow(XtParent(mainWid)), (w2-w1)/2,(h2-h1)/2); XtSetSensitive(reset_PB ,False); XtSetSensitive(cartridge_PB ,False); XtSetSensitive(align_PB ,False); XtSetSensitive(clean_PB ,False); XtSetSensitive(check_PB ,False); if ( actConfig.dev && strncmp(actConfig.dev,"/var",4) ) { usePopup = False; } } if ( ! actConfig.reset ) XtSetSensitive(reset_PB, False); if ( ! actConfig.exchange ) XtSetSensitive(cartridge_PB, False); if ( ! actConfig.passes ) XtSetSensitive(align_PB, False); /* set the focus to the exit button */ XmProcessTraversal(ok_PB, XmTRAVERSE_CURRENT); /* main loop */ XtAppMainLoop(theApp); /* never reached */ exit(0); return 0; } /****************************************************************** * Function createLayout() * * Build the main window * * The color models may be as follow * KCMY 4 colors * KCMYcm 6 colors * CMYcmK (matte K) 6 colors * KCMYcmy (y = dark yellow!) 7 colors * KCMYcmk 7 colors * CMYcmKk (matte and light K) 7 colors * KCMYrb (red + blue) 6 colors * KCMYrbx (red + blue + gloss) 7 colors * KCMyRBkX (matte + red + blue + gloss) 8 colors * * The progress bar clolors shall be * KCMy KCMycm KCMycmY KCMycmk KCMyRB KCMyRBx KCMyRBkX KCMycmGg * 1 Black Black Black Black Black Black Black Black * 2 Cyan Cyan Cyan Cyan Cyan Cyan Cyan Cyan * 3 Magenta Magenta Magenta Magenta Magenta Magenta Magenta Magenta * 4 Yellow Yellow Yellow Yellow Yellow Yellow Yellow Yellow * 5 - cyan cyan cyan red red red cyan * 6 - magenta magenta magenta blue blue blue magenta * 7 - - dark Y dark grey X Photo Black Grey * 8 X grey * ******************************************************************/ Widget createLayout(char *language) { Widget wid; Widget separator; XmString xms = NULL; mainForm = XtVaCreateWidget(language, xmFormWidgetClass, topLevel, XmNmarginHeight, 0, XmNmarginWidth, 0, XmNresizePolicy, XmRESIZE_GROW, XmNresizable, True, NULL); XtManageChild(mainForm); mainWindow = XtVaCreateWidget("mainWindow", xmFormWidgetClass, mainForm , XmNmarginHeight, 0, XmNmarginWidth, 0, XmNresizePolicy, XmRESIZE_GROW, XmNresizable, True, NULL); if (mainWindow == NULL) { return False; } XtManageChild(mainWindow); if ( printerName && printerName[0] != '?' ) { xms = XmStringCreateSimple(printerName); } else if ( actConfig.name && actConfig.name[0] != '?' ) { xms = XmStringCreateSimple(actConfig.name); } if ( xms ) { title_LB = XtVaCreateWidget("title_LB", xmLabelWidgetClass, mainWindow, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 5, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 5, XmNtopAttachment, XmATTACH_FORM, XmNtopOffset, 10, XmNalignment, XmALIGNMENT_CENTER, XmNlabelString, xms, NULL); XmStringFree(xms); } else { title_LB = XtVaCreateWidget("title_LB", xmLabelWidgetClass, mainWindow, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 5, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 5, XmNtopAttachment, XmATTACH_FORM, XmNtopOffset, 10, XmNalignment, XmALIGNMENT_CENTER, NULL); } XtManageChild(title_LB); legend_LB = XtVaCreateWidget("legend_LB", xmLabelWidgetClass, mainWindow, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 5, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 5, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 5, XmNalignment, XmALIGNMENT_CENTER, XmNtopWidget, title_LB, NULL); XtManageChild(legend_LB); scaleB = CreateScale(mainWindow,"scaleB",legend_LB); wid = XtParent(scaleB); xms = XmStringCreateSimple("100 %"); scaleBLb = XtVaCreateWidget("scaleBLb", xmLabelWidgetClass, mainWindow, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 1, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, legend_LB, XmNtopOffset, 10, XmNlabelString, xms, XmNrecomputeSize, False, XmNalignment, XmALIGNMENT_END, NULL); XtManageChild(scaleBLb); XtVaSetValues(XtParent(scaleB), XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, scaleBLb, XmNrightOffset, 0, NULL); scaleC = CreateScale(mainWindow,"scaleC",XtParent(scaleB)); scaleCLb = XtVaCreateWidget("scaleCLb", xmLabelWidgetClass, mainWindow, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 1, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, XtParent(scaleB), XmNtopOffset, 10, XmNlabelString, xms, XmNrecomputeSize, False, XmNalignment, XmALIGNMENT_END, NULL); XtManageChild(scaleCLb); XtVaSetValues(XtParent(scaleC), XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, scaleCLb, XmNrightOffset, 0, NULL); scaleM = CreateScale(mainWindow,"scaleM",XtParent(scaleC)); scaleMLb = XtVaCreateWidget("scaleMLb", xmLabelWidgetClass, mainWindow, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 1, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, XtParent(scaleC), XmNtopOffset, 10, XmNlabelString, xms, XmNrecomputeSize, False, XmNalignment, XmALIGNMENT_END, NULL); XtManageChild(scaleMLb); XtVaSetValues(XtParent(scaleM), XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, scaleMLb, XmNrightOffset, 0, NULL); scaleY = CreateScale(mainWindow,"scaleY",XtParent(scaleM)); scaleYLb = XtVaCreateWidget("scaleYLb", xmLabelWidgetClass, mainWindow, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 1, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, XtParent(scaleM), XmNtopOffset, 10, XmNlabelString, xms, XmNrecomputeSize, False, XmNalignment, XmALIGNMENT_END, NULL); XtManageChild(scaleYLb); XtVaSetValues(XtParent(scaleY), XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, scaleYLb, XmNrightOffset, 0, NULL); wid = XtParent(scaleY); scaleLc = CreateScale(mainWindow,"scaleLc",XtParent(scaleY)); scaleLcLb = XtVaCreateWidget("scaleLcLb", xmLabelWidgetClass, mainWindow, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 1, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, XtParent(scaleY), XmNtopOffset, 10, XmNlabelString, xms, XmNrecomputeSize, False, XmNalignment, XmALIGNMENT_END, NULL); XtManageChild(scaleLcLb); XtVaSetValues(XtParent(scaleLc), XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, scaleLcLb, XmNrightOffset, 0, NULL); scaleLm = CreateScale(mainWindow,"scaleLm",XtParent(scaleLc)); scaleLmLb = XtVaCreateWidget("scaleLmLb", xmLabelWidgetClass, mainWindow, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 1, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, XtParent(scaleLc), XmNtopOffset, 10, XmNlabelString, xms, XmNrecomputeSize, False, XmNalignment, XmALIGNMENT_END, NULL); XtManageChild(scaleLmLb); XtVaSetValues(XtParent(scaleLm), XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, scaleLmLb, XmNrightOffset, 0, NULL); wid = XtParent(scaleLm); scaleLb = CreateScale(mainWindow,"scaleLb",XtParent(scaleLm)); scaleLbLb = XtVaCreateWidget("scaleLbLb", xmLabelWidgetClass, mainWindow, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 1, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, XtParent(scaleLm), XmNtopOffset, 10, XmNlabelString, xms, XmNrecomputeSize, False, XmNalignment, XmALIGNMENT_END, NULL); XtManageChild(scaleLbLb); XtVaSetValues(XtParent(scaleLb), XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, scaleLbLb, XmNrightOffset, 0, NULL); wid = XtParent(scaleLb); scalePh = CreateScale(mainWindow,"scalePh",XtParent(scaleLb)); scalePhLb = XtVaCreateWidget("scalePhLb", xmLabelWidgetClass, mainWindow, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 1, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, XtParent(scaleLb), XmNtopOffset, 10, XmNlabelString, xms, XmNrecomputeSize, False, XmNalignment, XmALIGNMENT_END, NULL); XtManageChild(scalePhLb); XmStringFree(xms); XtVaSetValues(XtParent(scalePh), XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, scalePhLb, XmNrightOffset, 0, NULL); wid = XtParent(scalePh); if ( actConfig.state ) { printerState_LB = XtVaCreateWidget("printerState_LB", xmLabelWidgetClass, mainWindow, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 5, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 10, XmNalignment, XmALIGNMENT_BEGINNING, XmNtopWidget, wid, NULL); XtManageChild(printerState_LB); wid = printerState_LB; state_LB = XtVaCreateWidget("state_LB", xmLabelWidgetClass, mainWindow, XmNleftAttachment, XmATTACH_WIDGET, XmNleftOffset, 5, XmNleftWidget, printerState_LB, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopOffset, 0, XmNalignment, XmALIGNMENT_BEGINNING, XmNtopWidget, printerState_LB, NULL); XtManageChild(state_LB); } /* add a few push button */ check_PB = XtVaCreateWidget("check_PB", xmPushButtonWidgetClass, mainWindow, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 5, XmNtopWidget, wid, XmNleftAttachment, XmATTACH_POSITION, XmNleftOffset, 2, XmNleftPosition, 0, XmNrightAttachment, XmATTACH_POSITION, XmNrightOffset, 2, XmNrightPosition, 20, NULL); XtManageChild(check_PB); clean_PB = XtVaCreateWidget("clean_PB", xmPushButtonWidgetClass, mainWindow, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 5, XmNtopWidget, wid, XmNleftAttachment, XmATTACH_POSITION, XmNleftOffset, 2, XmNleftPosition, 20, XmNrightAttachment, XmATTACH_POSITION, XmNrightOffset, 2, XmNrightPosition, 40, NULL); XtManageChild(clean_PB); align_PB = XtVaCreateWidget("align_PB", xmPushButtonWidgetClass, mainWindow, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 5, XmNtopWidget, wid, XmNleftAttachment, XmATTACH_POSITION, XmNleftOffset, 2, XmNleftPosition, 40, XmNrightAttachment, XmATTACH_POSITION, XmNrightOffset, 2, XmNrightPosition, 60, NULL); XtManageChild(align_PB); reset_PB = XtVaCreateWidget("reset_PB", xmPushButtonWidgetClass, mainWindow, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 5, XmNtopWidget, wid, XmNleftAttachment, XmATTACH_POSITION, XmNleftOffset, 2, XmNleftPosition, 60, XmNrightAttachment, XmATTACH_POSITION, XmNrightOffset, 2, XmNrightPosition, 80, NULL); XtManageChild(reset_PB); cartridge_PB = XtVaCreateWidget("cartridge_PB", xmPushButtonWidgetClass, mainWindow, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 5, XmNtopWidget, wid, XmNleftAttachment, XmATTACH_POSITION, XmNleftOffset, 2, XmNleftPosition, 80, XmNrightAttachment, XmATTACH_POSITION, XmNrightOffset, 2, XmNrightPosition, 100, NULL); XtManageChild(cartridge_PB); wid = check_PB; separator = XtVaCreateWidget("separator", xmSeparatorWidgetClass, mainWindow, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 5, XmNtopWidget, wid, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 0, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 0, NULL); XtManageChild(separator); pref_PB = XtVaCreateWidget("pref_PB", xmPushButtonWidgetClass, mainWindow, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 5, XmNtopWidget, separator, XmNleftAttachment, XmATTACH_POSITION, XmNleftOffset, 5, XmNleftPosition, 0,//40, XmNrightAttachment, XmATTACH_POSITION, XmNrightOffset, 5, XmNrightPosition, 25,//60, XmNbottomAttachment, XmATTACH_FORM, XmNbottomOffset, 5, NULL); XtManageChild(pref_PB); about_PB = XtVaCreateWidget("about_PB", xmPushButtonWidgetClass, mainWindow, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 5, XmNtopWidget, separator, XmNleftAttachment, XmATTACH_POSITION, XmNleftOffset, 5, XmNleftPosition, 25,//5, XmNrightAttachment, XmATTACH_POSITION, XmNrightOffset, 5, XmNrightPosition, 50,//25, XmNbottomAttachment, XmATTACH_FORM, XmNbottomOffset, 5, NULL); XtManageChild(about_PB); help_PB = XtVaCreateWidget("help_PB", xmPushButtonWidgetClass, mainWindow, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 5, XmNtopWidget, separator, XmNleftAttachment, XmATTACH_POSITION, XmNleftOffset, 5, XmNleftPosition, 50,//40, XmNrightAttachment, XmATTACH_POSITION, XmNrightOffset, 5, XmNrightPosition, 75,//60, XmNbottomAttachment, XmATTACH_FORM, XmNbottomOffset, 5, NULL); XtManageChild(help_PB); ok_PB = XtVaCreateWidget("ok_PB", xmPushButtonWidgetClass, mainWindow, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 5, XmNtopWidget, separator, XmNleftAttachment, XmATTACH_POSITION, XmNleftOffset, 5, XmNleftPosition, 75,//75, XmNrightAttachment, XmATTACH_POSITION, XmNrightOffset, 5, XmNrightPosition, 100,//95, XmNbottomAttachment, XmATTACH_FORM, XmNbottomOffset, 5, NULL); XtManageChild(ok_PB); XtAddCallback(ok_PB, XmNactivateCallback, exit_CB, NULL); XtAddCallback(pref_PB, XmNactivateCallback, pref_CB, NULL); XtAddCallback(about_PB, XmNactivateCallback, about_CB, NULL); XtAddCallback(help_PB, XmNactivateCallback, help_CB, NULL); XtAddCallback(align_PB, XmNactivateCallback, align_CB, NULL); XtAddCallback(check_PB, XmNactivateCallback, check_CB, NULL); XtAddCallback(clean_PB, XmNactivateCallback, clean_CB, NULL); XtAddCallback(reset_PB, XmNactivateCallback, reset_CB, NULL); XtAddCallback(cartridge_PB, XmNactivateCallback, exchange_CB, NULL); xms = XmStringCreateSimple(""); XtVaSetValues(scaleCLb, XmNlabelString, xms, NULL); XtVaSetValues(scaleBLb, XmNlabelString, xms, NULL); XtVaSetValues(scaleMLb, XmNlabelString, xms, NULL); XtVaSetValues(scaleYLb, XmNlabelString, xms, NULL); XtVaSetValues(scaleLcLb, XmNlabelString, xms, NULL); XtVaSetValues(scaleLmLb, XmNlabelString, xms, NULL); XtVaSetValues(scaleLbLb, XmNlabelString, xms, NULL); XtVaSetValues(scalePhLb, XmNlabelString, xms, NULL); XmStringFree(xms); return mainWindow; } void unmapErrBox_CB(Widget w, XtPointer a, XtPointer b) { XtDestroyWidget(w); } /*******************************************************************/ /* Function createNoPrinterBox() */ /* */ /* Build the error message box for printer not found */ /* */ /*******************************************************************/ Widget createNoPrinterBox(char *message) { Widget errorBox; Widget tmp; Arg arg[20]; int n; n = 0; XtSetArg(arg[n], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); n++; if ( message != NULL ) { errorBox = XmCreateMessageDialog(mainWindow, message, arg, n); } else { errorBox = XmCreateMessageDialog(mainWindow, "noPrinter", arg, n); } tmp = XtNameToWidget(errorBox, "*Cancel"); XtUnmanageChild(tmp); tmp = XtNameToWidget(errorBox, "*Help"); XtUnmanageChild(tmp); XtAddCallback(errorBox,XmNunmapCallback, unmapErrBox_CB, NULL); return errorBox; } /*******************************************************************/ /* Function percent */ /* */ /* translate the value passed as HEX (2 chars) in decimal */ /* */ /* Input: unsigned char *buf The hex value to be translated */ /* */ /* Return: the decimal value according to hex value */ /* */ /*******************************************************************/ int percent(unsigned char *buf, int *iconNr) { int val = 0; if ( buf[0] >= '0' && buf[0] <= '9' ) val = (buf[0] - '0') * 16; else if ( buf[0] >= 'A' && buf[0] <= 'F' ) val = (buf[0] - 'A' + 10 ) * 16; else if ( buf[0] >= 'a' && buf[0] <= 'f' ) val = (buf[0] - 'a' + 10 ) * 16; if ( buf[1] >= '0' && buf[1] <= '9' ) val += (buf[1] - '0'); else if ( buf[1] >= 'A' && buf[1] <= 'F' ) val += (buf[1] - 'A' + 10 ); else if ( buf[1] >= 'a' && buf[1] <= 'f' ) val += (buf[1] - 'a' + 10 ); if ( val < 5 ) *iconNr = 0; else if ( val < 20 && *iconNr == 2 ) *iconNr = 1; return val; } /*******************************************************************/ /* Function setProgressBarColor */ /* */ /* set the color of the progress bar according to the given */ /* color model. modifie the number of colors if applicable */ /* */ /* Input: char colorModel */ /* */ /* Return: - */ /* */ /*******************************************************************/ void setProgressBarColor(char colorModel) { /* scaleB, scaleC, scaleM, scaleY: nochanges */ /* scaleLc light cyan or red */ /* scaleLm light magenta or blue */ /* scaleLb grey, dark yellow or white */ switch (colorModel) { case MODEL_KCMycmY: XtVaSetValues(scaleLc, XtVaTypedArg, XmNbackground,XmRString,"#80ffff",8,NULL); XtVaSetValues(scaleLm, XtVaTypedArg, XmNbackground,XmRString,"#ff80ff",8,NULL); XtVaSetValues(scaleLb, XtVaTypedArg, XmNbackground,XmRString,"#ffff80",8,NULL); break; case MODEL_KCMycmk: XtVaSetValues(scaleLc, XtVaTypedArg, XmNbackground,XmRString,"#80ffff",8,NULL); XtVaSetValues(scaleLm, XtVaTypedArg, XmNbackground,XmRString,"#ff80ff",8,NULL); XtVaSetValues(scaleLb, XtVaTypedArg, XmNbackground,XmRString,"#808080",8,NULL); break; case MODEL_KCMycm: XtVaSetValues(scaleLc, XtVaTypedArg, XmNbackground,XmRString,"#80ffff",8,NULL); XtVaSetValues(scaleLm, XtVaTypedArg, XmNbackground,XmRString,"#ff80ff",8,NULL); break; case MODEL_KCMycmGg: /* Photo R2400 */ XtVaSetValues(scaleLc, XtVaTypedArg, XmNbackground,XmRString,"#80ffff",8,NULL); XtVaSetValues(scaleLm, XtVaTypedArg, XmNbackground,XmRString,"#ff80ff",8,NULL); XtVaSetValues(scaleLb, XtVaTypedArg, XmNbackground,XmRString,"#ffff80",8,NULL); XtVaSetValues(scaleLb, XtVaTypedArg, XmNbackground,XmRString,"#808080",8,NULL); XtVaSetValues(scalePh, XtVaTypedArg, XmNbackground,XmRString,"#c0c0c0",8,NULL); break; case MODEL_KCMyRBkX: XtVaSetValues(scaleLc, XtVaTypedArg, XmNbackground,XmRString,"#0000ff",8,NULL); XtVaSetValues(scaleLm, XtVaTypedArg, XmNbackground,XmRString,"#ff0000",8,NULL); XtVaSetValues(scaleLb, XtVaTypedArg, XmNbackground,XmRString,"#808080",8,NULL); case MODEL_KCMyRBX: XtVaSetValues(scalePh, XtVaTypedArg, XmNbackground,XmRString,"#ffffff",8,NULL); case MODEL_KCMyRB: XtVaSetValues(scaleLc, XtVaTypedArg, XmNbackground,XmRString,"red",4,NULL); XtVaSetValues(scaleLm, XtVaTypedArg, XmNbackground,XmRString,"blue",5,NULL); break; } switch (colorModel) { case MODEL_KCMycmY: actConfig.colors = 7; break; case MODEL_KCMycmk: actConfig.colors = 7; break; case MODEL_KCMycm: actConfig.colors = 6; break; case MODEL_KCMyRBkX: actConfig.colors = 8; break; case MODEL_KCMyRBX: actConfig.colors = 7; break; case MODEL_KCMyRB: actConfig.colors = 6; break; case MODEL_KCMycmGg: actConfig.colors = 8; break; } } /*******************************************************************/ /* Function decodeStatus */ /* */ /* decode the string returned from printer and print the */ /* informations in an human readable way */ /* */ /* Input: unsigned char *buf The String returned from printer */ /* int len Size of string */ /* */ /* Return: 1 if any info found */ /* */ /*******************************************************************/ int decodeStatus(unsigned char *buf, int len) { int i; int infOk = 0; char *s; char code[3]; char colorModel; static char *color[11] = { "Black", "Cyan", "Magenta", "Yellow", "Light Cyan", "Light Magenta" "Dark Yellow", "Light Black", "Red", "Blue", "Gloss Optimizer", "Photo Black", }; int iconNr = 2; int colIdx; pc1 = 0; pc2 = 0; pc3 = 0; pc4 = 0; pc5 = 0; pc6 = 0; pc7 = 0; pc8 = 0; for ( i = 0; i < len;) { if ( strncmp((char*)&buf[i], "ST:", 3 ) == 0 ) { infOk = 1; i += 3; printerState = appResourceRec.unknown; switch( buf[i+1] ) { case '0': printerState = appResourceRec.error; break; case '1': printerState = appResourceRec.selfTest; break; case '2': printerState = appResourceRec.busy; break; case '3': printerState = appResourceRec.printing; break; case '4': printerState = appResourceRec.ok; break; case '7': printerState = appResourceRec.cleaning; break; } i +=3; } else if ( strncmp((char*)&buf[i], "ER:", 3 ) == 0 ) { i += 3; s = NULL; switch( buf[i+1] ) { case '1': s = "Interface not selected"; break; case '4': s = "Paper jam error"; break; case '5': s = "Ink out error"; break; case '6': s = "Paper out error"; break; default: s = code; code[0] = buf[i]; code[1] = buf[i+1]; code[2] = 0; } i +=3; } else if ( strncmp((char*)&buf[i], "IQ:", 3 ) == 0 ) { infOk = 1; i += 3; colIdx = 0; while ( i < len && colIdx < 7 && buf[i] != ';' ) { switch(colIdx) { case 0: pc1 = percent(buf+i, &iconNr);break; case 1: pc2 = percent(buf+i, &iconNr);break; case 2: pc3 = percent(buf+i, &iconNr);break; case 3: pc4 = percent(buf+i, &iconNr);break; case 4: pc5 = percent(buf+i, &iconNr);break; case 5: pc6 = percent(buf+i, &iconNr);break; case 6: pc7 = percent(buf+i, &iconNr);break; } colIdx++; i += 2; } chgIcon(iconNr); } else if ( strncmp((char*)&buf[i], "INQ:", 4 ) == 0 ) { infOk = 1; i += 4; colIdx = 0; colorModel = buf[i]; i++; while ( i < len && colIdx < 8 && buf[i] != ';' ) { switch(colIdx) { case 0: pc1 = percent(buf+i, &iconNr);break; case 1: pc2 = percent(buf+i, &iconNr);break; case 2: pc3 = percent(buf+i, &iconNr);break; case 3: pc4 = percent(buf+i, &iconNr);break; case 4: pc5 = percent(buf+i, &iconNr);break; case 5: pc6 = percent(buf+i, &iconNr);break; case 6: pc7 = percent(buf+i, &iconNr);break; case 7: pc8 = percent(buf+i, &iconNr);break; } colIdx++; i += 2; } chgIcon(iconNr); setProgressBarColor(colorModel); } else if ( strncmp((char*)&buf[i], "WR:", 3 ) == 0 ) { infOk = 1; i += 3; colIdx = 0; while ( i < len && colIdx < 6 && buf[i] != ';' ) { switch( buf[i+1] ) { case '0': case '1': case '2': case '3': case '4': case '5': s = color[buf[i+1]-'0']; /* color[buf[i+1] (color) is LOW */ break; default: s = code; code[0] = buf[i]; code[1] = buf[i+1]; code[2] = 0; } if ( buf[i+2] == ';' ) { i += 3; break; } i += 3; } } else { i++; } } return infOk; } /*******************************************************************/ /* Function decodePrinterType */ /* */ /* decode the string returned from printer and print the */ /* informations in an human readable way */ /* */ /* Input: unsigned char *buf The String returned from printer */ /* int len Size of string */ /* */ /* Return: - */ /* */ /*******************************************************************/ int decodePrinterType(unsigned char *buf, int len) { char *s = (char*)buf; char *t = (char*)buf; int i; for (i=0; i < len; i++) { if ( strncmp(s, "DES:", 4) == 0 || strncmp(s, "MDL:", 4) == 0 ) { s +=4; t = s; while(*t && *t != ';') t++; *t = '\0'; printerName = strdup(s); return 1; } else { s++; } } return 0; } /*******************************************************************/ /* Function setConfig */ /* */ /* Find the printer data and fill actConfig */ /* */ /*******************************************************************/ int setConfig(void) { int retVal = False; if ( actConfig.dev && actConfig.name ) { retVal = True; } /* if the printer name was found, preset the id field */ if ( actConfig.name ) { int i; for ( i = 0; i < defaultConfigDataSize; i++ ) { if ( strcasecmp(defaultConfigData[i].name,actConfig.name) == 0 ) { actConfig.id = defaultConfigData[i].id; actConfig.colors = defaultConfigData[i].colors; actConfig.prot = defaultConfigData[i].prot; actConfig.state = defaultConfigData[i].state; actConfig.exchange = defaultConfigData[i].exchange; actConfig.exchangeSeparate = defaultConfigData[i].exchangeSeparate; actConfig.cleanSeparate = defaultConfigData[i].cleanSeparate; actConfig.passes = defaultConfigData[i].passes; actConfig.choices = defaultConfigData[i].choices; actConfig.color_passes = defaultConfigData[i].color_passes; actConfig.color_choices = defaultConfigData[i].color_choices; break; } } } return retVal; } /*******************************************************************/ /* Function scale_CB */ /* */ /* Set the scale position to zero if he user modify this */ /* */ /*******************************************************************/ static void scale_CB(Widget w, XtPointer clientData, XtPointer callData) { XtVaSetValues(w, XmNvalue,0,NULL); } /*******************************************************************/ /* Function pref_CB */ /* */ /* window for setting of preferences */ /* */ /*******************************************************************/ static void pref_CB(Widget w, XtPointer clientData, XtPointer callData) { XmString xms; wConfig_data_t data; data.printerName = actConfig.name; data.bt1 = NULL; data.bt2 = NULL; data.bt3 = appResourceRec.ok; data.message = appResourceRec.about; data.wait = &waitForConfigWindow; data.colTb = 0; popupCfg2(mainWindow, &data); XtUnmanageChild(data.actWindow); XtManageChild(mainWindow); if ( actConfig.name != data.printerName && actConfig.name[0] != '?' ) { xms = XmStringCreateSimple(actConfig.name); XtVaSetValues(title_LB,XmNlabelString,xms,NULL); XmStringFree(xms); } } /*******************************************************************/ /* Function callBrowser */ /* */ /* open the file in the given browser */ /* */ /*******************************************************************/ static void callBrowser(char *file) { char command[4096]; int isNetscape = False; int isMozilla = False; int isGaleon = False; char *s; #ifdef MACOS /* use default application */ snprintf(command,sizeof(command),"/usr/bin/open %s",file); #else if ( browser && *browser ) { s = strrchr(browser, '/'); if ( s ) { s++; if ( strcmp(s, "netscape") == 0 || strcmp(s, "Netscape") == 0 ) { isNetscape = True; } else if ( strcmp(s, "mozilla") == 0 || strcmp(s, "Mozilla") == 0 ) { isMozilla = True; } else if ( strcmp(s, "galeon") == 0 ) { isGaleon = True; } } else { if ( strcmp(browser, "netscape") == 0 || strcmp(browser, "Netscape") == 0 ) { isNetscape = True; } if ( strcmp(browser, "mozilla") == 0 || strcmp(browser, "Mozilla") == 0 ) { isMozilla = True; } else if ( strcmp(browser, "galeon") == 0 ) { isGaleon = True; } } } else { browser = strdup("netscape"); isNetscape = True; } /* remark about starting of netscape / mozilla */ /* Solaris don't like "if ! netscape ...;then netscape ...;fi */ /* we use instead an if netscape ... then :;else netscape...;fi */ /* : is a no op instruction for the shell */ if ( isNetscape ) { /* call netscape */ sprintf(command, "if %s -remote \"openURL(file://%s)\";then :;else %s file://%s;fi &", browser, file, browser, file); } else if ( isGaleon ) { snprintf(command,sizeof(command),"%s -x %s &",browser, file); } else if ( isMozilla ) { /* previous version of mozilla require file:///path/file */ snprintf(command,sizeof(command), "if %s -remote \"openURL(file://%s)\";then :;else %s file://%s; fi &", browser, file, browser, file); } else { /* most browser don't need an extra option */ sprintf(command,"%s %s &",browser, file); } #endif /* if we have root or lp rights, we have to get the uid instead */ /* of the euid. start the browser as "daemon" */ if ( fork() == 0 ) { if ( fork() == 0 ) { seteuid(getuid()); system(command); exit(0); } exit(0); /* exit first subprocess */ } /* wait for the first sub process and avoid a zomby */ wait(&isGaleon); } /*******************************************************************/ /* Function help_CB */ /* */ /* try to find the mtink documentation and open this in netscape */ /* */ /*******************************************************************/ static void help_CB(Widget w, XtPointer clientData, XtPointer callData) { char *myCastel = getenv("HOME"); char home[1024]; char localDir[1024]; char file[1024]; char **dir; char *dirs [] = { localDir, #if defined PREFIX PREFIX"/doc/mtink", #endif "/usr/share/doc/printer-utils-1.0/EpsonInkjetMaintenance", /* Mandriva */ "/usr/local/share/doc/mtink", "/usr/local/share/doc", "/usr/local/doc/mtink", "/usr/local/doc", "/usr/local/mtink", "/usr/share/doc/mtink", "/usr/share/doc/mtink-doc", /* ubuntu - debian */ "/usr/share/doc", "/usr/doc/mtink", "/usr/doc", "/opt/mtink", "/usr/mtink", home, NULL }; getcwd(localDir, sizeof(localDir)); home[0] = '\0'; if ( myCastel ) snprintf(home,sizeof(localDir)-100,"%s/mtink",myCastel); dir = dirs; /* look for the mtink.html file */ while( dir[0] ) { sprintf(file,"%s/mtink.%s.html", dir[0],guiLanguage ); if ( access(file,R_OK) == 0 ) { callBrowser(file); return; } else { sprintf(file,"%s/mtink.html", dir[0]); if ( access(file,R_OK) == 0 ) { callBrowser(file); return; } } dir++; } /* not found */ } /*******************************************************************/ /* Function CreateScale */ /* */ /* Create our scale "widget" */ /* */ /*******************************************************************/ static Widget CreateScale(Widget parent, char *name, Widget top) { Widget wid; Widget scale; Widget sep; int i = 0; Pixel pix; int sz = 0; /* make gcc happy */ char sepName[10]; wid = XtVaCreateWidget("scaleForm", xmFormWidgetClass, parent, XmNleftAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 5, XmNtopWidget, top, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 5, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 5, XmNrightOffset, 5, XmNshadowThickness, 0, XmNborderWidth, 0, XmNmarginWidth, 0, XmNfractionBase, 101, NULL); XtManageChild(wid); XtVaGetValues(wid, XmNbackground, &pix, NULL); /* build separators */ for ( i = 0; i < 101; i += 2 ) { if ( i == 0 || i == 50 || i == 100 ) sz = 10; else if ( i % 10 == 0 ) sz = 6; else if ( i % 2 == 0 ) sz = 3; sprintf(sepName,"sep_%d",i); sep = XtVaCreateWidget(sepName, xmSeparatorWidgetClass, wid, XmNorientation, XmVERTICAL, XmNheight, sz, XmNwidth, 2, XmNtopAttachment, XmATTACH_FORM, XmNtopOffset, 10-sz, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, i, XmNshadowThickness, 1, XmNseparatorType, XmSINGLE_LINE, NULL); XtManageChild(sep); } /* Scrollbar */ scale = XtVaCreateWidget(name, xmScrollBarWidgetClass, wid, XmNeditable, False, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, sep, XmNtopOffset, 0, XmNleftAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNminimum, 0, XmNmaximum, 100, XmNsliderSize, 1, XmNorientation, XmHORIZONTAL, XmNshowArrows, XmNONE, XmNtroughColor, pix, XmNshadowThickness, 1, XmNborderWidth, 0, XmNvalue, 0, NULL); XtManageChild(scale); XtAddCallback(scale,XmNvalueChangedCallback, scale_CB, NULL); return scale; } mtink-1.0.16/mainSrc/d4lib.h0000644000076400001540000000356510376041214013623 0ustar jjfuse/* * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef D4LIB_H #define D4LIB_H #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif extern int debugD4; /* allow printout of debug informations */ typedef unsigned char uc; extern int EnterIEEE(int fd); extern int Init(int fd); extern int Exit(int fd); extern int GetSocketID(int fd, char *serviceName); extern int OpenChannel(int fd, uc sockId, int *sndSz, int *rcvSz); extern int CloseChannel(int fd, uc socketID); extern int CreditRequest(int fd, uc socketID); extern int Credit(int fd, uc socketID, int credit); /* convenience function */ extern int askForCredit(int fd, uc socketID, int *sndSz, int *rcvSz); extern int writeData(int fd, uc socketID, uc *buf, int len, int eoj); extern int readData(int fd, uc socketID, uc *buf, int len); extern int d4WrTimeout; extern int d4RdTimeout; extern int ppid; #if D4_DEBUG #define DEBUG 1 #endif #if 0 #if DO_SO_LIB #define open mOpen #define close mClose #define read mRead #define write mWrite extern int (*mOpen)(char*,int); extern int (*mClose)(int); extern int (*mRead)(int,char*,int); extern int (*mWrite)(int,char*,int); #endif #endif #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif mtink-1.0.16/mainSrc/alC82.c0000644000076400001540000002233310376041214013463 0ustar jjfuse/**************************************************** * File alC82.c * * write and read to / from printer * * * Copyright (C) 2001 Jean-Jacques Sarton jj.sarton@t-online.de * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ****************************************************/ /* commands for head alignment pattern Stylus Photo C82, derived from 820 code */ /* pattern for ESC i command :1 dot set , 63 unset */ #ifndef p1 #define P1 0x00, 0xc0, 0xf2, 0x00, #endif #define P1_60 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 \ P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 \ P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 \ P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 \ P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 #ifdef PATTERN #undef PATTERN #endif #define PATTERN P1_60 static uc topPosC82[] = { 0x1b, '(', 'v', 0x02, 0x00, 0xa0, 0x00 /* vert. pos. abs. 160 * 1/60 inch */ }; static uc remoteInitC82[] = { 0x1b, '(', 'R', 0x08, 0x00, 0x00, 'R', 'E', 'M', 'O', 'T', 'E', '1', 'L', 'C', 0x02, 0x00, 0x00, 0x01, 'S', 'N', 0x03, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, /* end remote 1 */ }; static uc remoteEndC82[] = { 0x1b, '(', 'R', 0x08, 0x00, 0x00, 'R', 'E', 'M', 'O', 'T', 'E', '1', 'L', 'C', 0x02, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1b, '@', 0x1b, '@', 0x1b, '(', 'R', 0x08, 0x00, 0x00, 'R', 'E', 'M', 'O', 'T', 'E', '1', 'J', 'E', 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00 }; #define PASS_N0_IDX 7 #define SIZE_N0_IDX 37 static uc passDataC82[] = { 0x1b, 'U', 0x01, 0x1b, 'l', 0x19, '#', '1', 0x0d, 0x0a, /* left margin on column 25, print "#1" and go to next line */ 0x1b, '@', /* reset */ 0x1b, '(', 'G', 0x01, 0x00, 0x01, /* select graphic mode on*/ 0x1b, '+', 0x00, /* set line spacing = 0 !!! */ 0x1b, '(', 'U', 0x05, 0x00, 0x04, 0x04, 0x01, 0xa0, 0x05, /* set unit extended p=4, v=4, h=1 1/1440 dpi */ 0x1b, '(', 'e', 0x02, 0x00, 0x00, 0x12, /* select dot size 0x12 */ 0x1b, '(', 'K', 0x02, 0x00, 0x00, 0x01, /* select monochrome print mode */ 0x1b, 'U', 0x01, /* set print mode char: auto, graphic: unidirectional */ 0x1b, '(', 'D', 0x04, 0x00, 0xa0, 0x05, 0x08, 0x04, /* set res. for raster image v= 8/1440=1/180, h=4/1440=1/360 */ 0x1b, '(', '$', 0x04, 0x00, 0x80, 0x0f, 0x00, 0x00, /* And Hor. pos: 3968 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0xf0, 0x00, 0x3C, 0x00, PATTERN PATTERN PATTERN PATTERN PATTERN /* 240 bytes / line, 60 lines */ PATTERN PATTERN PATTERN PATTERN PATTERN PATTERN PATTERN PATTERN PATTERN PATTERN 0x0d, 0x1b, '(', 'v', 0x02, 0x00, 0x31, 0x00, /* set vert. rel. position 49 units = 0,136 inch = 0,345 cm */ 0x1b, 0x06, /* !!!!! */ 0x1b, 'U', 0x03, /* set print mode char:?, graphic: ? */ 0x1b, '(', '$', 0x04, 0x00, 0x87, 0x1d, 0x00, 0x00, /* And Hor. pos: 7559 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x3c, 0x00, PATTERN /* 16 bytes / line, 60 lines */ 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x86, 0x1c, 0x00, 0x00, /* And Hor. pos: 7302 (-257) */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x3c, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x85, 0x1b, 0x00, 0x00, /* And Hor. pos: 7045 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x3c, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x84, 0x1a, 0x00, 0x00, /* And Hor. pos: 6788 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x3c, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x83, 0x19, 0x00, 0x00, /* And Hor. pos: 6531 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x3c, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x82, 0x18, 0x00, 0x00, /* And Hor. pos: 6274 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x3c, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x81, 0x17, 0x00, 0x00, /* And Hor. pos: 6017 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x3c, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x80, 0x16, 0x00, 0x00, /* And Hor. pos: 5760 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x3c, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x7f, 0x15, 0x00, 0x00, /* And Hor. pos: 5503 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x3c, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x7e, 0x14, 0x00, 0x00, /* And Hor. pos: 5246 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x3c, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x7d, 0x13, 0x00, 0x00, /* And Hor. pos: 4989 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x3c, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x7c, 0x12, 0x00, 0x00, /* And Hor. pos: 4732 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x3c, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x7b, 0x11, 0x00, 0x00, /* And Hor. pos: 4475 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x3c, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x7a, 0x10, 0x00, 0x00, /* And Hor. pos: 4218 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x3c, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x79, 0x0f, 0x00, 0x00, /* And Hor. pos: 3961 Delta = 257/1440 dpi (0.45332) */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x3c, 0x00, PATTERN 0x0d, 0x1b, '(', 'v', 0x02, 0x00, 0x90, 0x00, 0x1b, '@', 0x1b, 'U', 0x01, 0x1b, '$', 0xa0, 0x00, '1', /* 160 */ 0x1b, '$', 0xab, 0x00, '2', /* 171 (+11/60 inch = +0.46567 inch) */ 0x1b, '$', 0xb6, 0x00, '3', 0x1b, '$', 0xc1, 0x00, '4', 0x1b, '$', 0xcc, 0x00, '5', 0x1b, '$', 0xd7, 0x00, '6', 0x1b, '$', 0xe2, 0x00, '7', 0x1b, '$', 0xed, 0x00, '8', 0x1b, '$', 0xf8, 0x00, '9', 0x1b, '$', 0x03, 0x01, '1', 0x1b, '$', 0x0e, 0x01, '1', 0x1b, '$', 0x19, 0x01, '1', 0x1b, '$', 0x24, 0x01, '1', 0x1b, '$', 0x2f, 0x01, '1', 0x1b, '$', 0x3a, 0x01, '1', 0x0d, 0x0a, 0x1b, '$', 0x03, 0x01, '0', 0x1b, '$', 0x0e, 0x01, '1', 0x1b, '$', 0x19, 0x01, '2', 0x1b, '$', 0x24, 0x01, '3', 0x1b, '$', 0x2f, 0x01, '4', 0x1b, '$', 0x3a, 0x01, '5', 0x0d, 0x0a, 0x0d, 0x0a }; /****************************************************** * Function: doAlignPatternC82() * * build the align command for the printer according to the * given parameters. * * input: int pass pass number 1,2,3 or 0 if conmtrol pass * * return: size of data * ******************************************************/ int doAlignPatternC82(int pass, int bufpos, unsigned char *printer_cmd) { int i; if ( pass == 1 ) { memcpy(printer_cmd + bufpos, remoteInitC82, sizeof(remoteInitC82)); bufpos += sizeof(remoteInitC82); } if ( pass > 0 ) { memcpy(printer_cmd + bufpos, topPosC82, sizeof(topPosC82)); bufpos += sizeof(topPosC82); bufpos = add_newlines((pass - 1) * 7, bufpos, printer_cmd ); passDataC82[PASS_N0_IDX] = '0' + pass; passDataC82[SIZE_N0_IDX] = 0x13 - pass; memcpy(printer_cmd + bufpos, passDataC82, sizeof(passDataC82)); bufpos += sizeof(passDataC82); bufpos = add_formfeed(bufpos, printer_cmd); if ( pass == 3 ) { memcpy(printer_cmd + bufpos, remoteEndC82, sizeof(remoteEndC82)); bufpos += sizeof(remoteEndC82); } } else /* pass == 0, final print */ { memcpy(printer_cmd + bufpos, remoteInitC82, sizeof(remoteInitC82)); bufpos += sizeof(remoteInitC82); memcpy(printer_cmd + bufpos, topPosC82, sizeof(topPosC82)); bufpos += sizeof(topPosC82); bufpos = add_newlines(21, bufpos, printer_cmd); for ( i = 1; i < 4; i++ ) { passDataC82[PASS_N0_IDX] = '0' + i; passDataC82[SIZE_N0_IDX] = 0x13 - i; memcpy(printer_cmd + bufpos, passDataC82, sizeof(passDataC82)); bufpos += sizeof(passDataC82); } bufpos = add_formfeed(bufpos, printer_cmd); memcpy(printer_cmd + bufpos, remoteEndC82, sizeof(remoteEndC82)); bufpos += sizeof(remoteEndC82); } return bufpos; } mtink-1.0.16/mainSrc/access.c0000644000076400001540000000430510664764464014075 0ustar jjfuse#include #include #include #include #include #include #include #include #include "access.h" /***************************************************** * Function; fileAccess() * * Check if we have the required permissions for * the given file. * * Input: * char *file the name of the file to check * int mode the permissions as R_OK|W_OK|X_OK * or a part from there * * Return: * -1 if we have not sufficient permission for the file * 0 if we have the permission * * Remark: * We test also against euid and egid. The programm shall * have its right set accordindly if we use this * *****************************************************/ int fileAccess(char *file, int mode) { struct stat status; int euid = geteuid(); int egid = getegid(); int uid = getuid(); int gid = getgid(); int mask; struct passwd *pwd; struct group *grp; char **gr_mem; if ( stat(file, &status) != 0 ) { return -1; } if ( uid == 0 ) { return 0; } if ( uid == status.st_uid || euid == status.st_uid) { mask = ((mode & R_OK) ? S_IRUSR : 0) | ((mode & W_OK) ? S_IWUSR : 0); if ( (status.st_mode & mask) == mask) { return 0; } } /* egid is only set the rights for the group are rwx! * chmod 2770 program_file this is not very nice. */ mask = ((mode & R_OK) ? S_IRGRP : 0) | ((mode & W_OK) ? S_IWGRP : 0); if ( gid == status.st_gid || egid == status.st_gid ) { if ( (status.st_mode & mask) == mask) { return 0; } } /* check for group membership if the group mask is OK */ if ( (status.st_mode & mask) == mask) { if ( (pwd = getpwuid(uid)) != NULL) { if ( (grp = getgrgid(status.st_gid) ) != NULL ) { gr_mem = grp->gr_mem; while ( *gr_mem ) { if ( strcmp(pwd->pw_name, *gr_mem) == 0 ) { return 0; } gr_mem++; } } } } return -1; } mtink-1.0.16/mainSrc/cmd.c0000644000076400001540000023200010665007217013355 0ustar jjfuse/**************************************************** * File cmd.c * * write and read to / from printer * * * Copyright (C) 2001 Jean-Jacques Sarton jj.sarton@t-online.de * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ****************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(HAVE_VARARGS_H) && !defined(HAVE_STDARG_H) #include #else #include #endif #if WITH_X #include #include #include #include #endif #include "mtink.h" #include "cmd.h" #include "d4lib.h" #ifdef MACOS #include "usbHlp.h" #include #define close mClose #define open mOpen #endif #ifndef WRTIMEOUT #define WRTIMEOUT 2000 #endif #ifndef TEST #define TEST 0 #define TEST_DEBUG 0 #endif #ifndef O_SYNC #define O_SYNC 0 #endif /* these file build the code for the printer */ /* align function s */ #include "bldpcode.c" #include "al820.c" #include "alC82.c" #include "align.c" /* external function for alignment requires a greater amount of data */ static unsigned char printer_cmd[65536]; /* more as enough now */ static int bufpos = 0; int doRw = 0; extern int inFromFile; extern void setPrinterStateLabel(int state); /* module global variables */ static int currentAction = 0; static int shmid = -1; static int deviceHdl = -1; static pid_t pid = -1; static int d4Initialized = 0; static int sockId = -1; static int sndSize = 0x0200; static int rcvSize = 0x0200; static int sockIdData = -1; static int sndSizeData = 0x1006; static int rcvSizeData = 0x0200; static int dataCredit = 0; shmem_t *shmem = NULL; int connectedOnServer = 0; #if WITH_X static Cursor waitCursor = 0; extern XtIntervalId tid; #endif #ifdef MACOS static threadRun = 0; #endif /* prototypes */ static int openAndTestDevice(char *dev); static int openDevice(char *dev, int doTest); static int exitD4(int deviceHdl); int initializeD4(void); static int tellPrinterState(char *buf); static int getId(char *name, int prot); static int getIq(char *name, int prot); static int resetPrinter(char *name, int prot); static int checkNozzle(char *name, int prot); static int cleanNozzle(char *name, int prot); static int getIdNoD4(int deviceHdl, int prot); static int getIqOld(int deviceHdl, int prot); static int resetPrinterOld(int deviceHdl, int prot); static int checkNozzleOld(int deviceHdl, int prot); static int cleanNozzleOld(int deviceHdl, int prot); static int getIdD4(int deviceHdl); static int getIqD4(int deviceHdl); static int d4Reset(int deviceHdl); static int d4CheckNozzle(int deviceHdl); static int d4CleanNozzle(int deviceHdl); static int doAlignHead(char *name,int deviceHdl, int prot, int pass, int choice, char *function); static int doAlignHeadColor(char *name,int deviceHdl, int prot, int pass, int choice); static int doExchange(char *name,int deviceHdl, int prot, int step, int choice); static void waitForPrinterReady(int deviceHdl, int maxWaitTime); int writeD4Data(int deviceHdl, unsigned char *printer_cmd, int len, int stop); #define CMD_IDX 4 #define AllInkPosition 1 #define BlackInkPosition 3 #define ColorInkPosition 4 #define StartInkFillUp 0x80 #define CancelInkFillUp 0xff static unsigned char exchangeInk[] = { 'x', 'i', 1, 0, 0 /* last is for selection */ }; /* answer "xi:#OK;\014" where # is the parameter from command */ static unsigned char carriagePosition[] = { 'c', 'x', 1, 0, 1 }; /* answer "cx:00;\014" Home position "cx:FF;\014" moving "cx:01;\014" Exchange Position "cx:NA;\014" command unknown pass this 5 sec after issuing the xi command */ #if 0 /* not used yet */ #define ReplyExchangePossibility 0 #define ReplyCatridgeState 1 static unsigned char CartridgeState[] = { 'c', 's', 1, 0, 0 /* last is for selection */ }; #endif /* answer */ static unsigned char exchangeInkTerminate[] = { 'e', 'i', 1, 0, 0 }; static int _Write(int a, unsigned char *b, int c, int to) { int i; if ( debugD4 ) { fprintf(stderr, "Write: "); for(i=0;i<(c<200?c:200);i++) fprintf(stderr,"%02x",(unsigned char)b[i]); fprintf(stderr,"\n"); fprintf(stderr, " "); for(i=0;i<(c<200?c:200);i++) fprintf(stderr,"%c ",isprint(b[i])?b[i]:' '); fprintf(stderr,"\n"); } #ifndef MACOS return devWrite(a,b,c,to); #else return mWrite(a,b,c); #endif } static int _Read(int a, unsigned char *b, int c, int to) { int i; #ifndef MACOS int ret = devRead(a,b,c,to); # else int ret = mRead(a,b,c); #endif if ( inFromFile ) return 0; if ( ret > 0 && debugD4 ) { fprintf(stderr, "Read : "); for(i=0;iready flag is 0 */ if ( shmem->ready == 0 ) { mode = shmem->mode; pass = shmem->pass; choice = shmem->choice; name = shmem->name; shmem->buf[0] = '\0'; /* clean return buffer */ switch(shmem->command) { case RELEASE: shmem->retVal = 0; break; case TEST_DEV: shmem->retVal = openAndTestDevice(name); break; case TERMINATE: if ( deviceHdl > -1 ) { switch(currentAction) { case EXCHANGE_ALL: if ( deviceHdl ) { doExchange(name,deviceHdl, PROT_D4, 4, 0); } break; } if ( d4Initialized ) { exitD4(deviceHdl); } #if DEBUG fprintf(stderr,"Close(%d)\n",deviceHdl); #endif close(deviceHdl); deviceHdl = -1; } #ifndef MACOS exit(0); #endif break; case RESET_PRT: shmem->retVal = resetPrinter(name, mode&PALL ); break; case GET_ID: shmem->retVal = getId(name, mode&PALL); break; case GET_IQ: shmem->retVal = getIq(name, mode&PALL); break; case CHECK_NOZZLE: shmem->retVal = checkNozzle(name, mode&PALL); #if 1 if ( shmem->choice ) { sleep(10); shmem->retVal = resetPrinter(name, mode&PALL ); } #endif break; case CLEAN_NOZZLE: shmem->retVal = cleanNozzle(name, mode&PALL); break; case ALIGN_HEAD: shmem->retVal = doAlignHead(name, deviceHdl, mode&PALL, pass, choice, shmem->function ); break; case ALIGN_HEAD_C: shmem->retVal = doAlignHeadColor(name, deviceHdl, mode&PALL, pass, choice); break; case EXCHANGE_ALL: shmem->retVal = doExchange(name, deviceHdl, mode&PALL, 0, EXCHANGE_ALL); break; case EXCHANGE_B: shmem->retVal = doExchange(name, deviceHdl, mode&PALL, 0, EXCHANGE_B); break; case EXCHANGE_C: shmem->retVal = doExchange(name, deviceHdl, mode&PALL, 0, EXCHANGE_C); break; case EXCHANGE_NEXT: shmem->retVal = doExchange(name, deviceHdl, mode&PALL, pass, 0); break; default: shmem->retVal = 0; } shmem->ready = 1; /* tell the parent that all is done */ if ( errno == ENODEV && deviceHdl > -1 ) { #if DEBUG fprintf(stderr,"Close(%d)\n",deviceHdl); #endif close(deviceHdl); errno = 0; deviceHdl = -1; d4Initialized = False; sockId = -1; sockIdData = -1; } if ( errno == -1 && deviceHdl > -1 ) { /* we had problems with the printer, restart from the begin */ if ( d4Initialized ) exitD4(deviceHdl); #if DEBUG fprintf(stderr,"Close(%d)\n",deviceHdl); #endif close(deviceHdl); deviceHdl = -1; sockId = -1; sockIdData = -1; d4Initialized = False; errno = 0; } } else { usleep(10000); #ifndef MACOS if ( ! connectedOnServer && getppid() == 1 ) { /* parent process dead */ if ( shmem != NULL ) { shmdt((void*)shmem); shmem = NULL; shmctl(shmid, IPC_RMID, NULL); shmid = -1; } if ( deviceHdl > -1 ) parentDie(0); else exit(1); } #endif } } } /****************************************************** * Function: callPrg() * * Call the send/receive function we need and make * sure that the main programm will be refreshed * * The command send to the printer and also reading * from printer will be made in an extra process so * we avoid problems due to signal handling. * ******************************************************/ int callPrg(int command, char *name, int mode, int pass, int choice, char **retBuf, char* function) { int stat = -1; key_t key = -1; struct shmid_ds buf; #if WITH_X XEvent xevent; #endif int answered; int count; #ifdef MACOS pthread_t pt; #endif if ( debugD4 ) { char *s = "-"; switch(command) { case TEST_DEV: s = "TEST_DEV"; break; case GET_ID: s = "GET_ID"; break; case GET_STAT: s = "GET_STAT"; break; case GET_IQ: s = "GET_IQ"; break; case RESET_PRT: s = "RESET_PRT"; break; case CHECK_NOZZLE: s = "CHECK_NOZZLE"; break; case CLEAN_NOZZLE: s = "CLEAN_NOZZLE"; break; case CLEAN_NOZZLE_C: s = "CLEAN_NOZZLE_C"; break; case CLEAN_NOZZLE_B: s = "CLEAN_NOZZLE_B"; break; case WAIT_STAT_04: s = "WAIT_STAT_04"; break; case WAIT_STAT_01: s = "WAIT_STAT_01"; break; case EXCHANGE_ALL: s = "EXCHANGE_ALL"; break; case EXCHANGE_B: s = "EXCHANGE_B"; break; case EXCHANGE_C: s = "EXCHANGE_C"; break; case EXCHANGE_NEXT: s = "EXCHANGE_NEXT"; break; case ALIGN_HEAD: s = "ALIGN_HEAD"; break; case ALIGN_HEAD_C: s = "ALIGN_HEAD_C"; break; case TERMINATE: s = "TERMINATE"; break; case RELEASE: s = "RELEASE"; break; } fprintf(stderr,"callPrg(%s, %s,%d,%d,%d,...,%s)\n", s, name ? name : "-", mode, pass, choice, function ? function:"-" ); } /* this portion of code will all time be processed */ if ( name ) { #ifdef MACOS if ( strncmp(name,USB_PRT_NAME_PREFIX,strlen(USB_PRT_NAME_PREFIX)) ) #else if ( strncmp(name, "/dev/", 5) && !inFromFile) #endif { /* server must be running */ if ( !connectedOnServer ) { if ( shmid != -1 ) { /* terminate forked process */ if ( pid > 0 ) { kill(pid,SIGTERM); if ( shmem ) { shmdt((void*)shmem); shmctl(shmid, IPC_RMID, &buf); shmem = NULL; shmid = -1; } } } /* not attached to server ? */ if ( shmid == -1 ) { /* get shared memory to server */ key = ftok(name, 'M'); if ( key > -1 ) { if ((shmid = shmget(key, sizeof(shmem_t), 0)) == -1) { #if DEBUG perror("shmget"); #endif return -1; } if ( shmctl(shmid, IPC_STAT, &buf) == -1 ) { shmid = -1; perror("shmctl"); return -1; } if ( buf.shm_nattch > 1) { shmid = -1; errno = EBUSY; perror("shmat"); return -1; } shmem = (shmem_t*)shmat(shmid, NULL, 0); if ( shmem == NULL ) { shmid = -1; perror("shmat"); return -1; } connectedOnServer = 1; } else { /* server don't run, return error */ #if DEBUG perror("ftok"); #endif return -1; } } } } else { /* port change, no more on server */ if ( connectedOnServer ) { /* detach from server shared memory */ shmdt((void*)shmem); shmid = -1; shmem = NULL; connectedOnServer = 0; /* return -1; */ } } /* get shared memory for port /dev/... */ if ( shmid == -1 && ! connectedOnServer ) { shmid = shmget(IPC_PRIVATE, sizeof(shmem_t), IPC_CREAT|IPC_EXCL|0777); if ( shmid > -1 ) { shmem = (shmem_t*)shmat(shmid, NULL, 0); if ( name ) { strcpy(shmem->name,name); } } else { #if DEBUG perror("shmget private memory"); #endif } } } if ( shmid == -1 && command == TERMINATE ) { /* this is OK */ return 0; } else if ( shmid == -1 ) { return -1; } /* check the shared memory */ if ( shmctl(shmid, IPC_STAT, &buf) == -1 ) { /* on error detach */ perror("shmctl"); shmdt((void*)shmem); shmem = 0; shmid = -1; connectedOnServer = 0; /* and return with error */ return -1; } /* is the server is no more running ? */ if ( connectedOnServer && buf.shm_nattch == 1 ) { /* detach from memory, the server has terminated */ /* and the shared memory will be removed */ shmdt((void*)shmem); shmem = 0; shmid = -1; connectedOnServer = 0; /* and inform the user iterface about that */ return -1; } if ( command == RELEASE ) { /* this is OK, only a check for server alive */ return 0; } if ( shmem && shmem->block == 2 ) { /* printer not attached to server */ return -1; } if ( shmem && shmem->block == 1 && command == GET_IQ ) { /* other command pending OK */ return 0; } #if WITH_X /* get a cursor so the user see that the app. is busy */ if ( waitCursor == (Cursor)0 && command > -1 ) { waitCursor = XCreateFontCursor(XtDisplay(topLevel), XC_watch); } if ( command > -1 ) { /* and set it */ XDefineCursor(XtDisplay(topLevel), XtWindow(topLevel), waitCursor); } /* if we have a timer, kill it */ if ( tid ) { if ( shmem && shmem->block ) ; else { XtRemoveTimeOut(tid); tid = 0; } } #endif /* no server, create the shared memory */ /* and the sub process for port /dev/... */ if ( pid == -1 && ! connectedOnServer ) { *shmem->function = '\0'; shmem->printerState = 4; shmem->mode = mode; shmem->command = command; shmem->pass = pass; shmem->choice = choice; *shmem->buf = '\0'; shmem->ready = 0; #ifdef MACOS /* on MacOS we can't fork, we need a thread ! */ pthread_t pt; if ( !threadRun ) { threadRun =1; pthread_create(&pt,NULL, doCommands,NULL); } #else switch((pid=fork())) { case 0: doCommands(NULL); break; case -1: break; default: /* allow to react on child dead */ signal(SIGCHLD, sigChild); } #endif } /* set values to our shared memory */ if ( shmem && !shmem->block ) { if ( name ) strcpy(shmem->name, name); if ( function ) strcpy(shmem->function, function); else *shmem->function = '\0'; shmem->printerState = 4; shmem->mode = mode; shmem->command = command; shmem->pass = pass; shmem->choice = choice; *shmem->buf = '\0'; shmem->ready = 0; } else { if ( errno == ENODEV ) { if ( deviceHdl > 0 ) { #if DEBUG fprintf(stderr,"Close(%d)\n",deviceHdl); #endif close(deviceHdl); } deviceHdl = -1; } return -1; } /* avoid remove all user inputs */ /* wait for end of child and refesh the X application */ answered = 0; count = 0; for(;command > -1 ;) { #if WITH_X if ( XtAppPending(theApp) & XtIMXEvent ) { XtAppNextEvent(theApp, &xevent); /* check for button and key events, dont dispatch them */ if ( xevent.xany.type == ButtonPress || xevent.xany.type == ButtonRelease || xevent.xany.type == KeyPress || xevent.xany.type == KeyRelease ) { ; } else { /* none of the unwanted X events, process them */ XtDispatchEvent(&xevent); } } else { /* no events sleep a little bit */ if ( shmem ) { setPrinterStateLabel(shmem->printerState); } usleep(10000); } #else usleep(10000); #endif count++; /* check child process and leave the loop if dead */ #ifdef MACOS if ( threadRun == 0 ) { shmdt((void*)shmem); shmem = NULL; shmctl(shmid, IPC_RMID, NULL); shmid = -1; break; } #else if ( pid > 0 && waitpid(pid, &stat, WNOHANG) == pid ) { stat = (stat >> 8) &0xff; if ( !connectedOnServer ) { shmdt((void*)shmem); shmem = NULL; shmctl(shmid, IPC_RMID, NULL); shmid = -1; } pid = -1; break; } else #endif if ( shmem && shmem->ready ) { stat = shmem->retVal; break; } if ( shmem == NULL ) break; /* if more that 30 sec elapsed */ if ( count == 3000 ) { if ( shmid != -1 ) { shmdt((void*)shmem); shmem = NULL; shmctl(shmid, IPC_RMID, NULL); shmid = -1; } break; } } if ( shmem ) { if ( retBuf ) { *retBuf = shmem->buf; } if ( command > -1 ) setPrinterStateLabel(shmem->printerState); } #if WITH_X if ( command > -1 ) { /* restore the normal cursor */ XUndefineCursor(XtDisplay(topLevel), XtWindow(topLevel)); if ( shmem && shmem->block == 0 && tid == 0 ) { tid = XtAppAddTimeOut(theApp, CYCLE_TIME, handleTi, (XtPointer)NULL); } } #endif if ( command == EXCHANGE_NEXT && retBuf != 0 ) { *((int*)retBuf) = 1; } return stat; } #else /****************************************************** * Function: doCommand(int working) * * Call the send/receive function we need and make * sure that the main programm will be refreshed * * This is the main entry for the server ******************************************************/ /* for the server */ static char *idStr = NULL; int doCommand(int working) { int mode; int pass; int choice; char *function; char *name; errno = 0; /* set the ppid variable for the d4lib.c file */ if ( shmem ) { mode = shmem->mode; pass = shmem->pass; choice = shmem->choice; function = shmem->function; name = shmem->name; shmem->buf[0] = '\0'; /* clean return buffer */ if ( debugD4 ) { char *s = "-"; switch(shmem->command) { case TEST_DEV: s = "TEST_DEV"; break; case GET_ID: s = "GET_ID"; break; case GET_STAT: s = "GET_STAT"; break; case GET_IQ: s = "GET_IQ"; break; case RESET_PRT: s = "RESET_PRT"; break; case CHECK_NOZZLE: s = "CHECK_NOZZLE"; break; case CLEAN_NOZZLE: s = "CLEAN_NOZZLE"; break; case CLEAN_NOZZLE_C: s = "CLEAN_NOZZLE_C"; break; case CLEAN_NOZZLE_B: s = "CLEAN_NOZZLE_B"; break; case WAIT_STAT_04: s = "WAIT_STAT_04"; break; case WAIT_STAT_01: s = "WAIT_STAT_01"; break; case EXCHANGE_ALL: s = "EXCHANGE_ALL"; break; case EXCHANGE_B: s = "EXCHANGE_B"; break; case EXCHANGE_C: s = "EXCHANGE_C"; break; case EXCHANGE_NEXT: s = "EXCHANGE_NEXT"; break; case ALIGN_HEAD: s = "ALIGN_HEAD"; break; case ALIGN_HEAD_C: s = "ALIGN_HEAD_C"; break; case TERMINATE: s = "TERMINATE"; break; case RELEASE: s = "RELEASE"; break; } fprintf(stderr,"doCommand(%s, %s,%d,%d,%d,...,%s)\n", s, name ? name : "-", mode, pass, choice, function ? function:"-"); } if ( working == -1 && shmem->command != TERMINATE ) { if ( deviceHdl > -1 ) { if ( d4Initialized ) { exitD4(deviceHdl); } } d4Initialized = 0; sockId = -1; sockIdData = -1; if ( deviceHdl > -1 ) { #if DEBUG fprintf(stderr,"Close(%d)\n",deviceHdl); #endif close(deviceHdl); } deviceHdl = -1; shmem->retVal = 0; shmem->block = 0; shmem->ready = 1; if ( idStr ) { free(idStr); idStr = NULL; } #if DEBUG fprintf(stderr,"device file closed\n"); #endif return 0; } if ( working == 1 ) { if ( !(shmem->command == GET_IQ || shmem->command == TEST_DEV || shmem->command == GET_ID || shmem->command == GET_STAT) ) { shmem->retVal = 0; shmem->fd = deviceHdl; shmem->ready = 0; shmem->block = 1; return -1; } } switch(shmem->command) { case RELEASE: shmem->block = 0; shmem->retVal = 0; break; case TEST_DEV: if ( deviceHdl == -1 ) { /*shmem->retVal = openAndTestDevice(name);*/ shmem->retVal = openDevice(name,shmem->mode&PROT_D4 ? 0 : 1 ); } else if ( idStr ) { strcpy(shmem->buf,idStr); shmem->retVal = 0; } shmem->block = 0; break; case TERMINATE: if ( deviceHdl > -1 ) { switch(currentAction) { case EXCHANGE_ALL: if ( deviceHdl > 0 ) doExchange(name,deviceHdl, PROT_D4, 4, 0); } if ( working == -1 ) { #if DEBUG fprintf(stderr,"Received command TERMINATE\n"); #endif /* close all */ exitD4(deviceHdl); } } break; case RESET_PRT: shmem->retVal = resetPrinter(name, mode&PALL ); shmem->block = 0; break; case GET_ID: if ( idStr ) { shmem->retVal = 1; strcpy(shmem->buf, idStr); } else { /* try first with the D4 command, even if the */ /* command contain prot old */ shmem->retVal = getId(name, PROT_D4); /* if this fail use the non D4 protocol */ if ( shmem->retVal ) shmem->retVal = getId(name, mode&PALL); if ( shmem->retVal == 0) { if ( idStr ) { free(idStr); } idStr = strdup(shmem->buf); } } shmem->block = 0; break; case GET_IQ: shmem->retVal = getIq(name, mode&PALL); shmem->block = 0; break; case CHECK_NOZZLE: shmem->retVal = checkNozzle(name, mode&PALL); #if 1 if ( shmem->choice ) { sleep(10); shmem->retVal = resetPrinter(name, mode&PALL ); } #endif shmem->block = 0; break; case CLEAN_NOZZLE: shmem->retVal = cleanNozzle(name, mode&PALL); shmem->block = 0; break; case ALIGN_HEAD: shmem->retVal = doAlignHead(name, deviceHdl, mode&PALL, pass, choice, shmem->function ); break; case ALIGN_HEAD_C: shmem->retVal = doAlignHeadColor(name, deviceHdl, mode&PALL, pass, choice); break; case EXCHANGE_ALL: shmem->retVal = doExchange(name, deviceHdl, mode&PALL, 0, EXCHANGE_ALL); break; case EXCHANGE_B: shmem->retVal = doExchange(name, deviceHdl, mode&PALL, 0, EXCHANGE_B); break; case EXCHANGE_C: shmem->retVal = doExchange(name, deviceHdl, mode&PALL, 0, EXCHANGE_C); break; case EXCHANGE_NEXT: shmem->retVal = doExchange(name, deviceHdl, mode&PALL, pass, 0); break; default: shmem->block = 0; shmem->retVal = 0; } shmem->ready = 1; shmem->fd = deviceHdl; if ( errno == ENODEV && idStr ) { free(idStr); idStr = NULL; } return shmem->retVal; } return 0; } /****************************************************** * Function: setPrinterName() * * if the -model option is passed we have to build an * ID string * ******************************************************/ void setPrinterName(char *name) { char *s; if ( idStr == NULL ) { idStr = (char*)calloc(strlen(name)+20,1); if ( idStr ) { sprintf(idStr, "MDL:Stylus %s;",name); s = idStr; while ( (s = strchr(s, '_')) ) *s = ' '; } } } #endif #if 1 #ifdef MACOS #define RESET_TIMER(ti,oti) { signal(SIGALRM, sig); \ memset((void*)&ti,0,sizeof(ti)); \ memset((void*)&oti,0,sizeof(oti)); \ setitimer( ITIMER_REAL ,&ti, &oti); \ doRw = 0; \ } #define SET_TIMER(ti,oti,val) { memset((void*)&ti,0,sizeof(ti)); \ memset((void*)&oti,0,sizeof(oti)); \ ti.it_value.tv_sec = val/1000; \ ti.it_value.tv_usec = (val%1000)*1000; \ setitimer( ITIMER_REAL ,&ti, &oti); \ sig = signal(SIGALRM, _sigAlarm); \ doRw = 1; \ } #else #define RESET_TIMER(ti,oti) #define SET_TIMER(ti,oti,val) #endif #endif /****************************************************** * Function: openAndTestDevice() * * Under Linux the lp port may be opened if no printer * is attached. * * After the port is opened we send an old fashioned id query * If the write call is OK the printer is attached and * powered on, if not, we return ERROR * ******************************************************/ static int openAndTestDevice(char *dev ) { int len,i; int oldTimeOut; char iBuf[512]; if ( deviceHdl != -1 ) { if ( d4Initialized ) { /* exit from D4 */ exitD4(deviceHdl); } #if DEBUG fprintf(stderr,"Close(%d)\n",deviceHdl); #endif close(deviceHdl); deviceHdl = -1; } if ( deviceHdl == -1 ) { #if DEBUG fprintf(stderr,"Open %s\n",dev); #endif SET_TIMER(ti,oti,5000); #ifndef MACOS if ( (deviceHdl = open(dev, O_RDWR|O_NDELAY)) == -1 ) #else if ( (deviceHdl = mOpen(dev, O_RDWR)) == -1 ) #endif { /* Fatal error */ RESET_TIMER(ti,oti); #if DEBUG fprintf(stderr,"Can't open %s, error %d (%s)\n",dev, errno,strerror(errno)); #endif return -1; } RESET_TIMER(ti,oti); #if DEBUG fprintf(stderr,"openAndTestDevice() Open %s -> %d\n",dev,deviceHdl); #endif /* read all information remaining in the printer */ oldTimeOut = d4RdTimeout; d4RdTimeout = 200; for(i = 1; i > 0;) { i = _Read(deviceHdl, (uc*)iBuf, 511, 500); } d4RdTimeout = oldTimeOut; } len = _Write(deviceHdl, (uc*)"\033\1@EJL ID\r\n",11, 500); if ( len != 11 ) { #if DEBUG fprintf(stderr,"write on %s failed write %d/11 bytes\n",dev,len); #endif /* fatal error */ return -1; } /* wait a little bit */ usleep(50000); /* arm a timer so we will not block */ for ( i = 0; i < 5; i++ ) { #if DEBUG fprintf(stderr,"read from %s\n",dev); #endif len = _Read(deviceHdl, (uc*)shmem->buf, 511, 500); if ( len > 0 ) break; usleep(50000); } if ( len == -1 ) { #if DEBUG fprintf(stderr,"no info from %s\n",dev); #endif /* no information available */ return 1; } shmem->buf[len] = 0; /* Answer id the printer is in the D4 Mode */ /* 0x00 0x00 0x00 0x0a 0x00 0x00 0x7f 0x00 0x00 0x80 */ if ( shmem->buf[3] == len && shmem->buf[6] == 0x7f ) { /* tell that we have a D4 printer */ #if DEBUG fprintf(stderr,"D4 device detected on %s\n",dev); #endif return 2; } /* hope that all is OK */ #if DEBUG fprintf(stderr,"printer detected on %s\n",dev); #endif return 0; } /****************************************************** * Function: openDevice() * * Test if device file is opened, if not open it * * ******************************************************/ static int openDevice(char *dev, int doTest ) { int i; int oldTimeOut; char iBuf[512]; #if DEBUG fprintf(stderr,"+++ Enter openDevice(%s, %d)\n",dev, doTest); #endif if ( deviceHdl == -1 && doTest ) { i = openAndTestDevice(dev); if ( i == 2 ) { /* exit and reenter D4 Mode */ if ( deviceHdl != -1 ) { exitD4(deviceHdl); initializeD4(); } d4Initialized = True; } if ( i == 1 ) { /* state unknow ! */; d4Initialized = True; } if ( i == 0 ) { /* answer got for get id assume not D4 */; d4Initialized = False; } } else /* not tests, open only the printer port */ { if ( deviceHdl == -1 ) { #if DEBUG fprintf(stderr,"Open %s\n",dev); #endif SET_TIMER(ti,oti,5000); #ifndef MACOS if ( (deviceHdl = open(dev, O_RDWR|O_NDELAY)) == -1 ) #else if ( (deviceHdl = mOpen(dev, O_RDWR)) == -1 ) #endif { /* Fatal error */ RESET_TIMER(ti,oti); #if DEBUG fprintf(stderr,"Can't open %s, error %d (%s)\n",dev, errno,strerror(errno)); #endif return -1; } RESET_TIMER(ti,oti); #if DEBUG fprintf(stderr,"%s opened (%d)\n",dev, deviceHdl); #endif if ( inFromFile ) /* Test: we read from a file, don't read anythings */ { #if DEBUG fprintf(stderr,"openDevice() done, not Flush\n"); #endif return deviceHdl; } } /* flush the printer output buffer */ #if DEBUG fprintf(stderr,"Read old messages from %s\n",dev); #endif oldTimeOut = d4RdTimeout; d4RdTimeout = 200; for(i = 1; i > 0;) { i = _Read(deviceHdl, (uc*)iBuf, 511, 500); } d4RdTimeout = oldTimeOut; } #if DEBUG fprintf(stderr,"openDevice() done\n"); #endif return deviceHdl; } /****************************************************** * Function: exitD4() * * send the exit D4 command to the printer * * ******************************************************/ static int exitD4(int deviceHdl) { int len; d4Initialized = False; if ( deviceHdl == -1 ) { return -1; } if ( sockIdData != -1 ) CloseChannel(deviceHdl,sockIdData); if ( sockId != -1 ) CloseChannel(deviceHdl,sockId); sockIdData = sockId = -1; len = _Write(deviceHdl, (uc*)"\0\0\0\033\1@EJL 1284.4\n@EJL \n", 27, 500); if ( len != 27 ) { /* write failed */ return 1; } /* we have to wait a little bit */ usleep(100000); len = _Read(deviceHdl, (uc*)shmem->buf, 511, 1000); if ( len == -1 ) { /* no information available */ #if DEBUG fprintf(stderr,"exitD4: nothing read\n"); #endif return 1; } shmem->buf[len] = 0; /* If the printer expect the D4 Mode, we will */ /* get an error message (malformed packet) */ /* else the printer ID */ #if DEBUG { int i; fprintf(stderr,"ExitD4() "); for(i=0;i<(len>40)?40:len;i++) if ( isprint(shmem->buf[i]) ) fprintf(stderr,"%c",shmem->buf[i]); else fprintf(stderr,"0x%02x", (unsigned char)shmem->buf[i] ); fprintf(stderr,"\n"); } #endif if ( len == 10 && (unsigned char)shmem->buf[6] == 0x7f && (unsigned char)shmem->buf[9] == 0x80 ) return 0; shmem->buf[len] = 0; return 0; } /****************************************************** * Function: getId() * * Get the ID of attached printer. * * The called function is dependent of the given protocol * * ******************************************************/ static int getId(char *name, int prot) { int i; if ( deviceHdl == -1 ) { if ( (deviceHdl = openDevice(name, prot&PROT_D4?0:1)) == -1 ) { return -1; } } if ( (prot & PROT_OLD) == PROT_OLD ) { return getIdNoD4(deviceHdl, prot); } else if ( prot == PROT_D4 ) { if ( ! d4Initialized ) { for ( i = 0; i < 2; i++ ) { if ( initializeD4() ) { if ( i > 0 ) { return 1; } } else { break; } } } return getIdD4(deviceHdl); } return 0; } /****************************************************** * Function: getIq() * * Get the In quantity of attached printer. * * The called function is dependent of the given protocol * * ******************************************************/ static int getIq(char *name, int prot) { #if TEST #if TEST_DEBUG printf("Call getIqD4(%s, %d)\n".name,prot); #endif return getIqD4(deviceHdl); #endif /* This may be the first call from mtink, no autodetection */ /* if the printer is a D4 model and the ink is low we will */ /* block the printer if we query for identification with */ /* the old code, take account from them */ int doTest = (prot & PROT_D4) ? 0 : 1; if ( deviceHdl == -1 ) { if ( (deviceHdl = openDevice(name, doTest)) == -1 ) { return -1; } } if ( deviceHdl != -1 ) { if ( (prot & PROT_OLD) == PROT_OLD ) { return getIqOld(deviceHdl, prot); } if ( prot == PROT_D4 ) { if ( ! d4Initialized ) if ( initializeD4() ) return 1; return getIqD4(deviceHdl); } } return 0; } /****************************************************** * Function: resetPrinter() * * Perform a software reset of the printer. * * The called function is dependent of the given protocol * * ******************************************************/ static int resetPrinter(char *name, int prot) { int ret = -1; if ( deviceHdl == -1 ) { if ( (deviceHdl = openDevice(name,1)) == -1 ) { return ret; } } if ( (prot & PROT_OLD) == PROT_OLD ) { ret = resetPrinterOld(deviceHdl, prot); } else if ( prot == PROT_D4 ) { if ( ! d4Initialized ) if ( initializeD4() ) return 1; ret = d4Reset(deviceHdl); } return 0; } /****************************************************** * Function: checkNozzle() * * Call the check nozzle function of the printer * * The called function is dependent of the given protocol * * ******************************************************/ static int checkNozzle(char *name, int prot) { if ( deviceHdl == -1 ) { if ( (deviceHdl = openDevice(name,1)) == -1 ) { return -1; } } if ( (prot & PROT_OLD) == PROT_OLD ) { return checkNozzleOld(deviceHdl, prot); } else if ( prot == PROT_D4 ) { if ( ! d4Initialized ) if ( initializeD4() ) return 1; return d4CheckNozzle(deviceHdl); } return 0; } /****************************************************** * Function: cleanNozzle() * * Call the clean nozzle function of the printer * * The called function is dependent of the given protocol * * ******************************************************/ static int cleanNozzle(char *name, int prot) { if ( deviceHdl == -1 ) { if ( (deviceHdl = openDevice(name,1)) == -1 ) { return -1; } } if ( (prot & PROT_OLD) == PROT_OLD ) { return cleanNozzleOld(deviceHdl, prot); } else if ( prot == PROT_D4 ) { if ( ! d4Initialized ) if ( initializeD4() ) return 1; return d4CleanNozzle(deviceHdl); } return 0; } /****************************************************** * Function: tellPrinterState() * * Try to get the printer state value from the passed * buffer, return the state if found (and put the value * into the shared memory) * else return "unknown" * ******************************************************/ static int tellPrinterState(char *buf) { int i; while ( *buf ) { if ( buf[0] == 'S' && buf[1] == 'T' && buf[2] == ':' ) { i = atoi(buf+3); if ( shmem ) { shmem->printerState = i; } return i; } buf++; } return 7; } /****************************************************** * Function: initializeD4() * * enter into the D4 packet mode and make the initialisation * works * * return 0 if OK 1 on problems * ******************************************************/ int initializeD4() { unsigned char iBuf[65536]; int oldTimeOut; int i; /* try to enter the IEEE conversation */ if ( ! EnterIEEE(deviceHdl) ) { #if DEBUG fprintf(stderr,"EnterIEEE Terminate with error\n"); #endif return(1); } if ( ! Init(deviceHdl) ) { #if DEBUG fprintf(stderr,"Init Terminate with error\n"); #endif return(1); } /* get the socket numbet for the EPSON-Control channel */ sockId = GetSocketID(deviceHdl, "EPSON-CTRL"); if ( sockId == 0 ) { #if DEBUG fprintf(stderr,"Close(%d)\n", deviceHdl); #endif close(deviceHdl); deviceHdl = -1; return 1; } /* open ctrl channel credit for receiving of data = 0 */ switch ( OpenChannel(deviceHdl, sockId, &sndSize, &rcvSize) ) { case -1: #if DEBUG fprintf(stderr,"Fatal Error return 1\n"); #endif return 1; /* unrecoverable error */ break; case 0: #if DEBUG fprintf(stderr, "Error\n"); /* recoverable error ? */ #endif return 1; break; } if ( !inFromFile ) { /* flush */ oldTimeOut = d4RdTimeout; d4RdTimeout = 200; for (i=1;i>0;) { i = readData(deviceHdl,sockId, (uc*)iBuf, 511); if ( !inFromFile ) break; } d4RdTimeout = oldTimeOut; } else { /* read the next answer (credit) which what issued bey the */ /* above call of readData() in normal mode */ devRead(deviceHdl, (uc*)iBuf, 511, 0); } d4Initialized = True; return 0; } /****************************************************** * Function: getIdNoD4() * * Get the device identification using old code * * ******************************************************/ static int getIdNoD4(int deviceHdl, int prot) { int len; int i; if ( (prot & PROT_EXIT) ) exitD4(deviceHdl); len = _Write(deviceHdl, (uc*)"\033\1@EJL ID\r\n", 11, 500); if ( len != 11 ) { #if DEBUG fprintf(stderr,"write failed (%d/11 bytes)\n",len); #endif return 1; } /* we have to wait a little bit */ usleep(100000); /* arm a timer so we will not block */ for ( i = 0; i < 5; i++ ) { len = _Read(deviceHdl, (uc*)shmem->buf, 511, WRTIMEOUT); if ( len > 0 ) break; usleep(100000); } if ( len == -1 ) { /* no information available */ return 1; } shmem->buf[len] = 0; return 0; } /****************************************************** * Function: getIqOld() * * Get the device identification using old code * * ******************************************************/ static int getIqOld(int deviceHdl, int prot) { int len; int i; if ( (prot & PROT_EXIT ) ) { exitD4(deviceHdl); } len = _Write(deviceHdl, (uc*)"\033@\033@\033(R\010\0\0REMOTE1IQ\1\0\1\033\0\0\0", 26, 500); if ( len != 26 ) { return 1; } /* we have to wait a little bit */ usleep(100000); for ( i = 0; i < 5; i++ ) { len = _Read(deviceHdl,(uc*) shmem->buf, 511, 500); if ( len > 0 ) break; usleep(1000000); } if ( len == -1 ) { /* no information available */ return 1; } shmem->buf[len] = 0; return 0; } /****************************************************** * Function: resetPrinterOld() * * send the remote software reset command * * ******************************************************/ static unsigned char resetCommand []= { "\033@\033@\033(R\010\0\0REMOTE1RS\1\0\1\033\0\0\0" }; static int resetPrinterOld(int deviceHdl, int prot) { int len; int resetCommandLen = 26; if ( (prot & PROT_EXIT ) ) exitD4(deviceHdl); if ( !(prot & PROT_D4) ) { len = _Write(deviceHdl, resetCommand, resetCommandLen, 500); if ( len != 26 ) { return 1; } } else { if ( ! d4Initialized ) if ( initializeD4() ) return 1; len = writeD4Data(deviceHdl,resetCommand,resetCommandLen,1); if ( len != 26 ) { return 1; } } sleep(3); return 0; } /****************************************************** * Function: checkNozzleOld() * * send the remote software nozzle cjeck command * * ******************************************************/ static int checkNozzleOld(int deviceHdl, int prot) { int len; /* id was required before */ if ( (prot & PROT_EXIT ) ) exitD4(deviceHdl); len = _Write(deviceHdl, (uc*)"\033@\033@\033(R\010\0\0REMOTE1NC\2\0\0\0\033\0\0\0\f", 28, 500); if ( len != 28 ) { return 1; } sleep(3); return 0; } /****************************************************** * Function: cleanNozzleOld() * * send the remote software nozzle cjeck command * * ******************************************************/ static int cleanNozzleOld(int deviceHdl, int prot) { int len; /* id was required before */ if ( (prot & PROT_EXIT) ) exitD4(deviceHdl); len = _Write(deviceHdl, (uc*)"\033@\033@\033(R\010\0\0REMOTE1CH\2\0\0\0\033\0\0\0", 27, 500); if ( len != 27 ) { return 1; } sleep(5); return 0; } /****************************************************** * Function: getID4() * * Get the device identification using D4 mode * * ******************************************************/ static int getIdD4(int deviceHdl) { int credit; int i; int ret = 1; shmem->buf[0] = '\0'; credit = askForCredit(deviceHdl, sockId, &sndSize, &rcvSize); if ( credit > -1 ) { /* request status command */ if ( (i=writeData(deviceHdl, sockId, (uc*)"di\1\0\1", 5, 1)) > 0 ) { readAgain: if ( ( i = readData(deviceHdl, sockId, (uc*)shmem->buf, 511) ) > -1 ) { shmem->buf[i] = '\0'; if ( strncmp("di", shmem->buf, 2) ) { /* not di */ if ( strncmp("@E", shmem->buf, 2) ) { /* not @ E*/ /* wrong message returned, command from an older command */ goto readAgain; } } shmem->buf[i] = '\0'; ret = 0; } else { ret = 1; } } else { ret = 1; } } else { ret = 1; } return ret; } /****************************************************** * Function: getColorModel() * * Look for color found in the IQ data field and * return the color model we have found * ******************************************************/ char getColorModel(char *s, int count) { int K = 0; int C = 0; int M = 0; int y = 0; int c = 0; int m = 0; int Y = 0; int R = 0; int B = 0; int X = 0; int k = 0; int g = 0; int idx; for ( idx = 0; idx < count; idx++ ) { switch(*s) { case 0: switch(idx) { case 3: k++; break; case 4: k++; break; case 5: k++; break; case 12: g++; break; default: K++; break; } break; case 1: C++; break; case 2: M++; break; case 3: y++; break; case 4: c++; break; case 5: m++; break; case 6: Y++; break; case 7: k++; break; case 9: R++; break; case 10: B++; break; case 11: X++; break; case 12: g++; break; } s += 3; } if ( R && B && X && k ) return MODEL_KCMyRBkX; else if ( g && k ) return MODEL_KCMycmGg; else if ( R && B && X ) return MODEL_KCMyRBX; else if ( R && B ) return MODEL_KCMyRB; else if ( Y ) return MODEL_KCMycmY; else if ( k ) return MODEL_KCMycmk; else if ( c ) return MODEL_KCMycm; else return MODEL_KCMy; } /****************************************************** * Function: convertToAsciiSt() * * Convert the binary format to the ascii format * * The message look as follow: * * '@', 'B', 'D', 'C', ' ', 'S', 'T', '2', 0x0d, 0x0a * Tag Cnt Dat1 Dat2 .... * Tag Cnt Dat1 Dat2 .... * Tag Cnt Dat1 Dat2 .... * ... * * Tag is 1 for ST, 2 for ER 0x0f for IC * Cnt is the length for data bytes * * For ER the first data byte is the binary value of old Hex value * For ST "" "" * * Index for value is index of Tag + 2 * * For IC Cnt Dat1 ... is as follow * * IQ: data follow the ST and Error fields and are * Cnt / 3 = number of inks * Tag Cnt ? ? ? ? K ? ? ? C ? ? ? M ? ? ? ... * * INK: data as follow: * Tag Cnt ? ? ? I ? ? ? I ? ? ? I ? ? ? * * The string value according to the field is for 0 ... 7 * 1101, 3202, 4304, 5408, 6210, 7320, 1101, 9440 * * Stream read from a C84 * Off 00 40 42 44 43 20 53 54 32 0d 0a * @ B D C S T 2 * 10 21 00 * * 12 01 01 04 * ST: OK * 15 0b 05 02 00 00 00 00 * * 22 0f 0d 03 01 00 38 03 01 40 04 02 40 05 03 41 * IC: ik K ic C im M iy Y * 37 10 03 01 0c 4e * * 42 13 01 01 * * the color is given by the bytes marked ik, ic, ... * the floowing inks are known: * 0x00 black / Mate Black / Photo Black * 0x01 Cyan * 0x02 Magenta * 0x03 Yellow * 0x04 light Cyan * 0x05 Light Magenta * 0x06 Dark Yellow * 0x07 Light Black * 0x09 Red * 0x0a Blue * 0x0b Clear * 0x0c light light black (Photo R2400) * * The different Black are recognised according to there position * eg; * 0 1 2 3 4 * of xx xx xx 00 vv xx 01 vv xx 02 vv xx 00 vv xx 00 vv * Pos 0 -> normal black, pos 3 = Matte Black pos 4 = Photo Black * ******************************************************/ void convertToAsciiSt(char *buf, int len) { unsigned char tmp[1024]; int i; int j; int cnt; int val[8]; char *s = buf+7; char colorModel; int K = 0; /* Black */ int C = 0; /* Cyan */ int M = 0; /* Magenta */ int y = 0; /* light yellow */ int c = 0; /* light cyan */ int m = 0; /* light magenta */ int Y = 0; /* Yellow */ int R = 0; /* Red */ int B = 0; /* Blue */ int X = 0; /* Gloss */ int k = 0; /* matte/light grey */ int g = 0; /* light light grey */ /* save the data to a temporary buffer so we can */ /* modify the input buffer */ memcpy(tmp, buf, len); *s = '\0'; strcat(s,"\r\n"); s += 2; buf[len] = '\0'; memset(val,0xff,sizeof(val)); for (i = 10; i < len; ) { #if TEST_DEBUG printf("Tag = %02x length %d\n", (unsigned char)tmp[i],tmp[i+1]); #endif switch(tmp[i]) { case 1: /* printer status */ sprintf(s, "ST:%02x;",tmp[i+2]); s += 6; break; case 2: /* printer error */ sprintf(s, "ER:%02x;",tmp[i+2]); s += 6; break; case 15: /* ink quantity */ sprintf(s, "INQ:"); s += 4; cnt = tmp[i+1] / 3; #if TEST_DEBUG printf("%d inks\n",cnt); #endif *s = colorModel = getColorModel((char*)tmp+i+4, cnt); #if TEST_DEBUG printf("%d inks model %c\n",cnt,*s); #endif s++; memset(val,-1, sizeof(val)); /* make shure that color order is OK */ /* MODELS ARE: KCMy '1' colorcode 0123 KCMycm '2' 012345 KCMycmY '3' 0123456 KCMycmk '4' 01239A KCMyRB '5' 01239AB KCMyRBX '6' 01239ABX KCMyRBkX '7' 01239AB0X KCMycmGg '8' 012359Ag */ for ( j = 0; j < cnt; j++ ) { #if TEST_DEBUG printf("Color code st pos %d = %d val=%d\n",j,tmp[i+4+(3*j)], tmp[i+5+(3*j)]); #endif switch(tmp[i+4+(3*j)]) { case 0: /* black at pos 0 */ /* or 4 */ if ( j == 3 ) /* black */ { K = (unsigned char)tmp[i+5+(3*j)]; } else if ( j == 4 && colorModel != MODEL_KCMycmGg ) { /* black on R2400 */ /* photo black on R800 */ k = (unsigned char)tmp[i+5+(3*j)]; } else { K = (unsigned char)tmp[i+5+(3*j)]; } break; case 1: /* cyan at pos 1 */ C = (unsigned char)tmp[i+5+(3*j)]; break; case 2: /* magenta at pos 2 */ M = (unsigned char)tmp[i+5+(3*j)]; break; case 3: /* yellow at pos 3 */ y = (unsigned char)tmp[i+5+(3*j)]; break; case 4: /* lcyan at pos 4 */ c = (unsigned char)tmp[i+5+(3*j)]; break; case 5: /* lmagenta at pos 5 */ m = tmp[i+5+(3*j)]; break; case 6: /* dark yellow at pos 6 */ Y = tmp[i+5+(3*j)]; break; case 7: /* grey at pos 6 */ case 8: /* grey at pos 3 */ k = (unsigned char)(unsigned char)tmp[i+5+(3*j)]; break; case 9: /* red at pos 4 */ R = (unsigned char)tmp[i+5+(3*j)]; break; case 10: /* blue at pos 5 */ B = (unsigned char)tmp[i+5+(3*j)]; break; case 11: /* gloss at pos 6 or 7 */ X = (unsigned char)tmp[i+5+(3*j)]; break; case 12: /*ligth light black pos 0 */ g = (unsigned char)tmp[i+5+(3*j)]; break; } } switch (colorModel ) { case MODEL_KCMycm: sprintf(s, "%02x", K); s += 2; sprintf(s, "%02x", C); s += 2; sprintf(s, "%02x", M); s += 2; sprintf(s, "%02x", y); s += 2; sprintf(s, "%02x", c); s += 2; sprintf(s, "%02x", m); s += 2; break; case MODEL_KCMycmY: sprintf(s, "%02x", K); s += 2; sprintf(s, "%02x", C); s += 2; sprintf(s, "%02x", M); s += 2; sprintf(s, "%02x", y); s += 2; sprintf(s, "%02x", c); s += 2; sprintf(s, "%02x", m); s += 2; sprintf(s, "%02x", Y); s += 2; break; case MODEL_KCMycmk: sprintf(s, "%02x", K); s += 2; sprintf(s, "%02x", C); s += 2; sprintf(s, "%02x", M); s += 2; sprintf(s, "%02x", y); s += 2; sprintf(s, "%02x", c); s += 2; sprintf(s, "%02x", m); s += 2; sprintf(s, "%02x", k); s += 2; break; case MODEL_KCMyRB: *s++ = K; *s++ = C; *s++ = M; *s++ = y; *s++ = B; break; case MODEL_KCMyRBX: sprintf(s, "%02x", K); s += 2; sprintf(s, "%02x", C); s += 2; sprintf(s, "%02x", M); s += 2; sprintf(s, "%02x", y); s += 2; sprintf(s, "%02x", R); s += 2; sprintf(s, "%02x", B); s += 2; sprintf(s, "%02x", X); s += 2; break; case MODEL_KCMyRBkX: sprintf(s, "%02x", K); s += 2; sprintf(s, "%02x", C); s += 2; sprintf(s, "%02x", M); s += 2; sprintf(s, "%02x", y); s += 2; sprintf(s, "%02x", R); s += 2; sprintf(s, "%02x", B); s += 2; sprintf(s, "%02x", k); s += 2; sprintf(s, "%02x", X); s += 2; break; case MODEL_KCMycmGg: sprintf(s, "%02x", K); s += 2; sprintf(s, "%02x", C); s += 2; sprintf(s, "%02x", M); s += 2; sprintf(s, "%02x", y); s += 2; sprintf(s, "%02x", c); s += 2; sprintf(s, "%02x", m); s += 2; sprintf(s, "%02x", k); s += 2; sprintf(s, "%02x", g); s += 2; case MODEL_KCMy: default: sprintf(s, "%02x", K); s += 2; sprintf(s, "%02x", C); s += 2; sprintf(s, "%02x", M); s += 2; sprintf(s, "%02x", y); s += 2; break; } strcat(s,";"); s++; break; } #if TEST_DEBUG printf("\n"); #endif i += tmp[i+1] + 2; } } /****************************************************** * Function: getIq4() * * Get the ink quantity and the printer state. * Use the D4 packet mode. * ******************************************************/ static int getIqD4(int deviceHdl) { int credit; int i; int ret = 1; shmem->buf[0] = '\0'; credit = askForCredit(deviceHdl, sockId, &sndSize, &rcvSize); if ( credit > -1 ) { /* request status command */ if ( (i=writeData(deviceHdl, sockId, (uc*)"st\1\0\1", 5, 1)) > 0 ) { readAgain: if ( ( i = readData(deviceHdl, sockId, (uc*)shmem->buf, 511) ) > -1 ) { if ( strncmp("st", shmem->buf, 2) ) { /* not st, may be good */ if (strncmp("@B", shmem->buf, 2) ) { /* not @B, is wrong */ /* wrong message returned, command from an older command */ goto readAgain; } else /* "@BCD ST ST" found check/convert to old format */ { if ( shmem->buf[7] == '2' ) { /* new binary format ! */ convertToAsciiSt(shmem->buf,i); } else shmem->buf[i] = '\0'; } } ret = 0; /* shmem->buf[i] = '\0';*/ } else { ret = 1; } } else { ret = 1; } } else { ret = 1; } return ret; } /****************************************************** * Function: d4Reset() * * Send the D4 reset command to the printer. * ******************************************************/ static int d4Reset(int deviceHdl) { int credit; int i; int ret = 1; int dataChannelOpen = 0; shmem->buf[0] = '\0'; /* may be we had a print job before */ if ( sockIdData > -1 ) { /* close the data channel */ CloseChannel(deviceHdl, sockIdData ); sockIdData = -1; dataChannelOpen = 1; } credit = askForCredit(deviceHdl, sockId, &sndSize, &rcvSize); if ( credit > -1 ) { /* request status command */ if ( (i=writeData(deviceHdl, sockId, (uc*)"rs\1\0\1", 5, 1)) > 0 ) { if ( ( i = readData(deviceHdl, sockId, (uc*)shmem->buf, 511) ) > -1 ) { shmem->buf[i] = '\0'; ret = 0; } else { ret = 1; } } else { ret = 1; } } else { ret = 1; } #if WAIT_FOR_PRINTER /* ask for the printer state and leave the loop */ /* if the printer tell us that it is OK */ waitForPrinterReady(deviceHdl, 5); #endif return ret; } /****************************************************** * Function: d4CheckNozzle() * * Send the D4 check nozzle command to the printer. * ******************************************************/ static int d4CheckNozzle(int deviceHdl) { int credit; int i; int ret = 1; shmem->buf[0] = '\0'; credit = askForCredit(deviceHdl, sockId, &sndSize, &rcvSize); if ( credit > -1 ) { /* request status command */ if ( (i=writeData(deviceHdl, sockId, (uc*)"nc\1\0\0", 5, 1)) > 0 ) { if ( ( i = readData(deviceHdl, sockId, (uc*)shmem->buf, 511) ) > -1 ) { shmem->buf[i] = '\0'; ret = 0; } else { ret = 1; } } else { ret = 1; } } else { ret = 1; } return ret; } /****************************************************** * Function: d4CleanNozzle() * * Send the D4 clean head command to the printer. * ******************************************************/ static int d4CleanNozzle(int deviceHdl) { int credit; int i; int ret = 1; shmem->buf[0] = '\0'; credit = askForCredit(deviceHdl, (uc)sockId, &sndSize, &rcvSize); if ( credit > -1 ) { /* request status command */ if ( (i=writeData(deviceHdl, (uc)sockId, (uc*)"ch\1\0\1", 5, 1)) > 0 ) { if ( ( i = readData(deviceHdl, sockId, (uc*)shmem->buf, 511) ) > -1 ) { shmem->buf[i] = '\0'; ret = 0; } else { ret = 1; } } else { ret = 1; } } else { ret = 1; } return ret; } /****************************************************** * Function: doExchange() * * exchange cartridge. * ******************************************************/ static int doExchange(char *name, int deviceHdl, int prot, int step, int choice) { int ret = 1; unsigned char *buf = NULL; int len = 0; unsigned char returnValue[50]; int i; if ( deviceHdl == -1 ) { if ( name == NULL || (deviceHdl = openDevice(name,0)) == -1 ) { return -1; } } if ( (prot & PROT_D4) == 0 ) { shmem->ready = 1; return 1; } if ( ! d4Initialized ) { for ( i = 0; i < 2; i++ ) { if ( initializeD4() ) { if ( i > 0 ) { shmem->ready = 1; return 1; } } else { break; } } } switch (step) { case 0: /* start ExchangeInk choice */ buf = exchangeInk; len = sizeof(exchangeInk); currentAction = EXCHANGE_ALL; switch(choice) { case EXCHANGE_B: exchangeInk[CMD_IDX] = BlackInkPosition; break; case EXCHANGE_C: exchangeInk[CMD_IDX] = ColorInkPosition; break; case EXCHANGE_ALL: exchangeInk[CMD_IDX] = AllInkPosition; break; default: shmem->ready = 1; return 1; } break; case 1: /* wait For CarriagePosition cx:01 */ sleep(5); /* waitFor CarriagePosition cx:01 */ for (;;) { len = sizeof(carriagePosition); askForCredit(deviceHdl,sockId, &sndSize, &rcvSize); writeData(deviceHdl, sockId, carriagePosition, len, 1); readData(deviceHdl, sockId, returnValue, sizeof(returnValue)-1 ); if ( strncmp("cx:01;", (char*)returnValue,5) == 0 ) { break; } /* this will hoppely not happen, but if the user ... */ if ( ! connectedOnServer && getppid() == 1 ) { parentDie(0); break; } usleep(5000); } break; case 3: /* ExchangeInk Start (fill up), cartridge was changed */ exchangeInk[CMD_IDX] = StartInkFillUp; len = sizeof(exchangeInk); askForCredit(deviceHdl,sockId, &sndSize, &rcvSize); i = writeData(deviceHdl, sockId, exchangeInk, len, 1); readData(deviceHdl, sockId, returnValue, sizeof(returnValue)-1 ); sleep(5); /* waitFor PrinterStatus ST:04 */ waitForPrinterReady( deviceHdl, 30); /* this will hoppely not happen, but if the user ... */ if ( ! connectedOnServer && getppid() == 1 ) { parentDie(0); break; } break; case 4: /* ExchangeInkTerminate */ buf = exchangeInkTerminate; len = sizeof(exchangeInkTerminate); break; } /* write command */ if ( buf ) { askForCredit(deviceHdl,sockId, &sndSize, &rcvSize); if ( writeData(deviceHdl, sockId, buf, len, 1) == len ) { if ( (i = readData(deviceHdl, (uc)sockId, (uc*)shmem->buf, 511)) > 0 ) { shmem->buf[i] = '\0'; /* check if operation is OK */ if ( shmem->buf[6] == 'N' ) ret = 1; else ret = 0; } else ret = 1; } else ret = 1; } shmem->ready = 1; if ( step == 4 ) currentAction = 0; return ret; } /****************************************************** * Function: waitForPrinterReady() * * wait for the printer ready state. * ******************************************************/ static void waitForPrinterReady(int deviceHdl, int maxWaitTime) { time_t t=time(NULL) + maxWaitTime; int oldRdTimeout = d4RdTimeout; int oldWrTimeout = d4WrTimeout; oldRdTimeout = 200000; oldWrTimeout = 200000; while (t > time(NULL) ) { *shmem->buf = 0; getIqD4(deviceHdl); if ( tellPrinterState(shmem->buf) == 4 ) break; sleep(2); if ( ! connectedOnServer && getppid() == 1 ) { parentDie(0); break; } } d4RdTimeout = oldRdTimeout; d4WrTimeout = oldWrTimeout; } /****************************************************** * Function: doAlignHead() * * handle the head alignement. * ******************************************************/ static int doAlignHead(char *name, int deviceHdl, int prot, int pass, int choice, char *function) { int i = 0; int pos; int toWrite; int len; int stop = 0; int cnt; if ( deviceHdl == -1 ) { /* if ( name == NULL || (deviceHdl = openDevice(name,1)) == -1 )*/ if ( name == NULL || (deviceHdl = openDevice(name,0)) == -1 ) { fprintf(stderr,"doAlignHead Error 1\n"); return -1; } } bufpos = 0; /* print pattern */ if ( choice == 0 ) { switch(pass) { case 1: case 2: case 3: case -3: /* 3 pass printed out all at the same time */ if ( *function == '\0' ) { bufpos = add_newlines(7 * (pass - 1), bufpos, printer_cmd); bufpos = do_remote_cmd(bufpos, printer_cmd, "DT", 3, 0, pass - 1, 0); bufpos = add_formfeed(bufpos, printer_cmd); } else if ( *function == '/' ) { bufpos = interpretFile(function, bufpos, printer_cmd, sizeof(printer_cmd)); } else if ( strcmp(function, "Pattern820") == 0 ) { bufpos = doAlignPattern820(pass, bufpos, printer_cmd); } else if ( strcmp(function, "PatternC82") == 0 ) { bufpos = doAlignPatternC82(pass, bufpos, printer_cmd); } break; default: /* save */ if ( ! function || (function && *function != '/') ) { bufpos = do_remote_cmd(bufpos, printer_cmd, "SV", 0); } else { bufpos = do_remote_cmd_new(bufpos, printer_cmd, "JE", 1, 0 ,0); printer_cmd[bufpos++] = 0x1b; printer_cmd[bufpos++] = '@'; printer_cmd[bufpos++] = 0x1b; printer_cmd[bufpos++] = '@'; bufpos = do_remote_cmd_new(bufpos, printer_cmd, "SV", 0); } } } else if ( choice > 0 ) { if ( pass > -1 ) { /* set choice as stated by the user */ bufpos = do_remote_cmd(bufpos, printer_cmd,"DA", 4, 0, pass - 1, 0, choice); } else { bufpos = do_remote_cmd_new(bufpos, printer_cmd, "LC", 2, 0, 0, 0); printer_cmd[bufpos++] = 0x1b; printer_cmd[bufpos++] = '@'; printer_cmd[bufpos++] = 0x1b; printer_cmd[bufpos++] = '@'; bufpos = do_remote_cmd_new(bufpos, printer_cmd, "JE", 1, 0 ,0); printer_cmd[bufpos++] = 0x1b; printer_cmd[bufpos++] = '@'; printer_cmd[bufpos++] = 0x1b; printer_cmd[bufpos++] = '@'; bufpos = do_remote_cmd_first(bufpos, printer_cmd,"DA", 4, 0, 0, 0, choice&0xff); bufpos = do_remote_cmd_add(bufpos, printer_cmd, "DA", 4, 0, 1, 0, (choice>>8)&0xff); bufpos = do_remote_cmd_last(bufpos, printer_cmd, "DA", 4, 0, 2, 0, (choice>>16)&0xff); printer_cmd[bufpos++] = 0x1b; printer_cmd[bufpos++] = '@'; printer_cmd[bufpos++] = 0x1b; printer_cmd[bufpos++] = '@'; } } else /* choice < 0, final test */ { if ( ! function ) { bufpos = add_newlines(7 * pass, bufpos, printer_cmd); for ( i = 0; i < pass; i++ ) { bufpos = do_remote_cmd(bufpos, printer_cmd,"DT", 3, 0,i , 0); } bufpos = add_formfeed(bufpos,printer_cmd); } else if ( *function == '/' ) { bufpos = interpretFile(function, bufpos, printer_cmd, sizeof(printer_cmd)); } else if ( strcmp(function, "Pattern820") == 0 ) { bufpos = doAlignPattern820(0, bufpos, printer_cmd); } else if ( strcmp(function, "PatternC82") == 0 ) { bufpos = doAlignPatternC82(0, bufpos, printer_cmd); } stop = 1; } if ( prot & PROT_D4 ) { if ( ! d4Initialized ) { for ( i = 0; i < 2; i++ ) { if ( initializeD4() ) { if (i > 0 ) { return 1; } } else { break; } } } i = writeD4Data(deviceHdl, printer_cmd, bufpos, stop); #if WAIT_FOR_PRINTER waitForPrinterReady(deviceHdl, 30); #endif return i > 0 ? 0 : 1; } else { if ( d4Initialized ) { exitD4(deviceHdl); } len = bufpos; pos = 0; cnt = 0; while (len > 0 ) { toWrite = len > 1024 ? 1024 : len; i = _Write(deviceHdl, (uc*)printer_cmd + pos, toWrite,WRTIMEOUT); if ( i > 0 ) { pos += i; len -= i; } else if ( i < 0 && errno != EAGAIN) { break; } else if ( i < 0 ) { cnt++; usleep(100000); if ( cnt == 60 ) return -1; } } return i > 0 ? 0 : -1; } } /******************************************************************** * Function doAlignHeadColor() * * handle the color head alignment * * ********************************************************************/ static int doAlignHeadColor(char *name, int deviceHdl, int prot, int pass, int choice) { int i; int stop = 0; bufpos = 0; if ( choice == 0 ) { switch(pass) { case 1: case 2: case 3: bufpos = add_newlines(7 * (pass - 1), bufpos, printer_cmd); bufpos = do_remote_cmd(bufpos, printer_cmd, "DU", 6, 0, pass, 0, 9, 0, pass-1); bufpos = add_formfeed(bufpos, printer_cmd); break; default: /* save */ bufpos = do_remote_cmd(bufpos, printer_cmd, "SV", 0); } } else if ( choice > 0 ) { /* set choice as stated by the user */ bufpos = do_remote_cmd(bufpos, printer_cmd, "DA", 6, 0, 0, 0, choice, 9, 0); } else { stop = 1; } if ( deviceHdl == -1 ) { if ( name == NULL || (deviceHdl = openDevice(name,1)) == -1 ) { return -1; } } /* choose the write function */ if ( prot & PROT_D4 ) { if ( ! d4Initialized ) { for ( i = 0; i < 2; i++ ) { if ( initializeD4() ) { if ( i > 0 ) { return 1; } } else { break; } } } return writeD4Data(deviceHdl, printer_cmd, bufpos,stop); } else { if ( d4Initialized ) { exitD4(deviceHdl); } i = _Write(deviceHdl, (uc*)printer_cmd, bufpos, WRTIMEOUT); return i; } } /******************************************************************** * Function writeD4Data() * * write the data contained in printer_cmd with len bufpos * with the D4 protocol via the data channel * ********************************************************************/ int writeD4Data(int deviceHdl, unsigned char *data, int len, int stop) { int ret = -1; /* assume error */ int toWrite; int pos = 0; if ( sockIdData == -1 ) { sockIdData = GetSocketID(deviceHdl, "EPSON-DATA"); if ( sockIdData > 0 ) { if ( OpenChannel(deviceHdl, sockIdData, &sndSizeData, &rcvSizeData) > 0 ) { ret = 0; } } } else { ret = 0; } if ( len == 0 ) { shmem->dataSocketId = sockIdData; return sndSizeData; } while (len > 0 && ret != -1 ) { if ( ret >= 0 && !dataCredit ) { dataCredit = askForCredit(deviceHdl, sockIdData, &sndSize, &rcvSize); } if ( ret >= 0 && dataCredit > 0 ) { toWrite = len > (sndSizeData-6) ? (sndSizeData-6) : len; ret = writeData(deviceHdl,sockIdData,data+pos,toWrite, stop); if ( ret > 0 ) { len -= toWrite; pos += toWrite; ret = pos; } else { return -1; } dataCredit--; } } return ret; } mtink-1.0.16/mainSrc/cfg1.c0000644000076400001540000003715110664770237013454 0ustar jjfuse/* file cfg1.c * * First configuration window * device and printer choice * */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "mtink.h" #include "cfg1.h" #include "cfg2.h" #include "wheelmouse.h" #include "micon.h" #include "access.h" #include "rdPrtDesc.h" #define defaultConfigData configData #define defaultConfigDataSize configEntries; static Widget configWindow; static Widget cfg1Next_PB; static Widget cfg1_LB; static Widget title_LB; static Widget printerList; static Widget separator; static int count; static int leaveLoop; /* create the coonfiguration window */ static void cfgNext_CB(Widget w, XtPointer clientData, XtPointer callData); char *deviceList[] = { "/dev/lp0", /* Linux */ "/dev/lp1", /* on new kernel /dev/printer/0,... /dev/printer/3 */ "/dev/lp2", "/dev/lp3", "/dev/printers/0", "/dev/printers/1", "/dev/printers/2", "/dev/printers/3", "/dev/usb/lp0", "/dev/usb/lp1", "/dev/usb/lp2", "/dev/usb/lp3", "/dev/usb/lp4", "/dev/usb/lp5", "/dev/usb/lp6", "/dev/usb/lp7", "/dev/usb/lp9", "/dev/usb/lp9", "/dev/usb/lp10", "/dev/usb/lp11", "/dev/usb/lp12", "/dev/usb/lp13", "/dev/usb/lp14", "/dev/usb/lp15", "/dev/usblp0", "/dev/usblp1", "/dev/usblp2", "/dev/usblp3", "/dev/usblp4", "/dev/usblp5", "/dev/usblp6", "/dev/usblp7", "/dev/usblp8", "/dev/usblp9", "/dev/usblp10", "/dev/usblp11", "/dev/usblp12", "/dev/usblp13", "/dev/usblp14", "/dev/usblp15", "/dev/ecpp0", /* Solaris */ "/dev/ecpp1", "/dev/ecpp2", "/dev/ecpp3", "/dev/ecpp4", "/dev/lpt0", /* FreeBSD */ "/dev/lpt1", "/dev/lpt2", "/dev/ulpt0", "/dev/ulpt1", "/dev/ulpt2", "/dev/unlpt0", "/dev/unlpt1", "/dev/unlpt2", NULL }; static char **knownDevices; /*******************************************************************/ /* Function createAlignButtons() */ /* */ /* Create the window for device and printer selection */ /* */ /* Input: Widget parent not used */ /* int *next not used */ /* */ /* return: - */ /* */ /*******************************************************************/ Widget createConfigurePrinter(Widget parent, int *next) { Arg args[20]; int n = 0; configWindow = XtVaCreateWidget("configWindow", xmFormWidgetClass, mainForm, XmNmarginHeight, 0, XmNmarginWidth, 0, XmNresizePolicy, XmRESIZE_GROW, XmNresizable, True, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); if (configWindow == NULL) { return False; } XtManageChild(configWindow); title_LB = XtVaCreateWidget("title_LB", xmLabelWidgetClass, configWindow, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 5, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 5, XmNtopAttachment, XmATTACH_FORM, XmNtopOffset, 10, XmNalignment, XmALIGNMENT_CENTER, NULL); XtManageChild(title_LB); cfg1_LB = XtVaCreateWidget("cfg1_LB", xmLabelWidgetClass, configWindow, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 5, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 5, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 10, XmNtopWidget, title_LB, XmNalignment, XmALIGNMENT_BEGINNING, NULL); XtManageChild(cfg1_LB); /* create a list for the printer and a list for the device */ n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNtopOffset, 5); n++; XtSetArg(args[n], XmNtopWidget, cfg1_LB); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNleftOffset, 5); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNrightOffset, 5); n++; printerList = XmCreateScrolledList(configWindow, "printerLIST",args,n); XtManageChild(printerList); cfg1Next_PB = XtVaCreateWidget("next_PB", xmPushButtonWidgetClass, configWindow, XmNleftAttachment, XmATTACH_POSITION, XmNleftOffset, 5, XmNleftPosition, 65, XmNrightAttachment, XmATTACH_POSITION, XmNrightOffset, 5, XmNrightPosition, 95, XmNbottomAttachment, XmATTACH_FORM, XmNbottomOffset, 5, NULL); XtManageChild(cfg1Next_PB); separator = XtVaCreateWidget("separator", xmSeparatorWidgetClass, configWindow, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomOffset, 5, XmNbottomWidget, cfg1Next_PB, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 0, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 0, NULL); XtManageChild(separator); XtVaSetValues(XtParent(printerList), XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomOffset, 5, XmNbottomWidget, separator, NULL); XtAddCallback(cfg1Next_PB, XmNactivateCallback, cfgNext_CB, &leaveLoop); xmAddMouseEventHandler(printerList); return configWindow; } /*******************************************************************/ /* Function alignNext_CB() */ /* */ /* set loop flag to 1 */ /* */ /* Input: Widget w not used */ /* XtPointer clientData not used */ /* XtPointer callData not used */ /* */ /* return: - */ /* */ /*******************************************************************/ static void cfgNext_CB(Widget w, XtPointer clientData, XtPointer callData) { *((int*)clientData) = 1; } /*******************************************************************/ /* Function readDevDir() */ /* */ /* show if the device files stated in the global device list */ /* are present and if we have read and write right to them. */ /* If all is OK insert them in the list deviceName */ /* */ /* Output: char **deviceName */ /* */ /* return: number of device file found */ /* */ /*******************************************************************/ static int readDevDir(char **deviceName) { int i; int count = 0; DIR *dir; struct dirent *ent; char *fname = NULL; for (i = 0; deviceList[i] != NULL; i++) { /* acess as group or user */ if (fileAccess(deviceList[i], R_OK|W_OK) == 0 ) { deviceName[count++] = strdup(deviceList[i]); } } /* add entries found under /var/mtink */ if ( (dir = opendir("/var/mtink")) ) { while ( (ent = readdir(dir)) != NULL ) { if ( ent->d_name[0] == '.' ) continue; fname = (char*)calloc(strlen("/var/mtink/")+ strlen(ent->d_name)+1,1); sprintf(fname, "/var/mtink/%s", ent->d_name); if (fileAccess(fname, W_OK) == 0 ) { deviceName[count++] = strdup(fname); } } closedir(dir); } return count; } /*******************************************************************/ /* Function popupCfg1() */ /* */ /* popup the mask and wait for user interaction */ /* */ /* Input: Widget old caller mask */ /* wConfig_data_t *data data for window */ /* configData_t *pData printer data */ /* */ /* return: - */ /* */ /*******************************************************************/ void popupCfg1(Widget old, wConfig_data_t *data, configData_t *pData) { int i; XmString *tbl; XmString xms; int position_count; int *position_list; int selectedPos = 0; XmListDeleteAllItems(printerList); if ( data->wType == QUERY_PRINTER ) { /* build the printer list */ count = defaultConfigDataSize; tbl = calloc(sizeof(XmString), count); for ( i = 0; i < count; i++) { if ( defaultConfigData[i].name[0] == '?' ) { tbl[i] = XmStringCreateSimple(appResourceRec.addPrinterTxt); } else { tbl[i] = XmStringCreateSimple(defaultConfigData[i].name); } if ( pData->name && strcmp(pData->name, defaultConfigData[i].name) == 0 ) { selectedPos = i+1; } } if ( count ) XmListAddItems(printerList, tbl, count, 1); /* set label */ XtVaGetValues(cfg2Printer_PB, XmNlabelString, &xms, NULL); if ( xms ) { XtVaSetValues(cfg1_LB, XmNlabelString, xms, NULL); XmStringFree(xms); } } else { /* build the device list */ count = (sizeof(deviceList) / sizeof(char **)); tbl = calloc(sizeof(XmString), count); knownDevices = calloc(count*2, sizeof(char **)); count = readDevDir(knownDevices); for ( i = 0; i < count; i++) { tbl[i] = XmStringCreateSimple(knownDevices[i]); if ( pData->dev && strcmp(pData->dev, knownDevices[i]) == 0 ) { selectedPos = i+1; } } if ( count ) XmListAddItems(printerList, tbl, count, 1); /* set label */ XtVaGetValues(cfg2Device_PB, XmNlabelString, &xms, NULL); if ( xms ) { XtVaSetValues(cfg1_LB, XmNlabelString, xms, NULL); XmStringFree(xms); } } for ( i = 0; i < count; i++ ) { XmStringFree(tbl[i]); } free(tbl); /* if we have no element in the list a fatal error */ /* has occured */ if ( count == 0 ) { data->ptrVal = NULL; *data->wait = -1; data->actWindow = configWindow; return; } if ( data->printerName && data->printerName[0] != '?' ) { xms = XmStringCreateSimple(data->printerName); XtVaSetValues(title_LB,XmNlabelString,xms,NULL); XmStringFree(xms); } /* manage here, we must know the number of visible items */ XtUnmanageChild(old); XtManageChild(configWindow); if ( selectedPos > 0 ) { XmListSelectPos(printerList, selectedPos, False); /* set selected item at top if possible */ XtVaGetValues(printerList, XmNvisibleItemCount, &i, NULL); if ( selectedPos + i > count ) selectedPos = count - i +1; if ( selectedPos < 0 ) selectedPos = 1; XmListSetPos(printerList, selectedPos); } /* privat loop */ data->ptrVal = NULL; while (data->ptrVal == NULL) { *data->wait = 0; leaveLoop = 0; while(!leaveLoop) XtAppProcessEvent(theApp, XtIMAll); /* check for selection */ if ( XmListGetSelectedPos(printerList, &position_list, &position_count ) ) { if ( position_count ) { if ( data->wType == QUERY_PRINTER ) { data->ptrVal = &defaultConfigData[position_list[0]-1]; } else { data->ptrVal = strdup(knownDevices[position_list[0]-1]); } free(position_list); } } } /* free at exit of this module */ if ( knownDevices ) { for ( i = 0; i < count; i++ ) free(knownDevices[i]); free(knownDevices); knownDevices = NULL; } data->actWindow = configWindow; *data->wait = 1; } mtink-1.0.16/mainSrc/tres.c0000644000076400001540000030256710664223431013604 0ustar jjfuse#include "version.h" char *fallbackResources[] = { #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Danish resource file for ttink. ! Dansk data for ttink. ! ! This file is build like a normal X-resources files ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! is a commment character if it appears at the begin of a ! line. ! ! .syntax1: is ein key word. ! .De.syntax: is the key for a localized text. ! both characters in this case De are taken from the ! environment variablea LANG, LC_ALL. The first letter ! will be set to upper case and the second remain normal. ! If you translate this file, please replace .En. with ! the correct value. ! ! \ At the end of a line (space and tabulators are ! not allowed) show that the actual line will be continued. ! ! \ text allow to ident the text. This will only be required after ! the key word. If nor \ is present, the space are ! removed. ! ! \n This is a carriage return. Textes will be printed in ! the next line. ! ! Please note that spaces at the en of a line will not ! be removed. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ #endif ".Da.syntax1:" " Argumenter for ", ".Da.syntax2:" " Obligatorisk:\\n" " -d enheds_fil --device enheds_fil\\n" " Valgfri:\\n" " -m navn --model navn eller nummer\\n" " uden angivelse vil printeren blive autodetektet\\n" " Funktion (der kan kun udfres en funktion af gangen):\\n" " -r --reset reset printer\\n" " -c --clean rens dyser\\n" " -n --nozzle-check dyse test\\n" " -s --status (standard)\\n" " -a --align-head ret printerhovedet ind\\n" " -e --exchange-ink (ikke alle printere understtter dette)\\n" " -i --identity udskriv printer identitet\\n" " Information:\\n" " -v --version print version\\n" " -l --list-printer list kendte printere\\n", ".Da.syntaxM:" " Funktion (der kan kun udfres en funktion af gangen):\\n" " -r --reset reset printer\\n" " -c --clean rens dyser\\n" " -n --nozzle-check dyse test\\n" " -s --status (standard)\\n" " -a --align-head ret printerhovedet ind\\n" " -e --exchange-ink (ikke alle printere understtter dette)\\n" " -i --identity udskriv printer identitet\\n" " Information:\\n" " -v --version print version\\n" " -l --list-printer list kendte printere\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages */ #endif ".Da.noAccess:" "Ingen adgang til enhed eller ingen tilsluttet printer.", ".Da.noDetected:" "Kan ikke bestemme printer model.", ".Da.unknownModel:" "Ukendt printer.", ".Da.noOPen:" "Kan ikke bne enheds filen.", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on */ #endif ".Da.continue:" "Fortst (ja/nej) [nej] ? :", ".Da.yesorno: jn", ".Da.saveCancel: ga", ".Da.blackQ: sort", ".Da.colorQ: farve", ".Da.followingPrintersFound:" " Printere fundet:", ".Da.ChoosePrinter:" "Vlg printer ", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status */ #endif ".Da.black: Sort", ".Da.cyan: Cyan", ".DA.magenta: Magenta", ".Da.yellow: Gul", ".Da.lcyan: Lys cyan", ".Da.lmagenta: Lys magenta", ".Da.lblack: Lys sort", ".Da.lblack: Foto/Mat sort", ".Da.blue: Bl", ".Da.red: Rd", ".Da.dyellow: Mrk gul", ".Da.gloss: Glans optimerer", ".Da.grey: Gr", ".Da.printerState: printer status", ".Da.unknown: unendt", ".Da.selfTest: selv test", ".Da.busy: optaget", ".Da.printing: udskrivning", ".Da.cleaning: rensning", ".Da.ok: Ok", ".Da.error: Fejl", ".Da.interfaceNotSelected: Ingen printerport valgt", ".Da.paperJamError: Fejl ved papirfremfring", ".Da.inkOutError: Der er ikke nok blk", ".Da.paperOutError: Intet papir", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment */ #endif ".Da.alignWarning:" "Pas p !\\nDette kan skade printeren.", ".Da.alignBlackOrColor:" "Retten ind af sort eller farve hoved ?", "*Da.firstHeadAlign:" "Placer et ark papir i printeren for at begynde\\n" "at rette hovedet ind.", ".Da.nextHeadAlign:" "Genindst arket i printeren.", ".Da.lastHeadAlign:" "Inspicer det frdige udskrift meget omhyggeligt for at sikre\\n" "At printerhovedet er korrekt rettet ind.\\n\\n" "Du kan nu: gemme resultatet i printeren, eller\\n" "afbryde uden at gemme resultatet\\n(gem/afbryd) [afbryd] :", ".Da.choosePattern:" "Inspicer udskriftet omhyggeligt, og vlg det bedste liniepar\\n" "fra det sidst printede mnster.\\n" "Genindst arket i printeren.", ".Da.chooseCPattern:" "Inspicer retten ind arket, og afgr hvilket\\n" "mnster der er det glatteste.\\n" "Dette mnster er det der har den mindste \"korn\"struktur.\\n" "Hvis du ikke kan afgre hvilket der er det glatteste,\\n" "og vlg nummeret p et af de bedste, og\\n" "gentag proceduren.\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge */ #endif ".Da.functionNA:" "Denne funktion er ikke mulig med din printer.", ".Da.askDoExchange:" "nsker du at skifte patronen (Ja/Nej) [nej] ? :", ".exchangeBlackOrColor:" "Vlg patron:", ".Da.adviseMoveCartridge:" "Patronen vil nu blive frt til udskiftnings plads.", ".Da.adviseExchangeCartridge:" "Udskift patronen nu.", ".Da.askExDone:" "Udskiftning udfrt (Ja/Nej) [nej] ? :", ".Da.adviseFillCartridge:" "Pfyldning af blk starter nu.", ".Da.adviseExchangeDone:" "Udskiftning af patron udfrt.", ".Da.communicationError:" "Fejl ved lasning/skrivning fra/til printeren !", ".Da.exchangeError:" "Printeren melder fejl p funktionen 'udskiftning af patron' !", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Danish resource file for ttink. ! Dansk data for ttink. ! ! This file is build like a normal X-resources files ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! is a commment character if it appears at the begin of a ! line. ! ! .syntax1: is ein key word. ! .De.syntax: is the key for a localized text. ! both characters in this case De are taken from the ! environment variablea LANG, LC_ALL. The first letter ! will be set to upper case and the second remain normal. ! If you translate this file, please replace .En. with ! the correct value. ! ! \ At the end of a line (space and tabulators are ! not allowed) show that the actual line will be continued. ! ! \ text allow to ident the text. This will only be required after ! the key word. If nor \ is present, the space are ! removed. ! ! \n This is a carriage return. Textes will be printed in ! the next line. ! ! Please note that spaces at the en of a line will not ! be removed. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ #endif ".Da8.syntax1:" " Argumenter for ", ".Da8.syntax2:" " Obligatorisk:\\n" " -d enheds_fil --device enheds_fil\\n" " Valgfri:\\n" " -m navn --model navn eller nummer\\n" " uden angivelse vil printeren blive autodetektet\\n" " Funktion (der kan kun udføres en funktion af gangen):\\n" " -r --reset reset printer\\n" " -c --clean rens dyser\\n" " -n --nozzle-check dyse test\\n" " -s --status (standard)\\n" " -a --align-head ret printerhovedet ind\\n" " -e --exchange-ink (ikke alle printere understøtter dette)\\n" " -i --identity udskriv printer identitet\\n" " Information:\\n" " -v --version print version\\n" " -l --list-printer list kendte printere\\n", ".Da8.syntaxM:" " Funktion (der kan kun udføres en funktion af gangen):\\n" " -r --reset reset printer\\n" " -c --clean rens dyser\\n" " -n --nozzle-check dyse test\\n" " -s --status (standard)\\n" " -a --align-head ret printerhovedet ind\\n" " -e --exchange-ink (ikke alle printere understøtter dette)\\n" " -i --identity udskriv printer identitet\\n" " Information:\\n" " -v --version print version\\n" " -l --list-printer list kendte printere\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages */ #endif ".Da8.noAccess:" "Ingen adgang til enhed eller ingen tilsluttet printer.", ".Da8.noDetected:" "Kan ikke bestemme printer model.", ".Da8.unknownModel:" "Ukendt printer.", ".Da8.noOPen:" "Kan ikke åbne enheds filen.", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on */ #endif ".Da8.continue:" "Fortsæt (ja/nej) [nej] ? :", ".Da8.yesorno: jn", ".Da8.saveCancel: ga", ".Da8.blackQ: sort", ".Da8.colorQ: farve", ".Da8.followingPrintersFound:" " Printere fundet:", ".Da8.ChoosePrinter:" "Vælg printer ", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status */ #endif ".Da8.black: Sort", ".Da8.cyan: Cyan", ".DA8.magenta: Magenta", ".Da8.yellow: Gul", ".Da8.lcyan: Lys cyan", ".Da8.lmagenta: Lys magenta", ".Da8.lblack: Lys sort", ".Da8.lblack: Foto/Mat sort", ".Da8.blue: Blå", ".Da8.red: Rød", ".Da8.dyellow: Mørk gul", ".Da8.gloss: Glans optimerer", ".Da8.grey: Grå", ".Da8.printerState: printer status", ".Da8.unknown: unendt", ".Da8.selfTest: selv test", ".Da8.busy: optaget", ".Da8.printing: udskrivning", ".Da8.cleaning: rensning", ".Da8.ok: Ok", ".Da8.error: Fejl", ".Da8.interfaceNotSelected: Ingen printerport valgt", ".Da8.paperJamError: Fejl ved papirfremføring", ".Da8.inkOutError: Der er ikke nok blæk", ".Da8.paperOutError: Intet papir", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment */ #endif ".Da8.alignWarning:" "Pas på !\\nDette kan skade printeren.", ".Da8.alignBlackOrColor:" "Retten ind af sort eller farve hoved ?", "*Da.firstHeadAlign:" "Placer et ark papir i printeren for at begynde\\n" "at rette hovedet ind.", ".Da8.nextHeadAlign:" "Genindsæt arket i printeren.", ".Da8.lastHeadAlign:" "Inspicer det færdige udskrift meget omhyggeligt for at sikre\\n" "At printerhovedet er korrekt rettet ind.\\n\\n" "Du kan nu: gemme resultatet i printeren, eller\\n" "afbryde uden at gemme resultatet\\n(gem/afbryd) [afbryd] :", ".Da8.choosePattern:" "Inspicer udskriftet omhyggeligt, og vælg det bedste liniepar\\n" "fra det sidst printede mønster.\\n" "Genindsæt arket i printeren.", ".Da8.chooseCPattern:" "Inspicer retten ind arket, og afgør hvilket\\n" "mønster der er det glatteste.\\n" "Dette mønster er det der har den mindste \"korn\"struktur.\\n" "Hvis du ikke kan afgøre hvilket der er det glatteste,\\n" "og vælg nummeret på et af de bedste, og\\n" "gentag proceduren.\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge */ #endif ".Da8.functionNA:" "Denne funktion er ikke mulig med din printer.", ".Da8.askDoExchange:" "Ønsker du at skifte patronen (Ja/Nej) [nej] ? :", ".exchangeBlackOrColor:" "Vælg patron:", ".Da8.adviseMoveCartridge:" "Patronen vil nu blive ført til udskiftnings plads.", ".Da8.adviseExchangeCartridge:" "Udskift patronen nu.", ".Da8.askExDone:" "Udskiftning udført (Ja/Nej) [nej] ? :", ".Da8.adviseFillCartridge:" "Påfyldning af blæk starter nu.", ".Da8.adviseExchangeDone:" "Udskiftning af patron udført.", ".Da8.communicationError:" "Fejl ved lasning/skrivning fra/til printeren !", ".Da8.exchangeError:" "Printeren melder fejl på funktionen 'udskiftning af patron' !", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! german resource file for ttink. ! Deutsche Datei fr ttink. ! ! Diese Datei entspricht vom Aufbau her den blichen ! X Ressourcen-Dateien. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! ist ein Kommentarzeichen wenn es am Begin einer Zeile ! steht. ! ! .syntax1: ist ein Schlssel. ! .De.syntax: ist der entspechend lokalisierte Schlssel. ! Die 2 Buschstaben, hier "De", werden von den Umgebungs- ! Variablen LANG und LC_ALL abgeleitet. ! ! \ am Ende einer Zeile (Leerzeichen oder Tabulatoren sind ! nicht erlaubt) bedeutet das, das die nchste Zeile eine ! Fortsetzungszeile ist. ! \ Text bewirkt, dass Leerzeichen am Anfang des Textes ! (nach dem Schlssel) nicht entfernt werden. ! ! \n steht fr eine Zeilenschaltung. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ #endif ".De.syntax1:" " Argumente fr ", ".De.syntax2:" " Obligatorisch:\\n" " -d Gerte_datei --device Gerte_datei\\n" " Optional:\\n" " -m Name --model Name oder Nummer\\n" " Ohne diese Angabe wird der Drucker automatisch bestimmt\\n" " -D --D4 D4-Protokoll immer verwenden\\n" " Auftrag (Es kann nur ein Auftrag angegeben werden):\\n" " -r --reset Drucker zurcksetzen\\n" " -c --clean Dsenreinigung\\n" " -n --nozzle-check Dsentest\\n" " -s --status (Standardauftrag)\\n" " -a --align-head Kpfe ausrichten\\n" " -e --exchange-ink Patronen wechseln\\n" " (nicht alle Druckern)\\n" " -i --identity Drucker Identifizierungsstring ausgeben\\n" " Informationen:\\n" " -v --version Version ausgeben\\n" " -l --list-printer Bekannte Drucker ausgeben\\n" " Diverse:\\n" " -L D4 Protokollausgabe auf stderr (debug)\\n" " -u Text Ausgabe erfolgt mit UTF-8 Kodierung\\n", ".De.syntaxM:" " Optional:\\n" " -D --D4 D4-Protokoll immer verwenden\\n" " Auftrag (Es kann nur ein Auftrag angegeben werden):\\n" " -r --reset Drucker zurcksetzen\\n" " -c --clean Dsenreinigung\\n" " -n --nozzle-check Dsentest\\n" " -s --status (Standardauftrag)\\n" " -a --align-head Kpfe ausrichten\\n" " -e --exchange-ink Patronen wechseln\\n" " (nicht alle Druckern)\\n" " -i --identity Drucker Identifizierungsstring ausgeben\\n" " Informationen:\\n" " -v --version Version ausgeben\\n" " -l --list-printer Bekannte Drucker ausgeben\\n" " Diverse:\\n" " -L D4 Protokollausgabe auf stderr (debug)\\n" " -u Text Ausgabe erfolgt mit UTF-8 Kodierung\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages */ #endif ".De.noAccess:" "Kein Zugriff auf die Gertedatei, oder Drucker ist nicht angeschlossen.", ".De.noDetected:" "Das Druckermodell kann nicht bestimmt werden.", ".De.unknownModel:" "Unbekannter Drucker", ".De.noOPen:" "Die Gertedatei kann nicht geffnet werden.", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on */ #endif ".De.continue:" "Weiter (ja/nein) [nein]? : ", ".De.yesorno: jn", ".De.saveCancel: sa ", ".De.blackQ: Schwarz", ".De.colorQ: Farbe", ".De.followingPrintersFound:" "Ermittelte Drucker:", ".De.ChoosePrinter:" "Drucker whlen ", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status */ #endif ".De.black: Schwarz", ".De.cyan: Zyan", ".De.magenta: Magenta", ".De.yellow: Gelb", ".De.lcyan: Hellzyan", ".De.lmagenta: Hellmagenta", ".De.lblack: Photo/Matt Schwarz", ".De.blue: Blau", ".De.red: Rot", ".De.dyellow: Dunkelgelb", ".De.gloss: Glanzoptimierer", ".De.grey: Grau", #if 0 /* ! Photo R2400 die Franzsiche Texte beinhalten korreckterweise ! grau und hell grau. Hellschwarz und Hellhellschwarz ist ein ! Unsinn ! */ #endif ".De.llblack: Grau", ".De.Lblack: Hellgrau", ".De.printerState: Druckertatus", ".De.unknown: Unbekannt", ".De.selfTest: Selbsttest", ".De.busy: Beschftigt", ".De.printing: Druck", ".De.cleaning: Reinigung", ".De.ok: Ok", ".De.error: Fehler", ".De.interfaceNotSelected: Schnittstelle nicht angewhlt", ".De.paperJamError: Fehler im Papierweg", ".De.inkOutError: Tintenmenge ist zu gering", ".De.paperOutError: Papier fehlt", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment */ #endif ".De.alignWarning:" "Achtung !\\nDies knnte den Drucker unbrauchbar machen.", ".De.alignBlackOrColor:" "Schwarz- oder Farbkopf ausrichten?", ".De*firstHeadAlign:" "Bitte ein leeres Blatt Papier in den\\nDrucker legen.", ".De.nextHeadAlign:" "Bitte das Blatt erneut in den Drucker legen.", ".De.lastHeadAlign:" "Bitte begutachten Sie die Ergebnisse bezglich der\\n" "Ausrichtung sehr sorgfltig.\\n" "Sie knnen nun: Die Einstellungen im Drucker sichern oder abbrechen,\\n" "ohne die Einstellungen zu bernehmen\\n(Sichern, Abbruch) [Abbbruch] : ", ".De.choosePattern:" "Bitte begutachten Sie das soeben gedruckte Muster,\\n" "und whlen Sie die besten Linienpaare aus.\\n" "Legen Sie das Blatt erneut in den Drucker.", ".De.sampleNo:" "Muster #", ".De.choosePattern2:" "Bitte begutachten Sie das soeben gedruckte Muster,\\n" "und whlen Sie die besten Linienpaare aus\\n", ".De.chooseCPattern:" "Bitte das Blatt begutachten und das Muster auswhlen, das\\n" "die geringste Kornstruktur hat.", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge */ #endif ".De.functionNA:" "Diese Function ist fr diesen Drucker nicht verfgbar.", ".De.askDoExchange:" "Mchten Sie die Patrone wechseln (ja/nein) [nein]? :", ".De.exchangeBlackOrColor: Patronne whlen:", ".De.adviseMoveCartridge:" "Der Kopf wird in die Austauschposition bewegt.", ".De.adviseExchangeCartridge:" "Bitte die Patrone wechseln.", ".De.askExDone:" "Ist der Austausch durchgefhrt (ja/nein) [nein]? : ", ".De.adviseFillCartridge:" "Das Auffllen der Tinte erfolgt.", ".De.adviseExchangeDone:" "Der Patronenwechsel ist durchgefhrt.", ".De.communicationError:" "Fehler beim Schreiben/Lesen zum/vom Drucker!", ".De.exchangeError:" "Der Drucker meldet einen Fehler auf der Anforderung \"Patrone wechseln\"!", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! german resource file for ttink. ! Deutsche Datei für ttink. ! ! Diese Datei entspricht vom Aufbau her den üblichen ! X Ressourcen-Dateien. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! ist ein Kommentarzeichen wenn es am Begin einer Zeile ! steht. ! ! .syntax1: ist ein Schlüssel. ! .De.syntax: ist der entspechend lokalisierte Schlüssel. ! Die 2 Buschstaben, hier "De", werden von den Umgebungs- ! Variablen LANG und LC_ALL abgeleitet. ! ! \ am Ende einer Zeile (Leerzeichen oder Tabulatoren sind ! nicht erlaubt) bedeutet das, das die nächste Zeile eine ! Fortsetzungszeile ist. ! \ Text bewirkt, dass Leerzeichen am Anfang des Textes ! (nach dem Schlüssel) nicht entfernt werden. ! ! \n steht für eine Zeilenschaltung. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ #endif ".De8.syntax1:" " Argumente für ", ".De8.syntax2:" " Obligatorisch:\\n" " -d Geräte_datei --device Geräte_datei\\n" " Optional:\\n" " -m Name --model Name oder Nummer\\n" " Ohne diese Angabe wird der Drucker automatisch bestimmt\\n" " -D --D4 D4-Protokoll immer verwenden\\n" " Auftrag (Es kann nur ein Auftrag angegeben werden):\\n" " -r --reset Drucker zurücksetzen\\n" " -c --clean Düsenreinigung\\n" " -n --nozzle-check Düsentest\\n" " -s --status (Standardauftrag)\\n" " -a --align-head Köpfe ausrichten\\n" " -e --exchange-ink Patronen wechseln\\n" " (nicht alle Druckern)\\n" " -i --identity Drucker Identifizierungsstring ausgeben\\n" " Informationen:\\n" " -v --version Version ausgeben\\n" " -l --list-printer Bekannte Drucker ausgeben\\n" " Diverse:\\n" " -L D4 Protokollausgabe auf stderr (debug)\\n" " -u Text Ausgabe erfolgt mit UTF-8 Kodierung\\n", ".De8.syntaxM:" " Optional:\\n" " -D --D4 D4-Protokoll immer verwenden\\n" " Auftrag (Es kann nur ein Auftrag angegeben werden):\\n" " -r --reset Drucker zurücksetzen\\n" " -c --clean Düsenreinigung\\n" " -n --nozzle-check Düsentest\\n" " -s --status (Standardauftrag)\\n" " -a --align-head Köpfe ausrichten\\n" " -e --exchange-ink Patronen wechseln\\n" " (nicht alle Druckern)\\n" " -i --identity Drucker Identifizierungsstring ausgeben\\n" " Informationen:\\n" " -v --version Version ausgeben\\n" " -l --list-printer Bekannte Drucker ausgeben\\n" " Diverse:\\n" " -L D4 Protokollausgabe auf stderr (debug)\\n" " -u Text Ausgabe erfolgt mit UTF-8 Kodierung\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages */ #endif ".De8.noAccess:" "Kein Zugriff auf die Gerätedatei, oder Drucker ist nicht angeschlossen.", ".De8.noDetected:" "Das Druckermodell kann nicht bestimmt werden.", ".De8.unknownModel:" "Unbekannter Drucker", ".De8.noOPen:" "Die Gerätedatei kann nicht geöffnet werden.", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on */ #endif ".De8.continue:" "Weiter (ja/nein) [nein]? : ", ".De8.yesorno: jn", ".De8.saveCancel: sa ", ".De8.blackQ: Schwarz", ".De8.colorQ: Farbe", ".De8.followingPrintersFound:" "Ermittelte Drucker:", ".De8.ChoosePrinter:" "Drucker wählen ", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status */ #endif ".De8.black: Schwarz", ".De8.cyan: Zyan", ".De8.magenta: Magenta", ".De8.yellow: Gelb", ".De8.lcyan: Hellzyan", ".De8.lmagenta: Hellmagenta", ".De8.lblack: Photo/Matt Schwarz", ".De8.blue: Blau", ".De8.red: Rot", ".De8.dyellow: Dunkelgelb", ".De8.gloss: Glanzoptimierer", ".De8.grey: Grau", #if 0 /* ! Photo R2400 die Französiche Texte beinhalten korreckterweise ! grau und hell grau. Hellschwarz und Hellhellschwarz ist ein ! Unsinn ! */ #endif ".De8.llblack: Grau", ".De8.Lblack: Hellgrau", ".De8.printerState: Druckertatus", ".De8.unknown: Unbekannt", ".De8.selfTest: Selbsttest", ".De8.busy: Beschäftigt", ".De8.printing: Druck", ".De8.cleaning: Reinigung", ".De8.ok: Ok", ".De8.error: Fehler", ".De8.interfaceNotSelected: Schnittstelle nicht angewählt", ".De8.paperJamError: Fehler im Papierweg", ".De8.inkOutError: Tintenmenge ist zu gering", ".De8.paperOutError: Papier fehlt", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment */ #endif ".De8.alignWarning:" "Achtung !\\nDies könnte den Drucker unbrauchbar machen.", ".De8.alignBlackOrColor:" "Schwarz- oder Farbkopf ausrichten?", ".De*firstHeadAlign:" "Bitte ein leeres Blatt Papier in den\\nDrucker legen.", ".De8.nextHeadAlign:" "Bitte das Blatt erneut in den Drucker legen.", ".De8.lastHeadAlign:" "Bitte begutachten Sie die Ergebnisse bezüglich der\\n" "Ausrichtung sehr sorgfältig.\\n" "Sie können nun: Die Einstellungen im Drucker sichern oder abbrechen,\\n" "ohne die Einstellungen zu übernehmen\\n(Sichern, Abbruch) [Abbbruch] : ", ".De8.choosePattern:" "Bitte begutachten Sie das soeben gedruckte Muster,\\n" "und wählen Sie die besten Linienpaare aus.\\n" "Legen Sie das Blatt erneut in den Drucker.", ".De8.sampleNo:" "Muster #", ".De8.choosePattern2:" "Bitte begutachten Sie das soeben gedruckte Muster,\\n" "und wählen Sie die besten Linienpaare aus\\n", ".De8.chooseCPattern:" "Bitte das Blatt begutachten und das Muster auswählen, das\\n" "die geringste Kornstruktur hat.", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge */ #endif ".De8.functionNA:" "Diese Function ist für diesen Drucker nicht verfügbar.", ".De8.askDoExchange:" "Möchten Sie die Patrone wechseln (ja/nein) [nein]? :", ".De8.exchangeBlackOrColor: Patronne wählen:", ".De8.adviseMoveCartridge:" "Der Kopf wird in die Austauschposition bewegt.", ".De8.adviseExchangeCartridge:" "Bitte die Patrone wechseln.", ".De8.askExDone:" "Ist der Austausch durchgeführt (ja/nein) [nein]? : ", ".De8.adviseFillCartridge:" "Das Auffüllen der Tinte erfolgt.", ".De8.adviseExchangeDone:" "Der Patronenwechsel ist durchgeführt.", ".De8.communicationError:" "Fehler beim Schreiben/Lesen zum/vom Drucker!", ".De8.exchangeError:" "Der Drucker meldet einen Fehler auf der Anforderung \"Patrone wechseln\"!", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! English resource file for ttink. ! This is for translators. ! ! This file is build like a normal X-resources files ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! is a commment character if it appears at the begin of a ! line. ! ! .syntax1: is ein key word. ! .De.syntax: is the key for a localized text. ! both characters in this case De are taken from the ! environment variablea LANG, LC_ALL. The first letter ! will be set to upper case and the second remain normal. ! If you translate this file, please replace .En. with ! the correct value. ! ! \ At the end of a line (space and tabulators are ! not allowed) show that the actual line will be continued. ! ! \ text allow to ident the text. This will only be required after ! the key word. If nor \ is present, the space are ! removed. ! ! \n This is a carriage return. Textes will be printed in ! the next line. ! ! Please note that spaces at the en of a line will not ! be removed. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ #endif ".syntax1:" " Arguments for ", ".syntax2:" " Mandatory:\\n" " -d device_file --device device_file\\n" " Optional:\\n" " -m name --model name or numero\\n" " without this the printer will be autodetected\\n" " -D --D4 Use always the D4 protocol\\n" " Order (only one order may be given):\\n" " -r --reset\\n" " -c --clean\\n" " -n --nozzle-check\\n" " -s --status (default)\\n" " -a --align-head\\n" " -e --exchange-ink (not all printers)\\n" " -i --identity print printer identity\\n" " Info:\\n" " -v --version print version\\n" " -l --list-printer list known printers\\n" " Misc:\\n" " -L debug ouput for D4 protocol on stderr\\n" " -u printout with UTF-8 code\\n", ".syntaxM:" " Optional:\\n" " -D --D4 Use always the D4 protocol\\n" " Order (only one order may be given):\\n" " -r --reset\\n" " -c --clean\\n" " -n --nozzle-check\\n" " -s --status (default)\\n" " -a --align-head\\n" " -e --exchange-ink (not all printers)\\n" " -i --identity print printer identity\\n" " Info:\\n" " -v --version print version\\n" " -l --list-printer list known printers\\n" " Misc:\\n" " -L debug ouput for D4 protocol on stderr\\n" " -u printout with UTF-8 code\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages */ #endif ".noAccess:" "No access to device file or no attached printer.", ".noDetected:" "Can't detect printer model.", ".unknownModel:" "Sorry unknown model", ".noOPen:" "Sorry can't open the device file.", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on */ #endif ".continue:" "Continue (yes/no) [no] ? : ", ".yesorno: yn", ".saveCancel: sc", ".blackQ: black", ".colorQ: color", ".followingPrintersFound:" "The following printers were found:", ".ChoosePrinter:" "Choose printer ", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status */ #endif ".black: Black", ".cyan: Cyan", ".magenta: Magenta", ".yellow: Yellow", ".lcyan: Light cyan", ".lmagenta: Light magenta", ".lblack: Photo/Matte black", ".blue: Blue", ".red: Red", ".dyellow: Dark yellow", ".gloss: Gloss optimizer", ".grey: Grey", ".llblack: Light light black", ".Lblack: Light black", ".printerState: printer state", ".unknown: unknown", ".selfTest: self test", ".busy: busy", ".printing: printing", ".cleaning: cleaning", ".ok: Ok", ".error: Error", ".interfaceNotSelected: Interface not selected", ".paperJamError: Paper jam error", ".inkOutError: Ink out error", ".paperOutError: Paper out error", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment */ #endif ".alignWarning:" "Warning !\\nThis may damage the printer.", ".alignBlackOrColor:" "Align black or color head ?", "*firstHeadAlign:" "Please place a sheet of paper in your printer to begin\\n" "the head alignment procedure.", ".nextHeadAlign:" "Please reinsert the sheet of paper in your printer to\\n" "continue the head alignment procedure.", ".lastHeadAlign:" "Please inspect the final output very carefully to ensure that your\\n" "printer is in proper alignment.\\n\\n" "You may now: save the results in the printer or\\n" "Cancel without saving the results\\n(save/cancel) [cancel] : ", ".choosePattern:" "Please inspect the print, and choose the best pair of lines\\n" "from the last printed pattern.\\n" "Reinsert the sheet into the printer.", "-sampleNo:" "pattern #", ".choosePattern2:" "Please inspect the print, and choose the best pair of lines\\n" "from the printed pattern\\n", ".chooseCPattern:" "Inspect the alignment sheet, and determine which\\n" "pattern is the smoothest.\\n" "This pattern will appear to have the least ``grain''.\\n" "If you cannot find a smooth pattern, please\\n" "select the number for the best pattern, and\\n" "repeat the procedure.\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge */ #endif ".functionNA:" "This function is not available for your printer.", ".askDoExchange:" "Do you really want to exchange a cartridge (Yes/No) [no] ? : ", ".exchangeBlackOrColor:" "Choose cartridge:", ".adviseMoveCartridge:" "The cartridge will now be moved to the exchange position.", ".adviseExchangeCartridge:" "Please exchange the cartridge now.", ".askExDone:" "Exchange done (yes/no) [no] ? : ", ".adviseFillCartridge:" "The ink filling will now be started.", ".adviseExchangeDone:" "Exchange cartridge done.", ".communicationError:" "Error while writing or reading from/to printer !", ".exchangeError:" "Printer return an error while requiring cartridge exchange !", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! English resource file for ttink. ! This is for translators. ! ! This file is build like a normal X-resources files ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! is a commment character if it appears at the begin of a ! line. ! ! .syntax1: is ein key word. ! .De.syntax: is the key for a localized text. ! both characters in this case De are taken from the ! environment variablea LANG, LC_ALL. The first letter ! will be set to upper case and the second remain normal. ! If you translate this file, please replace .En. with ! the correct value. ! ! \ At the end of a line (space and tabulators are ! not allowed) show that the actual line will be continued. ! ! \ text allow to ident the text. This will only be required after ! the key word. If nor \ is present, the space are ! removed. ! ! \n This is a carriage return. Textes will be printed in ! the next line. ! ! Please note that spaces at the en of a line will not ! be removed. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ #endif ".syntax1:" " Arguments for ", ".syntax2:" " Mandatory:\\n" " -d device_file --device device_file\\n" " Optional:\\n" " -m name --model name or numero\\n" " without this the printer will be autodetected\\n" " -D --D4 Use always the D4 protocol\\n" " Order (only one order may be given):\\n" " -r --reset\\n" " -c --clean\\n" " -n --nozzle-check\\n" " -s --status (default)\\n" " -a --align-head\\n" " -e --exchange-ink (not all printers)\\n" " -i --identity print printer identity\\n" " Info:\\n" " -v --version print version\\n" " -l --list-printer list known printers\\n" " Misc:\\n" " -L debug ouput for D4 protocol on stderr\\n" " -u printout with UTF-8 code\\n", ".syntaxM:" " Optional:\\n" " -D --D4 Use always the D4 protocol\\n" " Order (only one order may be given):\\n" " -r --reset\\n" " -c --clean\\n" " -n --nozzle-check\\n" " -s --status (default)\\n" " -a --align-head\\n" " -e --exchange-ink (not all printers)\\n" " -i --identity print printer identity\\n" " Info:\\n" " -v --version print version\\n" " -l --list-printer list known printers\\n" " Misc:\\n" " -L debug ouput for D4 protocol on stderr\\n" " -u printout with UTF-8 code\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages */ #endif ".noAccess:" "No access to device file or no attached printer.", ".noDetected:" "Can't detect printer model.", ".unknownModel:" "Sorry unknown model", ".noOPen:" "Sorry can't open the device file.", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on */ #endif ".continue:" "Continue (yes/no) [no] ? : ", ".yesorno: yn", ".saveCancel: sc", ".blackQ: black", ".colorQ: color", ".followingPrintersFound:" "The following printers were found:", ".ChoosePrinter:" "Choose printer ", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status */ #endif ".black: Black", ".cyan: Cyan", ".magenta: Magenta", ".yellow: Yellow", ".lcyan: Light cyan", ".lmagenta: Light magenta", ".lblack: Photo/Matte black", ".blue: Blue", ".red: Red", ".dyellow: Dark yellow", ".gloss: Gloss optimizer", ".grey: Grey", ".llblack: Light light black", ".Lblack: Light black", ".printerState: printer state", ".unknown: unknown", ".selfTest: self test", ".busy: busy", ".printing: printing", ".cleaning: cleaning", ".ok: Ok", ".error: Error", ".interfaceNotSelected: Interface not selected", ".paperJamError: Paper jam error", ".inkOutError: Ink out error", ".paperOutError: Paper out error", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment */ #endif ".alignWarning:" "Warning !\\nThis may damage the printer.", ".alignBlackOrColor:" "Align black or color head ?", "*firstHeadAlign:" "Please place a sheet of paper in your printer to begin\\n" "the head alignment procedure.", ".nextHeadAlign:" "Please reinsert the sheet of paper in your printer to\\n" "continue the head alignment procedure.", ".lastHeadAlign:" "Please inspect the final output very carefully to ensure that your\\n" "printer is in proper alignment.\\n\\n" "You may now: save the results in the printer or\\n" "Cancel without saving the results\\n(save/cancel) [cancel] : ", ".choosePattern:" "Please inspect the print, and choose the best pair of lines\\n" "from the last printed pattern.\\n" "Reinsert the sheet into the printer.", "-sampleNo:" "pattern #", ".choosePattern2:" "Please inspect the print, and choose the best pair of lines\\n" "from the printed pattern\\n", ".chooseCPattern:" "Inspect the alignment sheet, and determine which\\n" "pattern is the smoothest.\\n" "This pattern will appear to have the least ``grain''.\\n" "If you cannot find a smooth pattern, please\\n" "select the number for the best pattern, and\\n" "repeat the procedure.\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge */ #endif ".functionNA:" "This function is not available for your printer.", ".askDoExchange:" "Do you really want to exchange a cartridge (Yes/No) [no] ? : ", ".exchangeBlackOrColor:" "Choose cartridge:", ".adviseMoveCartridge:" "The cartridge will now be moved to the exchange position.", ".adviseExchangeCartridge:" "Please exchange the cartridge now.", ".askExDone:" "Exchange done (yes/no) [no] ? : ", ".adviseFillCartridge:" "The ink filling will now be started.", ".adviseExchangeDone:" "Exchange cartridge done.", ".communicationError:" "Error while writing or reading from/to printer !", ".exchangeError:" "Printer return an error while requiring cartridge exchange !", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! French resource file for ttink. ! Ce fichier est destine aux traducteurs. ! ! Ce fichier a le meme format qu'un fichier X-resources. ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! dbute un commmentaire s'il apparait au dbut d'une ! ligne. ! ! .syntax1: est un mot clef. ! .Fr.syntax: est le mot clef pour la version francaise. ! Les lettres F et r sont gnres a partir des variables ! d'environement LANG, LC_ALL et LC_MESSAGE. La premiere ! lettre est transforme en majuscule, la seconde n'est pas ! modifie. ! Si vous traduisez ce texte,remplacer .Fr. par ! la chaine de charactere correspondant votre langue. ! ! \ En fin de ligne (les espaces et tabulateurs ne sont pas ! admis) \ signifie que le texte continue sur la ligne ! suivante. ! ! \ texte permet d'inserer des espaces en dbut du texte. ! ! \n Ceci signifie retour chariot, le texte est continu ! sur la ligne suivante. ! ! \t reprsente un tabulateur. ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ #endif ".Fr.syntax1:" " Arguments pour ", ".Fr.syntax2:" " Obligatoire:\\n" " -d device_file --device fichier_interface\\n" " En option:\\n" " -m name--model nom ou numro\\n" " L'imprimante est autodtecte si cette\\n" " option n'est pas prsente\\n" " -D --D4 force l'utilisation exclusive du protocolle D4\\n" " Commandes (une seule commande est admise):\\n" " -r --reset remise a zro\\n" " -c --clean nettoyage des buses\\n" " -n --nozzle-check test des buses\\n" " -s --status (commande par defaut)\\n" " -a --align-head alignement des ttes\\n" " -e --exchange-ink remplacemrnt des cartouches (seulement\\n" " quelques imprimantes)\\n" " -i --identity retourne l'identit de l'imprimante\\n" " Informations:\\n" " -v --version affiche la version\\n" " -l --list-printer liste des imprimantes connues\\n" " Divers:\\n" " -L Impression du protocol D4 sur stderr\\n" " -u Impression des textes avec UTF-8\\n", ".Fr.syntaxM:" " En option:\\n" " -D --D4 force l'utilisation exclusive du protocolle D4\\n" " Commandes (une seule commande est admise):\\n" " -r --reset remise a zro\\n" " -c --clean nettoyage des buses\\n" " -n --nozzle-check test des buses\\n" " -s --status (commande par defaut)\\n" " -a --align-head alignement des ttes\\n" " -e --exchange-ink remplacemrnt des cartouches (seulement\\n" " quelques imprimantes)\\n" " -i --identity retourne l'identit de l'imprimante\\n" " Informations:\\n" " -v --version affiche la version\\n" " -l --list-printer liste des imprimantes connues\\n" " Divers:\\n" " -L Impresson du protocol D4 sur stderr\\n" " -u Impression des textes avec UTF-8\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages */ #endif ".Fr.noAccess:" "Pas d'accs au fichier d'interface ou imprimante teinte.", ".Fr.noDetected:" "L'imprimante n'a pas t dtecte..", ".Fr.unknownModel:" "modele inconnus", ".Fr.noOPen:" "Erreur l'ouverture du fichier d'interface.", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on */ #endif ".Fr.continue:" "Continuer (oui/non) [non] ? : ", ".Fr.yesorno: on", ".Fr.saveCancel: ea", ".Fr.blackQ: noir", ".Fr.colorQ: couleur", ".Fr.followingPrintersFound:" "Imprimantes detectes:", ".Fr.ChoosePrinter:" "Choississez l'imprimante ", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status */ #endif ".Fr.black: noir", ".Fr.cyan: cyan", ".Fr.magenta: magenta", ".Fr.yellow: jaune", ".Fr.lcyan: cyan clair", ".Fr.lmagenta: magenta clair", ".Fr.lblack: noir photo/matte", ".Fr.blue: bleu", ".Fr.red: rouge", ".Fr.dyellow: jaune fonc", ".Fr.gloss: optimisation du glaage", ".Fr.grey: gris", ".Fr.llblack: gris", ".Fr.Lblack: gris clair", ".Fr.printerState: status imprimante", ".Fr.unknown: inconnu", ".Fr.selfTest: Test", ".Fr.busy: occupe", ".Fr.printing: impression", ".Fr.cleaning: nettoyage", ".Fr.ok: Ok", ".Fr.error: Erreur", ".Fr.interfaceNotSelected: Interface non slctionne", ".Fr.paperJamError: Erreur papier", ".Fr.inkOutError: Encre puise", ".Fr.paperOutError: Manque de papier", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment */ #endif ".Fr.alignWarning:" "Attention !\\nCeci peut endommager l'imprimante.", ".Fr.alignBlackOrColor:" "Alignement tte noir ou couleur ?", "*firstHeadAlign:" "Inserez une feuille vierge dans l'imprimante, avant", "de commencer l'alignement des ttes.", ".Fr.nextHeadAlign:" "Reinserez la feuille de papier\\n" "pour continuer la procdure d'alignement.", ".Fr.lastHeadAlign:" "Inspectez le rsultat soigneusement afin d'tre sur\\n" "que les ttes de l'imprimante sont alignes correctement.\\n\\n" "Vous pouvez maintenant: enregistrer les rsultats dans l'imprimante\\n" "ou annuler les modifications\\n(engregistrer/annuler) [annuler] : ", ".Fr.choosePattern:" "Inpectez les lignes imprimes et choisissez la meilleure paire\\n" "de lignes.\\n" "Reinserez la feuille dans l'imprimante..", ".Fr.sampleNo:" "chantillon #", ".Fr.choosePattern2:" "Inpectez les lignes imprimes et choisissez la meilleure paire\\n" "de lignes\\n", ".Fr.chooseCPattern:" "Inspectez la feuille d'alignement et determinez l'chantillon\\n" "le plus \"lisse\".\\n" "Cet chantillon est celui qui semble tre le moins \"granuleux\".\\n" "Si vous ne trouvez pas d'chantillon \"lisse\" choisissez le meilleur\\n" "chantillon et rptez la procdure d'ajustage.\\n" "", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge */ #endif ".Fr.functionNA:" "Cette fonction n'est pas disponible pour votre imprimante.", ".Fr.askDoExchange:" "Voulez vous vraiment remplacer une cartouche (oui/non) [non] ? : ", ".exchangeBlackOrColor: Choisissez la cartouche:", ".Fr.adviseMoveCartridge:" "La cartouche est amene en position de remplacement.", ".Fr.adviseExchangeCartridge:" "Remplacez la cartouche maintenant.", ".Fr.askExDone:" "Echange effectu (oui/non) [non] ? : ", ".Fr.adviseFillCartridge:" "Le remplissage est enclench.", ".Fr.adviseExchangeDone:" "Remplacement cartouche termin.", ".Fr.communicationError:" "Erreur pour lecture ou criture sur l'imprimante !", ".Fr.exchangeError:" "L'imprimante a retourn une erreur pour la fonction de remplacement !", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! French resource file for ttink. ! Ce fichier est destine aux traducteurs. ! ! Ce fichier a le meme format qu'un fichier X-resources. ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! débute un commmentaire s'il apparait au début d'une ! ligne. ! ! .syntax1: est un mot clef. ! .Fr.syntax: est le mot clef pour la version francaise. ! Les lettres F et r sont générées a partir des variables ! d'environement LANG, LC_ALL et LC_MESSAGE. La premiere ! lettre est transformée en majuscule, la seconde n'est pas ! modifiée. ! Si vous traduisez ce texte,remplacer .Fr. par ! la chaine de charactere correspondant à votre langue. ! ! \ En fin de ligne (les espaces et tabulateurs ne sont pas ! admis) \ signifie que le texte continue sur la ligne ! suivante. ! ! \ texte permet d'inserer des espaces en début du texte. ! ! \n Ceci signifie retour chariot, le texte est continué ! sur la ligne suivante. ! ! \t représente un tabulateur. ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ #endif ".Fr8.syntax1:" " Arguments pour ", ".Fr8.syntax2:" " Obligatoire:\\n" " -d device_file --device fichier_interface\\n" " En option:\\n" " -m name--model nom ou numéro\\n" " L'imprimante est autodétectée si cette\\n" " option n'est pas présente\\n" " -D --D4 force l'utilisation exclusive du protocolle D4\\n" " Commandes (une seule commande est admise):\\n" " -r --reset remise a zéro\\n" " -c --clean nettoyage des buses\\n" " -n --nozzle-check test des buses\\n" " -s --status (commande par defaut)\\n" " -a --align-head alignement des têtes\\n" " -e --exchange-ink remplacemrnt des cartouches (seulement\\n" " quelques imprimantes)\\n" " -i --identity retourne l'identité de l'imprimante\\n" " Informations:\\n" " -v --version affiche la version\\n" " -l --list-printer liste des imprimantes connues\\n" " Divers:\\n" " -L Impression du protocol D4 sur stderr\\n" " -u Impression des textes avec UTF-8\\n", ".Fr8.syntaxM:" " En option:\\n" " -D --D4 force l'utilisation exclusive du protocolle D4\\n" " Commandes (une seule commande est admise):\\n" " -r --reset remise a zéro\\n" " -c --clean nettoyage des buses\\n" " -n --nozzle-check test des buses\\n" " -s --status (commande par defaut)\\n" " -a --align-head alignement des têtes\\n" " -e --exchange-ink remplacemrnt des cartouches (seulement\\n" " quelques imprimantes)\\n" " -i --identity retourne l'identité de l'imprimante\\n" " Informations:\\n" " -v --version affiche la version\\n" " -l --list-printer liste des imprimantes connues\\n" " Divers:\\n" " -L Impresson du protocol D4 sur stderr\\n" " -u Impression des textes avec UTF-8\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages */ #endif ".Fr8.noAccess:" "Pas d'accés au fichier d'interface ou imprimante éteinte.", ".Fr8.noDetected:" "L'imprimante n'a pas été détectée..", ".Fr8.unknownModel:" "modele inconnus", ".Fr8.noOPen:" "Erreur à l'ouverture du fichier d'interface.", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on */ #endif ".Fr8.continue:" "Continuer (oui/non) [non] ? : ", ".Fr8.yesorno: on", ".Fr8.saveCancel: ea", ".Fr8.blackQ: noir", ".Fr8.colorQ: couleur", ".Fr8.followingPrintersFound:" "Imprimantes detectées:", ".Fr8.ChoosePrinter:" "Choississez l'imprimante ", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status */ #endif ".Fr8.black: noir", ".Fr8.cyan: cyan", ".Fr8.magenta: magenta", ".Fr8.yellow: jaune", ".Fr8.lcyan: cyan clair", ".Fr8.lmagenta: magenta clair", ".Fr8.lblack: noir photo/matte", ".Fr8.blue: bleu", ".Fr8.red: rouge", ".Fr8.dyellow: jaune foncé", ".Fr8.gloss: optimisation du glaçage", ".Fr8.grey: gris", ".Fr8.llblack: gris", ".Fr8.Lblack: gris clair", ".Fr8.printerState: status imprimante", ".Fr8.unknown: inconnu", ".Fr8.selfTest: Test", ".Fr8.busy: occupe", ".Fr8.printing: impression", ".Fr8.cleaning: nettoyage", ".Fr8.ok: Ok", ".Fr8.error: Erreur", ".Fr8.interfaceNotSelected: Interface non séléctionnée", ".Fr8.paperJamError: Erreur papier", ".Fr8.inkOutError: Encre épuisée", ".Fr8.paperOutError: Manque de papier", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment */ #endif ".Fr8.alignWarning:" "Attention !\\nCeci peut endommager l'imprimante.", ".Fr8.alignBlackOrColor:" "Alignement tête noir ou couleur ?", "*firstHeadAlign:" "Inserez une feuille vierge dans l'imprimante, avant", "de commencer l'alignement des têtes.", ".Fr8.nextHeadAlign:" "Reinserez la feuille de papier\\n" "pour continuer la procédure d'alignement.", ".Fr8.lastHeadAlign:" "Inspectez le résultat soigneusement afin d'être sur\\n" "que les têtes de l'imprimante sont alignées correctement.\\n\\n" "Vous pouvez maintenant: enregistrer les résultats dans l'imprimante\\n" "ou annuler les modifications\\n(engregistrer/annuler) [annuler] : ", ".Fr8.choosePattern:" "Inpectez les lignes imprimées et choisissez la meilleure paire\\n" "de lignes.\\n" "Reinserez la feuille dans l'imprimante..", ".Fr8.sampleNo:" "échantillon #", ".Fr8.choosePattern2:" "Inpectez les lignes imprimées et choisissez la meilleure paire\\n" "de lignes\\n", ".Fr8.chooseCPattern:" "Inspectez la feuille d'alignement et determinez l'échantillon\\n" "le plus \"lisse\".\\n" "Cet échantillon est celui qui semble être le moins \"granuleux\".\\n" "Si vous ne trouvez pas d'échantillon \"lisse\" choisissez le meilleur\\n" "échantillon et répétez la procédure d'ajustage.\\n" "", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge */ #endif ".Fr8.functionNA:" "Cette fonction n'est pas disponible pour votre imprimante.", ".Fr8.askDoExchange:" "Voulez vous vraiment remplacer une cartouche (oui/non) [non] ? : ", ".exchangeBlackOrColor: Choisissez la cartouche:", ".Fr8.adviseMoveCartridge:" "La cartouche est amenée en position de remplacement.", ".Fr8.adviseExchangeCartridge:" "Remplacez la cartouche maintenant.", ".Fr8.askExDone:" "Echange effectué (oui/non) [non] ? : ", ".Fr8.adviseFillCartridge:" "Le remplissage est enclenché.", ".Fr8.adviseExchangeDone:" "Remplacement cartouche terminé.", ".Fr8.communicationError:" "Erreur pour lecture ou écriture sur l'imprimante !", ".Fr8.exchangeError:" "L'imprimante a retourné une erreur pour la fonction de remplacement !", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Magyar forrs fjl a ttink-hez. ! Ez a fordtnak szl. ! ! Ez a fjl norml X-forrs fjlknt van felptve ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! ez egy megjegyzs karakter ha egy sor elejn tallhat. ! ! ! .syntax1: ez egy kulcssz. ! .De.syntax: kulcs a szveg helynek meghatrozshoz. ! mindkt karaktere - ebben az esetben a De - a LANG, LC_ALL ! krnyezeti vltozbl kaphat. Az els betje ! nagybet, a msodik kisbets marad. ! Ha fordtja ezt a fjlt, krem helyettestse az .En.-t a ! helyes rtkre (jelen esetben .Hu.). ! ! \ egy sor vgnl (space s tabultor nincs ! engedlyezve) mutatja, hogy az aktulis sor befejezdtt. ! ! \ text szveg azonostshoz. Ez csak a kulcsz utn ! kvetelmny. Ha csak a \ karakter van jelen, a szkz ! el van tvoltva. ! ! \n Ez egy sor elejre llts. Az utna kvetkez szveg ! kirdik a kvetkez sorban. ! ! Krem figyeljen, hogy a szkzket s a sorvgeket ne ! tvoltsa el. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ #endif ".Hu.syntax1:" " Arguments for ", ".Hu.syntax2:" " Ktelez:\\n" " -d eszkz_fjl --device eszkz_fjl\\n" " Tetszleges:\\n" " -m name --modell neve vagy szma\\n" " enlkl a nyomtat automatikusan detektldik\\n" " Parancsok (csak egy parancsot lehet kiadni):\\n" " -r --megszakts\\n" " -c --trls\\n" " -n --fvka ellenrzs\\n" " -s --llapot (alapeset)\\n" " -a --fejigazts\\n" " -e --tinta csere (nem minden nyomtat)\\n" " -i --azonosts nyomtat azonosts kirsa\\n" " Info:\\n" " -v --verzi nyomtats verzi\\n" " -l --nyomtat lista ismert nyomtatk listja\\n", ".Hu.syntaxM:" " Parancsok (csak egy parancsot lehet kiadni):\\n" " -r --megszakts\\n" " -c --trls\\n" " -n --fvka ellenrzs\\n" " -s --llapot (alapeset)\\n" " -a --fejigazts\\n" " -e --tinta csere (nem minden nyomtat)\\n" " -i --azonosts nyomtat azonosts kirsa\\n" " Info:\\n" " -v --verzi nyomtats verzi\\n" " -l --nyomtat lista ismert nyomtatk listja\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages */ #endif ".Hu.noAccess:" "Nincs hozzfrs az eszkzfjlhoz, vagy nincs csatlakoztatott nyomtat.", ".Hu.noDetected:" "Nem tudom detektlni a nyomtat modellt.", ".Hu.unknownModel:" "Sajnlom, ismeretlen modell.", ".Hu.noOPen:" "Sajnlom, nem tudom megnyitni az eszkzfjlt.", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on */ #endif ".Hu.continue:" "Folytats (igen/nem) [nem] ? :", ".Hu.yesorno: in", ".Hu.saveCancel: mv", ".Hu.blackQ: fekete", ".Hu.colorQ: sznes", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status */ #endif ".Hu.black: Fekete", ".Hu.cyan: Cin", ".Hu.magenta: Bbor", ".Hu.yellow: Srga", ".Hu.lcyan: Fnyl cin", ".Hu.lmagenta: Fnyl bbor", ".Hu.lblack: Fnyl fekete", ".Hu.printerState: nyomtat llapot", ".Hu.unknown: ismeretlen", ".Hu.selfTest: nteszt", ".Hu.busy: foglalt", ".Hu.printing: nyomtats", ".Hu.cleaning: tisztts", ".ok: Ok", ".Hu.error: Hiba", ".Hu.interfaceNotSelected: Interfsz nincs kivlasztva", ".Hu.paperJamError: Papr akads hiba", ".Hu.inkOutError: Tintakifogys hiba", ".Hu.paperOutError: Nincs papr hiba", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment */ #endif ".Hu.alignWarning:" "Figyelem !\\nEz megronglhatja a nyomtatt.", ".Hu.alignBlackOrColor:" "Fekete vagy sznes fej igaztsa?", ".Hu*firstHeadAlign:" "Krem helyezzen egy lapot a nyomtatba a\\n" "fejigazts mvelete eltt.", ".Hu.nextHeadAlign:" "Krem ismt helyezzen egy lapot a nyomtatba\\n" "a fejigazts folytatshoz.", ".Hu.lastHeadAlign:" "Krem vizsglja meg az utols mintt nagyon figyelmesen s gondoskodjon\\n" "nyomtatja helyes belltsrl.\\n\\n" "Most lehet: Ment-eni az eredmnyeket a nyomtatba, vagy\\n" "Visszavon-ni az eredmnyek mentse nlkl\\n(ment/visszavon) [visszavon] :", ".Hu.choosePattern:" "Krem vizsglja meg a nyomtatst, s vlassza a legjobb sorprt\\n" "az utoljra nyomtatott mintkbl.\\n" "Helyezzen lapot a nyomtatba.", ".Hu.chooseCPattern:" "Vizsglja meg az igaztsi lapot, s hatrozza meg,\\n" "melyik minta a legegyenletesebb.\\n" "Ez a minta fog a legkevsb szemcszettnek ltszani.\\n" "Ha tud egyenletes mintt tallni, krem\\n" "vlassza a legjobb minta szmt, s\\n" "ismtelje meg a folyamatot.\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge */ #endif ".Hu.functionNA:" "Ez a funkci nem elrhet a nyomtatjhoz.", ".Hu.askDoExchange:" "Valban tintapatront akar cserlni (Igen/Nem) [Nem] ? :", ".Hu.adviseMoveCartridge:" "A tintapatron most cserepozciba fog mozogni.", ".Hu.adviseExchangeCartridge:" "Krem cserlje ki a tintapatront most.", ".Hu.askExDone:" "Csere rendben (igen/nem) [nem] ? :", ".Hu.adviseFillCartridge:" "A tintafeltlts most indul.", ".Hu.adviseExchangeDone:" "Tintapatron csere rendben.", ".Hu.communicationError:" "rsi vagy olvassi hiba a nyomtatbl/nyomtatba !", ".Hu.exchangeError:" "A nyomtat egy hibt ad vissza, amikor a tintapatron cserje ktelez !", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Magyar forrás fájl a ttink-hez. ! Ez a fordítónak szól. ! ! Ez a fájl normál X-forrás fájlként van felépítve ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! ez egy megjegyzés karakter ha egy sor elején található. ! ! ! .syntax1: ez egy kulcsszó. ! .De.syntax: kulcs a szöveg helyének meghatározásához. ! mindkét karaktere - ebben az esetben a De - a LANG, LC_ALL ! környezeti változóból kapható. Az elsõ betûje ! nagybetû, a második kisbetûs marad. ! Ha fordítja ezt a fájlt, kérem helyettesítse az .En.-t a ! helyes értékre (jelen esetben .Hu.). ! ! \ egy sor végénél (space és tabulátor nincs ! engedélyezve) mutatja, hogy az aktuális sor befejezõdött. ! ! \ text szöveg azonosításához. Ez csak a kulcszó után ! követelmény. Ha csak a \ karakter van jelen, a szóköz ! el van távolítva. ! ! \n Ez egy sor elejére állítás. Az utána következõ szöveg ! kiíródik a következõ sorban. ! ! Kérem figyeljen, hogy a szóközöket és a sorvégeket ne ! távolítsa el. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ #endif ".Hu8.syntax1:" " Arguments for ", ".Hu8.syntax2:" " Kötelezõ:\\n" " -d eszköz_fájl --device eszköz_fájl\\n" " Tetszõleges:\\n" " -m name --modell neve vagy száma\\n" " enélkül a nyomtató automatikusan detektálódik\\n" " Parancsok (csak egy parancsot lehet kiadni):\\n" " -r --megszakítás\\n" " -c --törlés\\n" " -n --fúvóka ellenõrzés\\n" " -s --állapot (alapeset)\\n" " -a --fejigazítás\\n" " -e --tinta csere (nem minden nyomtató)\\n" " -i --azonosítás nyomtató azonosítás kiírása\\n" " Info:\\n" " -v --verzió nyomtatás verzió\\n" " -l --nyomtató lista ismert nyomtatók listája\\n", ".Hu8.syntaxM:" " Parancsok (csak egy parancsot lehet kiadni):\\n" " -r --megszakítás\\n" " -c --törlés\\n" " -n --fúvóka ellenõrzés\\n" " -s --állapot (alapeset)\\n" " -a --fejigazítás\\n" " -e --tinta csere (nem minden nyomtató)\\n" " -i --azonosítás nyomtató azonosítás kiírása\\n" " Info:\\n" " -v --verzió nyomtatás verzió\\n" " -l --nyomtató lista ismert nyomtatók listája\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages */ #endif ".Hu8.noAccess:" "Nincs hozzáférés az eszközfájlhoz, vagy nincs csatlakoztatott nyomtató.", ".Hu8.noDetected:" "Nem tudom detektálni a nyomtató modellt.", ".Hu8.unknownModel:" "Sajnálom, ismeretlen modell.", ".Hu8.noOPen:" "Sajnálom, nem tudom megnyitni az eszközfájlt.", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on */ #endif ".Hu8.continue:" "Folytatás (igen/nem) [nem] ? :", ".Hu8.yesorno: in", ".Hu8.saveCancel: mv", ".Hu8.blackQ: fekete", ".Hu8.colorQ: színes", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status */ #endif ".Hu8.black: Fekete", ".Hu8.cyan: Cián", ".Hu8.magenta: Bíbor", ".Hu8.yellow: Sárga", ".Hu8.lcyan: Fénylõ cián", ".Hu8.lmagenta: Fénylõ bíbor", ".Hu8.lblack: Fénylõ fekete", ".Hu8.printerState: nyomtató állapot", ".Hu8.unknown: ismeretlen", ".Hu8.selfTest: önteszt", ".Hu8.busy: foglalt", ".Hu8.printing: nyomtatás", ".Hu8.cleaning: tisztítás", ".ok: Ok", ".Hu8.error: Hiba", ".Hu8.interfaceNotSelected: Interfész nincs kiválasztva", ".Hu8.paperJamError: Papír akadás hiba", ".Hu8.inkOutError: Tintakifogyás hiba", ".Hu8.paperOutError: Nincs papír hiba", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment */ #endif ".Hu8.alignWarning:" "Figyelem !\\nEz megrongálhatja a nyomtatót.", ".Hu8.alignBlackOrColor:" "Fekete vagy színes fej igazítása?", ".Hu*firstHeadAlign:" "Kérem helyezzen egy lapot a nyomtatóba a\\n" "fejigazítás mûvelete elõtt.", ".Hu8.nextHeadAlign:" "Kérem ismét helyezzen egy lapot a nyomtatóba\\n" "a fejigazítás folytatásához.", ".Hu8.lastHeadAlign:" "Kérem vizsgálja meg az utolsó mintát nagyon figyelmesen és gondoskodjon\\n" "nyomtatója helyes beállításáról.\\n\\n" "Most lehet: Ment-eni az eredményeket a nyomtatóba, vagy\\n" "Visszavon-ni az eredmények mentése nélkül\\n(ment/visszavon) [visszavon] :", ".Hu8.choosePattern:" "Kérem vizsgálja meg a nyomtatást, és válassza a legjobb sorpárt\\n" "az utoljára nyomtatott mintákból.\\n" "Helyezzen lapot a nyomtatóba.", ".Hu8.chooseCPattern:" "Vizsgálja meg az igazítási lapot, és határozza meg,\\n" "melyik minta a legegyenletesebb.\\n" "Ez a minta fog a legkevésbé szemcsézettnek látszani.\\n" "Ha tud egyenletes mintát találni, kérem\\n" "válassza a legjobb minta számát, és\\n" "ismételje meg a folyamatot.\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge */ #endif ".Hu8.functionNA:" "Ez a funkció nem elérhetõ a nyomtatójához.", ".Hu8.askDoExchange:" "Valóban tintapatront akar cserélni (Igen/Nem) [Nem] ? :", ".Hu8.adviseMoveCartridge:" "A tintapatron most cserepozícióba fog mozogni.", ".Hu8.adviseExchangeCartridge:" "Kérem cserélje ki a tintapatront most.", ".Hu8.askExDone:" "Csere rendben (igen/nem) [nem] ? :", ".Hu8.adviseFillCartridge:" "A tintafeltöltés most indul.", ".Hu8.adviseExchangeDone:" "Tintapatron csere rendben.", ".Hu8.communicationError:" "Írási vagy olvasási hiba a nyomtatóból/nyomtatóba !", ".Hu8.exchangeError:" "A nyomtató egy hibát ad vissza, amikor a tintapatron cseréje kötelezõ !", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! File Italiano per ttink. ! Qanto segue per i traduttori. ! ! Questo file prodotto come un semplice file X-resource ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! un carattere di commmento se appare all'inizio di una ! linea. ! ! .syntax1: una parola chiave. ! .It.syntax: la chiave per un testo particolare. ! entrambi i caratteri (in questo caso It) sono presi dalle ! variabili d'ambiente LANG, LC_ALL. La prima lettera ! viene posta maiuscola e la seconda rimane normale. ! Qualora tu traduca questo file, sostituisci .En. con ! il valore corretto. ! ! \ Alla fine di una linea (spazi e tabulatori non sono ! ammessi) indica che la linea continua nella successiva. ! ! \ text permette di indentare text. E' richiesto solo dopo ! la parola chiave. Se neppure \ presente, lo spazio viene ! rimosso. ! ! \n Segno di "a capo". Il seguito verr scritto sulla ! linea successiva. ! ! Nota che gli spazi alla fine di una linea non vengono ! rimossi. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ #endif ".It.syntax1:" " Argomenti per ", ".It.syntax2:" " Obbligatorio:\\n" " -d device_file --device device_file\\n" " Opzionali:\\n" " -m name --model nome o numero\\n" " senza questo la stampante viene rilevata sutomaticamente\\n" " Ordine (solo un ordine pu essere impartito):\\n" " -r --reset\\n" " -c --clean\\n" " -n --nozzle-check\\n" " -s --status (default)\\n" " -a --align-head\\n" " -e --exchange-ink (non per tutte le stampanti)\\n" " -i --identity stampa il tipo di stampante\\n\\ ", "Informazioni:\\n" " -v --version stampa la versione\\n" " -l --list-printer elenca le stampanti presenti\\n", ".It.syntaxM:" " Ordine (solo un ordine pu essere impartito):\\n" " -r --reset\\n" " -c --clean\\n" " -n --nozzle-check\\n" " -s --status (default)\\n" " -a --align-head\\n" " -e --exchange-ink (non per tutte le stampanti)\\n" " -i --identity stampa il tipo di stampante\\n\\ ", "Info:\\n" " -v --version stampa la versione\\n" " -l --list-printer elenca le stampanti presenti\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Messaggi d'errore e di avvertimento */ #endif ".It.noAccess:" "Accesso al file dispositivo impossibile o stampante non connessa.", ".It.noDetected:" "Modello di stampante non rilevabile.", ".It.unknownModel:" "Spiacente, modello sconosciuto.", ".It.noOPen:" "Spiacente, nessun accesso al file dispositivo.", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Testi per richieste ed altro */ #endif ".It.continue:" "Continua (s/no) [no] ? : ", ".It.yesorno: sn", ".It.saveCancel: se", ".It.blackQ: nero", ".It.colorQ: colore", ".It.Hcontinue:" "@QContinua ?@Bs@Bno ", ".It.Wyesorno:" " Save=YES,Save=NO", ".It.WsaveCancel: se", ".It.followingPrintersFound:" "Sono state rilevate le seguenti stampanti:", ".It.ChoosePrinter:" "Scegli la stampante ", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Stato */ #endif ".It.black: Nero", ".It.cyan: Ciano", ".It.magenta: Magenta", ".It.yellow: Giallo", ".It.lcyan: Ciano chiaro", ".It.lmagenta: Magenta chiaro", ".It.lblack: Grigio", ".It.lblack: Foto / nero matte ", ".It.blue: Blu", ".It.red: Rosso", ".It.dyellow: Giallo scuro", ".It.gloss: Ottimizzatore lucentezza", ".It.grey: Grigio", ".It.printerState: stato stampante", ".It.unknown: sconosciuto", ".It.selfTest: auto test", ".It.busy: occupata", ".It.printing: stampa in corso", ".It.cleaning: pulizia", ".It.ok: Ok", ".It.error: Errore", ".It.interfaceNotSelected: Interfaccia non selezionata", ".It.paperJamError: Errore: carta inceppata", ".It.inkOutError: Errore: inchiostro terminato", ".It.paperOutError: Errore: carta terminata", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Allineamento testine */ #endif ".It.alignWarning:" "Attenzione !\\nQuesto pu danneggiare la stampante.", ".It.alignBlackOrColor:" "Allineo la testina del nero o del colore ?", "*firstHeadAlign:" "Inserisci un foglio nella stampante per iniziare\\n" "la procedura di allineamento testina.", ".It.nextHeadAlign:" "Inserisci di nuovo il foglio nella stampante per\\n" "continuare la procedura di allineamento testina.", ".It.lastHeadAlign:" "Controlla attentamente il risultato finale per assicurarti che la tua\\n" "stampante sia allineata correttamente.\\n\\n" "Puoi ora: salvare i risultati nella stampante o\\n" "uscire senza salvare i risultati\\n(salva/esci) [esci] : ", ".It.choosePattern:" "Analizza la stampa, e scegli la miglior coppia di linee\\n" "dell'ultima stampa effettuata.\\n" "Inserisci di nuovo il foglio nella stampante.", ".It.sampleNo:" "campione #", ".It.choosePattern2:" "Analizza le linee stampate e scegli la miglior coppia\\n", ".It.chooseCPattern:" "Analizza l'allineamento del foglio, e trova quale\\n" "schema sia il pi fine.\\n" "Questo schema quello con grana pi piccola.\\n" "Se non riesci a trovarne uno fine,\\n" "seleziona il numero di quello migliore, e\\n" "ripeti la procedura.\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Cambio cartuccia */ #endif ".It.functionNA:" "Questa funzione non disponibile per la stampante.", ".It.askDoExchange:" "Vuoi davvero sostituire la cartuccia (s/no) [no] ? : ", ".It.exchangeBlackOrColor:" "Scegli la cartuccia:", ".It.adviseMoveCartridge:" "La cartuccia viene ora spostata nella posizione di sostituzione.", ".It.adviseExchangeCartridge:" "Sostituisci ora la cartuccia.", ".It.askExDone:" "Sostituzione effettuata (s/no) [no] ? : ", ".It.adviseFillCartridge:" "Inizio riempimento inchiostro.", ".It.adviseExchangeDone:" "Sostituzione cartuccia effettuata.", ".It.communicationError:" "Errore durante la lettura o scrittura dalla/alla stampante !", ".It.exchangeError:" "La stampante ha dato errore durante la richiesta di sostituzione cartuccia !", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! File Italiano per ttink. ! Qanto segue è per i traduttori. ! ! Questo file è prodotto come un semplice file X-resource ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! è un carattere di commmento se appare all'inizio di una ! linea. ! ! .syntax1: è una parola chiave. ! .It.syntax: è la chiave per un testo particolare. ! entrambi i caratteri (in questo caso It) sono presi dalle ! variabili d'ambiente LANG, LC_ALL. La prima lettera ! viene posta maiuscola e la seconda rimane normale. ! Qualora tu traduca questo file, sostituisci .En. con ! il valore corretto. ! ! \ Alla fine di una linea (spazi e tabulatori non sono ! ammessi) indica che la linea continua nella successiva. ! ! \ text permette di indentare text. E' richiesto solo dopo ! la parola chiave. Se neppure \ è presente, lo spazio viene ! rimosso. ! ! \n Segno di "a capo". Il seguito verrà  scritto sulla ! linea successiva. ! ! Nota che gli spazi alla fine di una linea non vengono ! rimossi. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ #endif ".It8.syntax1:" " Argomenti per ", ".It8.syntax2:" " Obbligatorio:\\n" " -d device_file --device device_file\\n" " Opzionali:\\n" " -m name --model nome o numero\\n" " senza questo la stampante viene rilevata sutomaticamente\\n" " Ordine (solo un ordine può essere impartito):\\n" " -r --reset\\n" " -c --clean\\n" " -n --nozzle-check\\n" " -s --status (default)\\n" " -a --align-head\\n" " -e --exchange-ink (non per tutte le stampanti)\\n" " -i --identity stampa il tipo di stampante\\n\\ ", "Informazioni:\\n" " -v --version stampa la versione\\n" " -l --list-printer elenca le stampanti presenti\\n", ".It8.syntaxM:" " Ordine (solo un ordine può essere impartito):\\n" " -r --reset\\n" " -c --clean\\n" " -n --nozzle-check\\n" " -s --status (default)\\n" " -a --align-head\\n" " -e --exchange-ink (non per tutte le stampanti)\\n" " -i --identity stampa il tipo di stampante\\n\\ ", "Info:\\n" " -v --version stampa la versione\\n" " -l --list-printer elenca le stampanti presenti\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Messaggi d'errore e di avvertimento */ #endif ".It8.noAccess:" "Accesso al file dispositivo impossibile o stampante non connessa.", ".It8.noDetected:" "Modello di stampante non rilevabile.", ".It8.unknownModel:" "Spiacente, modello sconosciuto.", ".It8.noOPen:" "Spiacente, nessun accesso al file dispositivo.", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Testi per richieste ed altro */ #endif ".It8.continue:" "Continua (sì/no) [no] ? : ", ".It8.yesorno: sn", ".It8.saveCancel: se", ".It8.blackQ: nero", ".It8.colorQ: colore", ".It8.Hcontinue:" "@QContinua ?@Bsì@Bno ", ".It8.Wyesorno:" " Save=YES,Save=NO", ".It8.WsaveCancel: se", ".It8.followingPrintersFound:" "Sono state rilevate le seguenti stampanti:", ".It8.ChoosePrinter:" "Scegli la stampante ", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Stato */ #endif ".It8.black: Nero", ".It8.cyan: Ciano", ".It8.magenta: Magenta", ".It8.yellow: Giallo", ".It8.lcyan: Ciano chiaro", ".It8.lmagenta: Magenta chiaro", ".It8.lblack: Grigio", ".It8.lblack: Foto / nero matte ", ".It8.blue: Blu", ".It8.red: Rosso", ".It8.dyellow: Giallo scuro", ".It8.gloss: Ottimizzatore lucentezza", ".It8.grey: Grigio", ".It8.printerState: stato stampante", ".It8.unknown: sconosciuto", ".It8.selfTest: auto test", ".It8.busy: occupata", ".It8.printing: stampa in corso", ".It8.cleaning: pulizia", ".It8.ok: Ok", ".It8.error: Errore", ".It8.interfaceNotSelected: Interfaccia non selezionata", ".It8.paperJamError: Errore: carta inceppata", ".It8.inkOutError: Errore: inchiostro terminato", ".It8.paperOutError: Errore: carta terminata", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Allineamento testine */ #endif ".It8.alignWarning:" "Attenzione !\\nQuesto può danneggiare la stampante.", ".It8.alignBlackOrColor:" "Allineo la testina del nero o del colore ?", "*firstHeadAlign:" "Inserisci un foglio nella stampante per iniziare\\n" "la procedura di allineamento testina.", ".It8.nextHeadAlign:" "Inserisci di nuovo il foglio nella stampante per\\n" "continuare la procedura di allineamento testina.", ".It8.lastHeadAlign:" "Controlla attentamente il risultato finale per assicurarti che la tua\\n" "stampante sia allineata correttamente.\\n\\n" "Puoi ora: salvare i risultati nella stampante o\\n" "uscire senza salvare i risultati\\n(salva/esci) [esci] : ", ".It8.choosePattern:" "Analizza la stampa, e scegli la miglior coppia di linee\\n" "dell'ultima stampa effettuata.\\n" "Inserisci di nuovo il foglio nella stampante.", ".It8.sampleNo:" "campione #", ".It8.choosePattern2:" "Analizza le linee stampate e scegli la miglior coppia\\n", ".It8.chooseCPattern:" "Analizza l'allineamento del foglio, e trova quale\\n" "schema sia il più fine.\\n" "Questo schema è quello con grana più piccola.\\n" "Se non riesci a trovarne uno fine,\\n" "seleziona il numero di quello migliore, e\\n" "ripeti la procedura.\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Cambio cartuccia */ #endif ".It8.functionNA:" "Questa funzione non è disponibile per la stampante.", ".It8.askDoExchange:" "Vuoi davvero sostituire la cartuccia (sì/no) [no] ? : ", ".It8.exchangeBlackOrColor:" "Scegli la cartuccia:", ".It8.adviseMoveCartridge:" "La cartuccia viene ora spostata nella posizione di sostituzione.", ".It8.adviseExchangeCartridge:" "Sostituisci ora la cartuccia.", ".It8.askExDone:" "Sostituzione effettuata (sì/no) [no] ? : ", ".It8.adviseFillCartridge:" "Inizio riempimento inchiostro.", ".It8.adviseExchangeDone:" "Sostituzione cartuccia effettuata.", ".It8.communicationError:" "Errore durante la lettura o scrittura dalla/alla stampante !", ".It8.exchangeError:" "La stampante ha dato errore durante la richiesta di sostituzione cartuccia !", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Svensk resursfil fr ttink. ! Swedish recourse file for ttink. ! This is for translators. ! ! This file is built like a normal X-resources file ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! is a commment character if it appears at the begin of a ! line. ! ! .syntax1: is ein key word. ! .En.syntax1: is the key for a localized text. ! both characters (in this case En) are taken from the ! environment variablea LANG, LC_ALL. The first letter ! will be set to upper case and the second remain normal. ! If you translate this file, please replace .En. with ! the correct value. ! ! \ At the end of a line (following spaces and tabulators are ! not allowed) show that the actual line will be continued. ! ! \ text allow to indent the text. This will only be required after ! the key word. If no \ is present, spaces are removed. ! ! \n This is a carriage return. Following text will be ! printed in the next line. ! ! Please note that spaces at the end of a line will not ! be removed. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ #endif ".Sv.syntax1:" " Argumenter fr ", ".Sv.syntax2:" " Obligatorisk:\\n" " -d apparatfil --device apparatfil\\n" " Optional:\\n" " -m namn --model namn eller nummer\\n" " utan detta upptckas skrivaren automatiskt\\n" " -D --D4 Anvnd alltid D4-protokollet\\n" " Uppdrag (bara ett uppdrag kan ges):\\n" " -r --reset Stt tillbaka skrivaren\\n" " -c --clean Rengr munstycken\\n" " -n --nozzle-check Testa munstycken\\n" " -s --status (standarduppdrag)\\n" " -a --align-head rt upp huvudet\\n" " -e --exchange-ink utbyt patronen (inte alla skrivaren)\\n" " -i --identity skriv ut skrivarens identitet\\n" " Information:\\n" " -v --version skriv ut versionsnummer\\n" " -l --list-printer skriv ut lista av knda skrivaren\\n" " Andra:\\n" " -L debug ouput fr D4-protokollet p stderr\\n" " -u utskrift med UTF-8-kod\\n", ".Sv.syntaxM:" " Optional:\\n" " -D --D4 Anvnd alltid D4-protokollet\\n" " Uppdrag (bara ett uppdrag kan ges):\\n" " -r --reset Stt tillbaka skrivaren\\n" " -c --clean Rengr munstycken\\n" " -n --nozzle-check Testa munstycken\\n" " -s --status (standarduppdrag)\\n" " -a --align-head rt upp huvudet\\n" " -e --exchange-ink utbyt patronen (inte alla skrivaren)\\n" " -i --identity skriv ut skrivarens identitet\\n" " Information:\\n" " -v --version skriv ut versionsnummer\\n" " -l --list-printer skriv ut lista av knda skrivaren\\n" " Andra:\\n" " -L debug ouput fr D4-protokollet p stderr\\n" " -u utskrift med UTF-8-kod\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages */ #endif ".Sv.noAccess:" "Ingen tillgng till apparatfilen eller ingen skrivare r ansluten.", ".Sv.noDetected:" "Kan inte bestmma skrivarens modell.", ".Sv.unknownModel:" "Oknd skrivare", ".Sv.noOPen:" "Kan inte ppna apparatfilen.", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on */ #endif ".Sv.continue:" "Fortstta (ja/nej) [nej] ? : ", ".Sv.yesorno: jn", ".Sv.saveCancel: sa", ".Sv.blackQ: svart", ".Sv.colorQ: frg", ".Sv.followingPrintersFound:" "Hittade fljande skrivare:", ".Sv.ChoosePrinter:" "Vlj skrivaren ", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status */ #endif ".Sv.black: Svart", ".Sv.cyan: Cyan", ".Sv.magenta: Magenta", ".Sv.yellow: Gul", ".Sv.lcyan: Ljuscyan", ".Sv.lmagenta: Ljusmagenta", ".Sv.lblack: Foto/matt svart", ".Sv.blue: Bl", ".Sv.red: Rd", ".Sv.dyellow: Mrkgul", ".Sv.gloss: Glansoptimerare", ".Sv.printerState: skrivarens status", ".Sv.unknown: oknd", ".Sv.selfTest: sjlvtest", ".Sv.busy: upptagen", ".Sv.printing: skriver ut", ".Sv.cleaning: reningen pgr", ".Sv.ok: Ok", ".Sv.error: Fel", ".Sv.interfaceNotSelected: Grnssnittet r inte valt", ".Sv.paperJamError: Pappersstockningsfel", ".Sv.inkOutError: Blcket r slut", ".Sv.paperOutError: Pappret r slut", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment */ #endif ".Sv.alignWarning:" "Varning !\\nDetta kunde frstra skrivaren.", ".Sv.alignBlackOrColor:" "Rta upp det svarta eller det frgade huvudet?", ".Sv*firstHeadAlign:" "Vnligen stt in en pappersark i din skrivare.", ".Sv.nextHeadAlign:" "Vnligen stt in igen arken i skrivaren fr att forstta processen.", ".Sv.lastHeadAlign:" "Vnligen granska den sista utskriften mycket noggrant fr\\n" "att tillfrskra dig att skrivaren r instlld bra.\\n\\n" "Du kan nu: spara resultatet i skrivaren eller\\n" "avbryta utan att spara resultatet\\n(spara/avbryta) [avbryta] : ", ".Sv.choosePattern:" "Vnligen granska utskriften och vlj paret med\\n" "dom rakaste linjer frn det sista mnstret.\\n" "Stt arken i skrivaren igen.", ".Sv.chooseCPattern:" "Granska arken med mnstren och faststll\\n" "mnstret som r jmnast.\\n" "Om du inte kan hitta ett jmnt mnster\\n" "vlj nummret av det bsta mnstret,\\n" "och repetera processen.\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge */ #endif ".Sv.functionNA:" "Denna funktion r inte tillgnglig fr din skrivare.", ".Sv.askDoExchange:" "Vill du utbyta en patron (ja/nej) [nej] ? : ", ".Sv.exchangeBlackOrColor: Vlj patronen:", ".Sv.adviseMoveCartridge:" "Skrivhuvudet flyttas nu till utbytespositionen.", ".Sv.adviseExchangeCartridge:" "Du kan nu byta patronen.", ".Sv.askExDone:" "Utbyte klart (ja/nej) [nej] ? : ", ".Sv.adviseFillCartridge:" "Pfyllning av blcket startas nu.", ".Sv.adviseExchangeDone:" "Utbyte av patronen r klar.", ".Sv.communicationError:" "Ls-/skrivfel p skrivaren!", ".Sv.exchangeError:" "Skrivaren svarar med fel vid begran av patronbyte!", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Svensk resursfil för ttink. ! Swedish recourse file for ttink. ! This is for translators. ! ! This file is built like a normal X-resources file ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! is a commment character if it appears at the begin of a ! line. ! ! .syntax1: is ein key word. ! .En.syntax1: is the key for a localized text. ! both characters (in this case En) are taken from the ! environment variablea LANG, LC_ALL. The first letter ! will be set to upper case and the second remain normal. ! If you translate this file, please replace .En. with ! the correct value. ! ! \ At the end of a line (following spaces and tabulators are ! not allowed) show that the actual line will be continued. ! ! \ text allow to indent the text. This will only be required after ! the key word. If no \ is present, spaces are removed. ! ! \n This is a carriage return. Following text will be ! printed in the next line. ! ! Please note that spaces at the end of a line will not ! be removed. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ #endif ".Sv8.syntax1:" " Argumenter för ", ".Sv8.syntax2:" " Obligatorisk:\\n" " -d apparatfil --device apparatfil\\n" " Optional:\\n" " -m namn --model namn eller nummer\\n" " utan detta upptäckas skrivaren automatiskt\\n" " -D --D4 Använd alltid D4-protokollet\\n" " Uppdrag (bara ett uppdrag kan ges):\\n" " -r --reset Sätt tillbaka skrivaren\\n" " -c --clean Rengör munstycken\\n" " -n --nozzle-check Testa munstycken\\n" " -s --status (standarduppdrag)\\n" " -a --align-head rät upp huvudet\\n" " -e --exchange-ink utbyt patronen (inte alla skrivaren)\\n" " -i --identity skriv ut skrivarens identitet\\n" " Information:\\n" " -v --version skriv ut versionsnummer\\n" " -l --list-printer skriv ut lista av kända skrivaren\\n" " Andra:\\n" " -L debug ouput för D4-protokollet på stderr\\n" " -u utskrift med UTF-8-kod\\n", ".Sv8.syntaxM:" " Optional:\\n" " -D --D4 Använd alltid D4-protokollet\\n" " Uppdrag (bara ett uppdrag kan ges):\\n" " -r --reset Sätt tillbaka skrivaren\\n" " -c --clean Rengör munstycken\\n" " -n --nozzle-check Testa munstycken\\n" " -s --status (standarduppdrag)\\n" " -a --align-head rät upp huvudet\\n" " -e --exchange-ink utbyt patronen (inte alla skrivaren)\\n" " -i --identity skriv ut skrivarens identitet\\n" " Information:\\n" " -v --version skriv ut versionsnummer\\n" " -l --list-printer skriv ut lista av kända skrivaren\\n" " Andra:\\n" " -L debug ouput för D4-protokollet på stderr\\n" " -u utskrift med UTF-8-kod\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Error and warning messages */ #endif ".Sv8.noAccess:" "Ingen tillgång till apparatfilen eller ingen skrivare är ansluten.", ".Sv8.noDetected:" "Kan inte bestämma skrivarens modell.", ".Sv8.unknownModel:" "Okänd skrivare", ".Sv8.noOPen:" "Kan inte öppna apparatfilen.", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Strings for queries and so on */ #endif ".Sv8.continue:" "Fortsätta (ja/nej) [nej] ? : ", ".Sv8.yesorno: jn", ".Sv8.saveCancel: sa", ".Sv8.blackQ: svart", ".Sv8.colorQ: färg", ".Sv8.followingPrintersFound:" "Hittade följande skrivare:", ".Sv8.ChoosePrinter:" "Välj skrivaren ", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Status */ #endif ".Sv8.black: Svart", ".Sv8.cyan: Cyan", ".Sv8.magenta: Magenta", ".Sv8.yellow: Gul", ".Sv8.lcyan: Ljuscyan", ".Sv8.lmagenta: Ljusmagenta", ".Sv8.lblack: Foto/matt svart", ".Sv8.blue: Blå", ".Sv8.red: Röd", ".Sv8.dyellow: Mörkgul", ".Sv8.gloss: Glansoptimerare", ".Sv8.printerState: skrivarens status", ".Sv8.unknown: okänd", ".Sv8.selfTest: självtest", ".Sv8.busy: upptagen", ".Sv8.printing: skriver ut", ".Sv8.cleaning: reningen pågår", ".Sv8.ok: Ok", ".Sv8.error: Fel", ".Sv8.interfaceNotSelected: Gränssnittet är inte valt", ".Sv8.paperJamError: Pappersstockningsfel", ".Sv8.inkOutError: Bläcket är slut", ".Sv8.paperOutError: Pappret är slut", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Head aligment */ #endif ".Sv8.alignWarning:" "Varning !\\nDetta kunde förstöra skrivaren.", ".Sv8.alignBlackOrColor:" "Räta upp det svarta eller det färgade huvudet?", ".Sv*firstHeadAlign:" "Vänligen sätt in en pappersark i din skrivare.", ".Sv8.nextHeadAlign:" "Vänligen sätt in igen arken i skrivaren för att forsätta processen.", ".Sv8.lastHeadAlign:" "Vänligen granska den sista utskriften mycket noggrant för\\n" "att tillförsäkra dig att skrivaren är inställd bra.\\n\\n" "Du kan nu: spara resultatet i skrivaren eller\\n" "avbryta utan att spara resultatet\\n(spara/avbryta) [avbryta] : ", ".Sv8.choosePattern:" "Vänligen granska utskriften och välj paret med\\n" "dom rakaste linjer från det sista mönstret.\\n" "Sätt arken i skrivaren igen.", ".Sv8.chooseCPattern:" "Granska arken med mönstren och fastställ\\n" "mönstret som är jämnast.\\n" "Om du inte kan hitta ett jämnt mönster\\n" "välj nummret av det bästa mönstret,\\n" "och repetera processen.\\n", #if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Exchange of cartridge */ #endif ".Sv8.functionNA:" "Denna funktion är inte tillgänglig för din skrivare.", ".Sv8.askDoExchange:" "Vill du utbyta en patron (ja/nej) [nej] ? : ", ".Sv8.exchangeBlackOrColor: Välj patronen:", ".Sv8.adviseMoveCartridge:" "Skrivhuvudet flyttas nu till utbytespositionen.", ".Sv8.adviseExchangeCartridge:" "Du kan nu byta patronen.", ".Sv8.askExDone:" "Utbyte klart (ja/nej) [nej] ? : ", ".Sv8.adviseFillCartridge:" "Påfyllning av bläcket startas nu.", ".Sv8.adviseExchangeDone:" "Utbyte av patronen är klar.", ".Sv8.communicationError:" "Läs-/skrivfel på skrivaren!", ".Sv8.exchangeError:" "Skrivaren svarar med fel vid begäran av patronbyte!", (char *)0 }; mtink-1.0.16/mainSrc/version.h0000644000076400001540000000164410665175225014321 0ustar jjfuse/************************************************ * File version.h * * Copyright (C) 2001 Jean-Jacques Sarton jj.sarton@t-online.de * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ************************************************/ #define VERSION "V 1.0.16" mtink-1.0.16/mainSrc/micon.h0000644000076400001540000000224010664606454013734 0ustar jjfuse/* micon.h * Copyright (C) 2002 Jean-Jacques Sarton jj.sarton@t-online.de * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ extern Widget createIconLayout(Widget top, XtAppContext app, char *mainResource, char *lang, int popup); extern void chgIcon(int val); extern void popupIcon(int x, int y); extern int iconAskPos(int *x, int *y); extern void iconAddTooltip(char *text); extern void unmapIcon(void); /* val = 0 -> ink low level reaches * val = 1 -> ink level near low level * val = 2 -> ink level ok */ mtink-1.0.16/mainSrc/checkenv.c0000644000076400001540000001661210664605751014417 0ustar jjfuse/* File checkenv.c * * Copyright (C) 2001 Jean-Jacques Sarton jj.sarton@t-online.de * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include /* List of environment variables we accept */ static char *envVars[] = { "PATH=", "HOME=", "USER=", "LANG=", "LOGNAME=", "DISPLAY=", "SHELL=", "XAUTHORITY=", NULL }; /* linked list for storing the variable we will unset */ typedef struct envList_s { char *name; struct envList_s *next; } envList_t; static envList_t *list = NULL; /*******************************************************************/ /* Function addElem(char *e) */ /* */ /* char *e contain "VAR=value" from the environment */ /* we extract the name (VAR) and create an envList_telement */ /* will be added to our linked list */ /* */ /* return 0 on error 1 if all is OK */ /*******************************************************************/ static int addElem(char *e) { envList_t *l; char *s = e; char *n; /* search end of name and alloc memory for storing it */ while(*s && *s != '=') { s++; } n = calloc(s-e+2,1); if ( n != NULL ) { strncpy(n, e, s-e); /* alloc a list element build the linked list */ if ( list == NULL ) { list = (envList_t*)calloc(sizeof(envList_t),1); if ( list == NULL ) { return 0; } list->name = n; } else { l = list; while (l->next != NULL ) { l = l->next; } l->next = (envList_t*)calloc(sizeof(envList_t),1); if ( l->next == NULL ) { return 0; } l = l->next; l->name = n; return 1; } } else { return 0; } return 1; } /*******************************************************************/ /* Function unsetEnv(void) */ /* */ /* unset the variable listed into our list and free the list */ /* */ /*******************************************************************/ static void unsetEnv() { envList_t *l = list; envList_t *n; while ( l != NULL ) { unsetenv(l->name); free(l->name); n = l->next; free(l); l = n; } list = NULL; } /*******************************************************************/ /* Function checkPath(void) */ /* */ /* check the length of each element contained into our PATH */ /* variable */ /* */ /* return 0 on error 1 if all is OK */ /*******************************************************************/ static int checkPath(void) { char *p = getenv("PATH"); char *e; if ( p ) { while(*p) { e = strchr(p, ':'); if ( e && (e - p) > 800 ) { return 0; } else if ( e ) { p = e+1; } else { break; } } } return 1; } /*******************************************************************/ /* Function checkEnv(char **env) */ /* */ /* char **env is the third argument passed to main() */ /* */ /* Check the environment against possibly corrupted variable. */ /* Not needed variable will be deleted, the remaining variables */ /* will be checked (length) so we avoid bufferoverflow from */ /* buggy libraries */ /* */ /* return 0 on error 1 if all is OK */ /*******************************************************************/ int checkEnv(char **env) { char **e = env; char *n = 0; char *m; char *u; char **envName = NULL; /* check the environment variable against the allowed */ /* variable, if the variable is not into our array of */ /* allowed variable remember the name so we can unset */ /* the variable later */ while ( e && *e ) { envName = envVars; while ( *envName ) { if ( strncmp(*e, *envName, strlen(*envName)) == 0 ) { /* variable is known */ break; } envName++; } if ( *envName == NULL ) /* we don't need this */ { if ( addElem(*e) == 0 ) { return 0; } } e++; } /* unset all not allowed/needed variables */ unsetEnv(); /* check the remaining environment variables */ n = getenv("HOME"); if ( n && strlen(n) > 900 ) { return 0; } /* check the LOGNAME and USER variables */ m = getenv("LOGNAME"); u = getenv("USER"); if ( m != NULL && u != NULL ) { unsetenv("LOGNAME"); } else if ( m != NULL ) { m = u; } if ( strlen(m) > 256 ) { return 0; } while ( *m ) { if ( !isprint(*m) || isspace(*m) ) return 0; m++; } /* check the PATH variable */ if ( checkPath() == 0 ) { return 0; } /* check LANG */ if ( (m = getenv("LANG")) != NULL ) { if ( strlen(m) > 20 ) { return 0; } } /* check SHELL */ if ( (m = getenv("SHELL")) != NULL ) { /* path very long -> error */ if ( strlen(m) > 1023 ) return 0; /* check all characters, allow only printable * non space character. */ while ( *m ) { if ( !isprint(*m) || isspace(*m) ) return 0; m++; } } /* DISPLAY */ m = getenv("DISPLAY"); if ( m != NULL ) { n = strchr(m, ':'); if ( n == NULL ) { return 0; } if ( strlen(n) > 6 ) { return 0; } if ( n-m > 14 ) { return 0; } } /* XAUTHORITY */ m = getenv("XAUTHORITY"); if ( m!= NULL ) { if ( strlen(m) > 1023 ) { return 0; } } return 1; } mtink-1.0.16/mainSrc/tooltip.h0000644000076400001540000000333010376041214014305 0ustar jjfuse/* file tooltip.h Implement tooltip for Motif 1.2, 2.0 and 2.1. Work also for Motif 2.2 which allready include tooltips. This can also be used for other toolbits which use the Xt library. In this case modification of the tooltips.c gile are necessary (allready probided for libXaw{3d}. Author: Jean-Jacques Sarton jj.sarton@t-online.de http://xwtools.automatix.de Date: February 2002 */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef TOOLTIP_H #define TOOLTIP_H #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif extern void xmAddTooltip(Widget w); extern void xmSetPostDelay(long delay); extern void xmSetDuration(long delay); extern void xmAddtooltipGlobal(Widget top); /* only for Motif */ extern void xmEnableTooltip(int enable); extern void xmSetXOffset(int offset); extern void xmSetYOffset(int offset); extern void xmTooltipSetLang(char *lang); /* a nice convenience function */ extern char *xmGetResource(Widget w, char *resource); #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif mtink-1.0.16/mainSrc/align.c0000644000076400001540000000630610665007037013714 0ustar jjfuse#include #include void fillBuf(unsigned char *t, unsigned char *s, int len) { while ( len-- > 0 ) { *t++ = *s++; } } int bldAlignPattern(FILE *fp, int bufpos, unsigned char *printer_cmd, int bufSize) { unsigned char obuf[1024]; char ibuf[1024]; int len; char *s; int repeat; /* read a line */ while( fgets(ibuf, sizeof(ibuf), fp) ) { /* eliminate CR */ s = strchr(ibuf, '\n'); if ( s ) *s = '\0'; /* initialize */ len = 0; s = ibuf; if ( *s == '0' && s[1] == 'c' ) { /* Form Feed, end of code ! */ obuf[0] = 12; len = 1; if ( bufpos + len > bufSize ) { return 0; } fillBuf(printer_cmd+bufpos, obuf, len); bufpos += len; break; } /* process each character */ while(*s ) { if ( *s == '#' ) { /* comments the line was processed */ break; } else if ( *s == '[' ) { /* repeat pattern */ repeat = 1; while ( repeat ) { /* write out the stored values */ while ( repeat ) { if ( bufpos + len > bufSize ) return 0; fillBuf(printer_cmd+bufpos,obuf, len); bufpos += len; repeat--; } if ( *s == '[' ) s++; if ( *s == '#' ) break; /* read the number of repetition */ len = 0; repeat = strtol(s,NULL, 10); while ( *s && *s != ']' ) s++; s++; while ( *s == ' ' ) s++; while(*s && (*s != '#' || *s != '[')) { obuf[len] = strtol(s, NULL, 16); len++; s += 2; while ( *s == ' ' ) s++; } } } else { /* normal characters */ obuf[len] = strtol(s, NULL, 16); len++; s += 2; } /* skip spaces */ while ( *s == ' ') { s++; } } /* printout the buffer */ if ( bufpos + len > bufSize ) return 0; fillBuf(printer_cmd+bufpos,obuf, len); bufpos += len; } return bufpos; } int interpretFile(char *name, int bufpos, unsigned char *printer_cmd, int bufSize) { FILE *fp; char dir_name[1024]; int pos; /* load file name located under /usr/local/lib/mtink or * /usr/mtink/lib/mtink */ snprintf(dir_name, sizeof(dir_name),"/usr/local/lib/mtink%s", name); if ( (fp = fopen(dir_name, "r")) == NULL) { snprintf(dir_name, sizeof(dir_name),"/usr/lib/mtink%s", name); fp = fopen(dir_name, "r"); } if ( fp == NULL ) { return 0; } pos = bldAlignPattern(fp, bufpos, printer_cmd, bufSize ); fclose(fp); return pos; } mtink-1.0.16/mainSrc/al820.c0000644000076400001540000002201710376041214013437 0ustar jjfuse/**************************************************** * File al820.c * * write and read to / from printer * * * Copyright (C) 2001 Jean-Jacques Sarton jj.sarton@t-online.de * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ****************************************************/ /* commands for head alignment pattern Stylus Photo 820 */ /* pattern for ESC i command :1 dot set , 63 unset */ #define P1 0x00, 0xc0, 0xf2, 0x00, #define P1_48 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 \ P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 \ P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 P1 #define PATTERN P1_48 static uc topPos820[] = { 0x1b, '(', 'v', 0x02, 0x00, 0xa0, 0x00 /* vert. pos. abs. 160 * 1/60 inch */ }; static uc remoteInit820[] = { 0x1b, '(', 'R', 0x08, 0x00, 0x00, 'R', 'E', 'M', 'O', 'T', 'E', '1', 'L', 'C', 0x02, 0x00, 0x00, 0x01, 'S', 'N', 0x03, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, /* end remote 1 */ }; static uc remoteEnd820[] = { 0x1b, '(', 'R', 0x08, 0x00, 0x00, 'R', 'E', 'M', 'O', 'T', 'E', '1', 'L', 'C', 0x02, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1b, '@', 0x1b, '@', 0x1b, '(', 'R', 0x08, 0x00, 0x00, 'R', 'E', 'M', 'O', 'T', 'E', '1', 'J', 'E', 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00 }; #define PASS_N0_IDX 7 #define SIZE_N0_IDX 37 static uc passData820[] = { 0x1b, 'U', 0x01, 0x1b, 'l', 0x19, '#', '1', 0x0d, 0x0a, /* left margin on column 25, print "#1" and go to next line */ 0x1b, '@', /* reset */ 0x1b, '(', 'G', 0x01, 0x00, 0x01, /* select graphic mode on*/ 0x1b, '+', 0x00, /* set line spacing = 0 !!! */ 0x1b, '(', 'U', 0x05, 0x00, 0x04, 0x04, 0x01, 0xa0, 0x05, /* set unit extended p=4, v=4, h=1 1/1440 dpi */ 0x1b, '(', 'e', 0x02, 0x00, 0x00, 0x12, /* select dot size 0x12 */ 0x1b, '(', 'K', 0x02, 0x00, 0x00, 0x01, /* select monochrome print mode */ 0x1b, 'U', 0x01, /* set print mode char: auto, graphic: unidirectional */ 0x1b, '(', 'D', 0x04, 0x00, 0xa0, 0x05, 0x0c, 0x04, /* set res. for raster image v= 12/1440=1/120, h=4/1440=1/360 */ 0x1b, '(', '$', 0x04, 0x00, 0x80, 0x0f, 0x00, 0x00, /* And Hor. pos: 3968 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0xf0, 0x00, 0x30, 0x00, PATTERN PATTERN PATTERN PATTERN PATTERN /* 240 bytes / line, 48 lines */ PATTERN PATTERN PATTERN PATTERN PATTERN PATTERN PATTERN PATTERN PATTERN PATTERN 0x0d, 0x1b, '(', 'v', 0x02, 0x00, 0x31, 0x00, /* set vert. rel. position 49 units = 0,136 inch = 0,345 cm */ 0x1b, 0x06, /* !!!!! */ 0x1b, 'U', 0x03, /* set print mode char:?, graphic: ? */ 0x1b, '(', '$', 0x04, 0x00, 0x87, 0x1d, 0x00, 0x00, /* And Hor. pos: 7559 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x30, 0x00, PATTERN /* 16 bytes / line, 48 lines */ 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x86, 0x1c, 0x00, 0x00, /* And Hor. pos: 7302 (-257) */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x30, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x85, 0x1b, 0x00, 0x00, /* And Hor. pos: 7045 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x30, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x84, 0x1a, 0x00, 0x00, /* And Hor. pos: 6788 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x30, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x83, 0x19, 0x00, 0x00, /* And Hor. pos: 6531 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x30, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x82, 0x18, 0x00, 0x00, /* And Hor. pos: 6274 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x30, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x81, 0x17, 0x00, 0x00, /* And Hor. pos: 6017 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x30, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x80, 0x16, 0x00, 0x00, /* And Hor. pos: 5760 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x30, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x7f, 0x15, 0x00, 0x00, /* And Hor. pos: 5503 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x30, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x7e, 0x14, 0x00, 0x00, /* And Hor. pos: 5246 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x30, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x7d, 0x13, 0x00, 0x00, /* And Hor. pos: 4989 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x30, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x7c, 0x12, 0x00, 0x00, /* And Hor. pos: 4732 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x30, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x7b, 0x11, 0x00, 0x00, /* And Hor. pos: 4475 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x30, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x7a, 0x10, 0x00, 0x00, /* And Hor. pos: 4218 */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x30, 0x00, PATTERN 0x0d, 0x1b, '(', '$', 0x04, 0x00, 0x79, 0x0f, 0x00, 0x00, /* And Hor. pos: 3961 Delta = 257/1440 dpi (0.45332) */ 0x1b, 'i', 0x00, 0x01, 0x02, 0x10, 0x00, 0x30, 0x00, PATTERN 0x0d, 0x1b, '(', 'v', 0x02, 0x00, 0x90, 0x00, 0x1b, '@', 0x1b, 'U', 0x01, 0x1b, '$', 0xa0, 0x00, '1', /* 160 */ 0x1b, '$', 0xab, 0x00, '2', /* 171 (+11/60 inch = +0.46567 inch) */ 0x1b, '$', 0xb6, 0x00, '3', 0x1b, '$', 0xc1, 0x00, '4', 0x1b, '$', 0xcc, 0x00, '5', 0x1b, '$', 0xd7, 0x00, '6', 0x1b, '$', 0xe2, 0x00, '7', 0x1b, '$', 0xed, 0x00, '8', 0x1b, '$', 0xf8, 0x00, '9', 0x1b, '$', 0x03, 0x01, '1', 0x1b, '$', 0x0e, 0x01, '1', 0x1b, '$', 0x19, 0x01, '1', 0x1b, '$', 0x24, 0x01, '1', 0x1b, '$', 0x2f, 0x01, '1', 0x1b, '$', 0x3a, 0x01, '1', 0x0d, 0x0a, 0x1b, '$', 0x03, 0x01, '0', 0x1b, '$', 0x0e, 0x01, '1', 0x1b, '$', 0x19, 0x01, '2', 0x1b, '$', 0x24, 0x01, '3', 0x1b, '$', 0x2f, 0x01, '4', 0x1b, '$', 0x3a, 0x01, '5', 0x0d, 0x0a, 0x0d, 0x0a }; /****************************************************** * Function: doAlignPattern820() * * build the align command for the printer according to the * given parameters. * * input: int pass pass number 1,2,3 or 0 if conmtrol pass * * return: size of data * ******************************************************/ int doAlignPattern820(int pass, int bufpos, unsigned char *printer_cmd) { int i; if ( pass == 1 ) { memcpy(printer_cmd + bufpos, remoteInit820, sizeof(remoteInit820)); bufpos += sizeof(remoteInit820); } if ( pass > 0 ) { memcpy(printer_cmd + bufpos, topPos820, sizeof(topPos820)); bufpos += sizeof(topPos820); bufpos = add_newlines((pass - 1) * 7, bufpos, printer_cmd ); passData820[PASS_N0_IDX] = '0' + pass; passData820[SIZE_N0_IDX] = 0x13 - pass; memcpy(printer_cmd + bufpos, passData820, sizeof(passData820)); bufpos += sizeof(passData820); bufpos = add_formfeed(bufpos, printer_cmd); if ( pass == 3 ) { memcpy(printer_cmd + bufpos, remoteEnd820, sizeof(remoteEnd820)); bufpos += sizeof(remoteEnd820); } } else /* pass == 0, fimal print */ { memcpy(printer_cmd + bufpos, remoteInit820, sizeof(remoteInit820)); bufpos += sizeof(remoteInit820); memcpy(printer_cmd + bufpos, topPos820, sizeof(topPos820)); bufpos += sizeof(topPos820); bufpos = add_newlines(21, bufpos, printer_cmd); for ( i = 1; i < 4; i++ ) { passData820[PASS_N0_IDX] = '0' + i; passData820[SIZE_N0_IDX] = 0x13 - i; memcpy(printer_cmd + bufpos, passData820, sizeof(passData820)); bufpos += sizeof(passData820); } bufpos = add_formfeed(bufpos, printer_cmd); memcpy(printer_cmd + bufpos, remoteEnd820, sizeof(remoteEnd820)); bufpos += sizeof(remoteEnd820); } return bufpos; } mtink-1.0.16/mainSrc/wheelmouse.c0000644000076400001540000001270610376041214014772 0ustar jjfuse/* file scrollmouse.c * * Event handler for wheel mouse * * functions: void xmAddMouseEventHandler(Widget w) * */ /* * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif /*******************************************************************/ /* */ /* NAME: mouseScroll */ /* */ /* FUNCTION: do scrolling on button 4 and 5 */ /* scrolling width depend on shift and control keys */ /* without pressed key the scrollwidth 1/2 page */ /* with the control key 1 page */ /* with the shift key 1 line */ /* Control + Shift is handled as Shift */ /* */ /* INPUT: Widget w not relevant */ /* XtPointer client_data really the scrollbar widget */ /* Xevent the mosuse button event */ /* */ /* OUTPUT: - */ /* */ /* RETURN: - */ /* */ /* REMARKS: Scrolling don't modify the selection */ /* */ /*******************************************************************/ static void mouseScroll(Widget w, XtPointer client_data, XEvent *event) { Widget sb = (Widget)client_data; int value_return = 0; int slider_size_return = 0; int increment_return = 0; int page_increment_return = 0; int count; int step; /* get a few value regarding the scrollbar conf. */ XmScrollBarGetValues (sb, &value_return, &slider_size_return, &increment_return, &page_increment_return); /* calculate the step wide according to the pressed keys */ if ( event->xbutton.state & ShiftMask ) { step = 1; } else if ( event->xbutton.state & ControlMask ) { step = page_increment_return; } else { step = page_increment_return >> 1; } if ( event->xbutton.button == Button4 ) { value_return -= step; if ( value_return < 0 ) value_return = 0; } else if ( event->xbutton.button == Button5 ) { /* and the max value for increment */ XtVaGetValues(sb, XmNmaximum, &count, NULL); value_return += step; if ( value_return > count - slider_size_return ) value_return = count - slider_size_return; } /* finally perform scrolling with the calculated step */ if ( event->xbutton.button == Button4 || event->xbutton.button == Button5 ) { XmScrollBarSetValues (sb, value_return, slider_size_return, increment_return, page_increment_return, True); } } /*******************************************************************/ /* */ /* NAME: xmAddMouseEventHandler */ /* */ /* FUNCTION: Register the event handler for the button 4 and 5 */ /* */ /* INPUT: Widget w The list/text widget */ /* */ /* OUTPUT: - */ /* */ /* RETURN: - */ /* */ /* REMARKS: - */ /* */ /*******************************************************************/ void xmAddMouseEventHandler(Widget w) { Widget wid; /* we need to pass the scrollbar widget to the handler */ XtVaGetValues(XtParent(w),XmNverticalScrollBar, &wid, NULL); /* handler for the scrolledList/ScrolledText */ XtAddEventHandler(w, ButtonReleaseMask, False, (XtEventHandler) mouseScroll, wid); /* and for the scrollbar itself */ XtAddEventHandler(wid, ButtonReleaseMask, False, (XtEventHandler) mouseScroll, wid); } #if defined(__cplusplus) || defined(c_plusplus) } #endif mtink-1.0.16/mainSrc/fsb.h0000644000076400001540000000147210376041214013372 0ustar jjfuse/* file fsb.h * * File selection box * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ extern Widget createFileSelection(Widget parent, Widget target); mtink-1.0.16/mainSrc/rdPrtDesc.h0000644000076400001540000000205110376041214014504 0ustar jjfuse/* file rdPrtDesc.h * * Event handler for wheelmouse */ /* * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef RDPRTDESC_H #define WHEELMOUSE_H #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif extern int readPrinterData(void); extern configData_t *configData; extern int configEntries; #if defined(__cplusplus) || defined(c_plusplus) } #endif #endif mtink-1.0.16/mainSrc/gimp-mtink.c0000644000076400001540000001060210376041214014662 0ustar jjfuse/* file gimp-mtink.c * * Plug ins for gimp, call mtink * * Changes: 16-MAI-2004 adapted for gimp 2.0.x * */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include /* compatibility with older gimp versions: * use the old names and define them if necessary */ #ifndef GIMP_VERSION_1 #ifndef STATUS_SUCCESS #define STATUS_SUCCESS GIMP_PDB_SUCCESS #define GParam GimpParam #define GParamDef GimpParamDef #define GPlugInInfo GimpPlugInInfo #define PARAM_STATUS GIMP_PDB_STATUS #define PROC_EXTENSION GIMP_EXTENSION #define PARAM_INT32 GIMP_PDB_INT32 #endif #endif static char defaultCommand[] = "mtink &"; static char choiceCommand[] = "mtinkc &"; static void query (void); #ifdef GIMP_VERSION_2 static void run (const gchar *name, gint nparams, const GimpParam *param, gint *nreturn_vals, GimpParam **return_vals); #else static void run (char *name, int nparams, GParam *param, int *nreturn_vals, GParam **return_vals); #endif /* * functions table */ GPlugInInfo PLUG_IN_INFO[] = { NULL, /* init_proc */ NULL, /* quit_proc */ query, /* query_proc */ run, /* run_proc */ }; /* * at start gimp call load the program * and will be able to call the function stated above */ int main(int argc, char *argv[]) { #ifdef GIMP_VERSION_2 return (gimp_main((const GimpPlugInInfo*)&PLUG_IN_INFO, argc, argv)); #else return (gimp_main(argc, argv)); #endif } /* * Tell gimp which we are and where to install us in the * Menus */ static void query () { static GParamDef args[] = { { PARAM_INT32, "run_mode", "Interactive" }, }; static int nargs = sizeof (args) / sizeof (args[0]); gimp_install_procedure ("gimp-mtink", "Epson Status Monitor", "A Motif based Status Monitor for\nEPSON inkjet printers\n" "Need mtink", "Jean-Jacques Sarton", "Jean-Jacques Sarton", "15th February 2002", "/Xtns/Epson Status Monitor", NULL, PROC_EXTENSION, nargs, 0, args, NULL); } static int checkForChoices(void) { char *home = getenv("HOME"); DIR *dir; struct dirent *ent; int count = 0; if ( (dir = opendir(home)) ) { while ( (ent = readdir(dir)) != NULL ) { if ( strncmp(ent->d_name, ".mtinkrc", 8 ) ) { continue; } if ( ent->d_name[8] == '\0' ) count++; else if ( ent->d_name[8] == '.' ) count++; else continue; } closedir(dir); } return count > 1 ? 1 : 0; } /* * the very hard job, call simply mtink, and tell that all is OK */ #ifdef GIMP_VERSION_2 static void run (const gchar *name, gint nparams, const GimpParam *param, gint *nreturn_vals, GimpParam **return_vals) #else static void run (char *name, int nparams, GParam *param, int *nreturn_vals, GParam **return_vals) #endif { static GParam values[1]; char *command = defaultCommand; *nreturn_vals = 1; *return_vals = values; values[0].type = PARAM_STATUS; values[0].data.d_status = STATUS_SUCCESS; if ( checkForChoices() ) { command = choiceCommand; } system(command); } mtink-1.0.16/mainSrc/cfg2.h0000644000076400001540000000044710376041214013442 0ustar jjfuse/* file cfg2.h * * Second configuration window, device */ extern void popupCfg2(Widget old, wConfig_data_t *data); extern Widget createConfigureForm(Widget parent, int *next); extern Widget autodetect_TB; extern Widget tooltip_TB; extern Widget cfg2Printer_PB; extern Widget cfg2Device_PB; mtink-1.0.16/mainSrc/micon.c0000644000076400001540000006505710376041214013731 0ustar jjfuse/* micon.c * Copyright (C) 2002 Jean-Jacques Sarton jj.sarton@t-online.de * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef MOTIF_XPM # include # define XPM_OK 1 #else # ifdef XPM_XPM # include # define XPM_OK 1 # endif #endif #include #include #include #include #include "tooltip.h" #ifndef XPM_OK # define XPM_OK 0 #endif #if XPM_OK #define M_PIXEL_DATA " ", \ " ", \ " ", \ " ++ ", \ " ++ ", \ " ++++ ", \ " ++++++ ", \ " ++++++ ", \ " ++++++ ", \ " ++++++ ", \ " ++++++ ", \ " ++++++ ", \ " ++++++++ ", \ " ++++++++ ", \ " ++++++++ ", \ " ++++++++ ", \ " ++++++++ ", \ " ++++++++ ", \ " ++++++++++ ", \ " ++++++++++ ", \ " ++++++++++++ ", \ " ++++++++++++ ", \ " ++++++++++++++++ ", \ " ++++++++++++++++++ ", \ " ++++++++++++++++++++ ", \ " ++++++++++++++++++++++ ", \ " ++++++++++++++++++++++++ ", \ " ++++++++++++++++++++++++ ", \ " ++++++++++++++++++++++++++ ", \ " ++++++++++++++++++++++++++ ", \ " ++++++++++++++++++++++++++ ", \ " +++++++++++++++++@#.#@++++++ ", \ " ++++++++++++++++@.....@+++++ ", \ " ++++++++++++++++#.....#+++++ ", \ " +++++++++++++++.......++++ ", \ " +++++++++++++++#.....#++++ ", \ " +++++++++++++++@.....@++++ ", \ " +++++++++++++++@#.#@++++ ", \ " ++++++++++++++++++++++++ ", \ " ++++++++++++++++++++++ ", \ " ++++++++++++++++++++ ", \ " ++++++++++++++++++ ", \ " ++++++++++++++++ ", \ " ++++++++++++ ", \ " $++$ ", \ " ", \ " ", \ " " char *drop_low[] = { "48 48 6 1", " c red m white", ". c #FFFFFF", "+ c #000000", "@ c #646464", "# c #D5D5D5", "$ c #8C8C8C", M_PIXEL_DATA }; char *drop_warn[] = { "48 48 6 1", " c orange m white", ". c #FFFFFF", "+ c #000000", "@ c #646464", "# c #D5D5D5", "$ c #8C8C8C", M_PIXEL_DATA }; char *drop_ok[] = { "48 48 6 1", " c green m white", ". c #FFFFFF", "+ c #000000", "@ c #646464", "# c #D5D5D5", "$ c #8C8C8C", M_PIXEL_DATA }; #endif static Widget topLevel2; static Pixmap pmLow, pmWarn, pmHigh; static Widget low_PB; static Widget warn_PB; static Widget high_PB; static Widget mainTop; static int mapTop = 0; static XtAppContext theApp; static Cursor cursor = 0; /*******************************************************************/ /* Function chgIcon() */ /* */ /* modifiy the pixmap for our "icon window" */ /* */ /* Input: Widget parent not used */ /* int *next not used */ /* */ /* return: - */ /* */ /*******************************************************************/ void chgIcon(int val) { #if XPM_OK static int oldVal = 0; if ( topLevel2 == NULL ) return; if ( val == oldVal ) return; switch (val) { case 0: XtUnmanageChild(high_PB); XtUnmanageChild(warn_PB); XtManageChild(low_PB); break; case 1: val = 0; XtUnmanageChild(high_PB); XtUnmanageChild(low_PB); XtManageChild(warn_PB); break; case 2: XtUnmanageChild(low_PB); XtUnmanageChild(warn_PB); XtManageChild(high_PB); } oldVal = val; #endif } /*******************************************************************/ /* Function map_CB() */ /* */ /* Map the main window */ /* */ /* Input: Widget w not used */ /* XtPointer client data really the main top level */ /* XtPointer callData not used */ /* */ /* return: - */ /* */ /*******************************************************************/ static void map_CB(Widget w, XtPointer clientData, XtPointer callData) { Widget topLevel = (Widget)clientData; XWindowAttributes attr; XGetWindowAttributes(XtDisplay(topLevel), XtWindow(topLevel), &attr); if ( attr.map_state == IsUnmapped ) { mapTop = 1; XMapRaised(XtDisplay(topLevel),XtWindow(topLevel)); } else { mapTop = 0; XtUnmapWidget(topLevel); } } /*******************************************************************/ /* Function mEvHdl() */ /* */ /* Avoid unmap for the main window */ /* */ /* Input: Widget w not used */ /* XtPointer closure not used */ /* XEvent *ev the event */ /* Boolean *cont the event */ /* */ /* return: - */ /* */ /*******************************************************************/ static void mEvHdl(Widget w, XtPointer closure, XEvent *ev, Boolean *cont) { if ( mapTop && ev->type == UnmapNotify) { XMapRaised(XtDisplay(w),XtWindow(w)); } } /*******************************************************************/ /* Function mEvHdl2() */ /* */ /* Avoid unmap for the "icon" window */ /* */ /* Input: Widget w not used */ /* XtPointer closure not used */ /* XEvent *ev the event */ /* Boolean *cont the event */ /* */ /* return: - */ /* */ /*******************************************************************/ static void mEvHdl2(Widget w, XtPointer closure, XEvent *ev, Boolean *cont) { if ( ev->type == UnmapNotify) { XMapRaised(XtDisplay(w),XtWindow(w)); } } /*******************************************************************/ /* Function createGC() */ /* */ /* create a GC for the move function of our "icon" window */ /* */ /* Input: Widget w */ /* */ /* return: GC */ /* */ /*******************************************************************/ static GC createGC(Widget w) { static GC gc = NULL; XGCValues gcVal; Display *dpy = XtDisplay(w); Window root = XDefaultRootWindow(dpy); int screen = XDefaultScreen(dpy); unsigned long valueMask; if ( gc ) return gc; valueMask = GCFunction | GCPlaneMask | GCForeground | GCBackground | GCLineWidth; gcVal.function = GXxor; gcVal.plane_mask = BlackPixel(dpy,screen) ^ WhitePixel(dpy, screen); gcVal.foreground = 0xffffffff; gcVal.background = 0; gcVal.line_width = 0; gc = XCreateGC(dpy,root,valueMask, &gcVal); XSetSubwindowMode(dpy,gc,IncludeInferiors); return gc; } /*******************************************************************/ /* Function cmvHdl() */ /* */ /* Handle the Event for the move function of our "icon" window */ /* */ /* Input: Widget w which widget */ /* XtPointer closure not important */ /* XEvent *ev event */ /* Boolean *cont not important */ /* */ /* return: - */ /* */ /*******************************************************************/ static void mvHdl(Widget w, XtPointer closure, XEvent *ev, Boolean *cont) { GC gc; static int dx; static int dy; static int ox; static int oy; if ( ev->type == ButtonPress && (ev->xbutton.button == 3 || ev->xbutton.button == 2 ) ) { /* set cursor */ if ( !cursor ) cursor = XCreateFontCursor(XtDisplay(w), XC_fleur); XDefineCursor(XtDisplay(w),XtWindow(w), cursor); /* Draw the first rubberband */ gc = createGC(w); XDrawRectangle(XtDisplay(w),XDefaultRootWindow(XtDisplay(w)), gc, ox=ev->xbutton.x_root-ev->xbutton.x, oy=ev->xbutton.y_root-ev->xbutton.y, 48,48); dx = ev->xbutton.x; dy = ev->xbutton.x; } if ( ev->type == MotionNotify ) { gc = createGC(w); XDrawRectangle(XtDisplay(w),XDefaultRootWindow(XtDisplay(w)), gc, ox, oy, 48,48); XDrawRectangle(XtDisplay(w),XDefaultRootWindow(XtDisplay(w)), gc, ox=ev->xbutton.x_root-dx, oy=ev->xbutton.y_root-dy, 48,48); } if ( ev->type == ButtonRelease && (ev->xbutton.button == 3 || ev->xbutton.button == 2 ) ) { gc = createGC(w); XDrawRectangle(XtDisplay(w),XDefaultRootWindow(XtDisplay(w)), gc, ox, oy, 48,48); XMoveWindow(XtDisplay(topLevel2), XtWindow(topLevel2), ox,oy); XRaiseWindow(XtDisplay(topLevel2), XtWindow(topLevel2)); XUndefineCursor(XtDisplay(w),XtWindow(w)); } } /*******************************************************************/ /* Function createPixmaps() */ /* */ /* Create all pixmaps we use */ /* */ /* Input: Widget w need display and a window */ /* */ /* return: - */ /* */ /*******************************************************************/ static void createPixmaps(Widget w) { #if XPM_OK Display *dsp = XtDisplay(w); Window win = RootWindowOfScreen(XtScreen(w)); XpmAttributes attributes; Pixmap shapemask; int ret; memset(&attributes, 0, sizeof(attributes)); attributes.valuemask = 0; ret = XpmCreatePixmapFromData(dsp, win, drop_low, &pmLow, &shapemask, &attributes); attributes.valuemask = 0; ret |= XpmCreatePixmapFromData(dsp, win, drop_warn, &pmWarn, &shapemask, &attributes); attributes.valuemask = 0; ret |= XpmCreatePixmapFromData(dsp, win, drop_ok, &pmHigh, &shapemask, &attributes); /* for SuSE 10.0 bug */ if ( ret != 0 ) pmLow = pmWarn = pmHigh = (Pixmap) 0; #endif } /*******************************************************************/ /* Function popupIcon() */ /* */ /* pop pup the icon window and popdown main window */ /* */ /* Input: - */ /* */ /* return: - */ /* */ /*******************************************************************/ static int firstTime = 1; void popupIcon(int x, int y) { #if XPM_OK if ( topLevel2 ) { /* unmap the toplevel window if mapped */ mapTop=0; XUnmapWindow(XtDisplay(mainTop), XtWindow(mainTop)); /* map the "icon" window */ XtPopup(topLevel2, XtGrabNonexclusive); if ( firstTime ) { XMoveWindow(XtDisplay(topLevel2), XtWindow(topLevel2),x,y); firstTime = 0; } } else { mapTop = 0; } #endif } /*******************************************************************/ /* Function unmapIcon() */ /* */ /* pop pup the icon window and popdown main window */ /* */ /* Input: - */ /* */ /* return: - */ /* */ /*******************************************************************/ void unmapIcon() { if ( topLevel2 ) { XMapWindow(XtDisplay(mainTop), XtWindow(mainTop)); XtDestroyWidget(topLevel2); firstTime = 0; topLevel2 = NULL; } } /*******************************************************************/ /* Function createIconLayout() */ /* */ /* Create our "Icon" window and resgister all event handlers,... */ /* */ /* Input: Widget top, the main toplevel */ /* XtAppContext app we need it */ /* char *mainResource, class name */ /* char *lang name of main form for this window */ /* int popup if true popup the icon window, popdow the */ /* main window */ /* */ /* return: - */ /* */ /*******************************************************************/ Widget createIconLayout(Widget top, XtAppContext app, char *mainResource, char *lang, int popup) { #if XPM_OK Widget mainWindow2; theApp = app; mainTop = top; if ( topLevel2 ) return topLevel2; /* create a second top level, avoid close */ topLevel2 = XtVaAppCreateShell(mainResource, mainResource, topLevelShellWidgetClass, XtDisplay(top), XmNmwmDecorations, 0, XmNdeleteResponse, XmDO_NOTHING, NULL); /* create the amin window */ mainWindow2 = XtVaCreateWidget(lang, xmFormWidgetClass, topLevel2, XmNheight, 48, XmNwidth, 48, NULL); XtManageChild(mainWindow2); /* create the needed piymaps */ createPixmaps(topLevel2); /* create 3 push button according to the state we want */ if ( pmLow != (Pixmap)0 ) { low_PB = XtVaCreateWidget("low_PB", xmPushButtonWidgetClass, mainWindow2, XmNbackgroundPixmap, pmLow, XmNarmPixmap, pmLow, XmNlabelType, XmPIXMAP, NULL); warn_PB = XtVaCreateWidget("warn_PB", xmPushButtonWidgetClass, mainWindow2, XmNbackgroundPixmap, pmWarn, XmNarmPixmap, pmWarn, XmNlabelType, XmPIXMAP, NULL); high_PB = XtVaCreateWidget("high_PB", xmPushButtonWidgetClass, mainWindow2, XmNbackgroundPixmap, pmHigh, XmNarmPixmap, pmHigh, XmNlabelType, XmPIXMAP, NULL); } else /* and work around for buggy SuSE 10.0 */ { XmString xms = XmStringCreateSimple(" ! "); low_PB = XtVaCreateWidget("low_PB", xmPushButtonWidgetClass, mainWindow2, XmNlabelString, xms, NULL); XtVaSetValues(low_PB, XtVaTypedArg, XmNbackground,XmRString,"red",8,NULL); warn_PB = XtVaCreateWidget("warn_PB", xmPushButtonWidgetClass, mainWindow2, XmNlabelString, xms, NULL); XtVaSetValues(warn_PB, XtVaTypedArg, XmNbackground,XmRString,"orange",8,NULL); high_PB = XtVaCreateWidget("high_PB", xmPushButtonWidgetClass, mainWindow2, XmNlabelString, xms, NULL); XtVaSetValues(high_PB, XtVaTypedArg, XmNbackground,XmRString,"green",8,NULL); XmStringFree(xms); } /* This for Lesstif, the size must be set after the widget */ /* was created, motif openMotif allow to pass the values at */ /* creation */ XtVaSetValues(low_PB, XmNheight,48,XmNwidth,48,NULL); XtVaSetValues(warn_PB,XmNheight,48,XmNwidth,48,NULL); XtVaSetValues(high_PB,XmNheight,48,XmNwidth,48,NULL); /* manage only one push button (error PB) */ XtManageChild(low_PB); /* add tooltip handling */ xmAddTooltip(low_PB); xmAddTooltip(warn_PB); xmAddTooltip(high_PB); /* add the callbacks so we can react on a release event */ XtAddCallback(low_PB, XmNactivateCallback, map_CB, top); XtAddCallback(warn_PB, XmNactivateCallback, map_CB, top); XtAddCallback(high_PB, XmNactivateCallback, map_CB, top); /* for KDE .... ! */ /* make sure that the main window will not become an icon */ XtAddEventHandler(top, VisibilityChangeMask|StructureNotifyMask|PropertyChangeMask, True, mEvHdl, NULL); /* and for ourself */ XtAddEventHandler(topLevel2, VisibilityChangeMask|StructureNotifyMask|PropertyChangeMask, True, mEvHdl2, NULL); /* Add the event handler for the move function */ XtAddEventHandler(low_PB, ButtonPressMask|ButtonReleaseMask|Button3MotionMask|Button2MotionMask, True, mvHdl, NULL); XtAddEventHandler(warn_PB, ButtonPressMask|ButtonReleaseMask|Button3MotionMask|Button2MotionMask, True, mvHdl, NULL); XtAddEventHandler(high_PB, ButtonPressMask|ButtonReleaseMask|Button3MotionMask|Button2MotionMask, True, mvHdl, NULL); /* we will be visible now */ if ( popup ) { XtPopup(topLevel2, XtGrabNonexclusive); /* unmap the toplevel window if mapped */ XUnmapWindow(XtDisplay(top), XtWindow(top)); } return topLevel2; #else return NULL; #endif } /*******************************************************************/ /* Function iconAddTooltip() */ /* */ /* Replace/Add the given text to the resource database */ /* */ /* Input: char *text the text to add for the pushbutton tooltip */ /* */ /* return: - */ /* */ /*******************************************************************/ void iconAddTooltip(char *text) { #if XPM_OK XrmDatabase database; char value[1024]; if ( topLevel2 ) { database = XtDatabase(XtDisplay(topLevel2)); sprintf(value, "*high_PB.tooltip: %s", text); XrmPutLineResource(&database, value); sprintf(value, "*low_PB.tooltip: %s", text); XrmPutLineResource(&database, value); sprintf(value, "*warn_PB.tooltip: %s", text); XrmPutLineResource(&database, value); } #endif } /*******************************************************************/ /* Function iconAskPos() */ /* */ /* Get the position of the "icon" window so we cann place it */ /* at the right position later */ /* */ /* Output int *x, *y */ /* */ /* return: True if value retriewed */ /* */ /*******************************************************************/ int iconAskPos(int *x, int *y) { #if XPM_OK Display *dpy; Window window; XWindowAttributes attr; int rx,ry; Window rwin; if ( topLevel2 && XtIsRealized(topLevel2) ) { dpy = XtDisplay(topLevel2); window = XtWindow(topLevel2); XGetWindowAttributes(dpy, window, &attr); XTranslateCoordinates(dpy, window, attr.root, -attr.border_width, -attr.border_width, &rx, &ry, &rwin); if ( rx == attr.x && ry == attr.y ) { *x = rx; *y = ry; } else { *x = rx - attr.x; *y = ry - attr.y; } return True; } #endif return False; } mtink-1.0.16/mainSrc/scrtxt.c0000644000076400001540000003226710376041214014150 0ustar jjfuse/* * File srcTxt.c * */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "mtink.h" #include "wheelmouse.h" static Widget scrTxtNext_PB; static Widget scrTxtPrevious_PB; static Widget title_LB; static Widget scrTxt_TF; static Widget scrTxt_MW; static Widget bw_TB; static Widget col_TB; static Widget head_RC; static Widget separator; static int loop; static void scrTxtNext_CB(Widget w, XtPointer clientData, XtPointer callData); void scrTxtPrevious_CB(Widget w, XtPointer clientData, XtPointer callData); /*******************************************************************/ /* Function createScrTxt_MW() */ /* */ /* Create a windows with a scrolled text and push buttons */ /* */ /* Input: Widget parent not used */ /* int *next not used */ /* */ /* return: - */ /* */ /*******************************************************************/ Widget createScrTxt_MW(Widget parent, int *next) { Arg args[20]; int n = 0; scrTxt_MW = XtVaCreateWidget("scrTxt_MW", xmFormWidgetClass, mainForm, XmNmarginHeight, 0, XmNmarginWidth, 0, XmNresizePolicy, XmRESIZE_GROW, XmNresizable, True, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, NULL); if (scrTxt_MW == NULL) { return NULL; } XtManageChild(scrTxt_MW); title_LB = XtVaCreateWidget("title_LB", xmLabelWidgetClass, scrTxt_MW, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 5, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 5, XmNtopAttachment, XmATTACH_FORM, XmNtopOffset, 10, XmNalignment, XmALIGNMENT_CENTER, NULL); XtManageChild(title_LB); /* create scrolled text field */ n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNtopOffset, 5); n++; XtSetArg(args[n], XmNtopWidget, title_LB); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNleftOffset, 5); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNrightOffset, 5); n++; XtSetArg(args[n], XmNcursorPositionVisible, False); n++; XtSetArg(args[n], XmNeditable, False); n++; XtSetArg(args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++; XtSetArg(args[n], XmNwordWrap, True); n++; XtSetArg(args[n], XmNscrollHorizontal, False);n++; XtSetArg(args[n], XmNhighlightOnEnter, False); n++; scrTxt_TF = XmCreateScrolledText(scrTxt_MW, "scrTxt_TF",args,n); XtManageChild(scrTxt_TF); /* create toggle buttons for the capabilities */ n = 0; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNleftOffset, 5); n++; XtSetArg(args[n], XmNradioAlwaysOne, True); n++; XtSetArg(args[n], XmNradioBehavior, True); n++; XtSetArg(args[n], XmNradioBehavior, True); n++; XtSetArg(args[n], XmNpacking, XmPACK_COLUMN); n++; XtSetArg(args[n], XmNnumColumns, 2); n++; head_RC = XmCreateRowColumn(scrTxt_MW, "head_RC",args,n); XtManageChild(head_RC); #ifndef XmSET #define XmSET True #endif bw_TB = XtVaCreateWidget("bw_TB", xmToggleButtonWidgetClass, head_RC, XmNset, XmSET, NULL); XtManageChild(bw_TB); col_TB = XtVaCreateWidget("col_TB", xmToggleButtonWidgetClass, head_RC, NULL); XtManageChild(col_TB); /* create Pushbuttons */ scrTxtPrevious_PB = XtVaCreateWidget("previous_PB", xmPushButtonWidgetClass, scrTxt_MW, XmNleftAttachment, XmATTACH_POSITION, XmNleftOffset, 5, XmNleftPosition, 35, XmNrightAttachment, XmATTACH_POSITION, XmNrightOffset, 5, XmNrightPosition, 65, XmNbottomAttachment, XmATTACH_FORM, XmNbottomOffset, 5, NULL); XtManageChild(scrTxtPrevious_PB); scrTxtNext_PB = XtVaCreateWidget("next_PB", xmPushButtonWidgetClass, scrTxt_MW, XmNleftAttachment, XmATTACH_POSITION, XmNleftOffset, 5, XmNleftPosition, 65, XmNrightAttachment, XmATTACH_POSITION, XmNrightOffset, 5, XmNrightPosition, 95, XmNbottomAttachment, XmATTACH_FORM, XmNbottomOffset, 5, NULL); XtManageChild(scrTxtNext_PB); separator = XtVaCreateWidget("separator", xmSeparatorWidgetClass, scrTxt_MW, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomOffset, 5, XmNbottomWidget, scrTxtNext_PB, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 0, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 0, NULL); XtManageChild(separator); XtVaSetValues(XtParent(scrTxt_TF), XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomOffset, 5, XmNbottomWidget, separator, NULL); XtVaSetValues(head_RC, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomOffset, 5, XmNbottomWidget, separator, NULL); XtUnmanageChild(head_RC); XtAddCallback(scrTxtNext_PB, XmNactivateCallback, scrTxtNext_CB, &loop); XtAddCallback(scrTxtPrevious_PB, XmNactivateCallback, scrTxtPrevious_CB, &loop); xmAddMouseEventHandler(scrTxt_TF); return scrTxt_MW; } /*******************************************************************/ /* Function scrTxtNext_CB() */ /* */ /* Cancel callback, set the loop flag */ /* */ /* Input: Widget w not used */ /* XtPointer client_data the variable which is to be mod. */ /* */ /* return: - */ /* */ /*******************************************************************/ void scrTxtNext_CB(Widget w, XtPointer clientData, XtPointer callData) { *((int*)clientData) = 1; } /*******************************************************************/ /* Function scrTxtPrevious_CB() */ /* */ /* Cancel callback, set the loop flag */ /* */ /* Input: Widget w not used */ /* XtPointer client_data the variable which is to be mod. */ /* */ /* return: - */ /* */ /*******************************************************************/ void scrTxtPrevious_CB(Widget w, XtPointer clientData, XtPointer callData) { *((int*)clientData) = -1; } /*******************************************************************/ /* Function popupScrolledTextWindow() */ /* */ /* Popup the window */ /* */ /* Input: Widget old the "parent" window */ /* wConfig_data_t *data */ /* */ /* return: - */ /* */ /*******************************************************************/ void popupScrolledTextWindow(Widget old, wConfig_data_t* data) { XmString xms; /* set buttons */ if ( data->bt3 ) { xms = XmStringCreateSimple(data->bt3); XtVaSetValues(scrTxtNext_PB, XmNlabelString, xms, NULL); XtSetSensitive(scrTxtNext_PB, True); XmStringFree(xms); } else { XtSetSensitive(scrTxtNext_PB, False); } if ( data->bt2) { xms = XmStringCreateSimple(data->bt2); XtVaSetValues(scrTxtPrevious_PB, XmNlabelString, xms, NULL); XtManageChild(scrTxtPrevious_PB); XmStringFree(xms); } else { XtUnmanageChild(scrTxtPrevious_PB); } if ( data->message ) { XtVaSetValues(scrTxt_TF, XmNvalue,data->message, NULL); } if ( data->colTb ) { XtManageChild(head_RC); XtVaSetValues(XtParent(scrTxt_TF), XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomOffset, 5, XmNbottomWidget, head_RC, NULL); } else { XtUnmanageChild(head_RC); XtVaSetValues(XtParent(scrTxt_TF), XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomOffset, 5, XmNbottomWidget, separator, NULL); } if ( data->printerName && data->printerName[0] != '?' ) { xms = XmStringCreateSimple(data->printerName); XtVaSetValues(title_LB, XmNlabelString, xms, NULL); XmStringFree(xms); } /* show the caller window */ if ( old != scrTxt_MW ) { XtUnmanageChild(old); XtManageChild(scrTxt_MW); } if ( data->wait ) { *data->wait = 0; loop = 0; while(!loop) XtAppProcessEvent(theApp, XtIMAll); if ( data->colTb ) { data->intVal = XmToggleButtonGetState(col_TB); } else { data->intVal = 0; } } if ( data->wait ) *data->wait = loop; data->actWindow = scrTxt_MW; } mtink-1.0.16/mainSrc/access.h0000644000076400001540000000013410664764405014071 0ustar jjfuse#ifndef _ACCESS_H #define _ACCESS_H 1 extern int fileAccess(char *file, int mode); #endif mtink-1.0.16/mainSrc/scrtxt.h0000644000076400001540000000163610376041214014151 0ustar jjfuse/* scrtxt.h * Copyright (C) 2001 Jean-Jacques Sarton jj.sarton@t-online.de * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ extern Widget createScrTxt_MW(Widget parent, int *next); extern void popupScrolledTextWindow(Widget old, wConfig_data_t* data); mtink-1.0.16/mainSrc/bldpcode.c0000644000076400001540000001256310376041214014372 0ustar jjfuse/**************************************************** * File bldpcode.c * * write and read to / from printer * * * Copyright (C) 2001 Jean-Jacques Sarton jj.sarton@t-online.de * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ****************************************************/ static unsigned char remote_hdr[] = { 033, '@', 033, '(', 'R', 010, 0, 0, 'R', 'E', 'M', 'O', 'T', 'E', '1' }; static unsigned char new_remote_hdr[] = { 033, '(', 'R', 010, 0, 0, 'R', 'E', 'M', 'O', 'T', 'E', '1' }; static unsigned char remote_trailer[] = { 033, 0, 0, 0 }; /****************************************************** * Function: add_newlines() * * add count line feeds * ******************************************************/ static int add_newlines(int count, int bufpos, unsigned char *printer_cmd) { int i; for (i = 0; i < count; i++) { printer_cmd[bufpos++] = '\r'; printer_cmd[bufpos++] = '\n'; } return bufpos; } /****************************************************** * Function: add_formfeed() * * add code for line feed to the printer command buffer * ******************************************************/ static int add_formfeed(int bufpos, unsigned char *printer_cmd) { printer_cmd[bufpos++] = '\f'; return bufpos; } /****************************************************** * Function: do_remote_cmd() * * build the command for the printer according to the * given parameters * ******************************************************/ static int do_remote_cmd_new(int bufpos, unsigned char *printer_cmd, const char *cmd, int nargs, ...) { int i; va_list args; va_start(args, nargs); memcpy(printer_cmd + bufpos, new_remote_hdr, sizeof(new_remote_hdr)); bufpos += sizeof(new_remote_hdr); memcpy(printer_cmd + bufpos, cmd, 2); bufpos += 2; printer_cmd[bufpos] = nargs % 256; printer_cmd[bufpos + 1] = (nargs >> 8) % 256; if (nargs > 0) for (i = 0; i < nargs; i++) printer_cmd[bufpos + 2 + i] = va_arg(args, int); bufpos += 2 + nargs; memcpy(printer_cmd + bufpos, remote_trailer, sizeof(remote_trailer)); bufpos += sizeof(remote_trailer); return bufpos; } static int do_remote_cmd(int bufpos, unsigned char *printer_cmd, const char *cmd, int nargs, ...) { int i; va_list args; va_start(args, nargs); memcpy(printer_cmd + bufpos, remote_hdr, sizeof(remote_hdr)); bufpos += sizeof(remote_hdr); memcpy(printer_cmd + bufpos, cmd, 2); bufpos += 2; printer_cmd[bufpos] = nargs % 256; printer_cmd[bufpos + 1] = (nargs >> 8) % 256; if (nargs > 0) for (i = 0; i < nargs; i++) printer_cmd[bufpos + 2 + i] = va_arg(args, int); bufpos += 2 + nargs; memcpy(printer_cmd + bufpos, remote_trailer, sizeof(remote_trailer)); bufpos += sizeof(remote_trailer); return bufpos; } /****************************************************** * Function: do_remote_cmd() * * build the command for the printer according to the * given parameters * ******************************************************/ static int do_remote_cmd_first(int bufpos, unsigned char *printer_cmd, const char *cmd, int nargs, ...) { int i; va_list args; va_start(args, nargs); memcpy(printer_cmd + bufpos, new_remote_hdr, sizeof(new_remote_hdr)); bufpos += sizeof(new_remote_hdr); memcpy(printer_cmd + bufpos, cmd, 2); bufpos += 2; printer_cmd[bufpos] = nargs % 256; printer_cmd[bufpos + 1] = (nargs >> 8) % 256; if (nargs > 0) for (i = 0; i < nargs; i++) printer_cmd[bufpos + 2 + i] = va_arg(args, int); bufpos += 2 + nargs; return bufpos; } static int do_remote_cmd_add(int bufpos, unsigned char *printer_cmd, const char *cmd, int nargs, ...) { int i; va_list args; va_start(args, nargs); memcpy(printer_cmd + bufpos, cmd, 2); bufpos += 2; printer_cmd[bufpos] = nargs % 256; printer_cmd[bufpos + 1] = (nargs >> 8) % 256; if (nargs > 0) for (i = 0; i < nargs; i++) printer_cmd[bufpos + 2 + i] = va_arg(args, int); bufpos += 2 + nargs; return bufpos; } static int do_remote_cmd_last(int bufpos, unsigned char *printer_cmd, const char *cmd, int nargs, ...) { int i; va_list args; va_start(args, nargs); memcpy(printer_cmd + bufpos, cmd, 2); bufpos += 2; printer_cmd[bufpos] = nargs % 256; printer_cmd[bufpos + 1] = (nargs >> 8) % 256; if (nargs > 0) for (i = 0; i < nargs; i++) printer_cmd[bufpos + 2 + i] = va_arg(args, int); bufpos += 2 + nargs; memcpy(printer_cmd + bufpos, remote_trailer, sizeof(remote_trailer)); bufpos += sizeof(remote_trailer); return bufpos; } mtink-1.0.16/mainSrc/rdPrtDesc.c0000644000076400001540000004762710664606657014543 0ustar jjfuse/* file rdPrtDesc.c * * read printer description file and fill the * printer knowledge data base * * Copyrights: Jean-Jacques Sarton j.sarton@t-online.de */ /* * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include "model.c" #ifndef BLD_UTIL #define BLD_UTIL 1 #endif /* a few define for the type of description entry */ /* and the description for the diferent entries */ #define D_BEGIN 1 #define A_STR 2 #define A_NB 3 #define A_PROT 4 #define A_FLAG 5 #define A_FNAME 6 #define D_END 7 #define OFFSET(a) ((int)(&((configData_t*)0)->a)) typedef struct attr_s { char *attrName; int attrType; int attrOffset; } attr_t; static attr_t attr[] = { { ".PRINTER", D_BEGIN, -1 }, { ".name:", A_STR, OFFSET(name) }, { ".colorsNb:", A_NB, OFFSET(colors) }, { ".mainProt:", A_PROT, OFFSET(prot) }, { ".stateFlg:", A_FLAG, OFFSET(state) }, { ".exchangeFlg:", A_FLAG, OFFSET(exchange) }, { ".exchangeSeparateFlg:", A_FLAG, OFFSET(exchangeSeparate) }, { ".cleanSeparateFlg:", A_FLAG, OFFSET(cleanSeparate) }, { ".resetProt:", A_PROT, OFFSET(reset) }, { ".alignProt:", A_PROT, OFFSET(align) }, { ".idFlg:", A_FLAG, OFFSET(id) }, { ".passesNb:", A_NB, OFFSET(passes) }, { ".choicesNb:", A_NB, OFFSET(choices) }, { ".colorPassesNb:", A_NB, OFFSET(color_passes) }, { ".colorChoicesNb:", A_NB, OFFSET(color_choices) }, { ".checkNozzleNeedReset:",A_FLAG, OFFSET(checkNeedReset) }, { ".alignFunctionName:", A_FNAME, OFFSET(alignFunction) }, { ".END", D_END, -1 }, { NULL, } }; /* help structures for accessing the members of the original structur */ /* via the structur base address and an offset for the menbers */ typedef struct s_s { char *s; } s_t; typedef struct i_s { int i; } i_t; #define ATTR_NO (sizeof(attr)/sizeof(attr_t) - 3) configData_t *configData = NULL; int configEntries = 0; /*******************************************************************/ /* Function skipSpace */ /* */ /* return the a pointer to the firdst non space character */ /* */ /*******************************************************************/ static char *skipSpace(char *s) { while ( *s && (*s==' '||*s=='\t'||*s=='\r'|| *s=='\n') ) s++; return s; } /*******************************************************************/ /* Function endFName */ /* */ /* skip over non space characters and set the first space char */ /* to '\0' */ /* */ /*******************************************************************/ static void endFName(char *s) { while(*s && !(*s==' '||*s=='\t'||*s=='\r'|| *s=='\n')) s++; *s = '\0'; } /*******************************************************************/ /* Function endStr */ /* */ /* eliminate trailing space characters from the end of the line */ /* */ /*******************************************************************/ static void endStr(char *s) { while(s[1]) s++; while (*s==' '||*s=='\t'||*s=='\r'|| *s=='\n') *s-- = '\0'; } /*******************************************************************/ /* Function getAttr */ /* */ /* retriewe the attribute description for the given key */ /* */ /*******************************************************************/ static attr_t *getAttr(char **s) { attr_t *a = attr; int len; while(a->attrName) { if ( strncmp(a->attrName, *s, (len = strlen(a->attrName))) == 0 ) { *s += len; if ( **s ) *s = skipSpace(*s); return a; } a++; } return NULL; } /*******************************************************************/ /* Function readDataFile */ /* */ /* read the description file and build an array of printer desc. */ /* */ /*******************************************************************/ static int readDataFile(FILE *fp) { char buf[2048]; int attrNb = 0; char *s; s_t *ss; i_t *is; attr_t *a; configData_t *c = NULL; /* make gcc happy */ int line = 0; while (fgets(buf,sizeof(buf), fp)) { line++; s = skipSpace(buf); if ( *s != '.' ) { /* this may be an empty or comment line */ continue; } else { a = getAttr(&s); if ( a ) { if ( *s == '\0' && a->attrOffset != -1 ) { fprintf(stderr,"error at line %d\n",line++); return 0; } else { if ( a->attrType == D_END && attrNb != ATTR_NO ) { fprintf(stderr, "incomplete printer description at line %d\n",line); return 0; } else if ( a->attrType == D_BEGIN && attrNb != 0 ) { fprintf(stderr, "Printer description not closed at line %d\n",line); return 0; } else if ( a->attrType == D_BEGIN ) { /* alloc storage for this */ if ( configData == NULL ) { configData = (configData_t*)calloc(sizeof(configData_t), 1); } else { configData = (configData_t*)realloc(configData, sizeof(configData_t)*(configEntries+1)); if ( configData ) memset(&configData[configEntries], 0, sizeof(configData_t)); } if ( configData == NULL ) { fprintf(stderr,"no enough memory\n"); return 0; } c = &configData[configEntries]; } else if ( a->attrType == D_END && attrNb == ATTR_NO ) { configEntries++; attrNb = 0; } else { is = (void*)((char*)c + a->attrOffset); ss = (void*)((char*)c + a->attrOffset); is->i = 0; ss->s = NULL; switch(a->attrType) { case A_FLAG: if ( *s == '0' || strncasecmp("false",s,5) == 0 ) is->i = 0; else if ( *s == '1' || strncasecmp("true",s,4) == 0 ) is->i = 1; else { fprintf(stderr,"Wrong value at line %d\n",line); return 0; } break; case A_NB: if ( (*s == '-' && s[1] >= '0' && s[1] <= '9') || (*s >= '0' && *s <= '9') ) { is->i = atoi(s); } else { fprintf(stderr,"Wrong value at line %d\n",line); return 0; } break; case A_PROT: while(*s) { if ( strncmp(s, "D4", 2) == 0 ) { is->i |= PROT_D4; s += 2; } else if ( strncmp(s, "EXD4", 4) == 0 ) { is->i |= PROT_NEW; s += 4; } else if ( strncmp(s, "OLD", 3) == 0 ) { is->i |= PROT_OLD; s += 3; } s = skipSpace(s); } break; case A_FNAME: endFName(s); if ( *s != '-' ) ss->s = strdup(s); break; case A_STR: endStr(s); ss->s = strdup(s); break; } attrNb++; } } } } } return 1; } /*******************************************************************/ /* Function mStrCmp() */ /* */ /* Compare string regardless of case, consider number as numvber */ /* and not a single character. */ /* */ /*******************************************************************/ int _mStrCmp(char *s, char *t) { int ret = 0; while ( !ret && *s ) { if ( isdigit(*s) && isdigit(*t) ) { ret = atoi(s) - atoi(t); while ( isdigit(*s) ) s++; while ( isdigit(*t) ) t++; } else { ret = tolower(*s) - tolower(*t); s++; t++; } } return ret; } /*******************************************************************/ /* Function cmpName() */ /* */ /* help function for sorting of printer descriptions */ /* */ /*******************************************************************/ static int cmpName(const void *P1, const void *P2) { configData_t *p1 = (configData_t *)P1; configData_t *p2 = (configData_t *)P2; if ( p1->name[0] == '?' ) { return 1; } if ( p2->name[0] == '?' ) { return -1; } return _mStrCmp(p1->name, p2->name); } /*******************************************************************/ /* Function mergeDescs() */ /* */ /* merge the buildin and the external datas */ /* */ /*******************************************************************/ static int mergeDescs() { int i, j; for ( i = 0; i < defaultConfigDataSize; i++ ) { /* if the printer is allready externaly described */ /* don't add this */ for ( j = 0; j < configEntries; j++ ) { if ( strcmp(configData[j].name, defaultConfigData[i].name) == 0 ) break; } if ( j == configEntries ) { /* printer not found, add an array element */ if ( configData == NULL ) { configData = (configData_t*)malloc(sizeof(configData_t)); } else { configData = (configData_t*)realloc(configData, sizeof(configData_t)*(configEntries+1)); } if ( configData == NULL ) { fprintf(stderr,"no enough memory\n"); configEntries = 0; return 0; } else { memcpy(&configData[configEntries], &defaultConfigData[i], sizeof(configData_t)); configEntries++; } } } if ( configEntries ) { qsort(configData, configEntries, sizeof(configData_t), cmpName); } return 1; } /*******************************************************************/ /* Function readPrinterData */ /* */ /* read the description file, main entry */ /* */ /*******************************************************************/ int readPrinterData() { int i; FILE *fp = NULL; char *path[] = { #if ! BLD_UTIL "/usr/lib/mtink/printer.desc", "/usr/local/lib/mtink/printer.desc", "/opt/mtink/printer.desc", #else "./printer.desc" #endif }; for ( i = 0; i < sizeof(path)/sizeof(char*); i++ ) { if ( path[i] && (fp = fopen(path[i],"r")) ) { /* read the file */ readDataFile(fp); fclose(fp); mergeDescs(); return 1; } } mergeDescs(); return 0; } #if BLD_UTIL /*******************************************************************/ /* Function printData */ /* */ /* print the data as described into the file model.c */ /* */ /*******************************************************************/ void printData(configData_t *conf, int nb) { int i; attr_t *a; s_t *ss; i_t *is; configData_t *c; for (i=0; i < nb; i++) { c = &conf[i]; a = attr; while(a->attrName) { ss = (void*)((char*)c+a->attrOffset); is = (void*)((char*)c+a->attrOffset); switch(a->attrType) { case D_BEGIN: printf("%s\n",a->attrName); break; case D_END: printf("%s\n\n",a->attrName); break; case A_STR: printf(" %-21s %s\n",a->attrName, ss->s); break; case A_NB: printf(" %-21s %d\n",a->attrName, is->i); break; case A_FNAME: printf(" %-21s %s\n",a->attrName, ss->s ? ss->s : "-"); break; case A_FLAG: printf(" %-21s %s\n",a->attrName, is->i ? "True" : "False"); break; case A_PROT: printf(" %-21s",a->attrName); if ( is->i & PROT_OLD ) printf(" OLD"); if ( is->i & PROT_EXIT ) printf(" EXD4"); if ( is->i & PROT_D4 ) printf(" D4"); printf("\n"); } a++; } } } static void genCFile(configData_t *conf, int nb) { int i; attr_t *a; s_t *ss; i_t *is; configData_t *c; printf("/* file model.c\n" " *\n" " *\n" " List of know printers and flags\n" " * device and printer choice\n" " *\n" " */\n" "\n" "#include \"model.h\"\n" "\n" "configData_t defaultConfigData[] = {\n" ); for (i=0; i < nb; i++) { c = &conf[i]; a = attr; while(a->attrName) { ss = (void*)((char*)c+a->attrOffset); is = (void*)((char*)c+a->attrOffset); switch(a->attrType) { case D_BEGIN: printf(" { "); break; case D_END: printf("},\n"); break; case A_STR: printf("\"%s\",%*s ", ss->s,20-strlen(ss->s),""); break; case A_NB: printf("%2d, ", is->i); break; case A_FNAME: if ( ss->s ) printf("\"%s\" ", ss->s); else printf("NULL "); break; case A_FLAG: if ( is->i ) printf("True, "); else printf("False, "); break; case A_PROT: switch(is->i) { case 1: printf("PROT_OLD, "); break; case 2: printf("PROT_EXIT, "); break; case 3: printf("PROT_NEW, "); break; case 4: printf("PROT_D4, "); break; case 5: printf("PROT_OLD|PROT_D4, "); break; } break; } a++; } } printf("};\n" "\n" "configData_t defaultConfigData[];\n" "int defaultConfigDataSize = sizeof(defaultConfigData) / sizeof(configData_t);\n" "\n" ); } /*******************************************************************/ /* Function main */ /* */ /* This is for producing a printer description file for ttink/mtink*/ /* or generationg the c description file from an allready provided */ /* printer description file */ /* */ /*******************************************************************/ int main(int argc, char **argv) { int i; attr_t *a; char *t; configData_t *c; int mode = 0; char *prgName; prgName = strrchr(argv[0], '/'); if ( prgName ) prgName++; else prgName = argv[0]; argv++; argc--; if ( argc == 0 || argc > 1 || argv[0][0] != '-' || !(argv[0][1] == 'c' || argv[0][1] == 'p')) { fprintf(stderr, "Syntax: %s -p|-c\n\n",prgName); fprintf(stderr, " with the -p option you will print a description file\n"); fprintf(stderr, " The -c option produce a c file from the desc. file\n"); fprintf(stderr, " printer.desc which must be in the working directory\n"); fprintf(stderr, " All output are on the console\n"); exit(1); } if ( argv[0][1] == 'p' ) { printData(defaultConfigData,defaultConfigDataSize); } else { readPrinterData(); fprintf(stderr,"Read %d descriptions\n",configEntries); if ( configData ) genCFile(configData,configEntries); } return 0; } #endif mtink-1.0.16/mainSrc/d4lib.c0000644000076400001540000010660710665007115013622 0ustar jjfuse/* d4lib.c * Copyright (C) 2001 Jean-Jacques Sarton jj.sarton@t-online.de * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* this file will be a library, which will allow to use the EPSON * Stylus Scanner and also allow to send commands to the * Stylus Color 480/580. * * At this stage a lot of things are not implemented and the * first goal is to get the Stylus Scanner printing. * This may be reached if this file is compiled with the TEST * option set. * * I dont own a Stylus Scanner and I am not able to test this * code, as desired. Printing on a Stylus Photo 1290 work fine * with this. * * The best way to get the Stylus Scanner working is to test * this and also correct my possibly errors. * Programming knowledge will be helpfull for this. * */ #include #include #include #include #include #include #include #include #include #include #include #include "d4lib.h" #include "rw.h" #ifdef MACOS #define USE_LIBUSB 1 #endif #ifndef RDTIMEOUT #define RDTIMEOUT 2000 #define WRTIMEOUT 2000 #endif int d4WrTimeout = WRTIMEOUT; int d4RdTimeout = RDTIMEOUT; int ppid = 0; extern int doRw; int debugD4 = 0; typedef void (*signalHandler_t)(int); static int timeoutGot = 0; static int _readData(int fd, uc socketID, uc *buf, int len); /* commands for the D4 protokoll Transaction Cmd Reply -------------- ---- ----- Init 0x00 0x80 OpenChannel 0x01 0x81 CloseChannel 0x02 0x82 Credit 0x03 0x83 CreditRequest 0x04 0x84 Exit 0x08 0x88 GetSocketID 0x09 0x89 GetServiceName 0x0a 0x8a Error 0x7f - */ /*typedef unsigned char uc;*/ typedef struct cmdHeader_s { uc psid; uc ssid; uc lengthH; uc lengthL; uc credit; uc control; uc command; } cmdHeader_t; typedef struct replyHeader_s { uc psid; uc ssid; uc lengthH; uc lengthL; uc credit; uc control; uc command; uc result; } replyHeader_t; typedef struct init_s { cmdHeader_t head; uc revision; } init_t; typedef struct initReply_s { replyHeader_t head; uc revision; } initReply_t; typedef struct error_s { replyHeader_t head; uc epsid; uc essid; uc ecode; } error_t; /* results */ typedef struct errorMessage_s { uc result; char *message; int errorClass; } errorMessage_t; #define RECOVERABLE 0 #define FATAL 1 static errorMessage_t errorMessage[] = { { 0x01, "Unable to begin conversation, try later." ,0 }, { 0x02, "Protokoll revision not supported." ,1 }, { 0x03, "Transaction channel cant be closed." ,0 }, { 0x04, "No sufficient resources available now." ,0 }, { 0x05, "Connection denied." ,1 }, { 0x06, "Channel allready open." ,0 }, { 0x07, "Credit overflow, previous credit remain valid." ,0 }, { 0x08, "Channel is not open." ,1 }, { 0x09, "Service not available on specified socket." ,1 }, { 0x0a, "Service name to socket ID failed." ,1 }, { 0x0b, "Init transaction failed." ,1 }, { 0x0c, "Invalid packet size." ,1 }, { 0x0d, "Requested packed size is 0, no data can be transfered.",0 }, { 0x80, "Malformed packet, ignored." ,1 }, { 0x81, "No credit for received packet, ignored" ,0 }, { 0x82, "Reply dont match with outstanding command, ignored." ,1 }, { 0x83, "Packet size greater as negotiated size." ,1 }, { 0x84, "Data received for a non opened channel." ,1 }, { 0x85, "Reply with unknown result value received." ,1 }, { 0x86, "Piggybacked credit in data packet cause overflow." ,1 }, { 0x87, "Unknown 1284.4 Reply." ,0 }, { 0x00, NULL ,0 } }; /*******************************************************************/ /* Function printHexValues */ /* */ /* Print hex code contained in the passed buffer */ /* */ /*******************************************************************/ void printHexValues(char *dir, uc *buf, int len) { int i; fprintf(stderr,"%s",dir); for ( i = 0; i < len;i++) fprintf(stderr,"%02x ",buf[i]); fprintf(stderr,"\n"); fprintf(stderr," "); for ( i = 0; i < len;i++) fprintf(stderr,"%c ",isprint(buf[i])&&!isspace(buf[i])?buf[i]:' '); fprintf(stderr,"\n"); } /*******************************************************************/ /* Function printError() */ /* print an error message on stderr */ /* */ /* Input: uc errorNb the error number */ /* */ /* Return: fatal = 1 or recoverable = 0 */ /* */ /*******************************************************************/ static int printError(uc errorNb) { errorMessage_t *msg = errorMessage; if ( errorNb == 0 ) { return 0; } while ( msg->result ) { if ( msg->result == errorNb ) { fprintf(stderr,"%s\n", msg->message); return msg->errorClass; } msg++; } fprintf(stderr,"Unknown IEEE 1284.4 error number %d\n",errorNb); return 1; /* non recoverable error */ } /*******************************************************************/ /* Function printCmdType() */ /* print on stderr the command name */ /* Input: unsigned char *cmd the data are to be put here */ /* */ /* Return: - */ /* */ /*******************************************************************/ static void printCmdType(uc *cmd) { if ( cmd[0] == 0 && cmd[1] == 0 ) { switch(cmd[6]) { case 0: fprintf(stderr,"--- Init ---\n");break; case 1: fprintf(stderr,"--- OpenChannel ---\n");break; case 2: fprintf(stderr,"--- CloseChannel ---\n");break; case 3: fprintf(stderr,"--- Credit ---\n");break; case 4: fprintf(stderr,"--- CreditRequest ---\n");break; case 8: fprintf(stderr,"--- Exit ---\n");break; case 9: fprintf(stderr,"--- GetSocketID ---\n");break; case 10: fprintf(stderr,"--- GetServiceName ---\n");break; case 0x45: fprintf(stderr,"--- EnterD4Mode ---\n");break; case 0x7f: fprintf(stderr,"--- Error ---\n");break; default: fprintf(stderr,"--- ?????????????? ---\n");break; } } else { fprintf(stderr,"--- Send Data ---\n"); } } /*******************************************************************/ /* Function writeCmd() */ /* write a commmand */ /* Input: int fd file handle */ /* char *cmd the data are to be put here */ /* int len the number of bytes to read */ /* */ /* Return: number of bytes write or -1 */ /* */ /*******************************************************************/ static int writeCmd(int fd, unsigned char *cmd, int len) { int w; int i = 0; int cnt; # if PTIME struct timeval beg, end; long dt; # endif if ( debugD4 ) { printCmdType(cmd); # if PTIME gettimeofday(&beg, NULL); # endif if ( cmd[0] == 0 && cmd[1] == 0 ) { printHexValues("Send: ",cmd,len); } else { printHexValues("Send: ",cmd,6); } } usleep(1); /* according to Glen Steward, this will solve problems */ /* for the cartridge exchange with the Stylus Color 580 */ timeoutGot = 0; errno = 0; cnt = 0; while ( i < len ) { #ifndef USE_LIBUSB w = devWrite(fd, cmd+i,len-i, d4WrTimeout ); #else w = mWrite(fd, cmd+i,len-i); #endif if ( w < 0 && errno == EAGAIN && cnt < 600 ) { usleep(100000); cnt++; } else if ( w < 0 ) { if ( debugD4 ) { fprintf(stderr,"Write error errno=%d ", errno); perror(""); } i= -1; break; } else i += w; } if ( debugD4 ) { # if PTIME gettimeofday(&end, NULL); dt = (end.tv_sec - beg.tv_sec) * 1000000; dt += end.tv_usec - beg.tv_usec; fprintf(stderr,"Write time %5.3f s\n",(double)dt/1000000); # endif } if ( timeoutGot ) return -1; return i; } /*******************************************************************/ /* Function readAnswer() */ /* Read the datas returned by the printer */ /* Input: int fd file handle */ /* char *buf the data are to be put here */ /* int len the number of bytes to read */ /* */ /* Return: number of bytes read. -1 on error */ /* */ /*******************************************************************/ static int readAnswer(int fd, unsigned char *buf, int len) { int rd = 0; int total = 0; struct timeval beg, end; long dt; int count = 0; /* wait a little bit before reading an answer */ usleep(20000); /* for error handling in case of timeout */ timeoutGot = 0; /* set errno to 0 in order to get correct informations */ /* in case of error */ errno = 0; gettimeofday(&beg, NULL); while ( total < len ) { #ifndef USE_LIBUSB rd = devRead(fd, buf+total, len-total, d4RdTimeout); #else rd = mRead(fd, buf+total, len-total); #endif if ( rd <= 0 ) { gettimeofday(&end, NULL); dt = (end.tv_sec - beg.tv_sec) * 1000; dt += (end.tv_usec - beg.tv_usec) / 1000; if ( dt > d4RdTimeout || errno ) { if ( debugD4 ) fprintf(stderr,"Timeout 1 at readAnswer() rcv %d bytes %d ms\n",(int)total, (int)dt); timeoutGot = 1; break; } count++; if ( count >= 20 ) { timeoutGot = 1; if ( rd == 0 ) errno = -1; /* tell that there is an abnormal condition */ break; } errno = 0; continue; } else { total += len; if ( total > 3 ) { /* the bytes idx 2 and 3 contain the length */ /* in case of errors this may differ from */ /* the expected lenght. Setting len to this */ /* value will avoid waiting for timeout */ len = (buf[2] << 8) + buf[3]; } } } if ( debugD4 ) { # if PTIME gettimeofday(&end, NULL); # endif printHexValues("Recv: ",buf,total); # if PTIME dt = (end.tv_sec - beg.tv_sec) * 1000000; dt += end.tv_usec - beg.tv_usec; fprintf(stderr,"Read time %5.3f s\n",(double)dt/1000000); # endif } if ( timeoutGot ) { if ( debugD4 ) fprintf(stderr,"Timeout 2 at readAnswer()\n"); return -1; } return total; } /*******************************************************************/ /* Function _readData() */ /* Read the datas returned by the printer */ /* Input: int fd file handle */ /* char *buf the data are to be put here */ /* int len the number of bytes to read */ /* */ /* Return: number of bytes read. -1 on error */ /* */ /*******************************************************************/ static int _readData(int fd, uc socketID, uc *buf, int len) { int rd = 0; int total = 0; struct timeval beg, end; long dt; /* set errno to 0 in order to get correct informations */ /* in case of error */ errno = 0; /* read the first 6 bytes */ gettimeofday(&beg, NULL); while ( rd == 0 ) { #ifndef USE_LIBUSB rd = devRead(fd, buf, len, d4RdTimeout); #else rd = mRead(fd, buf, len); #endif gettimeofday(&end, NULL); dt = (end.tv_sec - beg.tv_sec) * 1000; dt += (end.tv_usec - beg.tv_usec) / 1000; if ( dt > d4RdTimeout*3 ) { if ( debugD4 ) fprintf(stderr,"Timeout at _readData(), dt = %d ms\n",(int)dt); return -1; } } if ( debugD4 ) printHexValues("Recv: ",buf,rd); total = rd -6; if ( rd > 0 ) memcpy(buf, buf+6, total); return total > 0 ? total : 0; } /*******************************************************************/ /* Function sendReceiveCmd() */ /* send a command and get the answer. */ /* Input: int fd file handle */ /* char *buf the data are to be put here */ /* int len the number of bytes to read */ /* */ /* Return: number of bytes read */ /* */ /*******************************************************************/ static int sendReceiveCmd(int fd, uc *cmd, int len, uc *answer, int expectedlen) { int rd; if ( (rd = writeCmd(fd, cmd, len ) ) != len ) { if ( rd < 0 ) return -1; return 0; } rd = readAnswer(fd, answer, expectedlen ); if ( rd == 0 ) { /* no answer from device */ return 0; } else if ( rd < 0 ) { /* interrupted write call */ if ( debugD4 ) fprintf(stderr,"interrupt received\n"); return -1; } else { /* check result */ if ( answer[6] == 0x7f ) { printError(answer[9]); return -1; } else if ( answer[7] != 0 ) { if ( printError(answer[7]) ) { return -1; } return 0; } else { return rd; } } } /*******************************************************************/ /* Function EnterIEEE() */ /* send a command and get the answer. */ /* Input: int fd file handle */ /* */ /* Return: 0 on error 1 if all is OK */ /* */ /*******************************************************************/ int EnterIEEE(int fd) { uc buf[200]; uc cmd[] = { 0x00, 0x00, 0x00, 0x1b, 0x01, '@', 'E', 'J', 'L', ' ', '1', '2', '8', '4', '.', '4', 0x0a, '@', 'E', 'J', 'L', 0x0a, '@', 'E', 'J', 'L', 0x0a }; int rd; memset(buf, 0, sizeof(buf)); Loop: if ( writeCmd(fd, cmd, sizeof(cmd) ) != sizeof(cmd) ) { return 0; } rd = readAnswer(fd, buf, 8); if ( rd == 0 ) { /* no answer from device */ return 0; } else if ( rd < 0 ) { /* interrupted write call */ return 0; } else { int i; /* check result */ for (i=0; i < rd; i++ ) if ( buf[i] != 0 ) break; if ( i == rd ) goto Loop; return 1; } } /*******************************************************************/ /* Function Init() */ /* handle the init command */ /* Input: int fd file handle */ /* */ /* Return: 0 on error 1 if all is OK */ /* */ /*******************************************************************/ int Init(int fd) { uc buf[20]; init_t cmd; int rd; cmd.head.psid = 0; cmd.head.ssid = 0; cmd.head.lengthH = 0; cmd.head.lengthL = 8; cmd.head.credit = 1; cmd.head.control = 0; cmd.head.command = 0; cmd.revision = 0x10; rd = sendReceiveCmd(fd, (uc*)&cmd, sizeof(cmd), buf, 9 ); return rd == 9 ? 1 : 0; } /*******************************************************************/ /* Function Exit() */ /* handle the Exit command */ /* Input: int fd file handle */ /* */ /* Return: 0 on error 1 if all is OK */ /* */ /*******************************************************************/ int Exit(int fd) { int rd; uc buf[20]; cmdHeader_t cmd; cmd.psid = 0; cmd.ssid = 0; cmd.lengthH = 0; cmd.lengthL = 7; cmd.credit = 1; cmd.control = 0; cmd.command = 8; rd = sendReceiveCmd(fd, (uc*)&cmd, sizeof(cmd), buf, 8 ); return rd > 0 ? 1 : rd; } /*******************************************************************/ /* Function GetSocketID() */ /* handle the GetSocketID command */ /* Input: int fd file handle */ /* char *serviceName name of wanted service */ /* */ /* Return: 0 on error else the socket ID */ /* */ /*******************************************************************/ int GetSocketID(int fd, char *serviceName) { /* the service name may not be longer as 40 bytes */ int len = sizeof(cmdHeader_t) + strlen(serviceName); uc buf[100]; uc rBuf[100]; int rd; cmdHeader_t *cmd = (cmdHeader_t*)buf; cmd->psid = 0; cmd->ssid = 0; cmd->lengthH = 0; cmd->lengthL = len & 0xff; cmd->credit = 1; cmd->control = 0; cmd->command = 0x09; strcpy((char*)buf+sizeof(cmdHeader_t), serviceName); rd = sendReceiveCmd(fd, buf, len, rBuf, len+2); if ( rd > 0 ) { return rBuf[8]; } else { return 0; } } /*******************************************************************/ /* Function OpenChannel() */ /* handle the OpenChannel command */ /* Input: int fd file handle */ /* I/O: int *sndSz The size for sendig of datas */ /* int *recSz The size for receiving of datas */ /* */ /* Return: -1 on error or 1 if all is OK */ /* */ /*******************************************************************/ int OpenChannel(int fd, uc sockId, int *sndSz, int *rcvSz) { uc cmd[17]; uc buf[20]; int rd; for(;;) { cmd[0] = 0; /* transaction sockets */ cmd[1] = 0; cmd[2] = 0; /* len */ cmd[3] = 17; /* len */ cmd[4] = 1; /* credit */ cmd[5] = 0; /* control */ cmd[6] = 1; /* command */ cmd[7] = sockId; /* sockets # */ cmd[8] = sockId; /* sockets # */ cmd[9] = *sndSz >> 8; /* packet size in send dir */ cmd[10] = *sndSz & 0xff; cmd[11] = *rcvSz >> 8; /* packet size in recv dir */ cmd[12] = *rcvSz & 0xff; cmd[13] = 0; /* max outstanding Credit, must be 0 */ cmd[14] = 0; cmd[15] = 0; /* initial credit for us ? */ cmd[16] = 0; rd = sendReceiveCmd(fd, cmd, 17, buf, 16); if ( rd == -1 ) { return -1; } else if ( rd == 16 ) { if ( buf[7] == 4 ) { /* device cant allocate resources now */ continue; } else if ( buf[7] != 0 ) { /* hard error */ return -1; } *sndSz = (buf[10]<<8) + buf[11]; *rcvSz = (buf[12]<<8) + buf[13]; break; } else { /* at this stage we can only have an error */ return -1; } } return 1; } /*******************************************************************/ /* Function CloseChannel() */ /* handle the CloseChannel command */ /* Input: int fd file handle */ /* uc socketID he socket to close */ /* */ /* Return: -1 on error or 1 if all is OK */ /* */ /*******************************************************************/ int CloseChannel(int fd, uc socketID) { unsigned char buf[100]; int rd; cmdHeader_t *cmd = (cmdHeader_t *)buf; cmd->psid = 0; cmd->ssid = 0; cmd->lengthH = 0; cmd->lengthL = 10; cmd->credit = 1; cmd->control = 0; cmd->command = 2; buf[sizeof(cmdHeader_t)+0] = socketID; buf[sizeof(cmdHeader_t)+1] = socketID; buf[sizeof(cmdHeader_t)+2] = 0; rd = sendReceiveCmd(fd, buf,10, buf, 10); return rd == 10 ? 1 : rd; } /*******************************************************************/ /* Function CreditRequest() */ /* handle the CreditRequest command */ /* Input: int fd file handle */ /* uc socketID he socket to close */ /* */ /* Return: -1 on error else the credit got */ /* */ /*******************************************************************/ int CreditRequest(int fd, uc socketID) { int rd; uc buf[100]; uc rBuf[100]; cmdHeader_t *cmd = (cmdHeader_t *)buf; cmd->psid = 0; cmd->ssid = 0; cmd->lengthH = 0; cmd->lengthL = 13; cmd->credit = 1; cmd->control = 0; cmd->command = 4; buf[sizeof(cmdHeader_t)+0] = socketID; buf[sizeof(cmdHeader_t)+1] = socketID; buf[sizeof(cmdHeader_t)+2] = 0x00; buf[sizeof(cmdHeader_t)+3] = 0x80; buf[sizeof(cmdHeader_t)+4] = 0xff; buf[sizeof(cmdHeader_t)+5] = 0xff; rd = sendReceiveCmd(fd, buf, 13, rBuf, 12); if ( rd == 12 ) { /* this is the credit */ return (rBuf[10]*256)+rBuf[11]; } else { return rd > 0 ? 0 : rd; /* there was an error */ } } /*******************************************************************/ /* Function Credit() */ /* give credit to the attached device */ /* Input: int fd file handle */ /* uc socketID the socket to close */ /* */ /* Return: -1 on error or 1 if all is OK */ /* */ /*******************************************************************/ /* needed for sending of commands (channel 2) or scanning */ int Credit(int fd, uc socketID, int credit) { int rd; uc buf[100]; uc rBuf[100]; cmdHeader_t *cmd = (cmdHeader_t*)buf; cmd->psid = 0; cmd->ssid = 0; cmd->lengthH = 0; cmd->lengthL = 0x0b; cmd->credit = 1; cmd->control = 0; cmd->command = 0x03; buf[sizeof(cmdHeader_t)+0] = socketID; buf[sizeof(cmdHeader_t)+1] = socketID; buf[sizeof(cmdHeader_t)+2] = credit >> 8; buf[sizeof(cmdHeader_t)+3] = credit & 0xff; rd = sendReceiveCmd(fd, buf, 11, rBuf, 10); if ( rd == 10 ) { return 1; } else { return 0; } } /*******************************************************************/ /* Function askForCredit() */ /* Convenience function */ /* handle the CreditRequest command */ /* Input: int fd file handle */ /* uc socketID */ /* IN/Out int *sndSize for error handling */ /* IN/Out int *rcvSize for error handling */ /* */ /* Return: credit */ /* */ /* Remark: CreditRequest() will be called in a loop as long as */ /* the returned credit is 0 */ /* */ /*******************************************************************/ #define MAX_CREDIT_REQUEST 2 int askForCredit(int fd, uc socketID, int *sndSize, int *rcvSize) { int credit = 0; int count = 0; while (credit == 0 ) { while((credit=CreditRequest(fd,socketID)) == 0 && count < MAX_CREDIT_REQUEST ) usleep(250000); if ( credit == -1 ) { if ( errno == ENODEV || count == MAX_CREDIT_REQUEST ) { break; } credit = 0; /* init printer and reopen the printer channel */ CloseChannel(fd, socketID); if ( Init(fd) ) { OpenChannel(fd, socketID, sndSize, rcvSize); } } /* if the parent died, live this loop if credit not got */ if ( credit == 0 && getppid() == ppid ) return 0; count++; } return credit; } /*******************************************************************/ /* Function writeData() */ /* Convenience function */ /* write the data to the device */ /* Input: int fd file handle */ /* uc socketID the deetination socket */ /* uc *buf the datas to be send */ /* int len how many datas are to we send */ /* int eoj set out of band flag if eoj set */ /* */ /* Return: number of bytes written or -1; */ /* */ /*******************************************************************/ int writeData(int fd, uc socketID, uc *buf, int len, int eoj) { uc cmd[6]; int wr = 0; int ret = 0; #if PTIME struct timeval beg, end; long dt; #endif static uc *buffer = NULL; static int bLen = 0; int cnt=0; if ( debugD4 ) { fprintf(stderr,"--- Send Data ---\n"); #if PTIME gettimeofday(&beg, NULL); #endif } len += 6; if ( len > bLen ) { if ( buffer == NULL ) buffer = (uc*)malloc(len); else buffer = (uc*)realloc(buffer, len); if ( buffer == NULL ) return -1; bLen = len; } cmd[0] = socketID; cmd[1] = socketID; cmd[2] = len >> 8; cmd[3] = len & 0xff; cmd[4] = 0; cmd[5] = eoj ? 1 : 0; memcpy(buffer, cmd, 6); memcpy(buffer + 6, buf, len - 6 ); while( ret > -1 && wr != len ) { #ifndef USE_LIBUSB ret = devWrite(fd, buffer+wr, len-wr, d4WrTimeout); #else ret = mWrite(fd, buffer+wr, len-wr ); #endif if ( ret == -1 ) { /* DEC-10-2005: resource temporary not available, on 2.6 * kernel try again */ if ( errno == EAGAIN ) { if (cnt < 600 ) /* time out = 1 minute */ { ret = 0; cnt++; usleep(100000); /* wait 100 ms */ } } else { perror("write"); } } else { cnt = 0; wr += ret; } } if ( debugD4 ) { # if PTIME gettimeofday(&end, NULL); dt = (end.tv_sec - beg.tv_sec) * 1000000; dt += end.tv_usec - beg.tv_usec; # endif fprintf(stderr,"Send: "); for ( ret = 0; (wr > 0) && (ret < ((wr > 50) ? 50 : wr)) ; ret++ ) fprintf(stderr,"%02x ", buffer[ret]); fprintf(stderr,"\n "); for ( ret = 0; (wr > 0) && (ret < ((wr > 50) ? 50 : wr)) ; ret++ ) fprintf(stderr,"%c ", isprint(buffer[ret])&&!isspace(buffer[ret])?buffer[ret]:' '); fprintf(stderr,"\n"); # if PTIME fprintf(stderr,"Write time %5.3f s\n",(double)dt/1000000); # endif } if ( wr > 6 ) wr -= 6; else wr = -1; return wr; } /*******************************************************************/ /* Function readData() */ /* Convenience function */ /* give credit and read then the expected datas */ /* Input: int fd file handle */ /* uc socketID the destination socket */ /* uc *buf the datas to be send */ /* int len howmany datas are to we send */ /* */ /* Return: number of bytes written or -1; */ /* */ /*******************************************************************/ int readData(int fd, uc socketID, uc *buf, int len) { int ret; /* give credit */ if ( Credit(fd, socketID, 1) == 1 ) { /* wait a little bit */ usleep(1000); ret = _readData(fd, socketID, buf, len); return ret; } else { return -1; } } /*******************************************************************/ /* Function clearSndBuf() */ /* Convenience function */ /* */ /* Input: int fd file handle */ /* */ /* */ /*******************************************************************/ void clearSndBuf(int fd) { char buf[256]; #ifndef USE_LIBUSB while ( devRead(fd, (unsigned char*)buf, sizeof(buf), d4RdTimeout) > 0 ) ; #else while ( mRead(fd, (unsigned char*)buf, sizeof(buf) ) > 0 ) ; #endif } #if 0 /* implementation later ? */ int InitReply(int fd) { uc buf[20]; initReply_t cmd; cmd.head.psid = 0; cmd.head.ssid = 0; cmd.head.lengthH = 0; cmd.head.lengthL = 9; cmd.head.credit = 1; cmd.head.control = 0; cmd.head.command = 0x80; cmd.head.result = 0; /* put the correct value here, 0,1,2 or 0x0b */ cmd.revision = 0x10; } int ExitReply(int fd) { replyHeader_t cmd; cmd.psid = 0; cmd.ssid = 0; cmd.lengthH = 0; cmd.lengthL = 7; cmd.credit = 1; /* always ignored */ cmd.control = 0; cmd.command = 0x88; cmd.result = 0x0; /* put the correct value here always 0 */ } int Error(int fd) { char error_t cmd; cmd.head.psid = 0; cmd.head.ssid = 0; cmd.head.lengthH = 0; cmd.head.lengthL = 0x0a; cmd.head.credit = 0; cmd.head.control = 0; cmd.head.command = 0x7f; cmd.epsid = psid; cmd.essid = ssid; cmd.ecode = 0x80; /* + 1...7 */ } int GetSocketIDReply(int fd, uc socketID) { /* the service name may not be longer as 40 bytes */ int len = sizeof(replyHeader_t) + 1 + strlen(serviceName); uc buf[100]; replyHeader_t *cmd = buf; cmd->psid = 0; cmd->ssid = 0; cmd->lengthH = 0; cmd->lengthL = len & 0xff; cmd->credit = 1; cmd->control = 0; cmd->command = 0x89; cmd->result = 0; /* put the correct vale here 0 or 0x0a */ buf[sizeof(cmdHeader_t)] = socketID; strcpy(buf+1+sizeof(cmdHeader_t), serviceName); } int GetServiceName(inf fd, uc socketID) { int rd; uc buf[100]; cmdHeader_t *cmd = buf; cmd->psid = 0; cmd->ssid = 0; cmd->lengthH = 0; cmd->lengthL = 8; cmd->credit = 1; cmd->control = 0; cmd->command = 0x0a; buf[sizeof(cmdHeader_t)] = socketID; } /* as GetSocketIDReply but with command 0x8a instead 0f 0x89 */ int GetServiceNameReply(inf fd) { /* the service name may not be longer as 40 bytes */ int len = sizeof(replyHeader_t) + 1 + strlen(serviceName); uc buf[100]; replyHeader_t *cmd = buf; cmd->psid = 0; cmd->ssid = 0; cmd->lengthH = 0; cmd->lengthL = len & 0xff; cmd->credit = 1; cmd->control = 0; cmd->command = 0x8a; cmd->result = 0; /* put the correct vale here 0 or 0x0a */ buf[sizeof(replyHeader_t)] = socketID; strcpy(buf+1+sizeof(replyHeader_t), serviceName); } int CreditReply(int fd, uc socketID, int credit) { uc buf[100]; replyHeader_t *cmd = buf; cmd->psid = 0; cmd->ssid = 0; cmd->lengthH = 0; cmd->lengthL = 0x0b; cmd->credit = 1; cmd->control = 0; cmd->command = 0x83; buf[sizeof(replyHeader_t)] = socketID; buf[sizeof(replyHeader_t)+1] = socketID; } #endif mtink-1.0.16/mainSrc/cfg2.c0000644000076400001540000005406310664606547013460 0ustar jjfuse/* * File cfg2.c * * MAsk for configuration of mtink */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "mtink.h" #include "cfg2.h" #include "cfg1.h" #include "fsb.h" #include "tooltip.h" #include "rcfile.h" #include "cmd.h" #include "micon.h" Widget autodetect_TB; static Widget cfg2Next_PB; static Widget cfg2Previous_PB; static Widget browser_PB; static Widget browser_TF; Widget tooltip_TB; static Widget title_LB; static Widget ConfigureForm; Widget cfg2Device_PB; static Widget cfg2Device_LB; Widget cfg2Printer_PB; static Widget cfg2Printer_LB; static int loop; static configData_t tmpConf; static void cfg2Next_CB(Widget w, XtPointer clientData, XtPointer callData); static void cfg2Previous_CB(Widget w, XtPointer clientData, XtPointer callData); static void selectFile_CB(Widget w, XtPointer clientData, XtPointer callData); void cfg2Device_CB(Widget w, XtPointer clientData, XtPointer callData); void cfg2Printer_CB(Widget w, XtPointer clientData, XtPointer callData); /*******************************************************************/ /* Function createConfigureForm() */ /* */ /* Build the configuration mask */ /* */ /*******************************************************************/ Widget createConfigureForm(Widget parent, int *next) { Widget browser_LB; Widget separator; XmString xms = NULL; Dimension h1,h2; ConfigureForm = XtVaCreateWidget("ConfigureForm", xmFormWidgetClass, mainForm, XmNmarginHeight, 0, XmNmarginWidth, 0, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM, XmNresizePolicy, XmRESIZE_GROW, XmNresizable, True, NULL); if (ConfigureForm == NULL) { return NULL; } XtManageChild(ConfigureForm); title_LB = XtVaCreateWidget("title_LB", xmLabelWidgetClass, ConfigureForm, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 5, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 5, XmNtopAttachment, XmATTACH_FORM, XmNtopOffset, 10, XmNalignment, XmALIGNMENT_CENTER, NULL); XtManageChild(title_LB); browser_LB = XtVaCreateWidget("browser_LB", xmLabelWidgetClass, ConfigureForm, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 5, XmNtopAttachment, XmATTACH_WIDGET, XmNtopOffset, 10, XmNtopWidget, title_LB, XmNalignment, XmALIGNMENT_BEGINNING, NULL); XtManageChild(browser_LB); browser_PB = XtVaCreateWidget("browser_PB", xmPushButtonWidgetClass, ConfigureForm, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 5, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, browser_LB, XmNtopOffset, 10, NULL); XtManageChild(browser_PB); browser_TF = XtVaCreateWidget("browser_TF", xmTextFieldWidgetClass, ConfigureForm, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 5, XmNrightAttachment, XmATTACH_WIDGET, XmNrightOffset, 5, XmNrightWidget, browser_PB, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, browser_LB, XmNtopOffset, 10, NULL); XtManageChild(browser_TF); XtVaGetValues(browser_TF, XmNheight, &h1, NULL); XtVaGetValues(browser_PB, XmNheight, &h2, NULL); XtVaSetValues(browser_PB, XmNtopOffset, 10 +((h1-h2)/2),NULL); /* toggle button for mini help */ tooltip_TB = XtVaCreateWidget("tooltip_TB", xmToggleButtonWidgetClass, ConfigureForm, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 5, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, browser_TF, XmNtopOffset, 10, NULL); XtManageChild(tooltip_TB); /* toggle button for autodetection allowed or not */ autodetect_TB = XtVaCreateWidget("autodetect_TB", xmToggleButtonWidgetClass, ConfigureForm, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 5, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, tooltip_TB, XmNtopOffset, 10, NULL); XtManageChild(autodetect_TB); cfg2Device_PB = XtVaCreateWidget("cfg2Device_PB", xmPushButtonWidgetClass, ConfigureForm, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 5, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, autodetect_TB, XmNtopOffset, 10, NULL); XtManageChild(cfg2Device_PB); xms = XmStringCreateSimple(""); cfg2Device_LB = XtVaCreateWidget("cfg2Device_LB", xmLabelWidgetClass, ConfigureForm, XmNleftAttachment, XmATTACH_WIDGET, XmNleftOffset, 10, XmNleftWidget, cfg2Device_PB, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, cfg2Device_PB, XmNtopOffset, 0, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, cfg2Device_PB, XmNbottomOffset, 0, XmNlabelString, xms, NULL); XmStringFree(xms); XtManageChild(cfg2Device_LB); cfg2Printer_PB = XtVaCreateWidget("cfg2Printer_PB", xmPushButtonWidgetClass, ConfigureForm, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 5, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, cfg2Device_PB, XmNtopOffset, 10, NULL); XtManageChild(cfg2Printer_PB); xms = XmStringCreateSimple(""); cfg2Printer_LB = XtVaCreateWidget("cfg2Printer_LB", xmLabelWidgetClass, ConfigureForm, XmNleftAttachment, XmATTACH_WIDGET, XmNleftOffset, 10, XmNleftWidget, cfg2Printer_PB, XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, cfg2Printer_PB, XmNtopOffset, 0, XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, cfg2Printer_PB, XmNbottomOffset, 0, XmNlabelString, xms, NULL); XmStringFree(xms); XtManageChild(cfg2Printer_LB); cfg2Previous_PB = XtVaCreateWidget("cancel_PB", xmPushButtonWidgetClass, ConfigureForm, XmNleftAttachment, XmATTACH_POSITION, XmNleftOffset, 5, XmNleftPosition, 65, XmNrightAttachment, XmATTACH_POSITION, XmNrightOffset, 5, XmNrightPosition, 95, XmNbottomAttachment, XmATTACH_FORM, XmNbottomOffset, 5, NULL); XtManageChild(cfg2Previous_PB); cfg2Next_PB = XtVaCreateWidget("save_PB", xmPushButtonWidgetClass, ConfigureForm, XmNleftAttachment, XmATTACH_POSITION, XmNleftOffset, 5, XmNleftPosition, 5, XmNrightAttachment, XmATTACH_POSITION, XmNrightOffset, 5, XmNrightPosition, 35, XmNbottomAttachment, XmATTACH_FORM, XmNbottomOffset, 5, NULL); XtManageChild(cfg2Next_PB); separator = XtVaCreateWidget("separator", xmSeparatorWidgetClass, ConfigureForm, XmNbottomAttachment, XmATTACH_WIDGET, XmNbottomOffset, 5, XmNbottomWidget, cfg2Next_PB, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 0, XmNrightAttachment, XmATTACH_FORM, XmNrightOffset, 0, NULL); XtManageChild(separator); XtAddCallback(cfg2Next_PB, XmNactivateCallback, cfg2Next_CB, &loop); XtAddCallback(cfg2Previous_PB, XmNactivateCallback, cfg2Previous_CB, &loop); XtAddCallback(browser_PB, XmNactivateCallback, selectFile_CB, browser_TF); XtAddCallback(cfg2Device_PB, XmNactivateCallback, cfg2Device_CB, &loop); XtAddCallback(cfg2Printer_PB, XmNactivateCallback, cfg2Printer_CB, &loop); /* set wide for cfg2Printer_PB and cfg2Device_PB */ XtVaGetValues(cfg2Printer_PB, XmNwidth, &h1, NULL); XtVaGetValues(cfg2Device_PB, XmNwidth, &h2, NULL); if ( h1 > h2 ) XtVaSetValues(cfg2Device_PB, XmNwidth, h1, NULL); else XtVaSetValues(cfg2Printer_PB, XmNwidth, h2, NULL); return ConfigureForm; } /*******************************************************************/ /* Function cfg2Device_CB() */ /* */ /* Callback for selection of the port */ /* */ /*******************************************************************/ void cfg2Device_CB(Widget w, XtPointer clientData, XtPointer callData) { wConfig_data_t data; int loop = 0; char retBuf[1000]; XmString xms; Widget wid; data.ptrVal = NULL; data.printerName = tmpConf.name; data.wait = &loop; data.wType = QUERY_DEVICE; data.bt1 = data.bt2 = NULL; data.bt3 = appResourceRec.ok; data.message = NULL; doCyclicScan = 0; /* disable cyclic scanning for IQ */ popupCfg1(ConfigureForm, &data, &tmpConf); /* wait for sub window */ while(!loop) XtAppProcessEvent(theApp, XtIMAll); /* test for results */ if ( loop == -1 ) { wid = createNoPrinterBox("noAccess"); doCyclicScan = 0; XtManageChild(wid); } if ( tmpConf.dev && data.ptrVal && strcmp(tmpConf.dev,data.ptrVal) ) { callPrg(TERMINATE,NULL,0, 0, 0, NULL, NULL ); if ( callPrg(TEST_DEV,data.ptrVal, NO_PROT, 0, 0, (char**)&retBuf, NULL ) > -1 ) { /* device is OK */ tmpConf.dev = data.ptrVal; /* allocated value */ xms = XmStringCreateSimple(tmpConf.dev); XtVaSetValues(cfg2Device_LB, XmNlabelString, xms, NULL); XmStringFree(xms); if ( retBuf && *retBuf ) doCyclicScan = 0; } else { /* open failed */ wid = createNoPrinterBox("noPrinter"); doCyclicScan = 0; XtManageChild(wid); /* reopen the previous opened device */ if ( tmpConf.dev ) { callPrg(TEST_DEV,tmpConf.dev , NO_PROT, 0, 0, (char**)&retBuf, NULL ); } } } XtUnmanageChild(data.actWindow); XtManageChild(ConfigureForm); } /*******************************************************************/ /* Function cfg2Printer_CB() */ /* */ /* Callback for selection of the printer */ /* */ /*******************************************************************/ void cfg2Printer_CB(Widget w, XtPointer clientData, XtPointer callData) { wConfig_data_t data; int loop = 0; char *dev; XmString xms; data.ptrVal = NULL; data.printerName = tmpConf.name; data.wait = &loop; data.wType = QUERY_PRINTER; data.bt1 = data.bt2 = NULL; data.bt3 = appResourceRec.ok; data.message = NULL; dev = tmpConf.dev; /* old value */ if ( tmpConf.name && tmpConf.name[0] != '?' ) { xms = XmStringCreateSimple(tmpConf.name); XtVaSetValues(cfg2Printer_LB,XmNlabelString,xms,NULL); XmStringFree(xms); } popupCfg1(ConfigureForm, &data, &tmpConf); /* wait for sub window */ while(!loop) XtAppProcessEvent(theApp, XtIMAll); memcpy(&tmpConf,(configData_t*)(data.ptrVal), sizeof(configData_t)); tmpConf.dev = dev; /* restore old value */ if (tmpConf.name && tmpConf.name != data.printerName) { if ( tmpConf.name[0] != '?' ) { xms = XmStringCreateSimple(tmpConf.name); XtVaSetValues(title_LB,XmNlabelString,xms,NULL); XtVaSetValues(cfg2Printer_LB,XmNlabelString,xms,NULL); XmStringFree(xms); } else { xms = XmStringCreateSimple(xmGetResource(title_LB,"labelString")); XtVaSetValues(title_LB,XmNlabelString,xms,NULL); XmStringFree(xms); xms = XmStringCreateSimple(""); XtVaSetValues(cfg2Printer_LB,XmNlabelString,xms,NULL); XmStringFree(xms); } } XtUnmanageChild(data.actWindow); XtManageChild(ConfigureForm); } /*******************************************************************/ /* Function selectFile_CB() */ /* */ /* Callback for selection of browser */ /* */ /*******************************************************************/ void selectFile_CB(Widget w, XtPointer clientData, XtPointer callData) { Widget fsb = NULL; /* open a file selection box */ fsb = createFileSelection(mainForm, (Widget)clientData); } /*******************************************************************/ /* Function cfg2Next_CB() */ /* */ /* Callback for saving of data */ /* */ /*******************************************************************/ void cfg2Next_CB(Widget w, XtPointer clientData, XtPointer callData) { char rcPath[1024]; *((int*)clientData) = 1; /* save the browser name */ sprintf(rcPath,"%s/.mtinkrc",getenv("HOME")); if ( browser ) { free(browser); browser = NULL; } browser = XmTextFieldGetString(browser_TF); /* and the other datas */ if ( autodetect ) { free(autodetect); autodetect = NULL; } if ( XmToggleButtonGetState(autodetect_TB) ) { autodetect = strdup("yes"); } else { autodetect = strdup("no"); } if ( XmToggleButtonGetState(tooltip_TB) ) { miniHelp = strdup("yes"); xmEnableTooltip(True); } else { miniHelp = strdup("no"); xmEnableTooltip(False); } } /*******************************************************************/ /* Function cfg2Previous_CB() */ /* */ /* Callback for saving csncle */ /* */ /*******************************************************************/ void cfg2Previous_CB(Widget w, XtPointer clientData, XtPointer callData) { *((int*)clientData) = -1; } /*******************************************************************/ /* Function popupCfg2() */ /* */ /* main entry for this module. modify */ /* */ /* Input; Widget old which mask to popup after */ /* the job is done */ /* Input / Output: wConfig_data_t *data */ /* */ /*******************************************************************/ void popupCfg2(Widget old, wConfig_data_t *data) { XmString xms; char *retBuf; int status; int oldCyclicScan = doCyclicScan; memcpy((void*)&tmpConf,(void*)&actConfig,sizeof(configData_t)); XtUnmanageChild(old); XtManageChild(ConfigureForm); if ( data->printerName && data->printerName[0] != '?' ) { xms = XmStringCreateSimple(data->printerName); XtVaSetValues(title_LB, XmNlabelString, xms, NULL); XmStringFree(xms); } if ( tmpConf.dev ) { xms = XmStringCreateSimple(tmpConf.dev); XtVaSetValues(cfg2Device_LB, XmNlabelString, xms, NULL); XmStringFree(xms); } if ( browser ) { XmTextFieldSetString(browser_TF, browser); } /* privat loop */ data->ptrVal = NULL; *data->wait = 0; loop = 0; while(!loop) XtAppProcessEvent(theApp, XtIMAll); *data->wait = loop; if ( loop != -1 && ((actConfig.dev && tmpConf.dev && strcmp(actConfig.dev,tmpConf.dev )) || (actConfig.name && tmpConf.name && strcmp(actConfig.dev,tmpConf.name ))) ) { if ( actConfig.dev != tmpConf.dev ) free(actConfig.dev); memcpy((void*)&actConfig,(void*)&tmpConf,sizeof(configData_t)); retBuf = NULL; status = callPrg(GET_IQ, actConfig.dev, actConfig.prot, 0, 0, &retBuf, NULL); if ( status != -1 ) { SetSensitive(True); } if ( retBuf ) decodeStatus((unsigned char*)retBuf, strlen(retBuf)); else decodeStatus((unsigned char*)"", 0); if ( retBuf && *retBuf ) doCyclicScan = 1; else doCyclicScan = 0; if ( oldCyclicScan && ! doCyclicScan && strncmp(actConfig.dev,"/var/",5)==0) doCyclicScan = oldCyclicScan; saveConfig(configFileIdx); iconAddTooltip(actConfig.name); refreshMainWindow(); /* handle the "icon" window */ if ( strncmp(actConfig.dev,"/var/",5) ) { unmapIcon(); usePopup = 0; miconOK = NULL; } else { miconOK = createIconLayout(topLevel, theApp, mainResource, guiLanguage, usePopup); usePopup = 1; } } data->actWindow = ConfigureForm; } mtink-1.0.16/mainSrc/ttink.c0000644000076400001540000011735010665016533013756 0ustar jjfuse/* ttink.c * * Copyright (C) 2001 Jean-Jacques Sarton jj.sarton@t-online.de */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include #include #include #ifdef MACOS #include "usbHlp.h" #endif #include "mtink.h" #include "access.h" #include "rcfile.h" #include "rdRes.h" #include "cmd.h" #include "version.h" #include "d4lib.h" #include "rdPrtDesc.h" #define defaultConfigData configData #define defaultConfigDataSize configEntries #ifndef TEST #define TEST 0 #endif int deviceHdl = -1; /* for write / read to / from printer */ char *prgName; int pb = 0; int pc = 0; int pm = 0; int py = 0; int plc = 0; int plm = 0; int plb = 0; int plp = 0; int plx = 0; char *printerName = NULL; char *printerState; int findDevice = 0; configData_t actConfig; char *mainResource; int doReset = 0; int doClean = 0; int doCheck = 0; int doStatus = 0; int doAlign = 0; int doExchangeCartridge = 0; int cycle = 0; int doIdent = 0; int utf8 = 0; int d4Printer = 0; char *model = NULL; char *device = NULL; #define NAME "EpsonUtil" int decodePrinterType(unsigned char *buf, int len); int getPrinterInfo(); int decodeStatus(unsigned char *buf, int len, char *lang); int alignHeads(char *lang, configData_t actConfig); int exchangeInk(char *lang, configData_t actConfig); int setConfig(char *lang); int (*ynFunc)(char*,char*); extern int inFromFile; /*******************************************************************/ /* Function sigKill(int code) */ /* */ /* terminate gacefully if a sigkill occured */ /* */ /*******************************************************************/ static void sigKill(int code) { callPrg(TERMINATE,NULL, 0, 0, 0, NULL, NULL); exit(0); } /*******************************************************************/ /* Function setPrinterStateLabel(int state) */ /* */ /* set the printer state label accpording to state */ /* */ /*******************************************************************/ void setPrinterStateLabel(int state) { #if 0 /* not now */ switch(state) { case 0: printerState = appResourceRec.error; break; case 1: printerState = appResourceRec.selfTest; break; case 2: printerState = appResourceRec.busy; break; case 3: printerState = appResourceRec.printing; break; case 4: printerState = appResourceRec.ok; break; case 7: printerState = appResourceRec.cleaning; break; default: printerState = appResourceRec.unknown; } printf("%s\n"printerState); #endif } /*******************************************************************/ /* Function exit_CB(...) */ /* */ /* terminate the programm */ /* */ /*******************************************************************/ void exit_CB(int val) { callPrg(TERMINATE,NULL, 0, 0, 0, NULL, NULL); #ifdef MACOS unlinkFiles(); #endif exit(val); } /*******************************************************************/ /* Function printSyntax */ /* */ /* print syntax and exit */ /* */ /*******************************************************************/ void printSyntax(int error, char *lang) { FILE *out; if ( error ) out = stderr; else out = stdout; fprintText(out, "%s", lang, "syntax1"); fprintf(out, "%s\n",prgName); #ifdef MACOS fprintText(out, "%s\n", lang, "syntaxM"); unlinkFiles(); #else fprintText(out, "%s\n", lang, "syntax2"); #endif exit(error); } /*******************************************************************/ /* Function parseArgs(int argc, char **argv) */ /* */ /* check for call parameters */ /* */ /*******************************************************************/ void parseArgs(int argc, char **argv, char *lang) { int i; char *s; char *t; char buf[256]; /* look first for the option -u */ for (i = 0; i < argc;i++ ) { if ( strncmp("-u", argv[i], 2) == 0 || strncmp("--u", argv[i], 3) == 0 ) { utf8 = 1; lang[2] = '8'; lang[3] = '\0'; } } while ( argc ) { if ( strncmp("-F", argv[0], 2) == 0) { inFromFile = 1; } else if ( strncmp("-h", argv[0], 2) == 0 || strncmp("--h", argv[0], 3) == 0 ) { printSyntax(0, lang); } if ( strncmp("-f", argv[0], 2) == 0 || strncmp("--f", argv[0], 3) == 0 ) { findDevice = 1;; } else if ( strncmp("-W", argv[0], 2) == 0 ) { ynFunc = askYn; } else if ( strncmp("-d", argv[0], 2) == 0 || strncmp("--d", argv[0], 3) == 0 ) { /* set device file */ if ( argc > 1 ) { device = strdup(argv[1]); argc--; argv++; } else { printSyntax(1, lang); } } else if ( strncmp("-m", argv[0], 2) == 0 || strncmp("--m", argv[0], 3) == 0 ) { /* set model name */ if ( argc > 1 ) { model = argv[1]; argc--; argv++; } else { printSyntax(1, lang); } } else if ( strncmp("-r", argv[0], 2) == 0 || strncmp("--r", argv[0], 3) == 0 ) { /* reset printer command */ doReset = 1; } else if ( strncmp("-i", argv[0], 2) == 0 || strncmp("--i", argv[0], 3) == 0 ) { /* identity printer command */ doIdent = 1; } else if ( strncmp("-D", argv[0], 2) == 0 || strncmp("--D", argv[0], 3) == 0 ) { /* identity printer command */ d4Printer = 1; } else if ( strncmp("-a", argv[0], 2) == 0 || strncmp("--a", argv[0], 3) == 0 ) { /* align head command */ doAlign = 1; } else if ( strncmp("-c", argv[0], 2) == 0 || strncmp("--c", argv[0], 3) == 0 ) { /* clean printer command*/ doClean = 1; } else if ( strncmp("-R", argv[0], 2) == 0 || strncmp("--R", argv[0], 3) == 0 ) { /* set device file */ if ( argc > 1 ) { cycle = atoi(argv[1]); argc--; argv++; if ( cycle < 0 ) { printSyntax(1, lang); } } else { printSyntax(1, lang); } } else if ( strncmp("-n", argv[0], 2) == 0 || strncmp("--n", argv[0], 3) == 0 ) { /* nozzle check command*/ doCheck = 1; } else if ( strncmp("-e", argv[0], 2) == 0 || strncmp("--e", argv[0], 3) == 0 ) { /* nozzle check command*/ doExchangeCartridge = 1; } else if ( strncmp("-s", argv[0], 2) == 0 || strncmp("--s", argv[0], 3) == 0 ) { /* printer status command*/ doStatus = 1; } else if ( strncmp("-u", argv[0], 2) == 0 || strncmp("--u", argv[0], 3) == 0 ) { utf8 = 1; lang[2] = '8'; lang[3] = '\0'; } else if ( strncmp("-L", argv[0], 2) == 0 ) { /* printer status command*/ debugD4 = 1; } else if ( strncmp("-v", argv[0], 2) == 0 || strncmp("--v", argv[0], 3) == 0 ) { printf("%-8s: %s\n",prgName,VERSION); printf("compiled: %s %s\n",__DATE__,__TIME__); printf("Author : Jean-Jacques Sarton\n"); printf("URL : http://xwtools.automatix.de\n"); exit(0); } else if ( strncmp("-l", argv[0], 2) == 0 || strncmp("--l", argv[0], 3) == 0 ) { /* list known printers */ i = 0; while (i < defaultConfigDataSize-1) { /* skip the stylus part */ s = defaultConfigData[i].name + 7; t = buf; /* and replace ' ' by _ */ while ( *s ) { if ( *s == ' ' ) *t = '_'; else *t = *s; s++; t++; } *t = '\0'; printf("%3d: %-20s %s\n",i+1,buf, defaultConfigData[i].name); i++; } exit(0); } argc--; argv++; } if ( doReset == 0 && doClean == 0 && doCheck == 0 && doAlign == 0 && doExchangeCartridge == 0 && doIdent == 0 ) doStatus = 1; if ( (doReset + doClean + doCheck + doStatus + doAlign + doExchangeCartridge + doIdent) > 1 ) printSyntax(1, lang); #ifndef MACOS if ( device == NULL ) printSyntax(1,lang); #endif } /*******************************************************************/ /* Function main() */ /* */ /* The begin of the world */ /* */ /*******************************************************************/ int main(int argc, char **argv) { char *s; int state; wConfig_data_t data; char *retBuf = NULL; char printerFound = 0; char *lang = NULL; int retVal = 0; #ifdef MACOS char prtFile[512]; #endif ynFunc = askYn; prgName = argv[0]; if ( (s = strrchr(prgName, '/')) != NULL ) { prgName = s + 1; } /* try to get language spec from environment */ lang = getenv("LANG"); if ( lang == NULL ) { if ( (lang = getenv("LC_ALL")) == NULL ) { if ( (lang = getenv("LC_CTYPE")) == NULL ) { lang = (char*) strdup("en"); } } } /* if no environment for language we have set en */ if ( strlen(lang) >= 2 ) { /* language may be valid */ s = lang; } else { /* language spec 2 char long ! */ s = "en"; } if ( strstr(lang, "UTF-8") ) { utf8 = 1; } lang = (char *)malloc(4); if ( lang == NULL ) { exit(1); } *lang = '\0'; lang[0] = toupper(s[0]); lang[1] = s[1]; lang[2] = '\0'; if ( utf8 ) { lang[2] = '8'; lang[3] = '\0'; } initResource(); readPrinterData(); parseArgs(argc,argv, lang); if ( utf8 ) { lang[2] = '8'; lang[3] = '\0'; } signal(SIGINT, sigKill); signal(SIGQUIT, sigKill); signal(SIGSEGV, sigKill); #ifndef MACOS if ( device ) { /* Check access rights to the device */ if ( fileAccess(device,R_OK|W_OK) == -1 ) { /* we have not the permission to write * and read */ fprintText(stderr,"%s\n", lang, "noAccess"); exit_CB(1); } } if ( (model == NULL || doIdent ) && ! d4Printer ) { /* try to detect the printer model */ state = callPrg(TEST_DEV, device, NO_PROT, 0, 0, &retBuf, NULL ); /* look for the operation result */ if ( state == -1 ) { fprintText(stderr,"%s\n", lang, "noAccess"); exit_CB(1); } else if ( state == 0 && retBuf ) { /* may be OK, check for model name */ state = decodePrinterType((unsigned char*)retBuf, strlen(retBuf)); if ( state ) { printerFound = 1; } else { /* test with D4 exit */ printerFound = 0; } } else if ( state == 1 ) { /* may be OK but no answer from device */ printerFound = 2; } else if ( state == 2 ) { /* may be OK and a D4 device */ printerFound = 2; } } else if ( !d4Printer ) { printerFound = 1; printerName = strdup(model); } if ( (printerFound == 0 || printerFound == 2) && !d4Printer ) { retBuf = NULL; state = callPrg(GET_ID, device, PROT_EXIT|PROT_OLD, 0, 0, &retBuf, NULL ); if ( state == 0 && retBuf ) { /* may be OK, check for model name */ state = decodePrinterType((unsigned char*)retBuf, strlen(retBuf)); if ( state ) { printerFound = 1; } else { /* test with D4 */ printerFound = 0; } } else { /* may be OK and a D4 device */ printerFound = 0; } } #else /* on MacOS we use the lib usb */ if ( (state = usbInit()) > 0 ) { /* printers detected */ if ( createFiles() == 0 ) { int i; /* device given, check if OK */ if ( device != NULL ) { /* look for usb: */ s = strstr(device, USB_PRT_NAME_PREFIX); if ( s ) { s += strlen(USB_PRT_NAME_PREFIX); if ( isdigit(*s) ) { i = atoi(s); } else /* expect usb::printer name */ { i = -1; } if ( i > -1 && i < state ) { s = strchr(s, ':'); if ( s ) { s++; if ( strcmp(s,getPrinterName(i)) ) { free(device); device = NULL; } else { state = i + 1; } } } else /* no match */ { free(device); device = NULL; } } else /* wrong name build */ { free(device); device = NULL; } } if ( state > 1 && device == NULL && findDevice == 0 ) { /* choose printer model */ fprintText(stdout, "%s\n", lang,"followingPrintersFound"); for ( i = 0; i < state; i++) { printf("%2d: %s\n",i+1, devices[i].prtname); } fprintText(stdout, "%s\n", lang,"ChoosePrinter"); state = askNo(1,state); } /* user told to print only device file name */ if (findDevice) { for ( i = 0; i < state; i++) { printf(USB_PRT_NAME_PREFIX"%02d:%s\n",i,devices[i].prtname); } exit_CB(0); } /* build device file name */ if ((s = getPrinterName(state-1))) { state--; snprintf(prtFile, sizeof(prtFile),USB_PRT_NAME_PREFIX"%02d:%s",state,s); model = strdup(s); printerName = strdup(s); device = prtFile; printerFound = 1; } } else { fprintText(stderr,"%s\n",lang, "noEnoughMemory"); } } else { } #endif /* we may have set the -D flag d4Printer in order to avoid detection */ /* via non D4 protocol. in this case the detection is to be done */ /* on the following conditions: * doIdent is set and printerFound is 0 * */ if ( printerFound == 0 ) { retBuf = NULL; state = callPrg(GET_ID, device, PROT_D4, 0, 0, &retBuf, NULL ); /* look for the operation result */ if ( state == 0 && retBuf ) { /* may be OK, check for model name */ state = decodePrinterType((unsigned char*)retBuf, strlen(retBuf)); if ( state ) { printerFound = 1; } else { /* test with D4 */ printerFound = 0; } } else { /* not an Epson printer */ printerFound = 0; } } if ( printerFound == 0 && (!d4Printer && doIdent) ) { printText("%s\n",lang, "noDetected"); exit_CB(1); } if ( printerFound == 0 ) { if ( model ) { printerName = strdup(model); } else { printerName = strdup("?"); } } /* get the printer data from our data base */ actConfig.name = printerName; if ( ! setConfig(lang) ) { fprintText(stderr,"%s\n",lang, "unknownModel"); actConfig.name = printerName; } data.ptrVal = actConfig.dev; actConfig.dev = device; if ( doIdent ) { if ( printerName ) printf("%s\n", printerName); } /* the printer name will be found in printerName */ if ( doStatus ) { loop: retBuf = NULL; callPrg(GET_IQ, actConfig.dev, actConfig.prot, 0, 0, &retBuf, NULL); if ( retBuf != NULL && *retBuf ) { if ( *retBuf == '\0' ) { printerFound = 0; } else { if ( decodeStatus((unsigned char*)retBuf, strlen(retBuf), lang) ) { printerFound = 1; if ( cycle ) { sleep(cycle); goto loop; } } else { printerFound = 0; } } } else { //if ( !actConfig.id || ) { printerFound = 0; } } if ( printerFound == 0 ) { printText("%s\n", lang, "noOPen"); exit_CB(1); } } if ( doCheck ) { retVal = callPrg(CHECK_NOZZLE, actConfig.dev,actConfig.prot, 0, actConfig.checkNeedReset, NULL, NULL); } if ( doClean ) { retVal = callPrg(CLEAN_NOZZLE, actConfig.dev,actConfig.prot, 0, 0, NULL, NULL); } if ( doReset ) { retVal = callPrg(RESET_PRT, actConfig.dev, actConfig.reset, 0, 0, NULL, NULL); } if ( retVal < 0 ) { retVal = 1; printText("%s\n", lang, "noOPen"); } /* from here inter actice functions */ if ( doAlign ) { alignHeads(lang, actConfig); } if ( doExchangeCartridge ) { exchangeInk(lang, actConfig); } exit_CB(0); return 0; } /*******************************************************************/ /* Function percent */ /* */ /* translate the value passed as HEX (2 chars) in decimal */ /* */ /* Input: unsigned char *buf The hex value to be translated */ /* */ /* Return: the decimal value according to hex value */ /* */ /*******************************************************************/ int percent(unsigned char *buf) { int val = 0;; if ( buf[0] >= '0' && buf[0] <= '9' ) val = (buf[0] - '0') * 16; else if ( buf[0] >= 'A' && buf[0] <= 'F' ) val = (buf[0] - 'A' + 10 ) * 16; else if ( buf[0] >= 'a' && buf[0] <= 'f' ) val = (buf[0] - 'a' + 10 ) * 16; if ( buf[1] >= '0' && buf[1] <= '9' ) val += (buf[1] - '0'); else if ( buf[1] >= 'A' && buf[1] <= 'F' ) val += (buf[1] - 'A' + 10 ); else if ( buf[1] >= 'a' && buf[1] <= 'f' ) val += (buf[1] - 'a' + 10 ); return val; } /*******************************************************************/ /* Function colorType */ /* */ /* translate the value passed as HEX (1 char) in decimal */ /* */ /* Input: unsigned char *buf The hex value to be translated */ /* */ /* Return: the decimal value according to hex value */ /* */ /*******************************************************************/ int colorType(unsigned char *buf) { int val = 0;; if ( buf[0] >= '0' && buf[0] <= '9' ) val = (buf[0] - '0') * 16; else if ( buf[0] >= 'A' && buf[0] <= 'F' ) val = (buf[0] - 'A' + 10 ) * 16; else if ( buf[0] >= 'a' && buf[0] <= 'f' ) val = (buf[0] - 'a' + 10 ) * 16; return val; } /*******************************************************************/ /* Function decodeStatus */ /* */ /* decode the string returned from printer and print the */ /* informations in an human readable way */ /* */ /* Input: unsigned char *buf The String returned from printer */ /* int len Size of string */ /* */ /* Return: 1 if any info found */ /* */ /*******************************************************************/ int decodeStatus(unsigned char *buf, int len, char *lang) { int i; int infOk = 0; char *s; char code[3]; int colIdx; pb = 0; pc = 0; pm = 0; py = 0; plc = 0; plm = 0; plb = 0; plp = 0; plx = 0; if ( buf == NULL ) return infOk; for ( i = 0; i < len;) { if ( strncmp((char*)&buf[i], "ST:", 3 ) == 0 ) { infOk = 1; i += 3; printerState = "unknown"; switch( buf[i+1] ) { case '0': printerState = "error"; break; case '1': printerState = "selfTest"; break; case '2': printerState = "busy"; break; case '3': printerState = "printing"; break; case '4': printerState = "ok"; break; case '7': printerState = "cleaning"; break; } i +=3; printText("\t%-20s:",lang,"printerState"); printText(" %s\n\n",lang,printerState); } else if ( strncmp((char*)&buf[i], "ER:", 3 ) == 0 ) { i += 3; s = NULL; switch( buf[i+1] ) { case '1': s = "interfaceNotSelected"; break; case '4': s = "paperJamError"; break; case '5': s = "inkOutError"; break; case '6': s = "paperOutError"; break; default: s = code; code[0] = buf[i]; code[1] = buf[i+1]; code[2] = 0; } if ( s ) { printText("\t%s: ", lang, "error"); printText("%s\n", lang, s); } i +=3; } else if ( strncmp((char*)&buf[i], "IQ:", 3 ) == 0 ) { infOk = 1; i += 3; colIdx = 0; while ( i < len && colIdx < 7 && buf[i] != ';' ) { switch(colIdx) { case 0: pb = percent(buf+i); printText("\t%-20s:",lang,"black"); printf(" %2d %%\n",pb); break; case 1: pc = percent(buf+i); printText("\t%-20s:",lang,"cyan"); printf(" %2d %%\n",pc); break; case 2: pm = percent(buf+i); printText("\t%-20s:",lang,"magenta"); printf(" %2d %%\n",pm); break; case 3: py = percent(buf+i); printText("\t%-20s:",lang,"yellow"); printf(" %2d %%\n",py); break; case 4: plc = percent(buf+i); printText("\t%-20s:",lang,"lcyan"); printf(" %2d %%\n",plc); break; case 5: plm = percent(buf+i); printText("\t%-20s:",lang,"lmagenta"); printf(" %2d %%\n",plm); break; case 6: plb = percent(buf+i); printText("\t%-20s:",lang,"lblack"); printf(" %2d %%\n",plb); break; } colIdx++; i += 2; } } #if 1 else if ( strncmp((char*)&buf[i], "INQ:", 4 ) == 0 ) { char colorModel; infOk = 1; i += 4; colIdx = 0; colorModel = buf[i]; i++; while ( i < len && colIdx < 8 && buf[i] != ';' ) { switch(colIdx) { case 0: pb = percent(buf+i); printText("\t%-20s:",lang,"black"); printf(" %2d %%\n",pb); break; case 1: pc = percent(buf+i); printText("\t%-20s:",lang,"cyan"); printf(" %2d %%\n",pc); break; case 2: pm = percent(buf+i); printText("\t%-20s:",lang,"magenta"); printf(" %2d %%\n",pm); break; case 3: py = percent(buf+i); printText("\t%-20s:",lang,"yellow"); printf(" %2d %%\n",py); break; case 4: plc = percent(buf+i); if ( colorModel == MODEL_KCMycm || colorModel == MODEL_KCMycmY || colorModel == MODEL_KCMycmGg || colorModel == MODEL_KCMycmk ) printText("\t%-20s:",lang,"lcyan"); else printText("\t%-20s:",lang,"red"); printf(" %2d %%\n",plc); break; case 5: plm = percent(buf+i); if ( colorModel == MODEL_KCMycm || colorModel == MODEL_KCMycmY || colorModel == MODEL_KCMycmGg || colorModel == MODEL_KCMycmk ) printText("\t%-20s:",lang,"lmagenta"); else printText("\t%-20s:",lang,"blue"); printf(" %2d %%\n",plm); break; case 6: plb = percent(buf+i); if ( colorModel == MODEL_KCMycmY ) printText("\t%-20s:",lang,"dyellow"); else if ( colorModel == MODEL_KCMycmk ) printText("\t%-20s:",lang,"grey"); else if ( colorModel == MODEL_KCMyRBkX ) printText("\t%-20s:",lang,"lblack"); else if ( colorModel == MODEL_KCMyRBX ) printText("\t%-20s:",lang,"gloss"); else if ( colorModel == MODEL_KCMycmGg ) printText("\t%-20s:",lang,"Lblack"); printf(" %2d %%\n",plb); break; case 7: pb = percent(buf+i); if ( colorModel == MODEL_KCMyRBkX ) { printText("\t%-20s:",lang,"gloss"); printf(" %2d %%\n",pb); } else if ( colorModel == MODEL_KCMycmGg ) { printText("\t%-20s:",lang,"llblack"); printf(" %2d %%\n",pb); } break; } colIdx++; i += 2; } } #endif else { i++; } } return infOk; } /*******************************************************************/ /* Function decodePrinterType */ /* */ /* decode the string returned from printer and print the */ /* informations in an human readable way */ /* */ /* Input: unsigned char *buf The String returned from printer */ /* int len Size of string */ /* */ /* Return: - */ /* */ /*******************************************************************/ int decodePrinterType(unsigned char *buf, int len) { char *s = (char*)buf; char *t = (char*)buf; int i; if ( buf ) { for (i=0; i < len; i++) { if ( strncmp(s, "DES:", 4) == 0 || strncmp(s, "MDL:", 4) == 0 ) { s +=4; t = s; while(*t && *t != ';') t++; *t = '\0'; printerName = strdup(s); *t = ';'; return 1; } else { s++; } } } return 0; } /*******************************************************************/ /* Function cmpName */ /* */ /* Find the printer */ /* */ /*******************************************************************/ int cmpName(char *name, char *alias ) { name +=7; while ( *name || *alias ) { if ( *name == ' ' ) { if ( *alias != '_' ) return 1; } else if ( *name != *alias ) return 1; name++; alias++; } return 0; } /*******************************************************************/ /* Function setConfig */ /* */ /* Find the printer data and fill actConfig */ /* */ /*******************************************************************/ int setConfig(char *lang) { int retVal = False; int i = 0; /* if a number was given set name to the proper entry */ if ( actConfig.name && isdigit(actConfig.name[0]) ) { i = atoi(actConfig.name) - 1; if ( i < 0 || i >= defaultConfigDataSize - 1 ) printSyntax(1, lang); actConfig.name = defaultConfigData[i].name; } /* copy all entries to our actConfig structure */ if ( actConfig.name ) { for ( ; i < defaultConfigDataSize; i++ ) { if ( strcasecmp(defaultConfigData[i].name,actConfig.name) == 0 || cmpName(defaultConfigData[i].name, actConfig.name) == 0 ) { memcpy(&actConfig, &defaultConfigData[i], sizeof(actConfig)); retVal = True; break; } } } if ( retVal == False ) { /* set to unknow printer */ i = defaultConfigDataSize - 1; memcpy(&actConfig, &defaultConfigData[i], sizeof(actConfig)); } return retVal; } /*******************************************************************/ /* Function alignHeads */ /* */ /* align head stuff, depend on printer */ /* */ /*******************************************************************/ int alignHeads(char *lang, configData_t actConfig) { int pass; int passes; int command; int choices; int prot; int color; int patternNo; char *function = NULL; char *blackColor[] = { "blackQ", "colorQ" }; int ret; /* print warning message */ printText("%s\n\n", lang, "alignWarning"); /* ask if this is to be continued */ printText("%s",lang, "continue"); if ( ! askYn(lang,"yesorno") ) return 0; if ( actConfig.color_passes ) { printText("\n\n%s\n",lang, "alignBlackOrColor"); color = askForChoice(lang, blackColor, 2); } else { color = 0; } if ( color ) { passes = actConfig.color_passes; function = NULL; prot = actConfig.align; choices = actConfig.color_choices; command = ALIGN_HEAD_C; } else { passes = actConfig.passes; function = actConfig.alignFunction; prot = actConfig.align; choices = actConfig.choices; command = ALIGN_HEAD; } if ( passes > 0 ) { for ( pass = 1; pass <= passes; pass++ ) { /* print message 1 */ if ( pass == 1 ) { printText("\n\n%s\n",lang, "firstHeadAlign"); } else { printText("\n\n%s\n",lang, "nextHeadAlign"); } for(;;) { printText("%s",lang, "continue"); if ( askYn(lang,"yesorno") ) break; } /* and send query for pattern */ ret = callPrg(command, actConfig.dev, actConfig.align, pass, 0, NULL, function); if ( ret == -1 ) { fprintText(stderr,"%s\n",lang,"noOPen"); return 0; } /* ask for pattern # */ printText("\n%s\n",lang, color ? "chooseCPattern" : "choosePattern"); patternNo = askNo(1,choices); /* save the pattern number */ ret = callPrg(command, actConfig.dev, actConfig.align, pass, patternNo, NULL, function); } /* print pattern 1 to n again */ printText("\n\n%s\n",lang, "nextHeadAlign"); for(;;) { printText("%s",lang, "continue"); if ( askYn(lang,"yesorno") ) break; } ret = callPrg(command, actConfig.dev, actConfig.align, actConfig.passes, -1, NULL, function); printText("\n%s",lang, "lastHeadAlign"); } else if ( passes < 0 ) { /* n passes printed all on the same time, choice = 0 -> print pattern */ ret = callPrg(command, actConfig.dev, actConfig.align, passes, 0, NULL, function); if ( ret == -1 ) { fprintText(stderr,"%s\n",lang,"noOPen"); return 0; } patternNo = 0; passes = -passes; for ( pass = 0; pass < passes; pass++ ) { /* ask for pattern # */ printText("\n\n%s", lang, "sampleNo"); printf("%d\n",pass+1); printText("%s", lang, "choosePattern2"); patternNo |= askNo(1,choices) << (8*pass); /* save the pattern number */ } /* choice > 0 -> set correction */ ret = callPrg(command, actConfig.dev, actConfig.align, -passes, patternNo, NULL, function); printText("\n%s",lang, "lastHeadAlign"); } /* ask for saving into printer */ if ( askYn(lang,"saveCancel") ) { /* send save into printer if applicable, choice = 0 and pass > max pass */ ret = callPrg(command,actConfig.dev, actConfig.align, 4 , 0 , NULL, function); } callPrg(RELEASE,actConfig.dev,0,0,0,NULL,NULL); return 1; } /*******************************************************************/ /* Function exchangeInk */ /* */ /* exchange cartridge for the stylus Color 480 / 580 */ /* */ /*******************************************************************/ int exchangeInk(char *lang, configData_t actConfig) { char *choices[] = { "blackQ", "colorQ" }; int command; char *cmdRet = NULL; int ret; if ( actConfig.exchange == False ) { fprintText(stderr,"%s\n", lang, "functionNA"); return 0; } /* ask for confimation */ printText("%s",lang, "askDoExchange"); if ( ! askYn(lang,"yesorno") ) { return 0; } /* choose black or color cartridge if applicable */ if ( actConfig.exchangeSeparate ) { printText("%s\n",lang, "exchangeBlackOrColor"); if ( askForChoice(lang, choices, 2) ) command = EXCHANGE_C; /* choice 1 -> color */ else command = EXCHANGE_B; /* choice 0 -> black */ } else { command = EXCHANGE_ALL; } /* send command 0 goto exhange position */ ret = callPrg( command,actConfig.dev, actConfig.prot, 0, 0, &cmdRet, NULL); if ( ret == -1 ) { fprintText(stderr,"%s\n",lang,"noOPen"); callPrg(RELEASE,actConfig.dev,0,0,0,NULL,NULL); return 0; } /* check result */ if ( cmdRet ) { if ( !(cmdRet[0] == 'x' && cmdRet[1] == 'i' && cmdRet[6] == 'O' && cmdRet[7] == 'K') ) { fprintText(stderr,"%s\n",lang,"exchangeError"); callPrg(RELEASE,actConfig.dev,0,0,0,NULL,NULL); return 0; } } else { /* no communication ? */ fprintText(stderr,"%s\n",lang,"communicationError"); callPrg(RELEASE,actConfig.dev,0,0,0,NULL,NULL); return 0; } /* tell the user that the carrier will go to the desired position */ printText("%s\n",lang,"adviseMoveCartridge"); /* wait for exchange position */ ret = callPrg(EXCHANGE_NEXT, actConfig.dev, actConfig.prot, 1, 0,(char**)&cmdRet, NULL); /* tell the user that the cartridge can be exchanged */ printText("%s\n",lang,"adviseExchangeCartridge"); /* and ask for continue */ printText("%s",lang, "askExDone"); if ( ! askYn(lang,"yesorno") ) { /* end the exchange cartridge sequence */ ret = callPrg(EXCHANGE_NEXT, actConfig.dev, actConfig.prot, 4, 0, NULL, NULL); callPrg(RELEASE,actConfig.dev,0,0,0,NULL,NULL); return 0; } /* tell that the start exchange ink is called and that this will require some time */ printText("%s\n",lang,"adviseFillCartridge"); /* send start exchange ink and wait for ready */ ret = callPrg(EXCHANGE_NEXT, actConfig.dev, actConfig.prot, 3, 0, (char**)&cmdRet, NULL); /* last step send terminate exchange ink */ ret = callPrg(EXCHANGE_NEXT, actConfig.dev, actConfig.prot, 4, 0, NULL, NULL); printText("%s\n",lang,"adviseExchangeDone"); callPrg(RELEASE,actConfig.dev,0,0,0,NULL,NULL); return 1; } mtink-1.0.16/mainSrc/model.c0000644000076400001540000003361610663474742013737 0ustar jjfuse/* file model.c * * List of know printers and flags * device and printer choice * */ #include "model.h" configData_t defaultConfigData[] = { { "Stylus C20SX", 4, PROT_D4, True, False, False, True, PROT_D4, PROT_D4, True, 3, 15, 2, 9, False, NULL }, { "Stylus C20UX", 4, PROT_D4, True, False, False, True, PROT_D4, PROT_D4, True, 3, 15, 2, 9, False, NULL }, { "Stylus C40SX", 4, PROT_D4, True, False, False, True, PROT_D4, PROT_D4, True, 3, 15, 2, 9, False, NULL }, { "Stylus C40UX", 4, PROT_D4, True, False, False, True, PROT_D4, PROT_D4, True, 3, 15, 2, 9, False, NULL }, { "Stylus C42", 4, PROT_D4, True, True, True, True, PROT_D4, PROT_D4, True, -3, 15, 0, 0, False, "/C42.align" }, { "Stylus C42SX", 4, PROT_D4, True, True, True, True, PROT_D4, PROT_D4, True, 3, 15, 2, 9, False, NULL }, { "Stylus C42UX", 4, PROT_D4, True, True, True, True, PROT_D4, PROT_D4, True, 3, 15, 2, 9, False, NULL }, { "Stylus C50", 4, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus C60", 4, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus C62", 4, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus C70", 4, PROT_D4, True, False, False, True, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus C80", 4, PROT_D4, True, False, False, True, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus C82", 4, PROT_D4, True, False, False, True, PROT_D4, PROT_D4, True, 0, 0, 0, 0, False, NULL }, { "Stylus C84", 4, PROT_D4, True, False, False, True, PROT_D4, PROT_D4, True, 0, 0, 0, 0, False, NULL }, { "Stylus C86", 7, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 0, 0, 0, 0, False, NULL }, { "Stylus Color", 4, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Color 300", 4, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Color 400", 4, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Color 440", 4, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 15, 0, 0, False, NULL }, { "Stylus Color 460", 4, PROT_NEW, True, False, False, False, PROT_NEW, PROT_NEW, True, 1, 15, 0, 0, False, NULL }, { "Stylus Color 480", 4, PROT_D4, True, True, True, True, PROT_NEW, PROT_NEW, True, 3, 15, 2, 9, False, NULL }, { "Stylus Color 500", 4, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Color 580", 4, PROT_D4, True, True, True, True, PROT_D4, PROT_D4, True, 3, 15, 2, 9, False, NULL }, { "Stylus Color 600", 4, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Color 640", 4, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 15, 0, 0, False, NULL }, { "Stylus Color 660", 4, PROT_NEW, True, False, False, False, PROT_NEW, PROT_NEW, True, 1, 15, 0, 0, False, NULL }, { "Stylus Color 670", 4, PROT_NEW, True, False, False, False, PROT_NEW, PROT_NEW, True, 3, 15, 0, 0, False, NULL }, { "Stylus Color 680", 4, PROT_NEW, True, False, False, False, PROT_NEW, PROT_NEW, True, 3, 15, 0, 0, False, NULL }, { "Stylus Color 685", 4, PROT_NEW, True, False, False, False, PROT_NEW, PROT_NEW, True, 3, 15, 0, 0, False, NULL }, { "Stylus Color 740", 4, PROT_NEW, True, False, False, False, PROT_NEW, PROT_NEW, True, 3, 15, 0, 0, False, NULL }, { "Stylus Color 760", 4, PROT_NEW, True, False, False, False, PROT_NEW, PROT_NEW, True, 3, 15, 0, 0, False, NULL }, { "Stylus Color 777", 4, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Color 800", 4, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Color 850", 4, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Color 860", 4, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Color 880", 4, PROT_NEW, True, False, False, False, PROT_NEW, PROT_NEW, True, 3, 15, 0, 0, False, NULL }, { "Stylus Color 900", 4, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Color 980", 4, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Color 1160", 4, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 2, 15, 0, 0, False, NULL }, { "Stylus Color 1500", 4, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Color 1520", 4, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Color 3000", 4, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Color Pro", 4, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Color Pro XL", 4, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus CX3200", 4, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, False, 0, 0, 0, 0, False, NULL }, { "Stylus Photo", 6, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Photo 200R", 7, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 0, 0, 0, 0, False, NULL }, { "Stylus Photo 300R", 7, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 0, 0, 0, 0, False, NULL }, { "Stylus Photo 700", 6, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 15, 0, 0, False, NULL }, { "Stylus Photo 720", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Photo 750", 6, PROT_NEW, True, False, False, False, PROT_NEW, PROT_NEW, True, 3, 15, 0, 0, False, NULL }, { "Stylus Photo 780", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Photo 785", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Photo 790", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Photo 810", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Photo 820", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, "Pattern820" }, { "Stylus Photo 830", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, "Pattern820" }, { "Stylus Photo 870", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Photo 875", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Photo 875DC", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Photo 890", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, True, NULL }, { "Stylus Photo 895", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, True, NULL }, { "Stylus Photo 895EX", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, True, NULL }, { "Stylus Photo 900", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Photo 900R", 7, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 0, 0, 0, 0, False, NULL }, { "Stylus Photo 915", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Photo 925", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Photo 950", 7, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Photo 1200", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Photo 1270", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Photo 1280", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Photo 1290", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, True, NULL }, { "Stylus Photo 1290S", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Photo 2000P", 6, PROT_D4, True, False, False, False, PROT_OLD, PROT_OLD, True, 2, 15, 0, 0, False, NULL }, { "Stylus Photo 2100", 7, PROT_D4, True, False, False, False, PROT_OLD, PROT_OLD, True, 2, 15, 0, 0, False, NULL }, { "Stylus Photo EX", 6, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Photo R800", 8, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 0, 0, 0, 0, False, NULL }, { "Stylus Photo R2400", 8, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 0, 0, 0, 0, False, NULL }, { "Stylus Pro 5000", 6, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Pro 5500", 6, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Pro 7000", 6, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Pro 7500", 6, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Pro 7600", 6, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Pro 9000", 6, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Pro 9500", 6, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Pro 9600", 6, PROT_OLD, True, False, False, False, PROT_OLD, PROT_OLD, True, 1, 7, 0, 0, False, NULL }, { "Stylus Pro 10000", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Pro 10000CF", 6, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 3, 15, 0, 0, False, NULL }, { "Stylus Scan 2000", 4, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, False, 3, 15, 0, 0, False, NULL }, { "Stylus Scan 2500", 4, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, False, 3, 15, 0, 0, False, NULL }, { "???", 8, PROT_D4, True, False, False, False, PROT_D4, PROT_D4, True, 0, 0, 0, 0, False, NULL }, }; configData_t defaultConfigData[]; int defaultConfigDataSize = sizeof(defaultConfigData) / sizeof(configData_t); mtink-1.0.16/mainSrc/resource.c0000644000076400001540000033475310664610431014460 0ustar jjfuse#include "version.h" char *fallbackResources[] = { #if 0 /* ! file Mtink.gen, general resources ! these resources must not be changed */ #endif "EpsonUtil*background: #cccccc", "EpsonUtil*foreground: #000000", "EpsonUtil*shadowThickness: 1", "EpsonUtil*XmToggleButton.shadowThickness: 0", "EpsonUtil*highlightThickness: 1", "EpsonUtil*XmSeparator.shadowThickness: 2", "EpsonUtil*XmSeparatorGadget.shadowThickness: 2", "EpsonUtil*XmSeparatorGadget.foreground: black", "EpsonUtil*scaleB.background: black", "EpsonUtil*scaleLb.background: #808080", "EpsonUtil*scaleC.background: cyan", "EpsonUtil*scaleM.background: magenta", "EpsonUtil*scaleY.background: yellow", "EpsonUtil*scaleLc.background: #80ffff", "EpsonUtil*scaleLm.background: #ff80ff", "EpsonUtil*scalePh.background: #ffffff", "EpsonUtil*title_LB.foreground: blue", "EpsonUtil*title_LB.background: white", "EpsonUtil*TopShadowColor: #eeeeee", "EpsonUtil*BottomShadowColor: #111111", "*tooltipBackground: #efefd7", "*tooltipForeground: blue", "*tooltip_label.borderColor: red", "*tooltip_label.borderWidth: 1", "*tooltip_label.alignment: ALIGNMENT_BEGINNING", "*tooltipPost: 1000", "*tooltipDuration: 5000", "*tooltipX: 10", "*tooltipY: 2", #if 0 /* ! for not european language you must include font resources ! into the langauge specific resource file */ #endif "EpsonUtil*title_LB.fontList: *-helvetica-*-r-normal--14-*-*-*-*-*-iso8859-1", "EpsonUtil*fontList: *-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1", "*tooltip_label.fontList: *-helvetica-bold-r-normal--14-*", #if 0 /* ! File Mtink.By, bavarian resources */ #endif "EpsonUtil.By*unknown: kennd koana", "EpsonUtil.By*title_LB.labelString: EPSON GRAFFE "VERSION, "EpsonUtil.By*legend_LB.labelString: Dindnmeng", "EpsonUtil.By*ok_PB.labelString: Aufhean", "EpsonUtil.By.mainWindow.ok_PB.tooltip: Status-Monitor\\nvalassn.", "EpsonUtil.By*pref_PB.labelString: Wos eigschtit is", "EpsonUtil.By*pref_PB.tooltip: - Browser,\\n- Minihuif,\\n- Schnittschtein\\n- Druckaauswahl\\n- Betriebsart", "EpsonUtil.By*about_PB.labelString: ba", "EpsonUtil.By*about_PB.tooltip: Lizenz und\\nde wo mitgmacht ham", "EpsonUtil.By*help_PB.labelString: Huif", "EpsonUtil.By*help_PB.tooltip: Huif in am Browser ozoagn.", "EpsonUtil.By*check_PB.labelString: Dsn\\nprfn", "EpsonUtil.By*check_PB.tooltip: Wenn da Ausdruck Streifn hod,\\nna konnst kontrollian, ob\\nde Dsn dreggad san.", "EpsonUtil.By*clean_PB.labelString: Dsn\\nsaubamacha", "EpsonUtil.By*clean_PB.tooltip: Wenn da Ausdruck Streifn hod\\nund de Dsn zua san,\\nna konnst do a\\nReinigung oschdssn.", "EpsonUtil.By*align_PB.labelString: Kepf\\nausrichtn", "EpsonUtil.By*align_PB.tooltip: Bass auf !\\nDo kannt da da Drucka varecka.", "EpsonUtil.By*reset_PB.labelString: Druckr\\nzrucksetzn", "EpsonUtil.By*reset_PB.tooltip: s'Zrucksetzn vom Drucka\\nght ned bei olle.", "EpsonUtil.By*cartridge_PB.labelString: Patrona\\nwechsln", "EpsonUtil.By*cartridge_PB.tooltip: Drucka ohne Schoida\\nbraucha des.", "EpsonUtil.By*addPrinterTxt: Andere Drucka", "EpsonUtil.By*printerState_LB.labelString: Schtatus: ", "EpsonUtil.By*state_LB.labelString: - ", "EpsonUtil.By*noPrinter*messageString: Dea mog ned!\\nSchaug amoi, obs Fehla gibt:\\n\"Papiafehla\", \"No Dindn da?\",\\n\"Isa iwahabts eigschoid?\".\\n\\nDeng dro, da manche Drucka\\na boor Sekundn nachm Eischoidn\\nno ned `da` san.", "EpsonUtil.By*noPrinter*dialogTitle: Fhla", "EpsonUtil.By*cfg1_LB.labelString: Drucka zum Auswin:", "EpsonUtil.By*cfg2Printer_PB.labelString: Drucka zum Auswin:", "EpsonUtil.By*cfg2Printer_PB.tooltip: Suach da do an Drucka aus.", "EpsonUtil.By*cfg2Device_PB.labelString: Port zum Auswin:", "EpsonUtil.By*cfg2Device_PB.tooltip: Wenn Mtink des bloss\\nseiba aussuacha\\nkannd !", "EpsonUtil.By*next_PB.labelString: Weida", "EpsonUtil.By*next: Weida", "EpsonUtil.By*previous_PB.labelString: Zruck", "EpsonUtil.By*previous: Zruck", "EpsonUtil.By*save: Sichan", "EpsonUtil.By*cancel: Aufhean", "EpsonUtil.By*ok: Ois kloa", "EpsonUtil.By*about:" "EPSON Graffe\\n" "\\n" "Version "VERSION"\\n" "\\n" "Copyright: Jean-Jacques Sarton 2001\\n" "\\n" "Email: jj.sarton@t-online.de\\n" "\\n" "URL: http://xwtools.automatix.de\\n" "\\n" "A Teil vom Code kimmt vom Gimp-Print Projekt\\n" "Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\\n" "\\n" "Lizenz: GPL\\n" "\\n" "A Dangsche an:\\n" "Keith Amidon,\\n" " camalot@picnicpark.org\\n" "Ronny Budzinske\\n" "Nicola Fabiano\\n\\ ivololeribar@yahoo.it\\n" "Tokai Ferenc\\n" "Karlheinz Guenster\\n" "Gene Heskett\\n" " gene_heskett@iolinc.net\\n" "Till Kamppeter\\n" " (leader of the Foomatic/www.linuxprinting.org)\\n" " http://linuxprinting.org/till\\n" "Stefan Kraus\\n" " sjk@weserbergland.de\\n" " http://xwgui.automatix.de\\n" "Sylvain Le-Gall\\n" " sylvain.le-gall@polytechnique.org\\n" "Steven J. Mackenzie\\n" "Raul Morales\\n" " raul.mh@telefonica.net\\n" " http://www.telefonica.net/web/ruten\\n" "Simon Morlat,\\n" "Marc Riese Marc-Riese@gmx.de,\\n" "Hikmet Salar\\n" " Salar@gmx.de,\\n" "Glen Stewart\\n" "Daniel Tamm\\n" " daniel@tamm-tamm.de\\n" " http:/www.tamm-tamm.de\\n http:/www.expedit.org\\n" "Robert Wachinger\\n" " nospam@robert-wachinger.de\\n" "Alberto Zanoni.", "EpsonUtil.By*ctTxt0: Kopfausrichtn:\\n\\nBittsche, leg a laars Blattl Papia inn Drucka ei und mach [Weida].", "EpsonUtil.By*ctTxtC0: Kopfausrichtn:\\n\\nBittsche, leg a laars Blattl Papia inn Drucka ei,wj da den Schwarz oda Farb-Kopf\\nund mach [Weiter] oda brich mit [Abbrechen] ob", "EpsonUtil.By*ctTxt1: Schaug da amoi des grad druckte Musta o, und suach da de bestn Linienpaare aus.\\nLeg des Blattl nommoi in den Drucka, und mach [Weida].", "EpsonUtil.By*ctTxt1: Schaug da des grod druckte Blattl genau o. Suach des Musta des wo an gradastn, senkrechtn Strich gibt. An an jedn Strich is a Zoj vo 1 bis 8 oda 15 higschrim. De Zoin stengan wegam Blootz untaranand. De Zoj klickst o.\\n\\nLeg des Blattl nommoi in den Drucka, und mach [Weida].", "EpsonUtil.By*ctTxtP: Wart bis des Blattl ausgwoafa wead und mach [Weida].", "EpsonUtil.By*ctTxt5: Etz schaug da de Ergebniss wega da Ausrichtung nommoi ganz guad o, \\n\\nEtz konnst no:\\n\\n de Einstellung im Drucka [Sichan] oda\\n [Abbrecha] ohne dasd was g`ndad host.", "EpsonUtil.By*exTxt0: Patrona wechsln:\\n\\nDua amoi :\\n\\n [Weiter] um weidazmacha oda\\n [Abbruch]", "EpsonUtil.By*exTxt00: Patrona wechsln:\\n\\nSuach da Farb oda Schwarz aus unddua :\\n\\n [Weida] zum Weidamacha oda\\n [Abbruch]", "EpsonUtil.By*exTxt1: Patrona wechsln:\\n\\nDa Druckkopf wead etz in de Stellung zum Wechsln gfahrn.", "EpsonUtil.By*exTxt2: Patrona wechsln:\\n\\nDua a neiche Patrona eine und\\n\\n druck [Weida] ", "EpsonUtil.By*exTxt3: Patrona wechsln:\\n\\n De Dindn wead etz nachgfuid.", "EpsonUtil.By*capabilities_LB.labelString: Drucka konfigurian:", "EpsonUtil.By*capabilities_RC*id_TB.labelString: Da Drucka gibt sei Identifikation zruck", "EpsonUtil.By*capabilities_RC*reset_TB.labelString: Es ght koa Software Reset", "EpsonUtil.By*capabilities_RC*state_TB.labelString: Da Drucka schickt Status Informationen", "EpsonUtil.By*capabilities_RC*ex_TB.labelString: Dindnwechsl muasst per Software macha", "EpsonUtil.By*colors_RC*four_TB.labelString: 4 Farbn", "EpsonUtil.By*colors_RC*six_TB.labelString: 6 Farbn", "EpsonUtil.By*head_RC*col_TB.labelString: Farb", "EpsonUtil.By*head_RC*bw_TB.labelString: Schwarz", "EpsonUtil.By*noAccess*dialogTitle: Fehla", "EpsonUtil.By.scrTxt_MW.head_RC.bw_TB.tooltip: Mach des mid da Patrona\\nmit da schwarzn Dindn.", "EpsonUtil.By.scrTxt_MW.head_RC.col_TB.tooltip: Mach des mid da Patrona\\nmit da farbign Dindn.", "EpsonUtil.By*noAccess*messageString: sZuagreifa auf de Device-Dateien ght ned\\n\\nSchaug, da mtink gnua Zuagriffsrechte\\ngriagt.\\nWennstas ned woasst, schau in de Biachen nach.", "EpsonUtil.By*fsb*dialogTitle: Mtink", "EpsonUtil.By*fsb*CancelLabelString: Abbruch", "EpsonUtil.By*fsb*okLabelString: Ois kloa", "EpsonUtil.By*fsb*applyLabelString: Fuita", "EpsonUtil.By*fsb*filterLabelString: Fuita", "EpsonUtil.By*fsb*fileListLabelString: Feils", "EpsonUtil.By*fsb*dirListLabelString: Oadna", "EpsonUtil.By*browser_LB.labelString: Browser aussuacha", "EpsonUtil.By*browser_PB.labelString: \\ ...\\ ", "EpsonUtil.By*browser_PB.tooltip: Browser aussuacha.", "EpsonUtil.By*tooltip_TB.labelString: Minihuif", "EpsonUtil.By*tooltip_TB.tooltip: De lstige Minihuif\\nkonnst do damit\\nei und ausschoitn.", "EpsonUtil.By*autodetect_TB.labelString: Lass a automatische Erkennung zua", "EpsonUtil.By*autodetect_TB.tooltip: Mtink probiat beim Startn, da\\nseiba an Drucka bestimmt.\\nDes ght aba ned bei an jeden Drucka.", "EpsonUtil.By*save_PB.labelString: Sichan", "EpsonUtil.By*save_PB.tooltip: Ois wosd gndat host banehma.", "EpsonUtil.By.ConfigureForm.cancel_PB.tooltip: De ndarungen wegschmeissn,\\nd`Maskrne valassn.", "EpsonUtil.By*cancel_PB.labelString: Abbruch", #if 0 /* ! Drucker Status */ #endif "EpsonUtil.By*error:" "Fehler", "EpsonUtil.By*printing:" "Druckt", "EpsonUtil.By*selfTest:" "Selbst Test", "EpsonUtil.By*busy:" "Beschftigt", "EpsonUtil.By*ok:" "Ois kloa", "EpsonUtil.By*cleaning:" "saubamacha", "EpsonUtil.By*unknown:" "Unbekannt", #if 0 /* ! File Mtink.Da, also default resource ! ! Translated by ! Mogens Jger, Danmark ! mogensjaeger@get2net.dk */ #endif "EpsonUtil.Da*unknown: ukendt", #if 0 /* ! The version number will be set into the c-source file ! */ #endif "EpsonUtil.Da*title_LB.labelString: EPSON UTILITIES "VERSION, "", "EpsonUtil.Da*legend_LB.labelString: Blk mngde", "EpsonUtil.Da*ok_PB.labelString: Afbryd", "EpsonUtil.Da*mainWindow.ok_PB.tooltip: Afslut\\nStatus Monitor.", "EpsonUtil.Da*pref_PB.labelString: Indstillinger", "EpsonUtil.Da*pref_PB.tooltip:" "- Browser,\\n" "- Mini hjlp,\\n" "- Port valg,\\n" "- Printer valg,\\n" "- arbejds mde.", "EpsonUtil.Da*about_PB.labelString: Om", "EpsonUtil.Da*about_PB.tooltip:" "Licens og\\n" "medvirkende.", "EpsonUtil.Da*help_PB.labelString: Hjlp", "EpsonUtil.Da*help_PB.tooltip: Vis hjlp i en browser.", "EpsonUtil.Da*check_PB.labelString: Check\\nDyser", "EpsonUtil.Da*check_PB.tooltip:" "Print et test mnster for at\\n" "checke for blokerede dyser.\\n" "Blokerede dyser giver blanke\\n" "striber p udskrifter.", "EpsonUtil.Da*clean_PB.labelString: Rens\\nDyser", "EpsonUtil.Da*clean_PB.tooltip:" "Hvis dyserne ikke er OK,\\n" "kan du rense dyserne her.", "EpsonUtil.Da*align_PB.labelString: Indret\\nHoved", "EpsonUtil.Da*align_PB.tooltip:" "Advarsel !\\n" "Dette kan beskadige printeren.", "EpsonUtil.Da*reset_PB.labelString: Reset\\nPrinter", "EpsonUtil.Da*reset_PB.tooltip: Dette virker ikke for alle modeller.", "EpsonUtil.Da*cartridge_PB.labelString: Skift\\nPatron", "EpsonUtil.Da*cartridge_PB.tooltip:" "Hvis din printer ikke\\n" "tilbyder nogen switch\\n" "kan du bruge dette.", "EpsonUtil.Da*addPrinterTxt: Anden Printer", "EpsonUtil.Da*printerState_LB.labelString: Tilstand:", "EpsonUtil.Da*state_LB.labelString: - ", "EpsonUtil.Da*noPrinter*messageString:" "Problemer med kommunikationen med printeren,\\n" "check printeren for fejl:\\n" "\"Intet Papir\", \"Ingen blk\", \"printer ikke tndt\"\\n" "\\n" "Bemrk at nogle printere blokerer i nogle f\\n" "sekunder efter de er blevet tndt.", "EpsonUtil.Da*noPrinter*dialogTitle: Fejl", "EpsonUtil.Da*cfg1_LB.labelString: Printer valg:", "EpsonUtil.Da*cfg2Printer_PB.labelString: Printer valg:", "EpsonUtil.Da*cfg2Printer_PB.tooltip:" "En liste af printere vil blive vist.\\n" "Du kan vlge din model der.", "EpsonUtil.Da*cfg2Device_PB.labelString: Port valg:", "EpsonUtil.Da*cfg2Device_PB.tooltip:" "Kunne mtink bare\\n" "selv klare det !", "EpsonUtil.Da*next_PB.labelString: Nste", "EpsonUtil.Da*next: Nste", "EpsonUtil.Da*previous_PB.labelString: Forrige", "EpsonUtil.Da*previous: Forrige", "EpsonUtil.Da*save: Gem", "EpsonUtil.Da*cancel: Afbryd", "EpsonUtil.Da*ok: OK", "EpsonUtil.Da*about:" "EPSON Utilities\\n" "\\n" "Version "VERSION"\\n" "\\n" "Copyright: Jean-Jacques Sarton 2001\\n" "\\nEmail: jj.sarton@t-online.de\\n" "\\n" "URL: http://xwtools.automatix.de\\n" "\\n" "Dele af koden er taget fra gimp-print project\\n" "Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\\n" "\\n" "Licens: GPL\\n" "\\n" "Tak til:\\n" "Keith Amidon\\n" " camalot@picnicpark.org\\n" "Ronny Budzinske\\n" "Nicola Fabiano\\n\\ ivololeribar@yahoo.it\\n" "Tokai Ferenc\\n" "Karlheinz Guenster\\n" "Gene Heskett\\n" " gene_heskett@iolinc.net\\n" "Mogens Jger\\n" " mogensjaeger@get2net.dk\\n" "Till Kamppeter\\n" " (leader Foomatic/www.linuxprinting.org project)\\n" " http://www.linuxprinting.org/till\\n" "Stefan Kraus\\n" " sjk@weserbergland.de\\n" " http://xwgui.automatix.de\\n" "Rainer Krienke\\n" " krienke@uni-koblenz.de\\n" "Sylvain Le-Gall\\n" " sylvain.le-gall@polytechnique.org\\n" "Steven J. Mackenzie\\n" "Raul Morales\\n" " raul.mh@telefonica.net\\n" " http://www.telefonica.net/web/ruten\\n" "Simon Morlat\\n" "Marc Riese\\n" " Marc-Riese@gmx.de\\n" "Hikmet Salar\\n" " Salar@gmx.de\\n" "Glen Stewart\\n" "Daniel Tamm\\n" " daniel@tamm-tamm.de\\n" " http:/www.tamm-tamm.de\\n http:/www.expedit.org\\n\\n", "Robert Wachinger\\n" " nospam@robert-wachinger.de\\n" "Klaus Wnschel\\n" " klaus.wuenschel@knittelsheim-computer.de\\n" " http:/www.knilse.de\\n" "Alberto Zanoni.", "EpsonUtil.Da*ctTxt0:" "Placer et ark papir i printeren for at begynde indretning af hoved processen.\\n" "Tryk [Nste] for at begynde\\n" "eller [Afbryd] for at stoppe.", "EpsonUtil.Da*ctTxtC0:" "Placer et ark papir i printeren for at begynde indretning af hoved processen.\\n" "Vlg Sort eller farve, og\\n" "Tryk [Nste] for at begynde, eller [Afbryd] for at stoppe.", "EpsonUtil.Da*ctTxt1:" "Undersg printet, og vlg det bedste liniepar i det sidste mnster,\\n", "genindst arket i printeren og tryk [Nste] for at fortstte", "EpsonUtil.Da*ctTxt1C:" "Undersg arket, og afgr hvilket mnster der er glattest.\\n" "Dette mnster er det der har mindst 'korn'.\\n" "Hvis du ikke kan finde et glat mnster, skal du vlge nummeret p det\\n" "bedste mnster, og gentage processen\\n" "Indst arket i printeren, og tryk [Nste] for at fortstte.", "EpsonUtil.Da*ctTxtP:" "Vent til arket er kommet ud af printeren, og tryk [Nste] for at fortstte.", "EpsonUtil.Da*ctTxt5:" "Undersg det sidste udskrift meget omhyggeligt, for at vre sikker p at din printer er rettet helt ind.\\n" "\\n" "Du kan nu:\\n" "\\n" " [Gem] resultatet i printeren, eller\\n" " [Afbryd] uden at gemme resultatet", "EpsonUtil.Da*exTxt0:" "Udskiftning patron:\\n" "\\n" "Tryk :\\n" "\\n" " [Nste] \\for at fortstte, eller\\n" " [Afbryd]", "EpsonUtil.Da*exTxt00:" "Udskiftning patron:\\n" "\\n" "Vlg sort eller farve\\n" "Tryk:\\n" "\\n" " [Nste] for at fortstte, eller\\n" " [Afbryd]", "EpsonUtil.Da*exTxt1:" "Udskiftning patron:\\n" "\\n" "Patron vognen bliver frt til positionen for udskiftning.", "EpsonUtil.Da*exTxt2:" "Udskiftning patron:\\n" "\\n" "Inst en ny patron, og:\\n" "\\n" " Tryk [Nste]", "EpsonUtil.Da*exTxt3:" "Udskiftning patron:\\n" "\\n" " proces \"pfyldning blk\".", "EpsonUtil.Da*colors_RC*four_TB.labelString: 4 Farver", "EpsonUtil.Da*colors_RC*six_TB.labelString: 6 Farver", "EpsonUtil.Da*head_RC*col_TB.labelString: Farver", "EpsonUtil.Da*head_RC*bw_TB.labelString: Sort", "EpsonUtil.Da*noAccess*dialogTitle: Fejl", "EpsonUtil.Da*scrTxt_MW.head_RC.bw_TB.tooltip:" "Udfrer pfyldning af\\n" "sort blk i patronen.", "EpsonUtil.Da*scrTxt_MW.head_RC.col_TB.tooltip:" "Udfrer pfyldning af\\n" "farvet blk i patronen.", "EpsonUtil.Da*noAccess*messageString:" "Kan ikke f fat i printeren.\\n" "\\n" "Kontroller at mtink har de forndne\\n" "filrettigheder til enhedens filer.\\n" "\\n" "Se i vrigt dokumentationen.", "EpsonUtil.Da*fsb*dialogTitle: Mtink", "EpsonUtil.Da*fsb*CancelLabelString: Afbryd", "EpsonUtil.Da*fsb*okLabelString: OK", "EpsonUtil.Da*fsb*applyLabelString: Filter", "EpsonUtil.Da*fsb*filterLabelString: Filter", "EpsonUtil.Da*fsb*fileListLabelString: Filer", "EpsonUtil.Da*fsb*dirListLabelString: Biblioteker", "EpsonUtil.Da*browser_LB.labelString: Vlg Browser", "EpsonUtil.Da*browser_PB.labelString: \\ ...\\ ", "EpsonUtil.Da*browser_PB.tooltip: Browser valg", "EpsonUtil.Da*tooltip_TB.labelString: Mini Hjlp", "EpsonUtil.Da*tooltip_TB.tooltip:" "Du kan deaktivere\\n" "mini hjlpen her.", "EpsonUtil.Da*autodetect_TB.labelString: Tillad automatisk genkendelse", "EpsonUtil.Da*autodetect_TB.tooltip:" "Mtink vil prve at finde hvilken\\n" "printermodel der er tilsluttet.\\n" "Dette virker ikke med alle printere.", "EpsonUtil.Da*save_PB.labelString: Gem", "EpsonUtil.Da*save_PB.tooltip: Godkend ndringerne.", "EpsonUtil.Da*ConfigureForm.cancel_PB.tooltip:" "Undlad at tilfje ndringerne,\\n" "forlad konfigurationen.", "EpsonUtil.Da*cancel_PB.labelString: Afbryd", #if 0 /* ! Printer state */ #endif "EpsonUtil.Da*error: Fejl", "EpsonUtil.Da*printing: Printer", "EpsonUtil.Da*selfTest: Selv Test", "EpsonUtil.Da*busy: Optaget", "EpsonUtil.Da*ok: OK", "EpsonUtil.Da*cleaning: Renser", "EpsonUtil.Da*unknown: Ukendt", #if 0 /* ! File Mtink.De, German ressources. ! Datei Mtink.De, Deutsche Ressourcen. ! ! Notiz fr bersetzer. Dies ist eine X-Ressource-Datei. ! Nachstehende Zeichensequenzen haben eine spezielle Bedeutung: ! \ Am Ende einer Zeile (Leerzeichen und Tabulatoren drfen nicht ! vorhanden sein) bedeutet, dass die Ressource in der nchste Zeile ! fortgesetzt werden. ! \n Dies steht fr eine Zeilenschaltung. ! \ (\ und Leerzeichen) Das Leerzeichen ist Teil der Zeichenkette. ! Leerzeichen am Anfang eine Zeichenkette werden normalerweise ! eliminiert. ! \t Steht fr ein Tabulatorzeichen. ! ! am Anfang einer Zeile (Leerzeichen drfen vorgesetzt sein) leitet ! ein Kommentar ein. ! ! Wenn Sie eine bersetzung vornehmen, ist die Sprachkennung innerhalb ! des Bezeichners einzutragen. ! Beispiel: ! Die default Ressource EpsonUtil*unknown ist auf Deutsch zu bersetzen ! ! EpsonUtil*unknown: unknown ! EpsonUtil.De*unknown: Unbekannt ! EpsonUtil ist der Klassennamen, .De muss nach den Klassennamen ! eingefgt werden. Soll von Deutsch nach Franzsisch bersetzt werden ! ist jeweils De durch Fr zu ersetzen. ! ! Die Sprachkennung besteht aus zwei Zeichen, welche aus der Umgebungsvariable ! LANG, LC_ALL und LC_MESSAGE entnommen werden. Der erste Buchstabe wird ! als Kapitlchen umgewandelt. ! ! Der bersichtlichkeit halber habe ich jede Ressource auf mehrere Zeilen ! umgebrochen. Dies sollte vor allem bei mehrzeiligen Texten die bersicht ! bezglich Formatierung verbessern. */ #endif "EpsonUtil.De*unknown: unbekannt", #if 0 /* ! Die Version wird beim Erstellen der C-Datei ersetzt. */ #endif "EpsonUtil.De*title_LB.labelString:" "EPSON UTILITIES "VERSION, "", "EpsonUtil.De*legend_LB.labelString:" "Tintenmenge", "EpsonUtil.De*ok_PB.labelString:" "Ende", "EpsonUtil.De.mainWindow.ok_PB.tooltip:" "Status-Monitor\\n" "verlassen", "EpsonUtil.De*pref_PB.labelString:" "Einstellungen", "EpsonUtil.De*pref_PB.tooltip:" "- Browser,\\n" "- Minihilfe,\\n" "- Schnittstelle\\n" "- Druckerwahl\\n" "- Betriebsart", "EpsonUtil.De*about_PB.labelString: ber", "EpsonUtil.De*about_PB.tooltip:" "Lizenz und\\n" "Mitwirkende", "EpsonUtil.De*help_PB.labelString:" "Hilfe", "EpsonUtil.De*help_PB.tooltip:" "Hilfe in einem Browser anzeigen.", "EpsonUtil.De*check_PB.labelString:" "Dsen\\n" "prfen", "EpsonUtil.De*check_PB.tooltip:" "Wenn der Ausdruck streifig ist,\\n" "knnen Sie kontrollieren ob\\n" "die Dsen verschmutzt sind.", "EpsonUtil.De*clean_PB.labelString:" "Dsen\\n" "reinigen", "EpsonUtil.De*clean_PB.tooltip: " "Wenn der Ausdruck streifig \\n" "und die Dsen verstopft sind,\\n" "knnen Sie hiermit eine\\n" "Reinigung vornehmen.", "EpsonUtil.De*align_PB.labelString:" "Kpfe\\n" "ausrichten", "EpsonUtil.De*align_PB.tooltip:" "Achtung!\\n" "Dies knnte den Drucker beschdigen!", "EpsonUtil.De*reset_PB.labelString:" "Drucker\\n" "zurcksetzen", "EpsonUtil.De*reset_PB.tooltip:" "Das Zurcksetzen des Druckers\\n" "funktioniert nicht bei allen\\n" "Modellen.", "EpsonUtil.De*cartridge_PB.labelString:" "Patrone\\n" "wechseln", "EpsonUtil.De*cartridge_PB.tooltip:" "Drucker ohne Schalter\\n" "bentigen das.", "EpsonUtil.De*addPrinterTxt:" "Andere Drucker", "EpsonUtil.De*printerState_LB.labelString:" "Status: ", "EpsonUtil.De*state_LB.labelString:" "- ", "EpsonUtil.De*noPrinter*messageString:" "Kommunikationsproblem!\\n" "Drucker bezglich dieser Fehlern prfen:\\n" "\"Papierfehler\", \"Tintenstand\",\\n" "\"Drucker ist nicht eingeschaltet\".\\n" "\\n" "Beachten Sie, dass manche Drucker fr\\n" "einige Sekunden nach dem Einschalten\\n" "nicht `ansprechbar' sind.", "EpsonUtil.De*noPrinter*dialogTitle:" "Fehler", "EpsonUtil.De*cfg1_LB.labelString:" "Drucker Auswahl:", "EpsonUtil.De*cfg2Printer_PB.labelString:" "Drucker Auswahl:", "EpsonUtil.De*cfg2Printer_PB.tooltip:" "Sie knnen in dieser Liste mit Druckern Ihr Modell auswhlen.", "EpsonUtil.De*cfg2Device_PB.labelString:" "Port Auswahl:", "EpsonUtil.De*cfg2Device_PB.tooltip:" "Wenn das Mtink nur\\n" "selbst bestimmen\\n" "knnte!", "EpsonUtil.De*next_PB.labelString:" "Weiter", "EpsonUtil.De*next:" "Weiter", "EpsonUtil.De*previous_PB.labelString:" "Zurck", "EpsonUtil.De*previous:" "Zurck", "EpsonUtil.De*save:" "Sichern", "EpsonUtil.De*cancel:" "Abbrechen", "EpsonUtil.De*ok:" "OK", "EpsonUtil.De*about:" "EPSON Utilities\\n" "\\n" "Version "VERSION"\\n" "\\n" "Copyright: Jean-Jacques Sarton 2001\\n" "\\n" "Email: jj.sarton@t-online.de\\n" "\\n" "URL: http://xwtools.automatix.de\\n" "\\n" "Teile des Codes stammen vom Gimp-Print Projekt\\n" "Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\\n" "\\n" "Lizenz: GPL\\n" "\\nDank an:\\n" "Keith Amidon\\n" " camalot@picnicpark.org\\n" "Ronny Budzinske\\n" "Nicola Fabiano\\n\\ ivololeribar@yahoo.it\\n" "Tokai Ferenc\\n" "Karlheinz Guenster\\n" "Gene Heskett\\n" " gene_heskett@iolinc.net\\n" "Mogens Jger\\n" " mogensjaeger@get2net.dk\\n" "Till Kamppeter\\n" " (leader Foomatic/www.linuxprinting.org project)\\n" " http://www.linuxprinting.org/till\\n" "Stefan Kraus\\n" " sjk@weserbergland.de\\n" " http://xwgui.automatix.de\\n" "Rainer Krienke\\n" " krienke@uni-koblenz.de\\n" "Sylvain Le-Gall\\n" " sylvain.le-gall@polytechnique.org\\n" "Steven J. Mackenzie\\n" "Raul Morales\\n" " raul.mh@telefonica.net\\n" " http://www.telefonica.net/web/ruten\\n" "Simon Morlat\\n" "Marc Riese\\n" " Marc-Riese@gmx.de\\n" "Hikmet Salar\\n" " Salar@gmx.de\\n" "Glen Stewart\\n" "Daniel Tamm\\n" " daniel@tamm-tamm.de\\n" " http:/www.tamm-tamm.de\\n http:/www.expedit.org\\n" "Robert Wachinger\\n" " nospam@robert-wachinger.de\\n" "Klaus Wnschel\\n" " klaus.wuenschel@knittelsheim-computer.de\\n" " http:/www.knilse.de\\n" "Alberto Zanoni.", "EpsonUtil.De*ctTxt0:" "Kopfausrichtung:\\n" "\\n" "Bitte ein leeres Blatt Papier in den Drucker einlegen und [Weiter] bettigen.", "EpsonUtil.De*ctTxtC0:" "Kopfausrichtung:\\n" "\\n" "Bitte ein leeres Blatt Papier in den Drucker einlegen, whlen Sie den schwarzen " "oder den farbigen Druckkopf\\nund dann [Weiter] um fortzufahren oder [Abbrechen].", "EpsonUtil.De*ctTxt1:" "Bitte begutachten Sie das so eben gedruckte Muster, und whlen Sie die besten " "Linienpaare aus.\\nLegen Sie das Blatt erneut in den Drucker, und bettigen Sie [Weiter].", "EpsonUtil.De*ctTxt1:" "Schauen Sie sich das bedruckte Blatt genau an. Finden Sie das Muster heraus, " "das den geradesten, senkrechten Strich ergibt. Jedem Strich ist eine Zahl von " "1 bis 8, beziehungsweise 15, zugeordnet. Die Zahlen stehen aus Platzgrnden " "untereinander. Diese Zahl klicken Sie an.\\n" "\\n" "Legen Sie das Blatt erneut in den Drucker, und whlen Sie [Weiter].", "EpsonUtil.De*ctTxt1_1:" "Muster #1\\n" "Schauen Sie sich das bedruckte Blatt genau an. Finden Sie das Muster heraus, " "das den geradesten, senkrechten Strich ergibt. Jedem Strich ist eine Zahl von " "1 bis 8, beziehungsweise 15, zugeordnet. Die Zahlen stehen aus Platzgrnden " "untereinander. Diese Zahl klicken Sie an.\\n" "\\n" "und whlen Sie [Weiter].", "EpsonUtil.De*ctTxt1_2:" "Muster #2\\n" "Schauen Sie sich das bedruckte Blatt genau an. Finden Sie das Muster heraus, " "das den geradesten, senkrechten Strich ergibt. Jedem Strich ist eine Zahl von " "1 bis 8, beziehungsweise 15, zugeordnet. Die Zahlen stehen aus Platzgrnden " "untereinander. Diese Zahl klicken Sie an.\\n" "\\n" "und whlen Sie [Weiter].", "EpsonUtil.De*ctTxt1_3:" "Muster #3\\n" "Schauen Sie sich das bedruckte Blatt genau an. Finden Sie das Muster heraus, " "das den geradesten, senkrechten Strich ergibt. Jedem Strich ist eine Zahl von " "1 bis 8, beziehungsweise 15, zugeordnet. Die Zahlen stehen aus Platzgrnden " "untereinander. Diese Zahl klicken Sie an.\\n" "\\n" "und whlen Sie [Weiter].", "EpsonUtil.De*ctTxtP:" "Warten Sie bis das Blatt ausgeworfen wird und bettigen Sie [Weiter].", "EpsonUtil.De*ctTxt5:" "Bitte begutachten Sie die Ergebnisse bezglich der Ausrichtung sehr " "sorgfltig.\\n\\nSie knnen nun:\\n\\n die Einstellung im Drucker [Sichern] " "oder\\n" " [Abbrechen], ohne die Einstellungen zu bernehmen.", "EpsonUtil.De*exTxt0:" "Patrone Wechseln:\\n" "\\n" "Bettigen Sie :\\n" "\\n" " [Weiter] um fortzufahren oder\\n" " [Abbruch].", "EpsonUtil.De*exTxt00:" "Patrone Wechseln:\\n" "\\n" "Whlen Sie bitte Farbe oder Schwarz und bettigen Sie :\\n" "\\n" " [Weiter] um fortzufahren oder\\n" " [Abbruch].", "EpsonUtil.De*exTxt1:" "Patrone wechseln:\\n" "\\n" "Wagen wird in die Wechselstellung gefahren.", "EpsonUtil.De*exTxt2:" "Patrone Wechseln:\\n" "\\n" "Neue Patrone einsetzen und:\\n" "\\n" " [Weiter] bettigen.", "EpsonUtil.De*exTxt3:" "Patrone Wechseln:\\n" "\\n" " Tinte wird nachgefllt.", "EpsonUtil.De*capabilities_LB.labelString:" "Drucker Konfiguration:", "EpsonUtil.De*capabilities_RC*id_TB.labelString:" "Drucker gibt Identifikation zurck.", "EpsonUtil.De*capabilities_RC*reset_TB.labelString:" "Software-Reset kann durchgefhrt werden.", "EpsonUtil.De*capabilities_RC*state_TB.labelString:" "Drucker liefert Status Informationen.", "EpsonUtil.De*capabilities_RC*ex_TB.labelString:" "Tintenwechsel per Software ist notwendig.", "EpsonUtil.De*colors_RC*four_TB.labelString:" "4 Farben", "EpsonUtil.De*colors_RC*six_TB.labelString:" "6 Farben", "EpsonUtil.De*head_RC*col_TB.labelString:" "Farbe", "EpsonUtil.De*head_RC*bw_TB.labelString:" "Schwarz", "EpsonUtil.De*noAccess*dialogTitle:" "Fehler", "EpsonUtil.De.scrTxt_MW.head_RC.bw_TB.tooltip:" "Operation mit der schwarzen\\n" "Tintenpatrone ausfhren.", "EpsonUtil.De.scrTxt_MW.head_RC.col_TB.tooltip:" "Operation mit der farbigen\\n" "Tintenpatrone ausfhren.", "EpsonUtil.De*noAccess*messageString:" "Keine Zugriffsberechtigung auf die\\n" "Schnittstellendateien.\\n" "Stellen Sie sicher, dass mtink gengend Zugriffsrechte\\n" "erhlt.\\n" "\\nMit Debian basierte Distribution wie Ubuntu\\n" "muss der Anwender Mitglied der Gruppe lp sein.\\n" "Schauen Sie dafr in der Dokumentation nach.", "EpsonUtil.De*fsb*dialogTitle:" "Mtink", "EpsonUtil.De*fsb*CancelLabelString:" "Abbruch", "EpsonUtil.De*fsb*okLabelString:" "OK", "EpsonUtil.De*fsb*applyLabelString:" "Filter", "EpsonUtil.De*fsb*filterLabelString:" "Filter", "EpsonUtil.De*fsb*fileListLabelString:" "Dateien", "EpsonUtil.De*fsb*dirListLabelString:" "Ordner", "EpsonUtil.De*browser_LB.labelString:" "Browser whlen", #if 0 /* ! Achtung ein ' ' folgt das '\' Zeichen. */ #endif "EpsonUtil.De*browser_PB.labelString:" " ...\\ ", "EpsonUtil.De*browser_PB.tooltip:" "Browser auswhlen.", "EpsonUtil.De*tooltip_TB.labelString:" "Minihilfe", "EpsonUtil.De*tooltip_TB.tooltip:" "Diese lstige Minihilfe\\n" "knnen Sie hiermit\\n" "ein und ausschalten.", "EpsonUtil.De*autodetect_TB.labelString:" "Automatische Erkennung erlauben.", "EpsonUtil.De*autodetect_TB.tooltip:" "Mtink wird beim Start versuchen, den\\n" "Drucker selbst zu bestimmen.\\n" "Dies funktioniert nicht bei allen Druckern.", "EpsonUtil.De*save_PB.labelString: Sichern", "EpsonUtil.De*save_PB.tooltip: nderungen bernehmen.", "EpsonUtil.De.ConfigureForm.cancel_PB.tooltip:" "nderungen nicht bernehmen,\\n" "Maske verlassen.", "EpsonUtil.De*cancel_PB.labelString:" "Abbruch", #if 0 /* ! Drucker Status */ #endif "EpsonUtil.De*error:" "Fehler", "EpsonUtil.De*printing:" "Druckt", "EpsonUtil.De*selfTest:" "Selbst Test", "EpsonUtil.De*busy:" "Beschftigt", "EpsonUtil.De*ok:" "OK", "EpsonUtil.De*cleaning:" "Reinigung", "EpsonUtil.De*unknown:" "Unbekannt", #if 0 /* ! File Mtink.En, also default resource ! ! Note for translator. This is a X-Resource file. The following ! character sequences have a special meaning: ! \ at the end of a line (no space allowed after the \): ! resource continue at the next line. ! \n This is a linefeed. ! \ (\ and space) the space character is part of the resource ! string. Normally space at the begin and end of a resource are ! elinminated. ! \t This is for a tabulator character. ! ! If you translate this you have to put the language designation ! withinh the key. ! Example: ! The resource default EpsonUtil*unknown must be translated into german ! ! EpsonUtil*unknown: unknown ! EpsonUtil.De*unknown: Unbekannt ! EpsonUtil is the program class name, .De must be inserted after this ! ! The language designator is composed for the first two character ! which are normally stored into the environment variable LANG and/or ! LC_ALL, LC_MESSAGE. The first letter is to be written with upercase. */ #endif "EpsonUtil*unknown: unknown", #if 0 /* ! The version number will be set into the c-source file ! */ #endif "EpsonUtil*title_LB.labelString: EPSON UTILITIES "VERSION, "", "EpsonUtil*legend_LB.labelString: Ink quantity", "EpsonUtil*ok_PB.labelString: Exit", "EpsonUtil*mainWindow.ok_PB.tooltip: Abandon the\\nStatus Monitor.", "EpsonUtil*pref_PB.labelString: Preference", "EpsonUtil*pref_PB.tooltip:" "- Browser,\\n" "- Mini help,\\n" "- Port choice\\n" "- Printer choice\\n" "- working mode", "EpsonUtil*about_PB.labelString: About", "EpsonUtil*about_PB.tooltip:" "Licence and\\n" "cooperators", "EpsonUtil*help_PB.labelString: Help", "EpsonUtil*help_PB.tooltip: Display help within a browser.", "EpsonUtil*check_PB.labelString: Check\\nNozzle", "EpsonUtil*check_PB.tooltip:" "Print a test pattern to check\\n" "for blocked nozzles.\\n" "Blocked nozzles cause blank\\n" "strips on print outs.", "EpsonUtil*clean_PB.labelString: Clean\\nNozzle", "EpsonUtil*clean_PB.tooltip:" "If the nozzle are not OK,\\n" "you can clean the nozzle\\n" "herewith", "EpsonUtil*align_PB.labelString: Align\\nHead", "EpsonUtil*align_PB.tooltip:" "Warning !\\n" "This may damage the printer.", "EpsonUtil*reset_PB.labelString: Reset\\nPrinter", "EpsonUtil*reset_PB.tooltip: This doesn't work for all models.", "EpsonUtil*cartridge_PB.labelString: Change\\nCartridge", "EpsonUtil*cartridge_PB.tooltip:" "If your printer don't\\n" "offer any switch\\n" "You need this.", "EpsonUtil*addPrinterTxt: Other Printer", "EpsonUtil*printerState_LB.labelString: State: ", "EpsonUtil*state_LB.labelString: - ", "EpsonUtil*noPrinter*messageString:" "Problems with the printer communication,\\n" "please check the printer for errors:\\n" "\"Out of Paper\", \"No Ink\", \"printer not powered\"\\n" "\\n" "Note that some printer block for a few seconds after\\n" "powering on.", "EpsonUtil*noPrinter*dialogTitle: Error", "EpsonUtil*cfg1_LB.labelString: Printer Choice:", "EpsonUtil*cfg2Printer_PB.labelString: Printer Choice:", "EpsonUtil*cfg2Printer_PB.tooltip:" "A list of printer will be offered.\\n" "You can choose your model there.", "EpsonUtil*cfg2Device_PB.labelString: Port Choice:", "EpsonUtil*cfg2Device_PB.tooltip:" "It will be nice\\n" "if mtink where able\\nto perform this !", "EpsonUtil*next_PB.labelString: Next", "EpsonUtil*next: Next", "EpsonUtil*previous_PB.labelString: Previous", "EpsonUtil*previous: Previous", "EpsonUtil*save: Save", "EpsonUtil*cancel: Cancel", "EpsonUtil*ok: OK", "EpsonUtil*about:" "EPSON Utilities\\n" "\\n" "Version "VERSION"\\n" "\\n" "Copyright: Jean-Jacques Sarton 2001\\n" "\\nEmail: jj.sarton@t-online.de\\n" "\\n" "URL: http://xwtools.automatix.de\\n" "\\n" "Portions of code was taken from the gimp-print project\\n" "Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\\n" "\\n" "Licence: GPL\\n" "\\n" "Thanks to:\\n" "Keith Amidon\\n" " camalot@picnicpark.org\\n" "Ronny Budzinske\\n" "Nicola Fabiano\\n\\ ivololeribar@yahoo.it\\n" "Tokai Ferenc\\n" "Karlheinz Guenster\\n" "Gene Heskett\\n" " gene_heskett@iolinc.net\\n" "Mogens Jger\\n" " mogensjaeger@get2net.dk\\n" "Till Kamppeter\\n" " (leader Foomatic/www.linuxprinting.org project)\\n" " http://www.linuxprinting.org/till\\n" "Stefan Kraus\\n" " sjk@weserbergland.de\\n" " http://xwgui.automatix.de\\n" "Rainer Krienke\\n" " krienke@uni-koblenz.de\\n" "Sylvain Le-Gall\\n" " sylvain.le-gall@polytechnique.org\\n" "Steven J. Mackenzie\\n" "Raul Morales\\n" " raul.mh@telefonica.net\\n" " http://www.telefonica.net/web/ruten\\n" "Simon Morlat\\n" "Marc Riese\\n" " Marc-Riese@gmx.de\\n" "Hikmet Salar\\n" " Salar@gmx.de\\n" "Glen Stewart\\n" "Daniel Tamm\\n" " daniel@tamm-tamm.de\\n" " http:/www.tamm-tamm.de\\n http:/www.expedit.org\\n" "Robert Wachinger\\n" " nospam@robert-wachinger.de\\n" "Klaus Wnschel\\n" " klaus.wuenschel@knittelsheim-computer.de\\n" " http:/www.knilse.de\\n" "Alberto Zanoni.", "EpsonUtil*ctTxt0:" "Please place a sheet of paper in your printer to begin the head alignment procedure.\\n" "Press [Next] to begin\\n" "or [Cancel] to abort.", "EpsonUtil*ctTxtC0:" "Please place a sheet of paper in your printer to begin the head alignment procedure.\\n" "Choose the Black or Color Head and\\n" "Press [Next] to begin or [Cancel] to abort.", "EpsonUtil*ctTxt1:" "Please inspect the print, and choose the best pair of lines the last printed pattern, then reinsert the page in the input tray\\nand press [Next] to continue.", "EpsonUtil*ctTxt1_1:" "Please inspect the print, and choose the best pair of lines the pattern #1,\\nthen press [Next] to continue.", "EpsonUtil*ctTxt1_2:" "Please inspect the print, and choose the best pair of lines the pattern #2,\\nthen press [Next] to continue.", "EpsonUtil*ctTxt1_3:" "Please inspect the print, and choose the best pair of lines the pattern #3,\\nthen press [Next] to continue.", "EpsonUtil*ctTxt1C:" "Inspect the alignment sheet, and determine which pattern is the smoothest.\\n" "This pattern will appear to have the least ``grain''.\\n" "If you cannot find a smooth pattern, please select the number for the\\n" "best pattern, and repeat the procedure.\\n" "Insert the sheet into the printer and press [Next] to continue.", "EpsonUtil*ctTxtP:" "Please wait until sheet is ejected from the printer and press [Next] to continue.", "EpsonUtil*ctTxt5:" "Please inspect the final output very carefully to ensure that your printer is in proper alignment.\\n" "\\n" "You may now:\\n" "\\n" " [Save] the results in the printer or\\n" " [Cancel] without saving the results", "EpsonUtil*exTxt0:" "Cartridge exchange:\\n" "\\n" "Please press :\\n" "\\n" " [Next] \\to continue or\\n" " [Cancel]", "EpsonUtil*exTxt00:" "Cartridge exchange:\\n" "\\n" "Please choose black or colour\\n" "Press:\\n" "\\n" " [Next] in order to continue or\\n" " [Cancel]", "EpsonUtil*exTxt1:" "Cartridge exchange:\\n" "\\n" "The head asembly will be moved to the exchange position.", "EpsonUtil*exTxt2:" "Cartridge exchange:\\n" "\\n" "Insert a new cartridge and:\\n" "\\n" " Press [Next]", "EpsonUtil*exTxt3:" "Cartridge exchange:\\n" "\\n" " process \"fill ink\".", "EpsonUtil*colors_RC*four_TB.labelString: 4 Colors", "EpsonUtil*colors_RC*six_TB.labelString: 6 colors", "EpsonUtil*head_RC*col_TB.labelString: Color", "EpsonUtil*head_RC*bw_TB.labelString: Black", "EpsonUtil*noAccess*dialogTitle: Error", "EpsonUtil*scrTxt_MW.head_RC.bw_TB.tooltip:" "Apply the order\\n" "on the cartridge\\n" "with the black ink.", "EpsonUtil*scrTxt_MW.head_RC.col_TB.tooltip:" "Apply the order\\n" "on the cartridge\\n" "with the colored ink.", "EpsonUtil*noAccess*messageString:" "No access to printer device file.\\n" "\\n" "Please make sure that mtink has enough\\n" "right for accessing the device files.\\n" "\\n" "On Debian Based System as Ubuntu you must\\n" "be a member of the group lp.\\n" "Refer also to the documentation.", "EpsonUtil*fsb*dialogTitle: Mtink", "EpsonUtil*fsb*CancelLabelString: Cancel", "EpsonUtil*fsb*okLabelString: OK", "EpsonUtil*fsb*applyLabelString: Filter", "EpsonUtil*fsb*filterLabelString: Filter", "EpsonUtil*fsb*fileListLabelString: Files", "EpsonUtil*fsb*dirListLabelString: Directories", "EpsonUtil*browser_LB.labelString: Choose Browser", "EpsonUtil*browser_PB.labelString: \\ ...\\ ", "EpsonUtil*browser_PB.tooltip: Browser Selection", "EpsonUtil*tooltip_TB.labelString: Mini Help", "EpsonUtil*tooltip_TB.tooltip:" "You can disable\\n" "the mini help\\n" "herewith.", "EpsonUtil*autodetect_TB.labelString: Allow automatic detection", "EpsonUtil*autodetect_TB.tooltip:" "Mtink will, At Start, try to\\n" "find out the attached printermodel.\\n" "This don't work with all printers.", "EpsonUtil*save_PB.labelString: Save", "EpsonUtil*save_PB.tooltip: Adopt the changes.", "EpsonUtil*ConfigureForm.cancel_PB.tooltip:" "Don't apply the changes,\\n" "quit the configuration.", "EpsonUtil*cancel_PB.labelString: Cancel", #if 0 /* ! Printer state */ #endif "EpsonUtil*error: Error", "EpsonUtil*printing: Printing", "EpsonUtil*selfTest: Self Test", "EpsonUtil*busy: Busy", "EpsonUtil*ok: OK", "EpsonUtil*cleaning: Cleaning", "EpsonUtil*unknown: Unknown", #if 0 /* ! File Mtink.Fr, french resources. ! Fichier Mtink.Fr, resource franaises. ! ! Notes pout les traducteurs. Ce fichier correspond au format des resources ! pour X11. ! ! Les squences suivantes ont une signification spciale: ! \ en fin de ligne (les espace et tabulateurs ne sont pas admis) ! signifie que le texte continue sur la ligne suivante. ! \n correspond a un retour chariot. ! \ (\ et espace). L'espace fait parti du texte. ! Les espace sont normalement limins en dbut des textes. ! \t correspond a un tabulateur. ! ! en debut de ligne (les espaces en dbut de ligne sont admissibles) ! dnote un commentaire. ! ! Si vous traduis un fichier resource vers une autre langue, il est neccessaire ! de modifier le mot clef en fonction de la langue cible. ! Example: ! La resource EpsonUtil*unknown est a traduire en franais: ! ! EpsonUtil*unknown: unknown ! EpsonUtil.Fr*unknown: inconnus ! EpsonUtil est le nom de classe du programmme, .Fr doit etre inserr a ! aprs le nom de classe. Si la traduction s'effectue du franais vers ! l'italien, .Fr est remplacer par .It. ! ! Le code pour l'identification de la langue est extrait des variables ! d'environement LANG, LC_ALL und LC_MESSAGE. Le premier charactre est ! transform en lettre capitale. ! ! J'ai, dans le but d'une meilleure lisibilit, rpartit les textes ! sur plusieurs lignes, ce qui devrait rendre le formatage plus clair. */ #endif "EpsonUtil.Fr*unknown:" "inconnus", #if 0 /* ! Le numro de version est corrig lors de la gnration des fichiers C. */ #endif "EpsonUtil.Fr*title_LB.labelString:" "UTILITAIRES EPSON "VERSION, "", "EpsonUtil.Fr*legend_LB.labelString:" "Quantit d'encre", "EpsonUtil.Fr*ok_PB.labelString:" "Quitter", "EpsonUtil.Fr.mainWindow.ok_PB.tooltip:" "Au revoir.", "EpsonUtil.Fr*pref_PB.labelString" " Prfrence", "EpsonUtil.Fr*pref_PB.tooltip:" "- Browser,\\n" "- Bulles d'aide,\\n" "- Fichier de connexion\\n" "- Imprimante\\n" "- Mode de travail", "EpsonUtil.Fr*about_PB.labelString:" "A propos", "EpsonUtil.Fr*about_PB.tooltip:" "Licence et\\n", "cooperateurs", "EpsonUtil.Fr*help_PB.labelString:" "Aide", "EpsonUtil.Fr*help_PB.tooltip:" "Afficher l'aide avec un browser.", "EpsonUtil.Fr*check_PB.labelString:" "Test\\n" "buses", "EpsonUtil.Fr*check_PB.tooltip:" "Ici, vous pouvez controller\\n" "l'tat des buses.", "EpsonUtil.Fr*clean_PB.labelString:" "Nettoyage\\n" "buses", "EpsonUtil.Fr*clean_PB.tooltip:" "Le nettoyages des buses\\n" "permet l'limination\\n" "des \"rayures\".", "EpsonUtil.Fr*align_PB.labelString:" "Alignement\\n", "EpsonUtil.Fr*align_PB.tooltip:" "Attention !\\n" "Ceci peu rendre l'imprimante inutilisable.", "EpsonUtil.Fr*reset_PB.labelString:" "RAZ\\n" "imprimante", "EpsonUtil.Fr*reset_PB.tooltip:" "La remise a zro\\n" "ne fonctionne pas\\n" "pour toutes les imprimantes.", "EpsonUtil.Fr*cartridge_PB.labelString:" "Changement\\n" "cartouche", "EpsonUtil.Fr*cartridge_PB.tooltip:" "Pour les imprimantes\\n" "sans commutateurs.", "EpsonUtil.Fr*addPrinterTxt:" "Autre Imprimante", "EpsonUtil.Fr*printerState_LB.labelString:" "Status: ", "EpsonUtil.Fr*state_LB.labelString:", "- ", "EpsonUtil.Fr*noPrinter*messageString:" "Probleme de communication\\n" "Controllez l'imprimante pour:\\n" "\"manque de papier\", \"encre epuise\"\\n" "\"imprimante hors service\"\\n" "\\n" "Notez que certaines imprimantes ne\\n" "sont accessibles que plusieurs secondes aprs\\n" "la mise sous tension.", "EpsonUtil.Fr*noPrinter*dialogTitle:" "Erreur", "EpsonUtil.Fr*cfg1_LB.labelString:" "Choix de l'imprimante:", "EpsonUtil.Fr*cfg2Printer_PB.labelString:" "Choix de l'imprimante:", "EpsonUtil.Fr*cfg2Printer_PB.tooltip:" "Une liste d'imprimante est propose.", "EpsonUtil.Fr*cfg2Device_PB.labelString:" "Choix du port:", "EpsonUtil.Fr*cfg2Device_PB.tooltip:", "Malheureusement, la dtection\\nn'est pas automatique !", "EpsonUtil.Fr*next_PB.labelString:" "Suivant", "EpsonUtil.Fr*next:" "Suivant", "EpsonUtil.Fr*previous_PB.labelString:" "prcdent", "EpsonUtil.Fr*previous:" "prcdent", "EpsonUtil.Fr*save:" "Enregistrer", "EpsonUtil.Fr*cancel:" "Annuler", "EpsonUtil.Fr*ok:" "OK", "EpsonUtil.Fr*about:" "EPSON Utilities\\n" "\\n" "Version "VERSION"\\n\\nCopyright: Jean-Jacques Sarton 2001\\n" "\\n" "Email: jj.sarton@t-online.de\\n" "\\n" "URL: http://xwtools.automatix.de\\n" "\\n" "Des portions de code ont ete tires du projet gimp-print\\n" "Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\\n" "\\n" "Licence: GPL\\n" "\\n" "Mes remerciement a:\\n" "Keith Amidon\\n" " camalot@picnicpark.org\\n" "Ronny Budzinske\\n" "Nicola Fabiano\\n\\ ivololeribar@yahoo.it\\n" "Tokai Ferenc\\n" "Karlheinz Guenster\\n" "Gene Heskett\\n" " gene_heskett@iolinc.net\\n" "Mogens Jger\\n" " mogensjaeger@get2net.dk\\n" "Till Kamppeter\\n" " (leader Foomatic/www.linuxprinting.org project)\\n" " http://www.linuxprinting.org/till\\n" "Stefan Kraus\\n" " sjk@weserbergland.de\\n" " http://xwgui.automatix.de\\n" "Rainer Krienke\\n" " krienke@uni-koblenz.de\\n" "Sylvain Le-Gall\\n" " sylvain.le-gall@polytechnique.org\\n" "Steven J. Mackenzie\\n" "Raul Morales\\n" " raul.mh@telefonica.net\\n" " http://www.telefonica.net/web/ruten\\n" "Simon Morlat\\n" "Marc Riese\\n" " Marc-Riese@gmx.de\\n" "Hikmet Salar\\n" " Salar@gmx.de\\n" "Glen Stewart\\n" "Daniel Tamm\\n" " daniel@tamm-tamm.de\\n" " http:/www.tamm-tamm.de\\n http:/www.expedit.org\\n" "Robert Wachinger\\n" " nospam@robert-wachinger.de\\n" "Klaus Wnschel\\n" " klaus.wuenschel@knittelsheim-computer.de\\n" " http:/www.knilse.de\\n" "Alberto Zanoni.", "EpsonUtil.Fr*ctTxt0:" "Alignement du chariot:\\n" "\\n" "Placez une feuille vierge dans l'imprimante et activez [Suivant]pour continuer ou [Annuler]", "EpsonUtil.Fr*ctTxtC0:" "Alignement du chariot:\\n" "\\n" "Placez une feuille vierge dans l'imprimante,choisissez la tte " "(noir ou couleur) et activez [Suivant] pour continuer ou [Annuler]", "EpsonUtil.Fr*ctTxt1:" "Inspectez limpression et choisissez la meilleure paire de lignes.\\n" "Remettez la feuille dans limprimante et activez [Suivant] pour continuer.", "EpsonUtil.Fr*ctTxt1_1:" "Echantillon #1\\n" "Inspectez limpression et choisissez la meilleure paire de lignes.\\n" "Activez [Suivant] pour continuer.", "EpsonUtil.Fr*ctTxt1_2:" "Echantillon #2\\n" "Inspectez limpression et choisissez la meilleure paire de lignes.\\n" "Activez [Suivant] pour continuer.", "EpsonUtil.Fr*ctTxt1_3:" "Echantillon #3\\n" "Inspectez limpression et choisissez la meilleure paire de lignes.\\n" "Activez [Suivant] pour continuer.", "EpsonUtil.Fr*ctTxt1C:" "Inspectez la feuille d'alignment, et determinez l'echantillon le plus \"lisse\".\\n" "Cet echantillon est celui qui semble etre le moins \"granulleux\".\\n" "Si vous ne trouvez pas d'echantillon \"lisse\" choisissez le meilleur echantillon\\n" "et rptez la procedure d'ajustage.\\n" "Activez [Suivant] pour continuer.", "EpsonUtil.Fr*ctTxtP:" "Attendez jusqu la fin de limpression et activez [Suivant] pour continuer.", "EpsonUtil.Fr*ctTxt5:" "Inspectez le resultat final afin de dterminer si l'alignment est correct.\\n" "\\n" "Vous pouvez:\\n" "\\n" " [Enregistrer] les rsultats dans l'imprimante ou\\n" " [Annuler] l'enregistrement dans l'imprimante", "EpsonUtil.Fr*exTxt0:" "Remplacement des cartouches:\\n" "\\nActivez :\\n" "\\n" " [Suivant] pour continuer ou\\n" " [Annuler]", "EpsonUtil.Fr*exTxt00:" "Remplacement des cartouches:\\n" "\\n" "Choisissez noir ou couleur\\n" "Activez :\\n" "\\n" " [Suivant] pour continuer ou\\n" " [Annuler]", "EpsonUtil.Fr*exTxt1:" "Remplacement des cartouches:\\n" "\\n" "Le chariot est ammene a la position de remplacement.", "EpsonUtil.Fr*exTxt2:" "Remplacement des cartouches:\\n" "\\n" "remplacez la cartouche et:\\n" "\\n" " activez [Suivant]", "EpsonUtil.Fr*exTxt3:" "Remplacement des cartouches:\\n" "\\n" " le remplissage est en cours.", "EpsonUtil.Fr*colors_RC*four_TB.labelString:" "4 couleurs", "EpsonUtil.Fr*colors_RC*six_TB.labelString:" "6 Couleurs", "EpsonUtil.Fr*head_RC*col_TB.labelString:" "Couleur", "EpsonUtil.Fr*head_RC*bw_TB.labelString:" "Noir", "EpsonUtil.Fr*noAccess*dialogTitle:" "Erreur", "EpsonUtil.Fr.scrTxt_MW.head_RC.bw_TB.tooltip:" "L'operation sur la\\n" "cartouche contenant\\n" "l'encre noire.", "EpsonUtil.Fr.scrTxt_MW.head_RC.col_TB.tooltip:" "L'operation sur la\\n" "cartouche contenant\\n" "les encres colores.", "EpsonUtil.Fr*noAccess*messageString:" "Pas de droit d'accs aux\\n" "fichiers /dev/...\\n" "\\nPour les distribitions base sur Debian\\n" "l'utilisateur doit tre membre du groupe lp.\\n" "\\nRemdiez a ceci. Consulter la documentation si\\n" "necessaire.", "EpsonUtil.Fr*fsb*dialogTitle: Mtink", "EpsonUtil.Fr*fsb*CancelLabelString:" "Annuler", "EpsonUtil.Fr*fsb*okLabelString:" "OK", "EpsonUtil.Fr*fsb*applyLabelString:" "Filtre", "EpsonUtil.Fr*fsb*filterLabelString:" "Filtre", "EpsonUtil.Fr*fsb*fileListLabelString:" "Fichiers", "EpsonUtil.Fr*fsb*dirListLabelString:" "Repertoires", "EpsonUtil.Fr*browser_LB.labelString:" "Choisissez le Browser", #if 0 /* ! Attention un espace se trouve en fin de ligne */ #endif "EpsonUtil.Fr*browser_PB.labelString:" " ...\\ ", "EpsonUtil.Fr*browser_PB.tooltip:" "Choix du browser.", "EpsonUtil.Fr*tooltip_TB.labelString:" "Bulles d'aide", "EpsonUtil.Fr*tooltip_TB.tooltip:" "Bulles d'aide\\n" "hors / en service", "EpsonUtil.Fr*autodetect_TB.labelString:" "Autoriser la detection automatique", "EpsonUtil.Fr*autodetect_TB.tooltip:" "La dtection automatique de\\n" "l'imprimante ne fonctionne\\n" "pas sur tout les modles.\\n" "Il est ncessaire, pour certaine\\n" "imprimantes de ne pas autoriser\\n" "cette dtection", "EpsonUtil.Fr*save_PB.labelString:" "Enregistrer", "EpsonUtil.Fr*save_PB.tooltip:" "Prise en compte des modifications.", "EpsonUtil.Fr.ConfigureForm.cancel_PB.tooltip:" "Quiiter le mmasque sans\\n" "prise en compte des modifications.", "EpsonUtil.Fr*cancel_PB.labelString:" "Annuler", #if 0 /* ! Printer state */ #endif "EpsonUtil.Fr*error:" "Erreur", "EpsonUtil.Fr*printing:" "Impression", "EpsonUtil.Fr*selfTest:" "Test", "EpsonUtil.Fr*busy:" "Occup", "EpsonUtil.Fr*ok:" "OK", "EpsonUtil.Fr*cleaning:" "Nettoyage", "EpsonUtil.Fr*unknown:" "Inconnu", #if 0 /* ! Mtink.Hu fjl, hungarian resource ! ! Megjegyzs fordtknak. Ez egy X-Resource fjl. A kvetkez ! a kvetkez karaktersorozatnak egy specilis jelentse van: ! \ egy sor vgn (nincs szkoz a \ jel utn): ! forrsfolytats a kvetkez sornl. ! \n Ez egy soremels. ! \ (\ s szkz) a szkz karakter engedlyezi a forrs ! sort. Rendes krlmnyek kztt a szkz a forrs elejn s ! vgn ki van zrva. ! \t Ez egy tabultorkarakterhez van. ! ! Ha ezt fordtja, a megfelel nyelvi megjellst kell alkalmaznia a ! kulcsbl. ! Pldul: ! A forrs alaprtelmezst EpsonUtil*unknown nmetre kell lefordtani: ! ! EpsonUtil*unknown: unknown ! EpsonUtil.De*unknown: Unbekannt ! EpsonUtil a programosztly neve, .De-t kell ezutn beszrni. ! ! A nyelvi megjells els kt karaktert rendes krlmnyek kztt ! a LANG s/vagy! LC_ALL, LC_MESSAGE krnyezeti vltozk tartalmazzk. ! Az els bett a fentiek szerint kell rni. */ #endif "EpsonUtil.Hu*unknown: ismeretlen", #if 0 /* ! A verzi szma a c-forrs fjlban van belltva! */ #endif "EpsonUtil.Hu*title_LB.labelString: EPSON Segdprogramok "VERSION, "", "EpsonUtil.Hu*legend_LB.labelString: Tintamennyisg", "EpsonUtil.Hu*ok_PB.labelString: Kilps", "EpsonUtil.Hu*mainWindow.ok_PB.tooltip: Az llapotmonitor\\nelhagysa.", "EpsonUtil.Hu*pref_PB.labelString: Belltsok", "EpsonUtil.Hu*pref_PB.tooltip:" "- Bngsz,\\n" "- Mini segtsg,\\n" "- Port vlaszts\\n" "- Nyomtat kivlasztsa\\n" "- Mkdsi md", "EpsonUtil.Hu*about_PB.labelString: Ksztk", "EpsonUtil.Hu*about_PB.tooltip:" "Engedly s\\n" "kzremkdk", "EpsonUtil.Hu*help_PB.labelString: Segtsg", "EpsonUtil.Hu*help_PB.tooltip: Segtsg megjelentse egy bngszben.", "EpsonUtil.Hu*check_PB.labelString: Fvka\\nellenrzs", "EpsonUtil.Hu*check_PB.tooltip:" "Egy tesztminta nyomtatsa\\n" "fvkaduguls ellenrzshez.\\n" "Eldugult fvkk res svokat\\n" "okoznak a nyomtatson.", "EpsonUtil.Hu*clean_PB.labelString: Fvka\\ntisztts", "EpsonUtil.Hu*clean_PB.tooltip:" "Ha a fvka nem OK,\\n" "meg tudod tiszttani a fvkt\\n" "ezzel", "EpsonUtil.Hu*align_PB.labelString: Fej\\npozicionls", "EpsonUtil.Hu*align_PB.tooltip:" "Figyelem!\\n" "Ez megronglhatja a nyomtatt.", "EpsonUtil.Hu*reset_PB.labelString: Nyomtat\\nreset", "EpsonUtil.Hu*reset_PB.tooltip: Ez nem mkdik minden modellel.", "EpsonUtil.Hu*cartridge_PB.labelString: Tintapatron\\ncsere", "EpsonUtil.Hu*cartridge_PB.tooltip:" "Ha a nyomtat nem\\n" "ad kapcsolatot,\\n" "erre lehet szksged.", "EpsonUtil.Hu*addPrinterTxt: Ms nyomtat", "EpsonUtil.Hu*printerState_LB.labelString: llapot:", "EpsonUtil.Hu*state_LB.labelString: -", "EpsonUtil.Hu*noPrinter*messageString:" "Problma a nyomtatkommunikcival,\\n" "A hibk miatt krem ellenrizze a nyomtatt:\\n" "\"Kifogyott a papr\", \"Nincs tinta\", \"A nyomtat nincs bekapcsolva\"\\n" "\\n" "Figyelmeztets, hogy nmely nyomtat lell nhny msodpercre \\n" "a bekapcsols utn.", "EpsonUtil.Hu*noPrinter*dialogTitle: Hiba", "EpsonUtil.Hu*cfg1_LB.labelString: Nyomtat kivlasztsa:", "EpsonUtil.Hu*cfg2Printer_PB.labelString: Nyomtat kivlasztsa:", "EpsonUtil.Hu*cfg2Printer_PB.tooltip:" "A nyomtatk listjt ajnlom.\\n" "Ott kivlaszthatja a modelljt.", "EpsonUtil.Hu*cfg2Device_PB.labelString: Port vlaszts:", "EpsonUtil.Hu*cfg2Device_PB.tooltip:" "A legjobb,\\n" "ha az mtink\\nhajtja vgre!", "EpsonUtil.Hu*next_PB.labelString: Kvetkez", "EpsonUtil.Hu*next: Kvetkez", "EpsonUtil.Hu*previous_PB.labelString: Elz", "EpsonUtil.Hu*previous: Elz", "EpsonUtil.Hu*save: Ments", "EpsonUtil.Hu*cancel: Visszavon", "EpsonUtil.Hu*ok: OK", "EpsonUtil.Hu*about:" "EPSON Segdprogramok\\n" "\\n" "Version "VERSION"\\n" "\\n" "Szerzi jog: Jean-Jacques Sarton 2001\\n" "\\nEmail: jj.sarton@t-online.de\\n" "\\n" "URL: http://xwtools.automatix.de\\n" "\\n" "Kdkioszts a gimp-print projectbl kszlt\\n" "Szerzi jog 2000 Robert Krawitz (rlk@alum.mit.edu)\\n" "\\n" "Engedly: GPL\\n" "\\n" "Ksznet:\\n" "Keith Amidon,\\n" " camalot@picnicpark.org\\n" "Ronny Budzinske\\n" "Nicola Fabiano\\n\\ ivololeribar@yahoo.it\\n" "Tokai Ferenc\\n" "Karlheinz Guenster\\n" "Gene Heskett,\\n" " gene_heskett@iolinc.net\\n" "Till Kamppeter\\n" " (vezet Foomatic/www.linuxprinting.org project)\\n" " http://www.linuxprinting.org/till\\n" "Stefan Kraus\\n" " sjk@weserbergland.de\\n" " http://xwgui.automatix.de\\n" "Rainer Krienke\\n" " krienke@uni-koblenz.de\\n" "Sylvain Le-Gall\\n" " sylvain.le-gall@polytechnique.org\\n" "Steven J. Mackenzie\\n" "Raul Morales\\n" " raul.mh@telefonica.net\\n" " http://www.telefonica.net/web/ruten\\n" "Simon Morlat\\n" "Marc Riese Marc-Riese@gmx.de\\n" "Hikmet Salar\\n" " Salar@gmx.de\\n" "Glen Stewart\\n" "Daniel Tamm\\n" " daniel@tamm-tamm.de\\n" " http:/www.tamm-tamm.de\\n http:/www.expedit.org\\n" "Robert Wachinger\\n" " nospam@robert-wachinger.de\\n" "Klaus Wnschel\\n" " klaus.wuenschel@knittelsheim-computer.de\\n" " http:/www.knilse.de\\n" "Alberto Zanoni.", "EpsonUtil.Hu*ctTxt0:" "Krem helyezzen egy lapot a nyomtatba a fejigazts folyamata eltt.\\n" "Nyomjon [Kvetkez]-t a folytatshoz\\n" "vagy [Visszavon]-t a kilpshez.", "EpsonUtil*ctTxtC0:" "Krem helyezzen egy lapot a nyomtatba a fejigazts folyamata eltt.\\n" "Vlasszon a Fekete vagy Sznes fej kztt s\\n" "Nyomjon [Kvetkez]-t a kezdshez vagy [Visszavon]-t a kilpshez.", "EpsonUtil.Hu*ctTxt1:" "Krem vizsglja meg a nyomtatst, s vlassza az utols nyomtatsi minta legjobb sorprjt, azutn helyezzen paprt az adagolba\\ns nyomja meg a [Kvetkez]-t a folytatshoz.", "EpsonUtil.Hu*ctTxt1C:" "Vizsglja meg az igaztsi lapot, s dntse el melyik minta a legegyenletesebb.\\n" "Ez a minta fog a legkisebb szemcszetnek ltszani.\\n" "Ha nen tudja kivlasztani az egyenletes mintt, krjk vlassza a legjobb\\n" "minta szmt, s ismtelje meg az eljrst.\\n" "Helyezzen lapot a nyomtatba s nyomja meg a [Kvetkez]-t a folytatshoz.", "EpsonUtil.Hu*ctTxtP:" "Krem vrja meg, amg a nyomtat lapot dob s nyomja meg a [Kvekez]-t a folytatshoz.", "EpsonUtil.Hu*ctTxt5:" "Krem vizsglja meg az utols nyomatot nagyon figyelmesen, hogy a nyomtat helyesen legyen belltva.\\n" "\\n" "Most lehet:\\n" "\\n" " az eredmnyek [Ments]-e a nyomtatba vagy\\n" " [Visszavon]-s az eredmnyek mentse nlkl", "EpsonUtil.Hu*exTxt0:" "Tintapatron csere:\\n" "\\n" "Krem nyomjon :\\n" "\\n" " [Kvetkez]-t \\a folytatshoz, vagy\\n" " [Visszavon]-t", "EpsonUtil.Hu*exTxt00:" "Tintapatron csere:\\n" "\\n" "Krem vlasszon: fekete vagy sznes\\n" "Nyomjon:\\n" "\\n" " [Kvetkez]-t a folytatshoz, vagy\\n" " [Visszavon]-t", "EpsonUtil.Hu*exTxt1:" "Tintapatron csere:\\n" "\\n" "A fejilleszt a cserepozciba fog mozogni.", "EpsonUtil.Hu*exTxt2:" "Tintapatron csere:\\n" "\\n" "Illessze be az j patront s:\\n" "\\n" " nyomjon [Kvetkez]-t", "EpsonUtil.Hu*exTxt3:" "Tintapatron csere:\\n" "\\n" " \"tintafeltlts\" folyamat.", "EpsonUtil.Hu*colors_RC*four_TB.labelString: 4 szn", "EpsonUtil.Hu*colors_RC*six_TB.labelString: 6 szn", "EpsonUtil.Hu*head_RC*col_TB.labelString: sznes", "EpsonUtil.Hu*head_RC*bw_TB.labelString: fekete", "EpsonUtil.Hu*noAccess*dialogTitle: Hiba", "EpsonUtil.Hu*scrTxt_MW.head_RC.bw_TB.tooltip:" "Alkalmazza a parancsot\\n" "a tintapatronra\\n" "fekete tintval.", "EpsonUtil.Hu*scrTxt_MW.head_RC.col_TB.tooltip:" "Alkalmazza a parancsot\\n" "a tintapatronra\\n" "sznes tintval.", "EpsonUtil.Hu*noAccess*messageString:" "Nincs hozzfrs a nyomtat eszkzfjlhoz.\\n" "\\n" "Krem gyzdjn meg arrl, hogy az mtink elegend\\n" "jogosultsggal rendelkezik az eszkzfjl elrshez.\\n" "\\n" "Hivatkozs szintn a dokumentcira.", "EpsonUtil.Hu*fsb*dialogTitle: Mtink", "EpsonUtil.Hu*fsb*CancelLabelString: Visszavon", "EpsonUtil.Hu*fsb*okLabelString: OK", "EpsonUtil.Hu*fsb*applyLabelString: Szr", "EpsonUtil.Hu*fsb*filterLabelString: Szr", "EpsonUtil.Hu*fsb*fileListLabelString: Fjlok", "EpsonUtil.Hu*fsb*dirListLabelString: Knyvtrak", "EpsonUtil.Hu*browser_LB.labelString: Vlasszon bngszt", "EpsonUtil.Hu*browser_PB.labelString: \\ ..." "", "EpsonUtil.Hu*browser_PB.tooltip: Bngsz kivlasztsa", "EpsonUtil.Hu*tooltip_TB.labelString: Mini segtsg", "EpsonUtil.Hu*tooltip_TB.tooltip:" "Letilthatja\\n" "a mini segtsget\\n" "itt.", "EpsonUtil.Hu*autodetect_TB.labelString: Automatikus felismers engedlyezse.", "EpsonUtil.Hu*autodetect_TB.tooltip:" "Mtink az indtsnl fog prblkozni\\n" "a csatlakoztatott nyomtatmodell megkeressvel.\\n" "Ez nem mkdik minden nyomtatmodellel.", "EpsonUtil.Hu*save_PB.labelString: Ments", "EpsonUtil.Hu*save_PB.tooltip: A vltoztatsok elfogadsa.", "EpsonUtil.Hu*ConfigureForm.cancel_PB.tooltip:" "Ne alkalmazza a vltoztatsokat,\\n" "a kongfigurci elhagysa.", "EpsonUtil.Hu*cancel_PB.labelString: Viszavon", #if 0 /* ! Printer state */ #endif "EpsonUtil.Hu*error: Hiba", "EpsonUtil.Hu*printing: Nyomtats", "EpsonUtil.Hu*selfTest: nteszt", "EpsonUtil.Hu*busy: Foglalt", "EpsonUtil.Hu*ok: OK", "EpsonUtil.Hu*cleaning: Tisztts", "EpsonUtil.Hu*unknown: Ismeretlen", #if 0 /* ! File Mtink.It, italian resources */ #endif "EpsonUtil.It*unknown: sconosciuto", "EpsonUtil.It*title_LB.labelString: STRUMENTI EPSON "VERSION, "EpsonUtil.It*legend_LB.labelString: Livello inchiostro", "EpsonUtil.It*ok_PB.labelString: Esci", "EpsonUtil.It.mainWindow.ok_PB.tooltip: Ciao.", "EpsonUtil.It*pref_PB.labelString: Preferenze", "EpsonUtil.It*pref_PB.tooltip: - Browser,\\n- Mini aiuto ,\\n- Scelta porta\\n- Scelta stampante\\n- Modalit operativa", "EpsonUtil.It*about_PB.labelString: Informazioni", "EpsonUtil.It*about_PB.tooltip: Licenza e\\ncooperatori", "EpsonUtil.It*help_PB.labelString: Aiuto", "EpsonUtil.It*help_PB.tooltip: Mostra l'aiuto con un browser.", "EpsonUtil.It*check_PB.labelString: Controllo\\nUgelli", "EpsonUtil.It*check_PB.tooltip: Se la stampa presenta striscie\\npuoi controllare qui\\n se gli ugelli siano sporchi.", "EpsonUtil.It*clean_PB.labelString: Pulizia\\nugelli", "EpsonUtil.It*clean_PB.tooltip: Se gli ugelli non sono a posto,\\npuoi pulirli qui.", "EpsonUtil.It*align_PB.labelString: Allineamento\\nTestina", "EpsonUtil.It*align_PB.tooltip: Attenzione !\\nQuesto pu danneggiare la stampante.", "EpsonUtil.It*reset_PB.labelString: Ripristina\\nStampante", "EpsonUtil.It*reset_PB.tooltip: Il ripristino\\nnon funziona\\ncon tutte le stampanti.", "EpsonUtil.It*cartridge_PB.labelString: Cambio\\ncartuccia", "EpsonUtil.It*cartridge_PB.tooltip: Se la tua stampante non\\nha alcun pulsante\\nhai bisogno di questo.", "EpsonUtil.It*addPrinterTxt: Altra stampante", "EpsonUtil.It*printerState_LB.labelString: Stato: ", "EpsonUtil.It*state_LB.labelString: - ", "EpsonUtil.It*noPrinter*messageString: Problemi con la comunicazioneverso la stampante,\\ncontrolla se vi siano errori:\\n\"Carta terminata\", \"Non c' inchiostro\", \"Stampante non accesa\"\\n\\nNota che alcune stampanti si bloccano per alcuni secondi dopo\\nesser state accese.", "EpsonUtil.It*noPrinter*dialogTitle: Errore", "EpsonUtil.It*cfg1_LB.labelString: Scelta stampante:", "EpsonUtil.It*cfg2Printer_PB.labelString: Scelta stampante:", "EpsonUtil.It*cfg2Printer_PB.tooltip: Verr proposta una lista di stampanti.\\nPuoi scegliere qui il tuo modello.", "EpsonUtil.It*cfg2Device_PB.labelString: Scelta port:", "EpsonUtil.It*cfg2Device_PB.tooltip: Sarebbe bello\\nse mtink fosse in\\ngrado di farlo !", "EpsonUtil.It*next_PB.labelString: Avanti", "EpsonUtil.It*next: Avanti", "EpsonUtil.It*previous_PB.labelString: Indietro", "EpsonUtil.It*previous: Indietro", "EpsonUtil.It*save: Salva", "EpsonUtil.It*cancel: Annulla", "EpsonUtil.It*ok: OK", "EpsonUtil.It*about:" "Strumenti EPSON\\n" "\\n" "Versione "VERSION"\\n" "\\n" "Copyright: Jean-Jacques Sarton 2001\\n" "\\n" "Email: jj.sarton@t-online.de\\n" "\\n" "URL: http://xwtools.automatix.de\\n" "\\n" "Parti del codice sono state prese dal progetto gimp-print\\n" "Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\\n" "\\n" "Licenza: GPL\\n" "Un grazie a:\\n" "Keith Amidon\\n" " camalot@picnicpark.org\\n" "Ronny Budzinske\\n" "Nicola Fabiano\\n\\ ivololeribar@yahoo.it\\n" "Tokai Ferenc\\n" "Karlheinz Guenster\\n" "Gene Heskett\\n" " gene_heskett@iolinc.net\\n" "Mogens Jger\\n" " mogensjaeger@get2net.dk\\n" "Till Kamppeter\\n" " (leader Foomatic/www.linuxprinting.org project)\\n" " http://www.linuxprinting.org/till\\n" "Stefan Kraus\\n" " sjk@weserbergland.de\\n" " http://xwgui.automatix.de\\n" "Rainer Krienke\\n" " krienke@uni-koblenz.de\\n" "Sylvain Le-Gall\\n" " sylvain.le-gall@polytechnique.org\\n" "Steven J. Mackenzie\\n" "Raul Morales\\n" " raul.mh@telefonica.net\\n" " http://www.telefonica.net/web/ruten\\n" "Simon Morlat\\n" "Marc Riese\\n" " Marc-Riese@gmx.de\\n" "Hikmet Salar\\n" " Salar@gmx.de\\n" "Glen Stewart\\n" "Daniel Tamm\\n" " daniel@tamm-tamm.de\\n" " http:/www.tamm-tamm.de\\n http:/www.expedit.org\\n" "Robert Wachinger\\n" " nospam@robert-wachinger.de\\n" "Klaus Wnschel\\n" " klaus.wuenschel@knittelsheim-computer.de\\n" " http:/www.knilse.de\\n" "Alberto Zanoni.", "EpsonUtil.It*ctTxt0: Inserisci un foglio nella stampante per iniziare la procedura di allineamento testine.\\nPremi [Avanti] per iniziare\\no [Annulla] per terminare.", "EpsonUtil.It*ctTxtC0: Inserisci un foglio nella stampante per iniziare la procedura di allineamento testine.\\nScegli la cartuccia Nero o Colore e\\npremi [Avanti] per iniziare\\no [Annulla] per terminare.", "EpsonUtil.It*ctTxt1: Controlla la stampa, e scegli la miglior coppia di linee, poi rimetti la pagina nel vassoio della carta\\ne premi [Avanti] per continuare.", "EpsonUtil*ctTxt1_1: campione #1\\nAnalizza la stampa, e scegli la miglior coppia di linee dell'ultima stampa effettuata.", "EpsonUtil*ctTxt1_2: campione #2\\nAnalizza la stampa, e scegli la miglior coppia di linee dell'ultima stampa effettuata.", "EpsonUtil*ctTxt1_3: campione #3\\nAnalizza la stampa, e scegli la miglior coppia di linee dell'ultima stampa effettuata.", "EpsonUtil.It*ctTxt1C: Controlla l'allineamento del foglio, e vedi quale pattern sia meglio definito.\\nE' il pattern che ha grana pi fine.\\nSe non trovassi un pattern a grana fine, scegli il numero del\\npattern migliore, e ripeti la procedura.\\nInserisci il foglio nella stampante e premi [Avanti] per continuare.", "EpsonUtil.It*ctTxtP: Attendi che il foglio sia uscito dalla stampante e premi [Avanti] per continuare.", "EpsonUtil.It*ctTxt5: Analizza il risultato finale molto attentamente, per assicurarti che la stampante sia allineata in modo corretto.\\n\\nPuoi ora :\\n\\n [Salvare] i risultati nella stampante o\\n [Annullare] senza salvare i risultati", "EpsonUtil.It*exTxt0: Cambio cartuccia:\\n\\nPremi :\\n\\n [Avanti] per continuare o\\n [Annulla]", "EpsonUtil.It*exTxt00: Cambio cartuccia:\\n\\nScegli nero o colore\\nPremi :\\n\\n [Avanti] per continuare o\\n [Annulla]", "EpsonUtil.It*exTxt1: Cambio cartuccia:\\n\\nLa testina verr portata in posizione per la sistituzione.", "EpsonUtil.It*exTxt2: Cambio cartuccia:\\n\\nInserisci una nuova cartuccia e:\\n\\n Premi [Avanti]", "EpsonUtil.It*exTxt3: Cambio cartuccia:\\n\\n processo \"riempimento inchistro\".", "EpsonUtil.It*colors_RC*four_TB.labelString: 4 Colori", "EpsonUtil.It*colors_RC*six_TB.labelString: 6 colori", "EpsonUtil.It*head_RC*col_TB.labelString: Colore", "EpsonUtil.It*head_RC*bw_TB.labelString: Nero", "EpsonUtil.It*noAccess*dialogTitle: Errore", "EpsonUtil.It.scrTxt_MW.head_RC.bw_TB.tooltip: Operazione\\nsulla cartuccia\\ncon l'inchiostro nero.", "EpsonUtil.It.scrTxt_MW.head_RC.col_TB.tooltip: Operazione\\nsulla cartuccia\\ncon l'inchiostro colorato.", "EpsonUtil.It*noAccess*messageString: Nessun accesso al file\\ndel dispositivo stampante\\n\\nAssicurati che mtink abbia i\\ndiritti per accedere ai file dispositivo.\\n\\nFai anche riferimento alla documentazione.", "EpsonUtil.It*fsb*dialogTitle: Mtink", "EpsonUtil.It*fsb*CancelLabelString: Annulla", "EpsonUtil.It*fsb*okLabelString: OK", "EpsonUtil.It*fsb*applyLabelString: Filtro", "EpsonUtil.It*fsb*filterLabelString: Filtro", "EpsonUtil.It*fsb*fileListLabelString: File", "EpsonUtil.It*fsb*dirListLabelString: Cartelle", "EpsonUtil.It*browser_LB.labelString: Scegli il browser", "EpsonUtil.It*browser_PB.labelString: \\ ...\\ ", "EpsonUtil.It*browser_PB.tooltip: Scelta del browser.", "EpsonUtil.It*tooltip_TB.labelString: Mini aiuto", "EpsonUtil.It*tooltip_TB.tooltip: Puoi disabilitare\\nil mini aiuto\\nqui.", "EpsonUtil.It*autodetect_TB.labelString: Permetti il rilevamento automatico.", "EpsonUtil.It*autodetect_TB.tooltip: Mtink, all'avvio, cercher\\ndi trovare il modello della stamante collegata.\\nQuesto non funziona con tutte le stampanti.", "EpsonUtil.It*save_PB.labelString: Salva", "EpsonUtil.It*save_PB.tooltip: Salva i cambiamenti.", "EpsonUtil.It*ConfigureForm.cancel_PB.tooltip: Non applicare i cambiamenti,\\nesci dalla configurazione.", "EpsonUtil.It*cancel_PB.labelString: Annulla", #if 0 /* ! Printer state */ #endif "EpsonUtil.It*error:" "Errore", "EpsonUtil.It*printing:" "Stampa in corso", "EpsonUtil.It*selfTest:" "Auto test", "EpsonUtil.It*busy:" "Occupato", "EpsonUtil.It*ok:" "OK", "EpsonUtil.It*cleaning:" "Pulizia in corso", "EpsonUtil.It*unknown:" "Sconosciuto", #if 0 /* ! File Mtink.Pf, Pflzer ressources ! Datei Mtink.Pf, Plzer Ressourcen. ! ! Notiz fr bersetzer. Dies ist eine X-Ressource-Datei. ! Nachstehende Zeichensequenzen haben eine spezielle Bedeutung: ! \ Am Ende einer Zeile (Leerzeichen und Tabulatoren drfen nicht ! vorhanden sein) bedeutet, dass die Ressource in der nchste Zeile ! fortgesetzt werden. ! \n Dies steht fr eine Zeilenschaltung. ! \ (\ und Leerzeichen) Das Leerzeichen ist Teil der Zeichenkette. ! Leerzeichen am Anfang eine Zeichenkette werden normalerweise ! eliminiert. ! \t Steht fr ein Tabulatorzeichen. ! ! am Anfang einer Zeile (Leerzeichen drfen vorgesetzt sein) leitet ! ein Kommentar ein. ! ! Wenn Sie eine bersetzung vornehmen, ist die Sprachkennung innerhalb ! des Bezeichners einzutragen. ! Beispiel: ! Die default Ressource EpsonUtil*unknown ist auf Deutsch zu bersetzen ! ! EpsonUtil*unknown: unknown ! EpsonUtil.De*unknown: Unbekannt ! EpsonUtil ist der Klassennamen, .De muss nach den Klassennamen ! eingefgt werden. Soll von Deutsch nach Franzsisch bersetzt werden ! ist jeweils De durch Fr zu ersetzen. ! ! Die Sprachkennung besteht aus zwei Zeichen, welche aus der Umgebungsvariable ! LANG, LC_ALL und LC_MESSAGE entnommen werden. Der erste Buchstabe wird ! als Kapitlchen umgewandelt. ! ! Der bersichtlichkeit halber habe ich jede Ressource auf mehrere Zeilen ! umgebrochen. Dies sollte vor allem bei mehrzeiligen Texten die bersicht ! bezglich Formatierung verbessern. */ #endif "EpsonUtil.Pf*unknown: unbekannt", #if 0 /* ! Die Version wird beim Erstellen der C-Datei ersetzt. */ #endif "EpsonUtil.Pf*title_LB.labelString:" "EPSON UTILITIES "VERSION, "", "EpsonUtil.Pf*legend_LB.labelString:" "Dindemeng ", "EpsonUtil.Pf*ok_PB.labelString:" "Ferdich", "EpsonUtil.Pf.mainWindow.ok_PB.tooltip:" "Status-Monitor\\n" "verlosse ", "EpsonUtil.Pf*pref_PB.labelString:" "Eistellunge ", "EpsonUtil.Pf*pref_PB.tooltip:" "- Agucker", "- Klnni Hilf,\\n" "- Druggeranschluss\\n" "- Drugger raussuche\\n" "- Betriebsart", "EpsonUtil.Pf*about_PB.labelString: Iwwer", "EpsonUtil.Pf*about_PB.tooltip:" "Lizenz und\\n" "Die hnn mitgemacht", "EpsonUtil.Pf*help_PB.labelString:" "Hilf ", "EpsonUtil.Pf*help_PB.tooltip:" "Hilf in m Agucker azeiche", "EpsonUtil.Pf*check_PB.labelString:" "Dise \\n" "prife ", "EpsonUtil.Pf*check_PB.tooltip:" "Wann de Ausdruck strfe hot,\\n" "kannscht kontrolliere ob\\n" "die Dise dreggich sind.", "EpsonUtil.Pf*clean_PB.labelString:" "Dise \\n" "sauwer mache", "EpsonUtil.Pf*clean_PB.tooltip: " "Wann de Ausdruck stfe hot, \\ n" "un die Dise verstobbt sinn,\\n" "kannschtse dodemit \\n" "sauwer mache. ", "EpsonUtil.Pf*align_PB.labelString:" "Kepp \\n" "ausrichte ", "EpsonUtil.Pf*align_PB.tooltip:" "Bass uff ! \\n" "Des kennt de Drugger kabutt mache ! ", "EpsonUtil.Pf*reset_PB.labelString:" "Drugger\\n" "ricksetze ", "EpsonUtil.Pf*reset_PB.tooltip:" "Des Ricksetze vum Drugger\\n" "geht nid bei alle Sourde \\n" "", "EpsonUtil.Pf*cartridge_PB.labelString:" "Badrone\\n" "wechsle ", "EpsonUtil.Pf*cartridge_PB.tooltip:" "Drugger uhne Schalder\\n" "brauchen des.", "EpsonUtil.Pf*addPrinterTxt:" "Anre Drugger ", "EpsonUtil.Pf*printerState_LB.labelString:" "Stadus: ", "EpsonUtil.Pf*state_LB.labelString:" "- ", "EpsonUtil.Pf*noPrinter*messageString:" "Kommunikationsproblem!\\n" "Guggemol noch folgende Fehler:\\n" "Babier orrer Dinde all, orrer,\\n" "de Drugger esch nid eigschalde\".\\n" "\\n" "S'kann sei, dass mansche Drugger fer\\n" " paar Sekunde nochem Eischalde\\n" "nid asprechbar sinn. ", "EpsonUtil.Pf*noPrinter*dialogTitle:" "Fehler", "EpsonUtil.Pf*cfg1_LB.labelString:" "Drugger raussuche", "EpsonUtil.Pf*cfg2Printer_PB.labelString:" "Drugger raussuche", "EpsonUtil.Pf*cfg2Printer_PB.tooltip:" "Mit dere Lischt, kannscht der n Drugger raussuche. ", "EpsonUtil.Pf*cfg2Device_PB.labelString:" "Aschluss raussuche:", "EpsonUtil.Pf*cfg2Device_PB.tooltip:" "Wenn de Mtink narre \\n" "selwer bstimme \\n" "kinnt !", "EpsonUtil.Pf*next_PB.labelString:" "Weirer", "EpsonUtil.Pf*next:" "Weirer", "EpsonUtil.Pf*previous_PB.labelString:" "Redour", "EpsonUtil.Pf*previous:" "Redour", "EpsonUtil.Pf*save:" "Sichre ", "EpsonUtil.Pf*cancel:" "Abbreche ", "EpsonUtil.Pf*ok:" "Alles Klor", "EpsonUtil.Pf*about:" "EPSON Utilities\\n" "\\n" "Version "VERSION"\\n" "\\n" "Copyright: Jean-Jacques Sarton 2001 \\n" "\\n" "Email: jj.sarton@t-online.de\\n" "\\n" "URL: http://xwtools.automatix.de\\n" "\\n" "Dle vum Code stammen vum Gimp-Print Projekt\\n" "Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\\n" "\\n" "Lizenz: GPL\\n" "\\nDank an:\\n" "Keith Amidon\\n" " camalot@picnicpark.org\\n" "Ronny Budzinske\\n" "Nicola Fabiano\\n\\ ivololeribar@yahoo.it\\n" "Tokai Ferenc\\n" "Karlheinz Guenster\\n" "Gene Heskett\\n" " gene_heskett@iolinc.net\\n" "Mogens Jger\\n" " mogensjaeger@get2net.dk\\n" "Till Kamppeter \\n" " (leader Foomatic/www.linuxprinting.org project)\\n" " http://www.linuxprinting.org/till\\n" "Stefan Kraus\\n" " sjk@weserbergland.de\\n" " http://xwgui.automatix.de\\n" "Rainer Krienke\\n" " krienke@uni-koblenz.de\\n" "Sylvain Le-Gall\\n" " sylvain.le-gall@polytechnique.org\\n" "Steven J. Mackenzie\\n" "Raul Morales\\n" " raul.mh@telefonica.net\\n" " http://www.telefonica.net/web/ruten\\n" "Simon Morlat\\n" "Marc Riese\\n" " Marc-Riese@gmx.de\\n" "Hikmet Salar\\n" " Salar@gmx.de\\n" "Glen Stewart\\n" "Daniel Tamm\\n" " daniel@tamm-tamm.de\\n" " http:/www.tamm-tamm.de\\n http:/www.expedit.org\\n" "Robert Wachinger\\n" " nospam@robert-wachinger.de\\n" "Klaus Wnschel\\n" " klaus.wuenschel@knittelsheim-computer.de\\n" " http:/www.knilse.de\\n" "Alberto Zanoni.", "EpsonUtil.Pf*ctTxt0:" "Koppausrichte:\\n" "\\n" "Jetz emol leeres Blatt Babier in de Drugger leche un uff [Weirer] drigge.", "EpsonUtil.Pf*ctTxtC0:" "Koppausrichte:\\n" "\\n" "Jetz emol leeres Blatt Babier in de Drugger leche, de schwarze orrer de " "farwiche Druggkopp auswhle\\nun dann [Weirer] fer weirermache orrer [Abbreche].", "EpsonUtil.Pf*ctTxt1:" "Gugg der mol des grad gedruggde Muschder a, un such der die Beschde " "Linienpaare raus.\\nnoch Blatt eileche und uff [Weirer] drigge.", "EpsonUtil.Pf*ctTxt1:" "Gugg der des gedruggde Blatt mol ganz genau a. Finn des Muschter raus, " "des de gradschde senkrechte Strich gwwe hot. Jeder Strich hot Zahl vun " "1 bis 8, orrer ach bis 15, debei. Die Zahle stin aus Platzgrind " "unnernanner. Die Zahl glickschd a.\\n" "\\n" "Lech neies Blatt in de Drugger un drigg [Weirer].", "EpsonUtil.Pf*ctTxtP:" "Ward bisses Blatt rauskummt un drigg dann [Weirer].", "EpsonUtil.Pf*ctTxt5:" "Gugg der s'Ergebnis weche de Ausrichdung arch sourchfldich a. " "\\n\\nJetz kannschd: \\n\\n die Eistellung im Drugger [Sichre] " "orrer\\n" " [Abbreche], uhne die Eistellunge zu iwwernemme. ", "EpsonUtil.Pf*exTxt0:" "Batrone Wechsle: \\n" "\\n" "Drigg jetz: \\n" "\\n" " [Weirer] zum weirermache orrer\\n" " [Abbruch].", "EpsonUtil.Pf*exTxt00:" "Badrone Wechsle: \\n" "\\n" "Farb orrer Schwarz raussuche und drigg: \\n" "\\n" " [Weirer] zum weirermache orrer\\n" " [Abbruch].", "EpsonUtil.Pf*exTxt1:" "Badrone wechsle: \\n" "\\n" "De Wache fahrt in d' Wechselstellung. ", "EpsonUtil.Pf*exTxt2:" "Badrone Wechsle: \\n" "\\n" "Neii Badron einsetze un:\\n" "\\n" " [Weirer] drigge. ", "EpsonUtil.Pf*exTxt3:" "Badrone Wechsle: \\n" "\\n" " Dinde werd nochgfillt. ", "EpsonUtil.Pf*capabilities_LB.labelString:" "Drugger Konfiguration:", "EpsonUtil.Pf*capabilities_RC*id_TB.labelString:" "Drugger gibt sei Identifikation zurick.", "EpsonUtil.Pf*capabilities_RC*reset_TB.labelString:" "Software-Reset kammer jetzt mache. ", "EpsonUtil.Pf*capabilities_RC*state_TB.labelString:" "Drugger lifert Stadus Informatione. ", "EpsonUtil.Pf*capabilities_RC*ex_TB.labelString:" "Dindewechsel per Software esch noudwennich.", "EpsonUtil.Pf*colors_RC*four_TB.labelString:" "4 Farwe ", "EpsonUtil.Pf*colors_RC*six_TB.labelString:" "6 Farwe ", "EpsonUtil.Pf*head_RC*col_TB.labelString:" "Farb ", "EpsonUtil.Pf*head_RC*bw_TB.labelString:" "Schwarz", "EpsonUtil.Pf*noAccess*dialogTitle:" "Fehler", "EpsonUtil.Pf.scrTxt_MW.head_RC.bw_TB.tooltip:" "Operation mit de schwarze \\n\\ ", "Dindebadrone ausfihre. ", "EpsonUtil.Pf.scrTxt_MW.head_RC.col_TB.tooltip:" "Operation mit de farwiche \\n" "Dindebadrone ausfihre. ", "EpsonUtil.Pf*noAccess*messageString:" "K Zugriffsberechtichung uff die \\n" "Schnittstelledateie.\\n" "Stell sicher, dass mtink genung Zugriffsrechte\\n\\ ", "griecht\\n" "Gugg do devor in de Dokumentation noch. ", "EpsonUtil.Pf*fsb*dialogTitle:" "Mtink", "EpsonUtil.Pf*fsb*CancelLabelString:" "Abbruch", "EpsonUtil.Pf*fsb*okLabelString:" "Alles Klor", "EpsonUtil.Pf*fsb*applyLabelString:" "Filder", "EpsonUtil.Pf*fsb*filterLabelString:" "Filder", "EpsonUtil.Pf*fsb*fileListLabelString:" "Dateie ", "EpsonUtil.Pf*fsb*dirListLabelString:" "Ordner", "EpsonUtil.Pf*browser_LB.labelString:" "Agugger aussuche", #if 0 /* ! Achdung ' ' folcht des '\' Zeiche. */ #endif "EpsonUtil.Pf*browser_PB.labelString:" " ...\\ ", "EpsonUtil.Pf*browser_PB.tooltip:" "Agugger aussuche", "EpsonUtil.Pf*tooltip_TB.labelString:" "Klnnie Hilf", "EpsonUtil.Pf*tooltip_TB.tooltip:" "Die lschdich kl Hilfe\\n" "kannschd dodemit \\n" "ei und ausschalde. ", "EpsonUtil.Pf*autodetect_TB.labelString:" "Automadische Erkennung erlauwe. ", "EpsonUtil.Pf*autodetect_TB.tooltip:" "Mtink werd beim Start versuche, de\\n\\ ", "Drugger selwer zu bestimme. \\n" "Des funktioniert nid bei alle Drugger. ", "EpsonUtil.Pf*save_PB.labelString: Sichre ", "EpsonUtil.Pf*save_PB.tooltip: nrunge iwwernemme. ", "EpsonUtil.Pf.ConfigureForm.cancel_PB.tooltip:" "nrunge nid iwwernemme,\\n\\ ", "Maske verlosse. ", "EpsonUtil.Pf*cancel_PB.labelString:" "Abbruch", #if 0 /* ! Drugger Stadus */ #endif "EpsonUtil.Pf*error:" "Fehler", "EpsonUtil.Pf*printing:" "Druggd", "EpsonUtil.Pf*selfTest:" "Selbscht Tescht", "EpsonUtil.Pf*busy:" "Beschftichd", "EpsonUtil.Pf*ok:" "Alles Klor", "EpsonUtil.Pf*cleaning:" "Sauwer mache", "EpsonUtil.Pf*unknown:" "Ubekannt", #if 0 /* ! File Mtink.De, German ressources. ! Mtink.Ru, . ! ! Notiz fuer Uebersetzer. ist eine X-Ressource-Datei. ! Nachstehende Zeichensequenzen haben eine spezielle Bedeutung: ! \ Am Ende einer Zeile (Leerzeichen Tabulatoren duerfen ! vorhanden sein) bedeutet, dass die Resource in der naechste Zeile ! fortgesetzt werden. ! \n steht fuer eine Zeilenschaltung. ! \ (\ Leerzeichen) Das Leerzeichen ist Teil der Zeichenkette. ! Leerzeichen am Anfang eine Zeichenkette werden normalerweise ! eliminiert. ! \t Steht fuer ein Tabulatorzeichen. ! ! am Anfang einer Zeile (Leerzeichen duerfen vorgesetzt sein) leitet ! ein Kommentar ein. ! ! Wenn Sie eine Uebersetzung vornehmen, ist die Sprachkennung innerhalb ! des Bezeichners einzutragen. ! Beispiel: ! Die default Ressource EpsonUtil*unknown ist auf Deutsch zu uebersetzen ! ! EpsonUtil*unknown: unknown ! EpsonUtil.Ru*unknown: Unbekannt ! EpsonUtil ist der Klassennamen, .De muss nach den Klassennamen ! eingefuegt werden. Soll von Deutsch nach Franzoesisch uebersetzt werden ! ist jeweils De durch Fr zu ersetzen. ! ! Die Sprachkennung besteht aus zwei Zeichen, welche aus der Umgebungsvariable ! LANG, LC_ALL LC_MESSAGE entnommen werden. Der erste Buchstabe wird ! als Kapitaelchen umgewandelt. ! ! Der uebersichtlichkeit halber habe ich jede Ressource auf mehrere Zeilen ! umgebrochen. sollte vor allem bei mehrzeiligen Texten die uebersicht ! bezueglich Formatierung verbessern. */ #endif "EpsonUtil.Ru*title_LB.fontList: *-urw palladio l-bold-r-normal-*-*-*-*-*-*-*-koi8-ru", "EpsonUtil.Ru*fontList: *-urw palladio l-*-r-normal-*-*-*-*-*-*-*-koi8-ru", "*Ru.tooltip_label.fontList: *-urw palladio l-*-r-normal-*-*-*-*-*-*-*-koi8-ru", "EpsonUtil.Ru*unknown: ", #if 0 /* ! Die Version wird beim Erstellen der C-Datei ersetzt. */ #endif "EpsonUtil.Ru*title_LB.labelString:" "EPSON UTILITIES "VERSION, "", "EpsonUtil.Ru*legend_LB.labelString:" " ", "EpsonUtil.Ru*ok_PB.labelString:" "", "EpsonUtil.Ru.mainWindow.ok_PB.tooltip:" "\\n" "", "EpsonUtil.Ru*pref_PB.labelString:" "", "EpsonUtil.Ru*pref_PB.tooltip:" "- \\n" "- \\n" "- \\n" "- \\n" "- ", "EpsonUtil.Ru*about_PB.labelString:" " ", "EpsonUtil.Ru*about_PB.tooltip:" " \\n" "", "EpsonUtil.Ru*help_PB.labelString:" "", "EpsonUtil.Ru*help_PB.tooltip:" " .", "EpsonUtil.Ru*check_PB.labelString:" "\\n" "\\n", "EpsonUtil.Ru*check_PB.tooltip:" " ,\\n" ", \\n" " ", "EpsonUtil.Ru*clean_PB.labelString:" "\\n" "\\n", "EpsonUtil.Ru*clean_PB.tooltip: " " \\n" " (),\\n" " \\n" "( )", "EpsonUtil.Ru*align_PB.labelString:" "\\n" "\\n" "", "EpsonUtil.Ru*align_PB.tooltip:" "!\\n" " !", "EpsonUtil.Ru*reset_PB.labelString:" "\\n" "\\n" "", "EpsonUtil.Ru*reset_PB.tooltip:" " \\n" " \\n" ".", "EpsonUtil.Ru*cartridge_PB.labelString:" "\\n" "\\n" "", "EpsonUtil.Ru*cartridge_PB.tooltip:" " \\n" " \\n" "", "EpsonUtil.Ru*addPrinterTxt:" " ", "EpsonUtil.Ru*printerState_LB.labelString:" "", "EpsonUtil.Ru*state_LB.labelString:" "- ", "EpsonUtil.Ru*noPrinter*messageString:" " !\\n" ", ,\\n" " ,\\n" " .\\n" "\\n" ", \\n" " \\n" " .", "EpsonUtil.Ru*noPrinter*dialogTitle:" "", "EpsonUtil.Ru*cfg1_LB.labelString:" " :", "EpsonUtil.Ru*cfg2Printer_PB.labelString:" " :", "EpsonUtil.Ru*cfg2Printer_PB.tooltip:" " .", "EpsonUtil.Ru*cfg2Device_PB.labelString:" " :", "EpsonUtil.Ru*cfg2Device_PB.tooltip:" " Mtink \\n" " !", "EpsonUtil.Ru*next_PB.labelString:" "", "EpsonUtil.Ru*next:" "", "EpsonUtil.Ru*previous_PB.labelString:" "", "EpsonUtil.Ru*previous:" "", "EpsonUtil.Ru*save:" "", "EpsonUtil.Ru*cancel:" "", "EpsonUtil.Ru*ok:" "OK", "EpsonUtil.Ru*about:" "EPSON Utilities\\n" "\\n" " "VERSION"\\n" "\\n" "Copyright: Jean-Jacques Sarton 2001\\n" "\\n" "Email: jj.sarton@t-online.de\\n" "\\n" "URL: http://xwtools.automatix.de\\n" "\\n" " Gimp-Print\\n" "Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\\n" "\\n" ": GPL\\n" "\\n :\\n" "Keith Amidon\\n" " camalot@picnicpark.org\\n" "Ronny Budzinske\\n" "Nicola Fabiano\\n\\ ivololeribar@yahoo.it\\n" "Tokai Ferenc\\n" "Karlheinz Guenster\\n" "Gene Heskett\\n" " gene_heskett@iolinc.net\\n" "Mogens Jaeger\\n" " mogensjaeger@get2net.dk\\n" "Till Kamppeter\\n" " (leader Foomatic/www.linuxprinting.org project)\\n" " http://www.linuxprinting.org/till\\n" "Stefan Kraus\\n" " sjk@weserbergland.de\\n" " http://xwgui.automatix.de\\n" "Rainer Krienke\\n" " krienke@uni-koblenz.de\\n" "Sylvain Le-Gall\\n" " sylvain.le-gall@polytechnique.org\\n" "Steven J. Mackenzie\\n" "Raul Morales\\n" " raul.mh@telefonica.net\\n" " http://www.telefonica.net/web/ruten\\n" "Simon Morlat\\n" "Marc Riese\\n" " Marc-Riese@gmx.de\\n" "Hikmet Salar\\n" " Salar@gmx.de\\n" "Glen Stewart\\n" "Daniel Tamm\\n" " daniel@tamm-tamm.de\\n" " http:/www.tamm-tamm.de\\n http:/www.expedit.org\\n" "Robert Wachinger\\n" " nospam@robert-wachinger.de\\n" "Klaus Wuenschel\\n" " klaus.wuenschel@knittelsheim-computer.de\\n" " http:/www.knilse.de\\n" "Alberto Zanoni.", "EpsonUtil.Ru*ctTxt0:" " :\\n" "\\n" " [].", "EpsonUtil.Ru*ctTxtC0:" " :\\n" "\\n" " , ޣ " " \\n" " [] [].", "EpsonUtil.Ru*ctTxt1:" " \\n", " , [].", "EpsonUtil.Ru*ctTxt1:" " . " "1 8, 15. .\\n" "\\n" " , [].", "EpsonUtil.Ru*ctTxtP:" " [].", "EpsonUtil.Ru*ctTxt5:" " .\\n\\n :\\n\\n[] " "\\n" "[], .", "EpsonUtil.Ru*exTxt0:" " :\\n" "\\n" ":\\n" "\\n" "[] \\n" "[] .", "EpsonUtil.Ru*exTxt00:" " :\\n" "\\n" " :\\n" "\\n" "[] \\n" "[] .", "EpsonUtil.Ru*exTxt1:" " :\\n" "\\n" " .", "EpsonUtil.Ru*exTxt2:" " :\\n" "\\n" " :\\n" "\\n" " [].", "EpsonUtil.Ru*exTxt3:" " :\\n" "\\n" " .", "EpsonUtil.Ru*capabilities_LB.labelString:" " :", "EpsonUtil.Ru*capabilities_RC*id_TB.labelString:" " .", "EpsonUtil.Ru*capabilities_RC*reset_TB.labelString:" " .", "EpsonUtil.Ru*capabilities_RC*state_TB.labelString:" " ϣ .", "EpsonUtil.Ru*capabilities_RC*ex_TB.labelString:" " .", "EpsonUtil.Ru*colors_RC*four_TB.labelString:" "4 ", "EpsonUtil.Ru*colors_RC*six_TB.labelString:" "6 ", "EpsonUtil.Ru*head_RC*col_TB.labelString:" "", "EpsonUtil.Ru*head_RC*bw_TB.labelString:" "", "EpsonUtil.Ru*noAccess*dialogTitle:" "", "EpsonUtil.Ru.scrTxt_MW.head_RC.bw_TB.tooltip:" " \\n" " ޣ .", "EpsonUtil.Ru.scrTxt_MW.head_RC.col_TB.tooltip:" " \\n" " .", "EpsonUtil.Ru*noAccess*messageString:" " .\\n" ", mtink \\n" " .\\n" " .", "EpsonUtil.Ru*fsb*dialogTitle:" "Mtink", "EpsonUtil.Ru*fsb*CancelLabelString:" "", "EpsonUtil.Ru*fsb*okLabelString:" "OK", "EpsonUtil.Ru*fsb*applyLabelString:" "", "EpsonUtil.Ru*fsb*filterLabelString:" "", "EpsonUtil.Ru*fsb*fileListLabelString:" "", "EpsonUtil.Ru*fsb*dirListLabelString:" "", "EpsonUtil.Ru*_LB.labelString:" " ", #if 0 /* ! ein ' ' folgt das '\' Zeichen. */ #endif "EpsonUtil.Ru*_PB.labelString:" " ...\\ ", "EpsonUtil.Ru*_PB.tooltip:" " .", "EpsonUtil.Ru*tooltip_TB.labelString:" "", "EpsonUtil.Ru*tooltip_TB.tooltip:" " \\n" " \\n" " .", "EpsonUtil.Ru*autodetect_TB.labelString:" " .", "EpsonUtil.Ru*autodetect_TB.tooltip:" "Mtink \\n" " .\\n" " .", "EpsonUtil.Ru*save_PB.labelString: ", "EpsonUtil.Ru*save_PB.tooltip: .", "EpsonUtil.Ru.ConfigureForm.cancel_PB.tooltip:" " ,\\n" ".", "EpsonUtil.Ru*cancel_PB.labelString:" "", #if 0 /* ! Status */ #endif "EpsonUtil.Ru*error:" "", "EpsonUtil.Ru*printing:" "", "EpsonUtil.Ru*selfTest:" "", "EpsonUtil.Ru*busy:" "", "EpsonUtil.Ru*ok:" "OK", "EpsonUtil.Ru*cleaning:" "", "EpsonUtil.Ru*unknown:" " ", #if 0 /* ! File Mtink.Sv, swedish resources ! Translation by Daniel Tamm (daniel@tamm-tamm.de) ! ! Note for translator. This is a X-Resource file. The following ! character sequences have a special meaning: ! \ at the end of a line (no space allowed after the \): ! resource continue at the next line. ! \n This is a linefeed. ! \ (\ and space) the space character is part of the resource ! string. Normally space at the begin and end of a resource are ! elinminated. ! \t This is for a tabulator character. ! ! If you translate this you have to put the language designation ! withinh the key. ! Example: ! The resource default EpsonUtil*unknown must be translated into german ! ! EpsonUtil*unknown: unknown ! EpsonUtil.De*unknown: Unbekannt ! EpsonUtil is the program class name, .De must be inserted after this ! ! The language designator is composed for the first two character ! which are normally stored into the environment variable LANG and/or ! LC_ALL, LC_MESSAGE. The first letter is to be written with upercase. */ #endif "EpsonUtil.Sv*unknown: oknd", #if 0 /* ! The version number will be set into the c-source file ! */ #endif "EpsonUtil.Sv*title_LB.labelString: EPSON UTILITIES "VERSION, "", "EpsonUtil.Sv*legend_LB.labelString: blckmngd", "EpsonUtil.Sv*ok_PB.labelString: Ut", "EpsonUtil.Sv*mainWindow.ok_PB.tooltip: Stnga\\nStatus Monitor.", "EpsonUtil.Sv*pref_PB.labelString: Alternativ", "EpsonUtil.Sv*pref_PB.tooltip:" "- Browser,\\n" "- Minihjlp,\\n" "- Val av anslutning\\n" "- Val av skrivaren\\n" "- funktionsstt", "EpsonUtil.Sv*about_PB.labelString: Info", "EpsonUtil.Sv*about_PB.tooltip:" "Licens och\\n" "medverkande", "EpsonUtil.Sv*help_PB.labelString: Hjlp", "EpsonUtil.Sv*help_PB.tooltip: Visa hjlpen i ett browser-fnster.", "EpsonUtil.Sv*check_PB.labelString: Kontrollera\\nmunstycken", "EpsonUtil.Sv*check_PB.tooltip:" "Skriv ut ett testmnster fr att\\n" "se om munstycken r tppta.\\n" "Tppta munstycken gr vita\\n" "remsor i utskrifter.", "EpsonUtil.Sv*clean_PB.labelString: Rengr\\nmunstycken", "EpsonUtil.Sv*clean_PB.tooltip:" "Du kan rengra munstycken hr\\n" "om dom inte r i ordning.", "EpsonUtil.Sv*align_PB.labelString: Rta upp\\ntryckhuvud", "EpsonUtil.Sv*align_PB.tooltip:" "Varning !\\n" "Detta kan skada skrivaren.", "EpsonUtil.Sv*reset_PB.labelString: Reset\\nskrivaren", "EpsonUtil.Sv*reset_PB.tooltip: Detta funkar inte fr alla modeller.", "EpsonUtil.Sv*cartridge_PB.labelString: Byta\\npatron", "EpsonUtil.Sv*cartridge_PB.tooltip:" "Om din skrivare har\\n" "ingen knapp d bever\\n" "du det hr.", "EpsonUtil.Sv*addPrinterTxt: Andra skrivare", "EpsonUtil.Sv*printerState_LB.labelString: Status: ", "EpsonUtil.Sv*state_LB.labelString: - ", "EpsonUtil.Sv*noPrinter*messageString:" "Kommunikationsproblem med skrivaren!\\n" "Vnligen kontrollera fljande fel:\\n" "\"Pappret r slut\", \"Blcket r slut\", \"Skrivaren r inte p\"\\n" "\\n" "Notera att ngra skrivare svarar inte fr\\n" "ngra sekunder efter stta dom p.", "EpsonUtil.Sv*noPrinter*dialogTitle: Fel", "EpsonUtil.Sv*cfg1_LB.labelString: Val av skrivaren:", "EpsonUtil.Sv*cfg2Printer_PB.labelString: Val av skrivaren:", "EpsonUtil.Sv*cfg2Printer_PB.tooltip:" "En lista av skrivare erbjuds.\\n" "Dr kan du vlja din modell.", "EpsonUtil.Sv*cfg2Device_PB.labelString: Val av porten:", "EpsonUtil.Sv*cfg2Device_PB.tooltip:" "Det vore bra\\n" "om mtink kunde\\n" "gra det sjlv!", "EpsonUtil.Sv*next_PB.labelString: Nsta", "EpsonUtil.Sv*next: Nsta", "EpsonUtil.Sv*previous_PB.labelString: Fregende", "EpsonUtil.Sv*previous: Fregende", "EpsonUtil.Sv*save: Spara", "EpsonUtil.Sv*cancel: Avbryt", "EpsonUtil.Sv*ok: OK", "EpsonUtil.Sv*about:" "EPSON Utilities\\n" "\\n" "Version "VERSION"\\n" "\\n" "Copyright: Jean-Jacques Sarton 2001\\n" "\\nEmail: jj.sarton@t-online.de\\n" "\\n" "URL: http://xwtools.automatix.de\\n" "\\n" "Delar av koden har tagits frn gimp-print projektet\\n" "Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\\n" "\\n" "Licens: GPL\\n" "\\n" "Tack till:\\n" "Keith Amidon\\n" " camalot@picnicpark.org\\n" "Ronny Budzinske\\n" "Nicola Fabiano\\n\\ ivololeribar@yahoo.it\\n" "Tokai Ferenc\\n" "Karlheinz Guenster\\n" "Gene Heskett\\n" " gene_heskett@iolinc.net\\n" "Mogens Jger\\n" " mogensjaeger@get2net.dk\\n" "Till Kamppeter\\n" " (ledare Foomatic/www.linuxprinting.org projektet)\\n" " http://www.linuxprinting.org/till\\n" "Stefan Kraus\\n" " sjk@weserbergland.de\\n" " http://xwgui.automatix.de\\n" "Rainer Krienke\\n" " krienke@uni-koblenz.de\\n" "Sylvain Le-Gall\\n" " sylvain.le-gall@polytechnique.org\\n" "Steven J. Mackenzie\\n" "Raul Morales\\n" " raul.mh@telefonica.net\\n" " http://www.telefonica.net/web/ruten\\n" "Simon Morlat\\n" "Marc Riese\\n" " Marc-Riese@gmx.de\\n" "Hikmet Salar\\n" " Salar@gmx.de\\n" "Glen Stewart\\n" "Daniel Tamm\\n" " daniel@tamm-tamm.de\\n" " http:/www.tamm-tamm.de\\n http:/www.expedit.org\\n" "Robert Wachinger\\n" " nospam@robert-wachinger.de\\n" "Klaus Wnschel\\n" " klaus.wuenschel@knittelsheim-computer.de\\n" " http:/www.knilse.de\\n" "Alberto Zanoni.", "EpsonUtil.Sv*ctTxt0:" "Vnligen stt in en ark i din skrivare fr att brja med proceduren att rta upp huvudet.\\n" "Tryck p [Nsta] fr att brja\\n" "eller [Avbryt] fr att avbryta.", "EpsonUtil.Sv*ctTxtC0:" "Vnligen stt in en ark i din skrivare fr att brja med proceduren att rta upp huvudet.\\n" "Vlj det svarta eller det frjat huvudet och\\n" "tryck p [Nsta] fr att brja eller [Avbryt] fr att avbryta.", "EpsonUtil.Sv*ctTxt1:" "Granska utskriften, och vlj det bsta linjeparet i mnstret. Sedan stt arken i skrivaren igen " "och tryck p [Nsta] fr att fortstta.", "EpsonUtil.Sv*ctTxt1C:" "Granska utskriften noggrant, och vlj mnstret med dom rakaste vertikala linjer. " "Om du inte kan hitta ett jmnt mnster, vlj nummret av det " "bsta mnstret, och repetera proceduren.\\n" "\\n" "Stt in arken i skrivaren igen och tryck p [Nsta] fr att fortstta.", "EpsonUtil.Sv*ctTxtP:" "Vnta tills arken kastas ut ur skrivaren och sen tryck p [Nsta] fr att fortstta.", "EpsonUtil.Sv*ctTxt5:" "Granska den sista utskriften mycket noggrant fr att tillfrskra att skrivaren r korrekt rtat upp.\\n" "\\n" "Sedan vlj:\\n" "\\n" " [Spara] fr att spara resultatet i skrivaren eller\\n" " [Avbryt] fr att avbryta utan att spara resultatet.", "EpsonUtil.Sv*exTxt0:" "Utbyte av patronen:\\n" "\\n" "Vnligen tryck:\\n" "\\n" " [Nsta] fr att fortstta eller\\n" " [Avbryt]", "EpsonUtil.Sv*exTxt00:" "Utbyte av patronen:\\n" "\\n" "Vnligen vlj svart eller frg\\n" "Tryck:\\n" "\\n" " [Nsta] fr att fortstta eller\\n" " [Avbyt]", "EpsonUtil.Sv*exTxt1:" "Utbyte av patronen:\\n" "\\n" "Skrivhuvudet flyttas till utbytespositionen.", "EpsonUtil.Sv*exTxt2:" "Utbyte av patronen:\\n" "\\n" "Stt i en ny patron och:\\n" "\\n" " Tryck [Nsta]", "EpsonUtil.Sv*exTxt3:" "Utbyte av patronen:\\n" "\\n" " process \"fylla blcket\".", "EpsonUtil.Sv*colors_RC*four_TB.labelString: 4 frger", "EpsonUtil.Sv*colors_RC*six_TB.labelString: 6 frger", "EpsonUtil.Sv*head_RC*col_TB.labelString: Frg", "EpsonUtil.Sv*head_RC*bw_TB.labelString: Svart", "EpsonUtil.Sv*noAccess*dialogTitle: Fel", "EpsonUtil.Sv*scrTxt_MW.head_RC.bw_TB.tooltip:" "Utfr operationen\\n" "med patronen fr\\n" "svart blck.", "EpsonUtil.Sv*scrTxt_MW.head_RC.col_TB.tooltip:" "Utfr operationen\\n" "med patronen fr\\n" "frgat blck.", "EpsonUtil.Sv*noAccess*messageString:" "Ingen access till skrivarens apparatfil.\\n" "\\n" "Vnligen kontrollera att mtink har tillrckliga\\n" "rtter fr att komma t apparafilen.\\n" "\\n" "Konsultera ven dokumentationen fr detta.", "EpsonUtil.Sv*fsb*dialogTitle: Mtink", "EpsonUtil.Sv*fsb*CancelLabelString: Avbryt", "EpsonUtil.Sv*fsb*okLabelString: OK", "EpsonUtil.Sv*fsb*applyLabelString: Filter", "EpsonUtil.Sv*fsb*filterLabelString: Filter", "EpsonUtil.Sv*fsb*fileListLabelString: Filer", "EpsonUtil.Sv*fsb*dirListLabelString: Kataloger", "EpsonUtil.Sv*browser_LB.labelString: Vlj webblsare", "EpsonUtil.Sv*browser_PB.labelString: \\ ...\\ ", "EpsonUtil.Sv*browser_PB.tooltip: Val av webblsaren", "EpsonUtil.Sv*tooltip_TB.labelString: Minihjlp", "EpsonUtil.Sv*tooltip_TB.tooltip:" "Hr kan du\\n" "avaktivera\\n" "minihjlpen.", "EpsonUtil.Sv*autodetect_TB.labelString: Tillta automatisk upptckten", "EpsonUtil.Sv*autodetect_TB.tooltip:" "Vid starten, Mtink ska frska att\\n" "ta reda p anslutna skrivaren.\\n" "Detta funkar inte med alla skrivare.", "EpsonUtil.Sv*save_PB.labelString: Spara", "EpsonUtil.Sv*save_PB.tooltip: Anvnd ndringarna.", "EpsonUtil.Sv*ConfigureForm.cancel_PB.tooltip:" "Anvnd inte ndringarna,\\n" "stnga konfigurationen.", "EpsonUtil.Sv*cancel_PB.labelString: Avbryt", #if 0 /* ! Printer state */ #endif "EpsonUtil.Sv*error: Fel", "EpsonUtil.Sv*printing: Skriver ut", "EpsonUtil.Sv*selfTest: Sjlvtest", "EpsonUtil.Sv*busy: Upptagen", "EpsonUtil.Sv*ok: OK", "EpsonUtil.Sv*cleaning: Rengrar", "EpsonUtil.Sv*unknown: Oknd", #if 0 /* ! File Mink.Tr, turkisch resources */ #endif "EpsonUtil.Tr*title_LB.fontList: *-helvetica-*-r-normal--14-*-*-*-*-*-iso8859-9", "EpsonUtil.Tr*fontList: *-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-9", "*Tr.tooltip_label.fontList: *-*-*-r-normal--14-*-*-*-*-*-iso8859-9", "EpsonUtil.Tr*title_LB.labelString: EPSON UTILITIES "VERSION, "EpsonUtil.Tr*legend_LB.labelString: Boya miktar", "EpsonUtil.Tr*ok_PB.labelString: k", "EpsonUtil.Tr*pref_PB.labelString: Ayarlamak", "EpsonUtil.Tr*about_PB.labelString: Bilgiler", "EpsonUtil.Tr*help_PB.labelString: Yardm", "EpsonUtil.Tr*check_PB.labelString: fle\\nkontrol", "EpsonUtil.Tr*clean_PB.labelString: fle\\ntemizlii", "EpsonUtil.Tr*align_PB.labelString: Balar\\nAyarlamak", "EpsonUtil.Tr*reset_PB.labelString: Yeniden\\nyerletir", "EpsonUtil.Tr*cartridge_PB.labelString: Boya\\ndeiecek", "EpsonUtil.Tr*addPrinterTxt: Baka Yazc", "EpsonUtil.Tr*printerState_LB.labelString: Status: ", "EpsonUtil.Tr*state_LB.labelString: - ", "EpsonUtil.Tr*noPrinter*messageString: Balantproblemi !\\nLtfen Yazcy hatatalra ynelik konrl ediniz:\\n\"Kathatas\", \"Boyadurumu\",\\n\"Yazc ak deil\".\\n\\nDikkat baz Yazclarda\\naldktan bir ka saniye sonra\\nbalant kesilebilir.", "EpsonUtil.Tr*noPrinter*dialogTitle: Yanl", "EpsonUtil.Tr*cfg1_LB.labelString: Yazc seimi:", "EpsonUtil.Tr*cfg2Printer_PB.labelString: Yazc seimi:", "EpsonUtil.Tr*cfg2Device_PB.labelString: Port seimi:", "EpsonUtil.Tr*next_PB.labelString: Devam", "EpsonUtil.Tr*next: Devam", "EpsonUtil.Tr*previous_PB.labelString: Geri", "EpsonUtil.Tr*previous: Geri", "EpsonUtil.Tr*save: Hafzaya al", "EpsonUtil.Tr*cancel: Bitir", "EpsonUtil.Tr*ok: OK", "EpsonUtil.Tr*about:" "EPSON Utilities\\n" "\\nVersion "VERSION"\\n" "\\n" "Copyright: Jean-Jacques Sarton 2001\\n" "\\n" "Email: jj.sarton@t-online.de\\n" "\\n" "URL: http://xwtools.automatix.de\\n" "\\n" "Baz kod blmleri gimp-print projesinden alnmtr\\n" "Copyright 2000 Robert Krawitz (rlk@alum.mit.edu)\\n" "\\n" "Tercuman: Hikmet Salar (Salar@gmx.de)\\n" "Licence: GPL\\n" "\\n" "Teekkrler:\\n" "Keith Amidon\\n" " camalot@picnicpark.org\\n" "Ronny Budzinske\\n" "Nicola Fabiano\\n\\ ivololeribar@yahoo.it\\n" "Tokai Ferenc\\n" "Karlheinz Guenster\\n" "Gene Heskett\\n" " gene_heskett@iolinc.net\\n" "Mogens Jger\\n" " mogensjaeger@get2net.dk\\n" "Till Kamppeter\\n" " (leader Foomatic/www.linuxprinting.org project)\\n" " http://www.linuxprinting.org/till\\n" "Stefan Kraus\\n" " sjk@weserbergland.de\\n" " http://xwgui.automatix.de\\n" "Rainer Krienke\\n" " krienke@uni-koblenz.de\\n" "Sylvain Le-Gall\\n" " sylvain.le-gall@polytechnique.org\\n" "Steven J. Mackenzie\\n" "Raul Morales\\n" " raul.mh@telefonica.net\\n" " http://www.telefonica.net/web/ruten\\n" "Simon Morlat\\n" "Marc Riese\\n" " Marc-Riese@gmx.de\\n" "Hikmet Salar\\n" " Salar@gmx.de\\n" "Glen Stewart\\n" "Daniel Tamm\\n" " daniel@tamm-tamm.de\\n" " http:/www.tamm-tamm.de\\n http:/www.expedit.org\\n" "Robert Wachinger\\n" " nospam@robert-wachinger.de\\n" "Klaus Wnschel\\n" " klaus.wuenschel@knittelsheim-computer.de\\n" " http:/www.knilse.de\\n" "Alberto Zanoni.", "EpsonUtil.Tr*ctTxt0: Balk ayar:\\n\\nLtfen Yazcya bir bo kat koyunuz ve [devam] tuuna basnz.", "EpsonUtil.Tr*ctTxtC0: Balik ayar:\\n\\nLtfen Yazcya bir bo kat koyunuz, Ltfen Balk seiniz, sisah veya renkli ve sonra [Devam] ilemi yrtmek iin veya [Bitir].", "EpsonUtil.Tr*ctTxt1: Ltfen, az nce Yazcdan kan rnei deerlendiriniz ve eniyi izgi elerini seiniz.\\nKat tekrar Yazcya yerletiriniz ve [Devam] tuuna basnz.", "EpsonUtil.Tr*ctTxt1C: Yazcdan kan kata dikkatle baknz. En uygun rnei belirlemek iin nce rnee bakarak aaya (vertikal) yndeki en dzgn cizgiyi tesbit ediniz. Her izginin kendine ayit bir says olmak zere 1 ile 8 veya 15 saylar verilmistir. Saylar yerdarlndan, asaya doru sralanmakta. Ltfen O sayy tulaynz.\\n\\nLtfen, kat tekrar yazcya yerletiriniz ve [Devanm] tuuna basnz.", "EpsonUtil.Tr*ctTxtP: Kagt yazcdan kana kadar bekleyiniz ve sonra [Devam] tuuna basarak tasdikleyiniz.", "EpsonUtil.Tr*ctTxt5: Ltfen, datm grnts ile ilgili sonular iyi deerlendiriniz, ok zen gstererek ve Kagt tekrar Yazcya yerletiriniz.\\n\\nVe su seeneklerden birine karar veriniz:\\n\\n Yazcnn ayarn [Hafzaya al] veya\\n ayarn hafzaya almadan [Bitir].", "EpsonUtil.Tr*exTxt0: Boya deisilecek:\\n\\ntastikleyiniz :\\n\\n [Devam] ilemi devam ettirmek iin veya\\n [Bitir]", "EpsonUtil.Tr*exTxt00: Boya deisilecek:\\n\\nLtfen siyah veya renkli seeneklerden birine karar veriniz ve tasdikleyiniz:\\n\\n [Devam] ilemi yrtmek iin veya\\n [Bitir]", "EpsonUtil.Tr*exTxt1: Boya degisilecek:\\n\\nBoya deitirme pozisyonu ayarlanyor", "EpsonUtil.Tr*exTxt2: Boya deiilecek:\\n\\nYeni Boya yerletiriniz ve\\n\\n [Devam] tuuna basnz", "EpsonUtil.Tr*exTxt3: Boya deiecek:\\n\\n Boya doldurma ilemi yryor.", "EpsonUtil.Tr*colors_RC*four_TB.labelString: 4 Renkler", "EpsonUtil.Tr*colors_RC*six_TB.labelString: 6 Renkler", "EpsonUtil.Tr*head_RC*col_TB.labelString: Renkli", "EpsonUtil.Tr*head_RC*bw_TB.labelString:Siyah", "EpsonUtil.Tr*noAccess*dialogTitle: Yanl", "EpsonUtil.Tr*noAccess*messageString: Giri hakknz yok\\nbalantbilgileri", "EpsonUtil.Tr*fsb*dialogTitle: Mtink", "EpsonUtil.Tr*fsb*CancelLabelString: Bitir", "EpsonUtil.Tr*fsb*okLabelString: OK", "EpsonUtil.Tr*fsb*applyLabelString: Filitre", "EpsonUtil.Tr*fsb*filterLabelString: Filitre", "EpsonUtil.Tr*fsb*fileListLabelString: Dosya", "EpsonUtil.Tr*fsb*dirListLabelString: Rehber", "EpsonUtil.Tr*browser_LB.labelString: Browser seiniz", "EpsonUtil.Tr*browser_PB.labelString: \\ ...\\ ", "EpsonUtil.Tr*autodetect_TB.labelString: Otomatikmen bulmaya izin vermek", "EpsonUtil.Tr*save_PB.labelString: Hafzaya al", "EpsonUtil.Tr*cancel_PB.labelString: Bitir", #if 0 /* ! Printer state */ #endif "EpsonUtil.Tr*error:" "Error", "EpsonUtil.Tr*printing:" "Printing", "EpsonUtil.Tr*selfTest:" "Self Test", "EpsonUtil.De*busy:" "Busy", "EpsonUtil.Tr*ok:" "OK", "EpsonUtil.Tr*cleaning:" "Cleaning", "EpsonUtil.Tr*unknown:" "Unknown", (char *)0 }; mtink-1.0.16/mainSrc/cmd.h0000644000076400001540000000420110664600316013360 0ustar jjfuse/**************************************************** * File cmd.h * * header for write and read to / from printer * * * Copyright (C) 2001 Jean-Jacques Sarton jj.sarton@t-online.de * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ****************************************************/ #ifndef CMD_H #define CMD_H #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif extern int callPrg(int command, char *name, int mode, int pass, int choice, char **buf, char *function); extern int writeD4Data(int deviceHdl, unsigned char *data, int len, int stop); extern int initializeD4(void); extern int doCommand(int working); extern void setPrinterName(char *); typedef struct shmem_s { int command; char name[1024-64]; char function[64]; /* place for a function name */ int printerState; int mode; int pass; int choice; int retVal; int ready; /* these variable are for the server */ int fd; int dataSocketId; int block; /* data buffer for both */ char buf[1024]; } shmem_t; extern shmem_t *shmem; #define MODEL_KCMy '1' #define MODEL_KCMycm '2' #define MODEL_KCMycmY '3' #define MODEL_KCMycmk '4' #define MODEL_KCMyRB '5' #define MODEL_KCMyRBX '6' #define MODEL_KCMyRBkX '7' #define MODEL_KCMycmGg '8' #if defined(__cplusplus) || defined(c_plusplus) } #endif extern int devRead(int fd, unsigned char *buf, int len, int timeout); extern int devWrite(int fd, unsigned char *buf, int len, int timeout); #endif mtink-1.0.16/LEGGIMI0000777000076400001540000000000010665176050014020 2html/LEGGIMIustar jjfusemtink-1.0.16/staticLib.sh0000755000076400001540000000100510376041214013320 0ustar jjfuse#!/bin/sh #set -x dirs='/usr/X11R6/lib /usr/openwin/lib /usr/dt/lib' libs='Xm ICE SM Xp Xext Xt X11' for d in $dirs do for f in $libs do if [ -f $d/lib${f}.a ] then ln -s $d/lib${f}.a lib${f}.a fi done done #LFLAGS=' -L/usr/X11R6/lib -L/usr/openwin/lib -L/usr/dt/lib -s -L. -lXm -lXp -lXext -lSM -lICE -lXt -lX11' #OBJ='mtink.o d4lib.o d4libh.o cfg1.o fsb.o cfg2.o alignbt.o scrtxt.o cmd.o tooltip.c' #rm mtink >/dev/null 2>&1 #gcc -s -o mtink $OBJ $LFLAGS $LFLAGS #rm *.a