Els fitxers MYR consten de tres parts ben diferenciades:
- La primera part (capçalera), te 180 bytes i és on apareix informació relativa a les caracteristiques de l'estructura del fitxer.
- La segona part del fitxer (cos), és on hi ha el dibuix. Més endavant es concretará la seva estructura.
- La tercera part (cua), te 512 bytes repartits en dos grups. El primer és de 192 bytes, i el segon, de 160 words de 2 bytes.
Eks fitxers mantenen un ordre de bytes propi del sistema operatiu UNIX, on el byte mes significatiu apareix abans que el menys significatiu. O sigui, que es llegeixen d'esquerra a dreta.

Especificació del contingut
Capçalera
Bytes 0 - 28
- Un conjunt de bytes que inclouen el tipus de maquina (MASCHINENTYP). S'ha de tenir en compte que els dos primers bytes no es poden canviar i contenen els valors 77 i 65 respectivament. El 77 correspon a una 'M' i el 65 correspon a una 'A'. En aquests 29 bytes s'inclou el nom del camp ('MASCHINENTYP :') i a continuació, el valor corresponent, que és el tipus de maquina. El valor del camp s'omple d'espais fins que s'acava d'ocupar tota la longitud, que és de 12 bytes. Seguidament venen els 2 últims bytes que corresponen al 13 i al 10 (retorn de carro i canvi de linea)
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 |
| M | A | S | C | H | I | N | E | N | T | Y | P | : |
- 00-01: Bytes inalterables.
- 02-13: Encara que aquests valors sempre s'han trobat iguals, sembla ser que es pot posar el que es vulgui (tant en majuscules com en minuscules).
| 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| M | R | S | J | 7 | 8 | / | 1 | S | U | L | 13 | 10 |
- 14-25: El nom de la maquina sempre ocupa aquests 12 bytes.
- 15: Aquest byte s'utiliza en el calcul del numero secret 1
- 26: Sempre hem trobat un espai
- 27-28: Retorn de carro i canvi de linia.
Bytes 29 - 58
- En aquests bytes es guarda informacio del nom del dibuix (MUSTER). De la mateixa manera que en l'apartat anterior, al principi hi ha el nom del camp propiament dit ('Muster...... : ') i despres apareix el valor del camp. Aquest ultim tambe s'omple d'espais fins arribar a la seva longitud (12 bytes). En aquest cas els 2 ultims bytes que venen a continuacio, tambe corresponen al 13 i al 10.
| 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 |
| M | u | s | t | e | r | . | . | . | . | . | . | : |
- 29-42: Sembla que es pot posar la cadena de caracters que es vulgui, tant en majuscules com en minuscules
- 43: Sempre és un espai
| 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 |
| V | E | R | S | 13 | 10 |
- 44-55: El nom del dibuix sempre ocupa aquests 12 bytes
- 46: Aquest byte s'utiliza en el calcul del numero secret 1
- 56: Sempre hem trobat un espai
- 57-58: Retorn de carro i canvi de linia.
Bytes 59 - 88
- Aqui trobem informacio sobre la data del dibuix (DATUM). Igualment que en els apartats anteriors, primer apareix el nom del camp ('Datum....... : ') i tot seguit el valor que li correspon, per la qual cosa hi ha disponibles 12 bytes. Per últim, ens tornem a trobar amb els dos bytes 13 i 10 respectivament.
| 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 |
| D | a | t | u | m | . | . | . | . | . | . | . | : |
- 59-72: Sembla que es pot posar la cadena de caracters que es vulgui, tant en majuscules com en minuscules
- 73: Sempre és un espai
| 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 |
| 2 | 4 | . | 0 | 2 | . | 9 | 7 | 13 | 10 |
- 74-85: El nom del dibuix sempre ocupa aquests 12 bytes
- 75: Aquest byte s'utiliza en el calcul del numero secret 1
- 86: Sempre hem trobat un espai
- 87-88: Retorn de carro i canvi de linia.
Byte 89
- Conte el valor 0 indicant que la cadena amb les informacions anteriors s'ha acabat.
Byte 90
- Aquest byte el podem destriar en 2. Dividint per 16 trobariem els 4 bits de mes pes i fent el modul de 16, els quatre bits de menys pes. El primer guarda informacio sobre X-rt i el segon sobre X-blocksize.
Byte 91
- De la mateixa manera que l'anterior, tambe el podem destriar per obtenir informacio sobre Y-rt i Y-blocksize.
Byte 92
- Numero total de cintes de que consta el dibuix.
Byte 93
- Numero de cinta al que correspon el fitxer MYR.
Bytes 94 - 95
- Desconegut.
Bytes 96 - 97
- Numero d'agulles que te la maquina (maxim 32000 en aquest word)
Bytes 98 - 99
- Numero de bits del jacquard. El valor d'aquests dos bytes definira en el cos del fitxer la quantitat de bytes reservats a guardar informacio sobre les agulles del jacquard a cada pasada. Aquest numero de bytes surt del numero de bytes que s'indica aqui:
- Versio 1 o 2
- En les maquines mes antigues, aquest valor es el valor del Raport exactament. Per tant ens podem trobar un 9 o un 234 per exemple.
- Versio 3 o 4
- En les maquines mes actuals, aquest valor és el resultat de sumar els valors previament arrodonits a byte dels diferents Raports que hi ha des de la posicio 152,253 fins a la 162,163. Per tant sempre sera un valor divisible per 8.
- Versio 1 o 2
Bytes 100 - 101
- Numero de pasades totals de que consta el dibuix, tenint en compte totes les cintes, no nomes l'actual, que és a la que pertany el fitxer MYR.
Bytes 102 - 103
- Numero de pasada en que comença aquesta cinta. Si es tracta de la primera cinta, hi hauria d'haver un 1. En canvi si el fitxer actual correspon a una cinta que no es la primera, aquest valor sera el del numero de pasada en que acabava la cinta anterior mes 1.
Bytes 104 - 105
- Numero de pasada en que acaba aquesta cinta. Si la cinta actual es la ultima de la serie, aquest valor contindra el numero total de pasades que te el dibuix comptant totes les cintes (valor dels bytes 100 i 101).
Bytes 106 - 107
- Numero de bytes de que consta la informacio corresponent als getribes a cada pasada del dibuix.
Byte 108
- Numero de barres de planxa.
Byte 109
- Desconegut.
Bytes 110 - 111
- Designa els bytes totals de que constara en el fitxer la informacio corresponent a cada pasada. El valor d'aquest word es el resultat de sumar el numero de bytes que ocupen els bits de jacquard apuntats pels bytes 98 i 99 i el numero de bytes que indiquen els bytes 106 i 107 corresponents als bytes de getribes, mes dos bytes que s'afegeixen i que son els bytes del checksum que es fa a cada pasada.
- La operacio que es fa amb els bits de jacquard, es ajustar per sobre el nombre de bytes que ocupen perque siguin multiple de dos. Si per exemple s'especifiquen 9 bits, s'utilitzaran dos bytes. Si s'especifiquen 8 bits tambe s'utilitzan dos, pero si hi ha un valor, per exemple, de 17 bits, s'hauran d'utilitzar 4 bytes.
Bytes 112 - 113
- Numero de pasada en que comença la cinta 1.
Bytes 114 - 115
- Numero de pasada en que acava la cinta 1.
Bytes 116 - 117
- Numero de pasada en que comença la cinta 2.
Bytes 118 - 119
- Numero de pasada en que acava la cinta 2.
Bytes 120 - 121
- Numero de pasada en que comença la cinta 3.
Bytes 122 - 123
- Numero de pasada en que acava la cinta 3.
Bytes 124 - 125
- Numero de pasada en que comença la cinta 4.
Bytes 126 - 127
- Numero de pasada en que acava la cinta 4.
Bytes 128 - 129
- Numero de pasada en que comença la cinta 5.
Bytes 130 - 131
- Numero de pasada en que acava la cinta 5.
Bytes 132 - 133
- Numero de pasades de que consta el primer raport de pasades.
Bytes 134 - 135
- Numero de pasades de que consta el segon raport de pasades.
Bytes 136 - 137
- Numero de pasades de que consta el tercer raport de pasades.
Bytes 138 - 139
- Numero de pasades de que consta el quart raport de pasades.
Bytes 140 - 141
- Numero de pasades de que consta el cinque raport de pasades.
Byte 142
- Indica quantes vegades es repetira el numero de raport de pasades que assenyala el seguent byte.
Byte 143
- Numero de raport de pasades que es repetira les vegades que indiqui el byte anterior.
Byte 144
- Indica quantes vegades es repetira el numero de raport de pasades que assenyala el seguent byte.
Byte 145
- Numero de raport de pasades que es repetira les vegades que indiqui el byte anterior.
Byte 146
- Indica quantes vegades es repetira el numero de raport de pasades que assenyala el seguent byte.
Byte 147
- Numero de raport de pasades que es repetira les vegades que indiqui el byte anterior.
Byte 148
- Indica quantes vegades es repetira el numero de raport de pasades que assenyala el seguent byte.
Byte 149
- Numero de raport de pasades que es repetira les vegades que indiqui el byte anterior.
Byte 150
- Indica quantes vegades es repetira el numero de raport de pasades que assenyala el seguent byte.
Byte 151
- Numero de raport de pasades que es repetira les vegades que indiqui el byte anterior.
Bytes 152 - 153
- Numero d'agulles de que consta el primer raport d'agulles.
Bytes 154 - 155
- Numero d'agulles de que consta el segon raport d'agulles.
Bytes 156 - 157
- Numero d'agulles de que consta el tercer raport d'agulles.
Bytes 158 - 159
- Numero d'agulles de que consta el quart raport d'agulles.
Bytes 160 - 161
- Numero d'agulles de que consta el cinque raport d'agulles.
Bytes 162 - 163
- Numero d'agulles de que consta el sise raport d'agulles.
Byte 164
- Indica quantes vegades es repetira el numero de raport d'agulles que assenyala el seguent byte.
Byte 165
- Numero de raport d'agulles que es repetira les vegades que indiqui el byte anterior.
Byte 166
- Indica quantes vegades es repetira el numero de raport d'agulles que assenyala el seguent byte.
Byte 167
- Numero de raport d'agulles que es repetira les vegades que indiqui el byte anterior.
Byte 168
- Indica quantes vegades es repetira el numero de raport d'agulles que assenyala el seguent byte.
Byte 169
- Numero de raport d'agulles que es repetira les vegades que indiqui el byte anterior.
Byte 170
- Indica quantes vegades es repetira el numero de raport d'agulles que assenyala el seguent byte.
Byte 171
- Numero de raport d'agulles que es repetira les vegades que indiqui el byte anterior.
Byte 172
- Indica quantes vegades es repetira el numero de raport d'agulles que assenyala el seguent byte.
Byte 173
- Numero de raport d'agulles que es repetira les vegades que indiqui el byte anterior.
Byte 174
- Indica quantes vegades es repetira el numero de raport d'agulles que assenyala el seguent byte.
Byte 175
- Numero de raport d'agulles que es repetira les vegades que indiqui el byte anterior.
Bytes 176 - 177
- Primer numero secret.
- El primer numero secret s'obte d'unes operacions realitzades sobre el byte numero 15, el byte numero 46 i el byte numero 75 del fitxer MYR, seguint la formula:
- N1 = (((3*(Byte[15]))%210) + ((3*(Byte[46]))%210) + ((3*(Byte[75]))%210))%210
- Tambe el segon numero secret s'obte de realitzar determinades operacions amb la majoria de bytes d'aquesta primera part i alguns bytes de la tercera part. Al capitol corresponent a la tercera part, es parlara amb mes deteniment d'aquest segon numero secret.
- El primer numero secret s'obte d'unes operacions realitzades sobre el byte numero 15, el byte numero 46 i el byte numero 75 del fitxer MYR, seguint la formula:
Bytes 178 - 179
- Checksum.
Cos
La segona part del fitxer MYR comença a partir de la posicio 181 o sigui, el byte 180 i correspon al cos del fitxer que es on realment hi figura tota la informacio referent al dibuix. Totes les dades hi figuren ordenades segons les pasades. Cada pasada consta d'un numero de bytes que s'indica a la primera part del fitxer, de la que s'ha parlat anteriorment, concretament als bytes numero 110 i 111. S'ha de tenir en compte que de tots els bytes que conformen la pasada, els dos ultims corresponen a un checksum parcial que s'aplica a cada pasada del fitxer i que es la suma dels valors que contenen tots i cada un dels bytes de que consta la pasada.
En cadascuna de les pasades hi figura primer la informacio corresponent als getribes, amb un tamany en bytes igual a l'indicat per els bytes numero 106 i 107, i despres ve la informacio corresponent a les agulles del jacquard amb un tamany que sortira de fer el tractament anteriorment assenyalat als bytes 98 i 99.
Aquesta segona part del fitxer, te una longitud total igual al numero de bytes de cada pasada, multiplicat pel numero de pasades de que consta el fitxer. Aquestes dades ens les indiquen els bytes 110, 111 fent referencia als bytes de cada pasada, i el valor que surt de restar el numero de pasada en que acaba el fitxer, menys el numero de pasada en que comença menys 1. Per tant, el numero de pasades de que consta el fitxer MYR surt de fer la seguent operacio:
- Np=((byte[104]*256 + byte[105]) - ((byte[102]*256 + byte[103]) - 1))
D'aquesta manera podem calcular facilment el byte on comença la tercera part del fitxer sumant 180 a la longitud total de la segona part.
Cua
Nomes els fitxers que son de la revisio 2 presenten els 512 bytes que conformen la tercera part dels fitxers MYR.
Aquesta darrera part esta dividida fonamentalment en 2 arees. La primera d'elles te una longitud de 192 bytes i representa informacio sobre el copyright, i el nom de la empresa.
Seguidament ve un grup de dades de 160 shorts. En aquest grup, apareixen el segon numero secret i el checksum de la tercera part. Aquesta informacio correspon als quatre ultims bytes del fitxer per aquest ordre:
- Els primers 192 bytes es podrien dividir en 3 subgrups:
- Bytes 0 - 79: Missatge de copyright. D'aquests 80 bytes no es poden modificar els que van del 0 al 45. Aquests bytes corresponen a la cadena: "Copyright (C) KARL MAYER Textilmaschinenfabrik". Tots els altres bytes es poden veure modificats lliurement.
- Bytes 80 - 111: Missatge de drets reservats. Tots aquests 32 bytes es poden modificar a voluntat.
- Bytes 112 - 191: Aquests 80 bytes informen del nom de la companyia. Els 46 primers bytes pertanyen a la formula que permet trobat el segon numero secret.
El segon numero secret surt de calcular la seguent formula:
N2 =
(Byte[0] % company[1]) + (Byte[1] % company[0]) +
(Byte[2] % company[3]) + (Byte[3] % company[2]) +
(Byte[4] % company[5]) + (Byte[5] % company[4]) +
(Byte[6] % company[7]) + (Byte[7] % company[6]) +
(Byte[8] % company[9]) + (Byte[9] % company[8]) +
(Byte[10]% company[11]) + (Byte[11]% company[10]) +
(Byte[12]% company[13]) + (Byte[13]% company[12]) +
(Byte[14]% company[15]) + (Byte[15]% company[14]) +
(Byte[16]% company[17]) + (Byte[17]% company[16]) +
(Byte[18]% company[19]) + (Byte[19]% company[18]) +
(Byte[20]% company[21]) + (Byte[21]% company[20]) +
(Byte[42]% company[1]) + (Byte[43]% company[0]) +
(Byte[44]% company[3]) + (Byte[45]% company[2]) +
(Byte[46]% company[5]) + (Byte[47]% company[4]) +
(Byte[48]% company[7]) + (Byte[49]% company[6]) +
(Byte[50]% company[9]) + (Byte[51]% company[8]) +
(Byte[52]% company[11]) + (Byte[53]% company[10]) +
(Byte[54]% company[13]) + (Byte[55]% company[12]) +
(Byte[56]% company[15]) + (Byte[57]% company[14]) +
(Byte[58]% company[17]) + (Byte[59]% company[16]) +
(Byte[60]% company[19]) + (Byte[61]% company[18]) +
(Byte[62]% company[21]) + (Byte[63]% company[20]) +
(Byte[64]% company[23]) + (Byte[65]% company[22]) +
(Byte[66]% company[25]) + (Byte[67]% company[24]) +
(Byte[68]% company[27]) + (Byte[69]% company[26]) +
(Byte[70]% company[29]) + (Byte[71]% company[28]) +
(Byte[72]% company[31]) + (Byte[73]% company[30]) +
(Byte[74]% company[33]) + (Byte[75]% company[32]) +
(Byte[76]% company[35]) + (Byte[77]% company[34]) +
(Byte[78]% company[37]) + (Byte[79]% company[36]) +
(Byte[80]% company[39]) + (Byte[81]% company[38]) +
(Byte[82]% company[41]) + (Byte[83]% company[40]) +
(Byte[84]% company[43]) + (Byte[85]% company[42]) +
(Byte[86]% company[45]) + (Byte[87]% company[44])
Nota:Byte[0] esta al offset 90 del arxiu
Referent als bytes que indiquen el segon numero secret (bytes 508 i 509 de la tercera part del fitxer), s'ha de dir que no mantenen la logica de significacio de bytes propia del Unix, sino l'ordre propi del sistema operatiu DOS. Es a dir, el primer byte (508) es el menys significatiu, i el segon (509) es el que correspon al byte mes significatiu. D'aquesta manera
cal multiplicar el segon byte (509) per 256, i sumar-li el primer (508) per obtenir el numero que ens facilita la formula.
Cal entendre que la numeracio de bytes que s'indica en aquesta formula, correspon als numeros de bytes del fitxer MYR sencer, i no pas de la tercera part. En canvi, els bytes que assenyalen la variable 'company' i corresponen als bytes de la tercera part que van del byte 112 al byte 157, seguint l'ordre que indica l'index de la variable, a partir del byte 112 del fitxer.
Analisi de fitxer
A continuacio es procedira a fer l'analisis d'un fitxer tipus MYR. El fitxer que s'analitzara es diu vers5pas.myr i es una reduccio feta amb el programa twingo del fitxer vers9.myr fins a deixar-lo nomes amb 5 pasades i 10 bytes de getribes, com es veura mes endavant. A mes, s'ha modificat el cos del fitxer per tal de facilitar mes informacio. S'ha escollit aquest fitxer sobretot perque es un fitxer de la revisio 2 i aixo permet que es pugui analitzar tambe la tercera part del fitxer MYR.
Es convenient que a l'hora de fer el seguiment dels bytes es disposi d'una finestra amb el programa 'sector' mostrant l'aspecte real del fitxer MYR. Aixo potser ajudara a comprendre del tot la seva estructura.
Analisi de la Capçalera
Els bytes que van del 0 al 13 indiquen el nom del camp corresponent al nom de la maquina. Ens trobem en els dos primers bytes un 77 i un 65 que son invariables en tot fitxer MYR. En aquests 14 bytes apareixen els valors corresponents als caracters 'MASCHINENTYPE :' o sigui la sequencia seguent:
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 |
| 77 | 65 | 83 | 67 | 72 | 73 | 78 | 69 | 78 | 84 | 89 | 80 | 32 | 58 |
| M | A | S | C | H | I | N | E | N | T | Y | P | : |
A continuacio venen una sequencia de 12 bytes on s'indica el nom propiament dit de la maquina. Concretament:
| 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 77 | 82 | 83 | 74 | 70 | 53 | 51 | 47 | 49 | 47 | 50 | 52 | 32 | 13 | 10 |
| M | R | S | J | 7 | 8 | / | 1 | S | U | L | CR | LF |
- 15: El valor que conte (82), el farem servir per calcular la formula corresponent al primer numero secret
- 19-20: Els caracters que contenen, representen els numeros 7 i 8 (78) i indiquen el numero de getribes que te, encara que no es fa cas d'aquest numero, sino d'una dada que apareix en els primers 180 bytes del fitxer
- 26: Sempre val el mateix (32), sembla ser una indicacio de fi de cadena.
- 27-28: Canvi de linia, si els modifiquem no s'efectua el canvi de linia i la informacio apareix seguida
Pasem ara a la seguent sequencia. Apareix el nom del camp corresponent al nom del dibuix:
| 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 |
| 77 | 117 | 115 | 116 | 101 | 114 | 46 | 46 | 46 | 46 | 46 | 46 | 32 | 58 | 32 |
| M | u | s | t | e | r | . | . | . | . | . | . | : |
Com es pot observar, aquesta vegada apareix el nom del camp en minuscules, la qual cosa certifica el fet que es pot canviar tant com es vulgui. El byte numero 43 tambe pertany a aquesta part i no al nom del dibuix que ve a continuacio. Seguidament venen una altra vegada 12 bytes on s'indica el nom del dibuix.
| 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 |
| 86 | 69 | 82 | 83 | 32 | 32 | 32 | 32 | 32 | 32 | 32 | 32 | 32 | 13 | 10 |
| V | E | R | S | CR | LF |
- 46: El valor que conte (82), el farem servir per calcular la formula corresponent al primer numero secret
- 56: Sempre val el mateix (32), sembla ser una indicacio de fi de cadena.
- 57-58: Canvi de linia, si els modifiquem no s'efectua el canvi de linia i la informacio apareix seguida
S'estudiara a continuacio el tercer camp que es la data del creacio del dibuix. Con en els dos apartats anterir primerament apareix el nom del camp.
| 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 |
| 50 | 52 | 46 | 48 | 50 | 46 | 57 | 55 | 32 | 32 | 32 | 32 | 32 | 13 | 10 |
| 2 | 4 | . | 0 | 2 | . | 9 | 7 | 13 | 10 |
- 75: El valor que conte (4), el farem servir per calcular la formula corresponent al primer numero secret
La data apareix segons el format DD.MM.YY i sempre ha estat d'aquesta manera. No obstant, es un camp que tambe es deixa modificar a voluntat sense cap mena de problema.
Per acabar aquest primer gran bloc de la primera part del fitxer MYR, apareix el byte numero 89 amb el seguent valor:
- Byte[89] = 0
Aixo indica la finalitzacio de la informacio anterior. A partir d'aqui, els seguents bytes, que es procedira a analitzar a continuacio, assenyalaran caracteristiques importants del fitxer.
- Byte[90] = 17
- Byte[91] = 2
Aquests dos bytes s'agafaran per separat i s'extreuran els quatre bits de mes pes i els quatre bits de menys pes realizant les seguents operacions:
- Byte[90]/16 = 1 (quatre bits de mes pes)
- Byte[90]%16 = 1 (quatre bits de menys pes)
- Byte[91]/16 = 0 (quatre bits de mes pes)
- Byte[91]%16 = 2 (quatre bits de menys pes)
Amb aquests quatre valors, podem extreure informacio sobre:
- Byte[90]
- 1 -> X-rt
- 1 -> X-blocksize
- Byte[91]
- 0 -> Y-rt
- 2 -> Y-Blocksize
- Byte[92] = 1
El byte numero 92 ens indica que aquest fitxer pertany a la cinta numero 1.
- Byte[93] = 1
El seguent byte ens indica que el dibuix consta en total de 1 cinta, la qual cosa vol dir que l'actual es la primera i darrera cinta del dibuix, i que per tant, totes les pasades del dibuix estan representades de l'actual fitxer.
- Byte[94] = 0
- Byte[95] = 0
La informacio corresponent a aquests dos bytes es desconeguda.
- Byte[96] = 12
- Byte[97] = 0
Si es calcula el valor que surt d'aquests dos bytes (12*256 + 0) tenim el valor 3072, que es el numero d'agulles que te la maquina.
- Byte[98] = 0
- Byte[99] = 8
De forma analoga, podem calcular el valor que surt d'aquests dos bytes que es 8, i que indica que cada una de les pasades constara d'un determinat numero de bytes dedicats als getribes, que veurem mes endavant, i d'un altre numero de bytes dedicats a bits de jacquard que calcularem a continuacio: El valor ens diu que hi haura 8 bits de jacquard per pasada, pero sabem que qualsevol fitxer no pot guardar 'bits' sino que la unitat minima amb la que treballa es el byte. Els fitxers myr, a mes, tenen una particularitat en aquest punt, i es que guarda unitats de words. Per tant, 8 bits de jacquard ocuparan realment 2 bytes per cada pasada al fitxer myr, i seran 2 bytes que aniran a continuacio dels bytes de getribes.
- Byte[100] = 0
- Byte[101] = 5
A continuacio venen dos bytes que assenyalen el numero total de pasades comptant totes les cintes de que consta el dibuix. Com que segons els byte numero 93 hem deduit que el dibuix nomes consta d'una cinta, sabem que totes les pasades que el formen estan en el present fitxer i que aquest consta de 5 pasades.
- Byte[102] = 0
- Byte[103] = 1
Ens indica el numero de pasada en que comença aquesta cinta. Ja que es tracta de la primera (i darrera) cinta del dibuix es normal trobar un 1 en aquests dos bytes. Si fos una cinta diferent de la primera, aqui vindria representat el numero de pasada pel que ha de continuar llegint el fitxer, que seria el numero de pasada en que s'acabava la cinta anterior mes 1.
- Byte[104] = 0
- Byte[105] = 5
Tot seguit trobem el numero de pasada en que acabara aquesta cinta i ja que es tracta de la ultima del dibuix trobarem aqui el numero total de pasades de que consta tot el dibuix. (5 en aquest cas). El numero de pasades que formen el fitxer actual el podrem deduir si mirem cuantes pasades van des de la que indiquen els bytes 102 i 103 fins la que indiquen aquests dos bytes 104 i 105.
- Byte[106] = 0
- Byte[107] = 10
El valor 10 que tenen aquests dos bytes indica el numero de bytes dedicat en cada pasada a la informacio referent als getribes. Aquesta dada es la que complementa la informacio obtinguda a patir dels bytes 98 i 99 que indicaven quants bits de jacquard tenia el dibuix. Per tant, ja podriem fer un primer esquema del que sera, una vegada entrats en el cos del fitxer, l'estructura de cada una de les pasades:
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 |
| XX | XX | XX | XX | XX | XX | XX | XX | XX | XX | XX | XX | XX | XX |
- 00-09: Getribes (10 bytes)
- 10-11: Bits de Jacquard (2 bytes)
- 12-13: Checksum de cada pasada (2 bytes)
- Byte[108] = 0
Aquest byte dona informacio sobre el numero de barres de planxa que hi ha al dibuix. En aquest cas, 0 barres de planxa.
- Byte[109] = 10
Informacio desconoguda fins al moment d'escriure el present informe.
- Byte[110] = 0
- Byte[111] = 14
Amb aquests dos bytes es podria dir que acaba una part important de les dades que facilita la capçalera que estem analitzant. El valor de 14 bytes que indiquen es el total de bytes que ocupara en el cos del fitxer, cada pasada, si sumem els bytes que ocupa la informacio relativa a getribes (10 bytes), el numero de bytes que ocupen els bits de jacquard (2 bytes) i els 2 bytes de checksum obligatoris al final de cada pasada, tal com indica l'esquema anterior. Per tant tindrem 14 bytes totals per pasada. Si multipliquem aquesta dada per el total de pasades de que consta el fitxer obtinfrem un numero que sera els bytes totals que ocupara el cos del fitxer MYR. Si a aixo li sumem els 180 bytes que ocupa la capçalera, i els 512 ultims bytes (en cas de que el fitxer sigui de la revisio 2) podrem fer un calcul exacte de la quantitat de bytes en total que ocupa el fitxer que estem analitzant. Per al nostre cas els calculs son els seguents:
| 180 bytes | + | (14 bytes/pasada X 5 pasades) | + | 512 bytes | = | 762 bytes |
| Capçalera | + | Cos | + | Cua | = | Total |
| 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 |
| 0 | 1 | 0 | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Cinta n1 | Cinta n2 | Cinta n3 | Cinta n4 | Cinta n5 | |||||||||||||||
En el cas d'haver-hi diferents cintes, els 20 bytes que hi ha a partir del numero 112 indicarien la sequencia de pasades que hi ha entre el maxim de 5 cintes possibles. De cada parell de 2 bytes, el primer indicaria el numero de pasada on comença aquella cinta, i el segon el numero de pasada on acabaria. En el present cas, tractant-se nomes d'una cinta els dos primers bytes del primer grup (n 112 i 113) indiquen que la cinta comença amb la pasada numero 1, i els dos seguents (n 114 i 115) que la cinta acaba amb la pasada numero 5.
| 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 |
| 0 | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Repet n1 | Repet n2 | Repet n3 | Repet n4 | Repet n5 | |||||
A continuacio venen 5 grups de 2 bytes cadascun indicant la distribucio del total de pasades entre les 5 repeticions disponibles. Apareix de manera que els dos primers bytes indiquen el numero de pasades de la primera repeticio, els dos seguents el de la segona repeticio i aixi successivament. En el cas que ens ocupa s'ha donat la casualitat que les 5 pasades coincideixen en un mateix grup pero podien haver estat repartides entre varies i organitzades despres segons la informacio facilitada pels bytes del seguent apartat.
| 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 |
| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Seguidament venen cinc grups mes de 2 bytes. Aquests indiquen cuantes vegades i quin dels anteriors grups es repetira. La informacio que te el fitxer indica que la primera repeticio o grup de pasades s'ha de repetir una vegada.
| 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 |
| 0 | 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Repet n1 | Repet n2 | Repet n3 | Repet n4 | Repet n5 | Repet n6 | ||||||
Sis grups de bytes que indiquen el numero d'agulles de que consten cada una de les sis repeticions disponibles. En el cas de l'exemple, nomes hi ha una repeticio que consta de 6 agulles.
| 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 |
| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
A continuacio s'indica, de manera similar a com pasava amb les pasades, el numero de vegades que es repetira i quina sera la repeticio que s'hagi de repetir. Com es pot veure, en l'exemple tenim que la primera repeticio es faci 1 sola vegada.
- Byte[176] = 0
- Byte[177] = 18
Tot seguit venen dos bytes que indiquen el primer numero secret. Aquest valor el podem calcular seguint la formula coneguda a partir dels valors marcats anteriorment en quant es feien servir per al calcul:
- N1 = (((3*(Byte[15]))%210) + ((3*(Byte[46]))%210) + ((3*(Byte[75]))%210))%210
Substituint segons els valors del nostre exemple,
- N1 = (((3*82)%210) + ((3*82)%210) + ((3*52)%210))%210
- N1 = (246%210 + 246%210 + 156%210)%210
- N1 = (36 + 36 + 156 )%210
- N1 = (228)%210 = 18
18 es el valor que indiquen aquests dos bytes.
- Byte[178] = 20
- Byte[179] = 21
Els dos darrers bytes de la capçalera estan dedicats al checksum que es la suma de tots els bytes (menys aquests dos) que la componen. En total: 5141 bytes.
Analisi del cos
El cos de tot fitxer MYR es composa d'una serie de pasades (el nombre del qual s'indica en bytes analitzats anteriorment a la capçalera) de forma que per comprendre-ho millor caldria remitir-se a l'esquema que representava l'estructura d'una pasada que reproduirem i completarem tot seguit. Cal recordar tres dades basiques extretes de la capçalera del fitxer que estem analitzant i que ens donen informacio valuosa sobre l'estructura de cada pasada:
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 |
| XX | XX | XX | XX | XX | XX | XX | XX | XX | XX | XX | XX | XX | XX |
- 00-09: Getribes (10 bytes)
- 10-11: Bits de Jacquard (2 bytes)
- 12-13: Checksum de cada pasada (2 bytes)
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | ||
| 170 | 208 | 170 | 198 | 176 | 166 | 34 | 190 | 154 | 178 | 252 | 0 | 7 | 104 | ||
| 56 | 80 | 50 | 76 | 50 | 38 | 34 | 74 | 28 | 60 | 252 | 0 | 3 | 30 | ||
| 170 | 210 | 170 | 198 | 176 | 166 | 162 | 192 | 154 | 178 | 252 | 0 | 7 | 236 | ||
| 54 | 82 | 50 | 78 | 50 | 38 | 34 | 74 | 30 | 56 | 252 | 0 | 3 | 30 | ||
| 170 | 210 | 170 | 198 | 176 | 166 | 162 | 192 | 154 | 178 | 252 | 0 | 7 | 236 |
La informacio corresponent a cada byte de getribe la podem separar en dos: Per una part, el bit mes alt, que indica que la barra es de planxa, i els 7 bits seguents que indiquen propiament el valor que te. Aixi, Les diferents pasades les podriem veure de la seguent manera: (L'asterisc (*) vol dir que la barra es de planxa):
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 |
| *42 | *80 | *42 | *70 | *48 | *38 | 34 | *62 | *26 | *50 |
| 56 | 80 | 50 | 76 | 50 | 38 | 34 | 74 | 28 | 60 |
| *42 | *82 | *42 | *70 | *48 | *38 | *34 | *64 | *26 | *50 |
| 54 | 82 | 50 | 78 | 50 | 38 | 34 | 74 | 30 | 56 |
| *42 | *82 | *42 | *70 | *48 | *38 | *34 | *64 | *26 | *50 |
Referent als bits de jacquard, tenim el mateix valor per cada barra, encara que podia no haver estat aixi. En concret els valors [252][0]. Sabem que son 8 bits de jacquard i per tant unicament son valids els 8 primers bits, que corresponen al primer byte sencer. Si ho traduim a bits:
[252] = 11111100 . En general, utilitzarem una 'T' per indicar una valor de bit a 0 i una 'H' per indicar un valor de bit a 1. Per tant:
- [252] - HHHHHHTT.
Els dos ultims bytes que trobem en cada pasada corresponen al checksum, que resulta ser la suma de tots els bytes (menys els dos ultims) de la pasada.
Analisi de la cua
Finalment procedirem a analitzar la tercera i ultima part del fitxer myr, que existeix gracies a que aquest es un fitxer corresponent a la revisio 2. L'estructura de la tercera part la composen dos blocs, un de 192 bytes i un altre de 160 words de 2 bytes, o sigui, 320 bytes. En total formen 512 bytes.
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 |
| 67 | 111 | 112 | 121 | 114 | 105 | 103 | 104 | 116 | 32 |
| C | o | p | y | r | i | g | h | t |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 40 | 67 | 41 | 32 | 75 | 65 | 82 | 76 | 32 | 77 |
| ( | C | ) | K | A | R | L | M |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 65 | 89 | 69 | 82 | 32 | 84 | 101 | 120 | 116 | 105 |
| A | Y | E | R | T | e | x | t | i |
| 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
| 108 | 109 | 97 | 115 | 99 | 104 | 105 | 110 | 101 | 110 |
| l | m | a | s | c | h | i | n | e | n |
| 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 |
| 102 | 97 | 98 | 114 | 105 | 107 | 32 | 49 | 57 | 56 |
| f | a | b | r | i | k | 1 | 9 | 8 |
| 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 |
| 55 | 44 | 49 | 57 | 56 | 56 | 44 | 49 | 57 | 56 |
| 7 | , | 1 | 9 | 8 | 8 | , | 1 | 9 | 8 |
| 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 |
| 57 | 44 | 49 | 57 | 57 | 48 | 46 | 32 | 32 | 32 |
| 9 | , | 1 | 9 | 9 | 0 | . |
| 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
| 32 | 32 | 32 | 32 | 32 | 32 | 32 | 32 | 32 | 32 |
En aquests 80 primers bytes apareix el missatge de copyright. No es pot canviar el valor dels numeros de bytes que van del 0 al 45 si es preten que el fitxer mantingui la seva validesa.
| 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 |
| 65 | 108 | 108 | 32 | 114 | 105 | 103 | 104 | 116 | 115 |
| A | l | l | r | i | g | h | t | s |
| 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 |
| 32 | 114 | 101 | 115 | 101 | 114 | 118 | 101 | 100 | 46 |
| r | e | s | e | r | v | e | d | . |
| 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 |
| 32 | 32 | 32 | 32 | 32 | 32 | 32 | 32 | 32 | 32 |
| 110 | 111 |
| 32 | 32 |
En els seguents 32 bytes hi ha el missatge de drets reservats. Tots aquests 32 bytes els podriem modificar a voluntat sense que alterar la validesa del fitxer.
- 112-157: Tots aquests bytes pertanyen a la formula del 2on numero secret
Els ultims 80 bytes (112-191), donen informacio sobre el nom de la companyia. Els 46 primers bytes d'aquest apartat pertanyen a la formula que permet trobar el segon numero secret, i que procedirem a calcular quan analitzem l'ultim bloc d'aquesta tercera part.
- 192-507: En l'ultim bloc es presenten 316 bytes (158 words) omplerts de 0 en aquest exemple, encara que se sap que poden tenir algun valor (almenys alguns d'ells). No obstant, es desconeix el seu significat.
| 508 | 509 | 510 | 511 |
| 109 | 0 | 44 | 211 |
El primer word d'aquests ultims bytes fa referencia al segon numero secret, i el segon al checksum d'aquesta tercera part que suma un total de 11475.
En quant al numero secret hem de tenir en compte l'ordre invers de pes de bytes per calcular-ho. Per tant el que hi ha en aquest fitxer es 109. Calculem-ho ara amb l'ajuda de la formula:
Abans, recordem que els bytes que participen en la formula del segon numero secret corresponen tant a primera part com a la tercera. En la formula, les variables senyalades com company[x] fan referencia a bytes de la tercera part (els que han estat marcats anteriorment). En canvi les variables anomenades Byte[x] fan referencia a bytes de la primera part, a partir del bytes n 90. (Ex: Byte[0] es troba al offset 90 del arxiu)
(Byte[0] % company[1]) + (Byte[1] % company[0]) + (Byte[2] % company[3]) +
( 17 % 101 ) + ( 2 % 77 ) + ( 1 % 114 ) +
( 17 ) + ( 2 ) + ( 1 ) +
(Byte[3] % company[2]) + (Byte[4] % company[5]) + (Byte[5] % company[4]) +
( 1 % 116 ) + ( 0 % 116 ) + ( 0 % 105 ) +
( 1 ) + ( 0 ) + ( 0 ) +
(Byte[6] % company[7]) + (Byte[7] % company[6]) + (Byte[8] % company[9]) +
( 12 % 107 ) + ( 0 % 101 ) + ( 0 % 99 ) +
( 12 ) + ( 0 ) + ( 0 ) +
(Byte[9] % company[8]) + (Byte[10]% company[11]) + (Byte[11]% company[10]) +
( 8 % 32 ) + ( 0 % 114 ) + ( 5 % 111 ) +
( 8 ) + ( 0 ) + ( 5 ) +
(Byte[12]% company[13]) + (Byte[13]% company[12]) + (Byte[14]% company[15]) +
( 0 % 46 ) + ( 1 % 112 ) + ( 0 % 32 ) +
( 0 ) + ( 1 ) + ( 0 ) +
(Byte[15]% company[14]) + (Byte[16]% company[17]) + (Byte[17]% company[16]) +
( 5 % 32 ) + ( 0 % 32 ) + ( 10 % 32 ) +
( 5 ) + ( 0 ) + ( 10 ) +
(Byte[18]% company[19]) + (Byte[19]% company[18]) + (Byte[20]% company[21]) +
( 0 % 32 ) + ( 0 % 32 ) + ( 0 % 32 ) +
( 0 ) + ( 0 ) + ( 0 ) +
(Byte[21]% company[20]) + (Byte[42]% company[1]) + (Byte[43]% company[0]) +
( 14 % 32 ) + ( 0 % 101 ) + ( 5 % 77 ) +
( 14 ) + ( 0 ) + ( 5 ) +
(Byte[44]% company[3]) + (Byte[45]% company[2]) + (Byte[46]% company[5]) +
( 0 % 114 ) + ( 0 % 116 ) + ( 0 % 116 ) +
( 0 ) + ( 0 ) + ( 0 ) +
(Byte[47]% company[4]) + (Byte[48]% company[7]) + (Byte[49]% company[6]) +
( 0 % 105 ) + ( 0 % 107 ) + ( 0 % 101 ) +
( 0 ) + ( 0 ) + ( 0 ) +
(Byte[50]% company[9]) + (Byte[51]% company[8]) + (Byte[52]% company[11]) +
( 0 % 99 ) + ( 0 % 32 ) + ( 1 % 114 ) +
( 0 ) + ( 0 ) + ( 1 ) +
(Byte[53]% company[10]) + (Byte[54]% company[13]) + (Byte[55]% company[12]) +
( 1 % 111 ) + ( 0 % 46 ) + ( 0 % 112 ) +
( 1 ) + ( 0 ) + ( 0 ) +
(Byte[56]% company[15]) + (Byte[57]% company[14]) + (Byte[58]% company[17]) +
( 0 % 32 ) + ( 0 % 32 ) + ( 0 % 32 ) +
( 0 ) + ( 0 ) + ( 0 ) +
(Byte[59]% company[16]) + (Byte[60]% company[19]) + (Byte[61]% company[18]) +
( 0 % 32 ) + ( 0 % 32 ) + ( 0 % 32 ) +
( 0 ) + ( 0 ) + ( 0 ) +
(Byte[62]% company[21]) + (Byte[63]% company[20]) + (Byte[64]% company[23]) +
( 0 % 32 ) + ( 6 % 32 ) + ( 0 % 32 ) +
( 0 ) + ( 6 ) + ( 0 ) +
(Byte[65]% company[22]) + (Byte[66]% company[25]) + (Byte[67]% company[24]) +
( 0 % 32 ) + ( 0 % 32 ) + ( 0 % 32 ) +
( 0 ) + ( 0 ) + ( 0 ) +
(Byte[68]% company[27]) + (Byte[69]% company[26]) + (Byte[70]% company[29]) +
( 0 % 32 ) + ( 0 % 32 ) + ( 0 % 32 ) +
( 0 ) + ( 0 ) + ( 0 ) +
(Byte[71]% company[28]) + (Byte[72]% company[31]) + (Byte[73]% company[30]) +
( 0 % 32 ) + ( 0 % 32 ) + ( 0 % 32 ) +
( 0 ) + ( 0 ) + ( 0 ) +
(Byte[74]% company[33]) + (Byte[75]% company[32]) + (Byte[76]% company[35]) +
( 1 % 32 ) + ( 1 % 32 ) + ( 0 % 32 ) +
( 1 ) + ( 1 ) + ( 0 ) +
(Byte[77]% company[34]) + (Byte[78]% company[37]) + (Byte[79]% company[36]) +
( 0 % 32 ) + ( 0 % 32 ) + ( 0 % 32 ) +
( 0 ) + ( 0 ) + ( 0 ) +
(Byte[80]% company[39]) + (Byte[81]% company[38]) + (Byte[82]% company[41]) +
( 0 % 32 ) + ( 0 % 32 ) + ( 0 % 32 ) +
( 0 ) + ( 0 ) + ( 0 ) +
(Byte[83]% company[40]) + (Byte[84]% company[43]) + (Byte[85]% company[42]) +
( 0 % 32 ) + ( 0 % 32 ) + ( 0 % 32 ) +
( 0 ) + ( 0 ) + ( 0 ) +
(Byte[86]% company[45]) + (Byte[87]% company[44]) = 109
( 0 % 32 ) + ( 18 % 32 ) = 109
( 0 ) + ( 18 ) = 109