home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / emulate / m2a.lha / m2a.s < prev   
Text File  |  1992-06-10  |  18KB  |  600 lines

  1. ;
  2. ;    programme de conversion Ascii Mac <--> Amiga
  3. ;
  4. ;    conçu et réalisé par Jean-Pierre Rivière en février 1991
  5. ;
  6.  
  7. ExecBase        = $4
  8. OpenLibrary     = -$228
  9. CloseLibrary    = -$19e
  10. AllocMem        = -$c6
  11. FreeMem         = -$d2
  12. MemfPublic      = $1
  13. ModeOldFile     = $3ed  ; ModeNewFile = ModeOldFile ^ 3
  14. Open            = -$1e
  15. Close           = -$24
  16. Read            = -$2a
  17. Write           = -$30
  18.  
  19. DefTaille       = 7808  ; = 16 * 488 : taille du tampon d'E/S par défaut
  20.  
  21. LgrUsageMess    = 264   ; ne changez pas la longueur des messages!!
  22. LgrOuvrirMess   = 26
  23. LgrEcrireMess   = 42
  24. LgrLireMess     = 42
  25. LgrMemMess      = 40
  26.  
  27. EUH             = $c9   ; caractère Amiga sans équivalent Macintosh
  28.  
  29. ;###############################################################################
  30.  
  31. ; --- d'abord les initialisations d'usage ---
  32.  
  33. init:
  34.     move.l  d0,d5               ; sauvegarde de d0
  35.     movea.l a0,a3               ; sauvegarde de a0
  36.     move.l  ExecBase,a6
  37.     lea.l   DosName,a1
  38.     move.l  #0,d0               ; version indifferente
  39.     jsr     OpenLibrary(a6)
  40.     move.l  d0,DosBase
  41.     beq     fermerTout
  42.  
  43. ; --- maintenant on va explorer la ligne de commande ---
  44.  
  45. ; === utilisation des registres ===
  46. ; d3.b : nombre de caractère du mot actuel de la ligne de commande
  47. ; d4.b : nombre d'arguments passés hors option(s)
  48. ; d6.l : mode d'ouverture du prochain fichier
  49. ; a0.l : poisition actuelle dans la ligne de commande
  50. ; a1.l : dernier caractère de la ligne de commande
  51. ; a2.l : premier caractère utile de la ligne de commande
  52. ; a3.l : premier caractère unitile après le caractère repéré par a2.l
  53. ; a5.l : pointe sur le premier pointeur de fichier
  54. ; a6.l : base pour appels aux fonctions des bibliothèque
  55.  
  56. ; === utilisation de la mémoire ===
  57. ; Source    : pointeur de fichier source - suivi immédiatement par Cible
  58. ; Cible     : pointeur de fichier cible
  59. ; optionMem : octet indiquant si l'unique option a déjà été activée
  60.  
  61.     moveq.b #0,d4       ; nombre d'arguments
  62.     movea.l a3,a1       ; restauration de l'adresse de la ligne de commande
  63.     add.l   d5,a1       ; on ajoute le nombre de caractères
  64.     subq.l  #1,a1       ; pointe sur la fin de la ligne de commande
  65.     lea.l   Source,a5   ; debut des pointeurs de fichiers
  66.     move.l  #ModeOldFile,d6
  67.  
  68. encore:
  69.     move.l  a3,a0       ; c'est ici qu'est la ruse :
  70.                         ; cela permet de reboucler directement ici au cas où
  71.                         ; on aboutit à un mot vide (et assure aussi la
  72.                         ; progression quand il n'y a pas d'erreur).
  73.     jsr     traiter     ; examen de la ligne de commande
  74.     cmpa.l  #0,a3       ; a3 nul indique une erreur
  75.     beq.s   suite
  76.     cmpi.b  #1,d3       ; mot vide ?
  77.     beq.s   encore      ; fausse alerte (mot = "", ce qui est ignoré)
  78.     move.b  #0,(a3)+    ; on finit le mot selon la convention du C.
  79.                         ; c'est nécessaire pour l'ouverture d'un fichier.
  80.                         ; La postincrémentation est là pour permettre
  81.                         ; l'astuce en cas de mot vide (aller au delà du
  82.                         ; second guillemet est obligatoire).
  83.     cmpi.b  #$2d,(a2)+  ; un tiret ?
  84.     beq     option
  85.     cmpi.b  #2,d4       ; a-t-on déjà eu deux arguments ?
  86.     beq     modedEmploi ; si oui message d'explication affiché et terminé
  87.     addq.b  #1,d4       ; et un argument de plus
  88.     move.l  DosBase,a6
  89.     subq.l  #1,a2
  90.     move.l  a2,d1
  91.     move.l  a1,a2       ; sauvegarde a1 dans a2
  92.     move.l  d6,d2
  93.     jsr     Open(a6)
  94.     move.l  d0,(a5)+    ; sauvegarde du pointeur de fichier à sa place
  95.     beq     uneErreur   ; fichier refusant de s'ouvrir !
  96.     eori.b  #$3,d6      ; ModeOldFile <##> ModeNewFile (addq.l en toute rigueur)
  97.     move.l  a2,a1       ; restaure a1
  98.     move.b  #32,-(a3)   ; ici nécessaire pour reprendre l'algo
  99.                         ; la prédécrémentation est là suite à la ruse
  100.     move.b  #10,(a1)    ; et cela pour le cas extrême l'est aussi par suite
  101.     bra     encore
  102.  
  103. ; --- la ligne de commande est finie d'être explorée  ---
  104. ; --- peut-on travailler ou y a-t-il eu un problème ? ---
  105.  
  106. suite:
  107.     cmpi.b  #2,d4       ; les 2 fichiers sont-ils ouverts ?
  108.     bne     uneErreur   ; non : il y a eu une erreur.
  109.     movea.l ExecBase,a6
  110.     move.l  Taille,d0
  111.     moveq.l #MemfPublic,d1
  112.     jsr     AllocMem(a6)
  113.     tst.l   d0
  114.     beq     erreurMem
  115.     move.l  d0,Tampon
  116.     move.l  -(a5),a3    ; fichier cible
  117.     move.l  -(a5),a2    ; fichier source
  118.     move.l  d0,(Tampon)
  119.     tst.b   optionMem
  120.     bne.s   suite2
  121.     jsr     MacToAmiga  ; conversion de Mac vers Amiga (blessing)
  122.  
  123. ; --- C'est fini, on ferme ! ---
  124.  
  125. fermerTout:
  126.     lea.l   Source,a5
  127.     tst.l   (a5)
  128.     beq.s   fermerTout2
  129.     move.l  (a5)+,d1
  130.     move.l  DosBase,a6  ; on ferme le fichier source (ouvert en premier)
  131.     jsr     Close(a6)
  132.     tst.l   (a5)
  133.     beq.s   fermerTout2
  134.     move.l  (a5),d1     ; on ferme le fichier destination
  135.     jsr     Close(a6)
  136. fermerTout2:
  137.     movea.l ExecBase,a6
  138.     move.l  Tampon,a1
  139.     cmpa.l  #0,a1
  140.     beq.s   fermerTout3
  141.     move.l  Taille,d0   ; on libère la mémoire
  142.     jsr     FreeMem(a6)
  143. fermerTout3:
  144.     movea.l DosBase,a1
  145.     jsr     CloseLibrary(a6)
  146.  
  147.     rts                 ; programme terminé !
  148.  
  149. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  150.  
  151. ; --- conversion avec option -i ---
  152.  
  153. suite2:                 ; option -i active
  154.     jsr     AmigaToMac  ; conversion Amiga vers Mac (doom, bane & cursing)
  155.     bra.s   fermerTout
  156.  
  157. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  158.  
  159. ; --- première option ---
  160.  
  161. option:
  162.     ori.b   #32,(a2)    ; majuscule ##> minuscule
  163.     cmpi.b  #$62,(a2)+  ; est-ce un b ?
  164.     bne.s   option2
  165.     move.b  (a2)+,d0
  166.     cmpi.b  #$39,d0     ; ensuite, est-ce un chiffre ?
  167.     bgt     modedEmploi
  168.     subi.b  #$30,d0     ; si oui, on le transforme en chiffre binaire
  169.     blt     modedEmploi
  170.     tst.b  (a2)         ; encore un signe ?
  171.     bne     modedEmploi
  172.     move.l  #488,d1
  173.     lsl.l   d0,d1       ; on décale à gauche d'autant que le chiffre l'indique
  174.     move.l  d1,Taille
  175.     move.b  #32,-(a3)   ; pour bien repartir sur la ligne (de commande)
  176.     move.b  #10,(a1)    ; et sans oublier ça
  177.     bra     encore
  178.  
  179. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  180.  
  181. ; --- seconde option ---
  182.  
  183. option2:
  184.     cmpi.b  #$69,-1(a2) ; est-ce un i ?
  185.     bne.s   modedEmploi ; option inconnu
  186.     st      optionMem   ; on peut répéter l'option plusieurs fois...
  187.     tst.b   (a2)        ; encore un signe ?
  188.     bne     modedEmploi
  189.     move.b  #32,-(a3)   ; pour bien repartir sur la ligne (de commande)
  190.     move.b  #10,(a1)    ; et sans oublier ça
  191.     bra     encore
  192.  
  193. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  194.  
  195. ; --- pas d'allocation mémoire possible ---
  196.  
  197. erreurMem:
  198.     jsr     OuvrirStd
  199.     beq     fermerTout
  200.     move.l  #MemMess,d2
  201.     move.l  #LgrMemMess,d3
  202.     jsr     Write(a6)
  203.     bra     fermerTout
  204.  
  205. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  206.  
  207. ; --- quelle erreur ? ---
  208.  
  209. uneErreur:
  210.     jsr     OuvrirStd
  211.     beq     fermerTout
  212.     cmpa.l  #0,a3       ; une erreur de syntaxe avant tout ?
  213.     beq.s   modedEmploi
  214.     move.l  a3,d2
  215.     sub.l   d3,d2
  216.     move.l  d1,d4       ; sauvvegarde d1 = entrée standard
  217.     jsr     Write(a6)   ; longueur déjà en d3
  218.     move.l  d4,d1
  219.     move.l  #ouvrirMess,d2
  220.     move.l  #LgrOuvrirMess,d3
  221.     jsr     Write(a6)
  222.     bra     fermerTout
  223.  
  224. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  225.  
  226. ; --- - Comment ça marche, ce truc ? - T'as qu'à lire ! ---
  227.  
  228. modedEmploi:
  229.     jsr     OuvrirStd
  230.     beq     fermerTout
  231.     move.l  #usageMess,d2
  232.     move.l  #LgrUsageMess,d3
  233.     jsr     Write(a6)
  234.     bra     fermerTout
  235.  
  236. ;################################################################
  237.  
  238. ; *** ouvrir le canal du Shell d'appel ***
  239.  
  240. ; === sortie ===
  241. ; d0.l : contient le canal du Shell (ou 0)
  242. ; d1.l : égal à d0.l
  243. ; ccr  : Z est à 1 ssi une erreur est survenue
  244. ; a0.l et a1.l sont modifiés
  245. ; a6.l : DosBase
  246.  
  247. OuvrirStd:
  248.     movea.l DosBase,a6
  249.     move.l  #Shell,d1
  250.     move.l  #ModeOldFile,d2
  251.     jsr     Open(a6)
  252.     move.l  d0,d1       ; teste si erreur en même temps
  253.     rts
  254.  
  255. ;################################################################
  256.  
  257. ; *** erreur en lecture ***
  258.  
  259. LireErreur:
  260.     jsr     OuvrirStd
  261.     beq     fermerTout  ; Qu'avez-vous fait du Shell ?
  262.     move.l  #LireMess,d2
  263.     move.l  #LgrLireMess,d3
  264.     jsr     Write(a6)
  265.     rts
  266.  
  267. ;################################################################
  268.  
  269. ; *** erreur en écriture ***
  270.  
  271. EcrireErreur:
  272.     jsr     OuvrirStd
  273.     beq     fermerTout  ; Qu'avez-vous fait du Shell ?
  274.     move.l  #ecrireMess,d2
  275.     move.l  #LgrEcrireMess,d3
  276.     jsr     Write(a6)
  277.     rts
  278.  
  279. ;################################################################
  280.  
  281. ; *** trouve le premier mot (sa partie "efficace") et le mesure ***
  282. ; ***    version adaptée spécialement à la ligne de commande    ***
  283.  
  284. ; === entrée ===
  285. ; a0.l  : pointe sur le premier caractère
  286. ; a1.l  : pointe sur le dernier caractère
  287.  
  288. ; === sortie ===
  289. ; a0 et a1  : inchangés
  290. ; a2.l  : pointe sur le premier caractère "efficace" du premier mot
  291. ; a3.l  : pointe juste après le dernier caractère "efficace" du premier mot
  292. ;         a3.l est nul s'il y a une erreur de repérée
  293. ; d3.b  : longueur "efficace" du premier mot, plus un
  294.  
  295. ; on exploite le fait que le dernier caractère est toujours LF, de code 10
  296. ; et donc en particulier on n'a pas particulièreement à le sauver.
  297. ; il s'en suit que pour explorer autre chose qu'une ligne de commande,
  298. ; il faut encore adapter ce bout de code.
  299.  
  300. traiter:
  301.     movea.l a0,a2
  302.                         ; ici la sentinelle vaut LF
  303. sauter:
  304.     cmp.b   #32,(a2)+
  305.     beq.s   sauter
  306.     cmp.b   #10,-(a2)   ; dernier caractère (en fait) ?
  307.     beq.s   erreurTrait
  308.     movea.l a2,a3
  309.     cmp.b   #$22,(a2)   ; un guillemet (") ?
  310.     beq.s   guillemets
  311.     move.b  #32,(a1)    ; sentinelle = espace
  312. compter:
  313.     cmp.b   #32,(a3)+   ; sentinelle = espace
  314.     bne.s   compter
  315.                         ; remarque: le dernier caractère d'une ligne
  316.                         ; de commande est LF (code 10). Donc on a
  317.                         ; plus de test à faire sur a3 avant de placer
  318.                         ; la sentinelle dessus.
  319. finTraiter:
  320.     move.b  #10,(a1)
  321.     move.l  a3,d3
  322.     sub.l   a2,d3
  323.     cmp.b   #1,d3
  324.     beq     finDeLigne
  325.     sub.l   #1,a3       ; il faut revenir un caractère en arrière
  326.     rts
  327.  
  328. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  329.  
  330. finDeLigne:
  331.     movea.l #0,a3       ; erreur : il n'y a plus de mots sur la ligne
  332.     rts
  333.  
  334. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  335.  
  336. guillemets:
  337.     move.b  #$22,(a1)   ; sentinelle = guillemet
  338.     addq.l  #1,a3
  339. compter2:
  340.     cmp.b   #$22,(a3)+
  341.     bne.s   compter2
  342.     move.b  #10,(a1)
  343.     cmp.b   #$22,-(a3)  ; si pas un guillemet alors erreur
  344.     bne.s   erreurTrait
  345.     move.l  a3,d3
  346.     sub.l   a2,d3
  347.     addq.l  #1,a2
  348.     cmpi.b  #1,d3       ; rien entre les guillemets ?
  349.     beq     special
  350.     rts
  351.  
  352. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  353.  
  354. special:                ; il n'y a rien entre les guillemets
  355.     addq.l  #1,a3       ; dans ce cas il faut incrémenter a3
  356.                         ; de façon à ne pas retomber sur le second
  357.                         ; guillemet lors du prochain appel
  358.     rts
  359.  
  360. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  361.  
  362. erreurTrait:
  363.     movea.l #0,a3       ; signale une erreur (EOL ou guillemet manquant)
  364.     rts
  365.  
  366. ; ##########################################################################
  367.  
  368. ; *** convertit le fichier source Macintosh en fichier Amiga ***
  369.  
  370. ; === entrée ===
  371. ; a2.l : pointeur du fichier source
  372. ; a3.l : pointeur du fichier cible
  373.  
  374. ; === sortie ===
  375. ; a2.l et a3.l pointent à la fin de leur fichier.
  376. ; a4.l : inchangé
  377. ; a6.l : DosBase
  378. ; d0,d1,d2,d3,d4,a0,a1,a4,a5 sont modifiés
  379. ; le fichier cible est entièrement constitué.
  380.  
  381. MacToAmiga:
  382.     lea.l   Mac2Amiga,a4; tableau utilisé pour la conversion
  383.     move.l  Taille,d3
  384.     movea.l Tampon,a5
  385.     movea.l DosBase,a6
  386.  
  387. AccesDisqueMtoA:
  388.     move.l  a2,d1
  389.     move.l  a5,d2
  390.     jsr     Read(a6)
  391.     tst.l   d0
  392.     ble.s   MtoA_erreur1  ; erreur (EOF ou autre)
  393.     move.l  d0,d2   ; nombre d'octets lus et donc à traduire
  394.     move.w  d0,d4
  395.     subq.w  #1,d2
  396.     moveq.b #0,d0   ; sinon bug pour conversion ascii étendu
  397.  
  398. MtoA:
  399.     move.b  (a5)+,d0
  400.     cmpi.b  #127,d0     ; code ascii étendu ( > 127 ) ?
  401.     bvs.s   MtoA_Ext
  402.     cmpi.b  #13,d0      ; code = CR ?
  403.     beq.s   MtoA_CR
  404. MtoA_fin:
  405.     dbf.s   d2,MtoA     ; a-t-on tout traduit ?
  406.     move.l  a3,d1
  407.     movea.l Tampon,a5
  408.     move.l  a5,d2
  409.     move.l  d4,d3       ; nombre d'octets à recopier (et evt à relire)
  410.     jsr     Write(a6)
  411.     tst.l   d0          ; erreur d'écriture ?
  412.     blt.s   MtoA_erreur2
  413.     cmp.l   Taille,d4
  414.     beq.s   AccesDisqueMtoA
  415.     rts
  416.  
  417. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  418.  
  419. MtoA_erreur1:
  420.     jsr     LireErreur
  421.     rts
  422.  
  423. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  424.  
  425. MtoA_erreur2:
  426.     jsr     EcrireErreur
  427.     rts
  428.  
  429. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  430.  
  431. MtoA_Ext:
  432.     and.b   #$7F,d0         ; --> indice du tableau Mac2Amiga correspondant
  433.     move.b  0(a4,d0),-1(a5); conversion en le caractère Mac équivalent
  434.     bra.s   MtoA_fin
  435. MtoA_CR:
  436.     move.b  #10,-1(a5)  ; code devenu LF
  437.     bra.s   MtoA_fin
  438.  
  439. ; ################################################################
  440.  
  441. ; *** convertit le fichier source Amiga en fichier Macintosh ***
  442.  
  443. ; === entrée ===
  444. ; a2.l  : pointeur du fichier source
  445. ; a3.l  : pointeur du fichier cible
  446.  
  447. ; === sortie ===
  448. ; a2.l et a3.l pointent à la fin de leur fichier.
  449. ; a4.l : inchangé
  450. ; a6.l : DosBase
  451. ; d0,d1,d2,d3,d4,a1,a4,a5 sont modifiés
  452. ; le fichier cible est entièrement constitué.
  453.  
  454. AmigaToMac:
  455.     lea.l   Amiga2Mac,a4; tableau utilisé pour la conversion
  456.     move.l  Taille,d3
  457.     movea.l Tampon,a5
  458.     movea.l DosBase,a6
  459.  
  460. AccesDisqueAtoM:
  461.     move.l  a2,d1
  462.     move.l  a5,d2
  463.     jsr     Read(a6)
  464.     tst.l   d0
  465.     ble.s   AtoM_erreur1  ; erreur (EOF)
  466.     move.l  d0,d2   ; nombre d'octets lus et donc à traduire
  467.     move.w  d0,d4
  468.     subq.w  #1,d2
  469.     moveq.b #0,d0   ; sinon bug pour conversion ascii étendu
  470.  
  471. AtoM:
  472.     move.b  (a5)+,d0
  473.     cmp.b   #127,d0     ; code ascii étendu ( > 127 ) ?
  474.     bvs.s   AtoM_Ext
  475.     cmp.b   #10,d0      ; code = LF ?
  476.     beq.s   AtoM_CR
  477. AtoM_fin:
  478.     dbf.s   d2,AtoM     ; a-t-on tout traduit ?
  479.     move.l  a3,d1
  480.     movea.l Tampon,a5
  481.     move.l  a5,d2
  482.     move.l  d4,d3       ; nombre d'octets à recopier (et evt à relire)
  483.     jsr     Write(a6)
  484.     tst.l   d0          ; erreur d'écritue ?
  485.     blt.s   AtoM_erreur2
  486.     cmp.l   Taille,d4
  487.     beq.s   AccesDisqueAtoM
  488.     rts
  489.  
  490. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  491.  
  492. AtoM_erreur1:
  493.     jsr     LireErreur
  494.     rts
  495.  
  496. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  497.  
  498. AtoM_erreur2:
  499.     jsr     EcrireErreur
  500.     rts
  501.  
  502. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  503.  
  504. AtoM_Ext:
  505.     and.b   #$7F,d0         ; --> indice du tableau Amiga2Mac correspondant
  506.     move.b  0(a4,d0),-1(a5); conversion en le caractère Amiga équivalent
  507.     bra.s   AtoM_fin
  508. AtoM_CR:
  509.     move.b  #13,-1(a5)  ; code devenu CR
  510.     bra.s   AtoM_fin
  511.  
  512. ; *********************************************************************
  513.  
  514. ; === variables & constantes ===
  515.  
  516. DosBase:    dc.l    0   ; pointeur sur DosBase
  517. Source:     dc.l    0   ; pointeur de fichier source
  518. Cible:      dc.l    0   ; pointeur de fichier cible
  519. Tampon:     dc.l    0   ; pointeur sur le tampon de mémoire dynamique
  520. Taille:     dc.l    DefTaille   ; taille du tampon d'E/S
  521.  
  522. optionMem   dc.b    0   ; drapeau sur l'option
  523.  
  524. DosName:    dc.b    "dos.library",0
  525.  
  526. Shell:      dc.b    "*",0
  527.  
  528. usageMess:  dc.b    "USAGE : m2a [-i] [-b#] source cible",10
  529.             dc.b    "m2a traduit un fichier ascii Macintosh en un fichier ascii Amiga.",10
  530.             dc.b    "Utilisez l'option -i pour faire le travail inverse.",10
  531.             dc.b    "La taille du buffer en octets est de 488*2^# avec l'option -b#",10
  532.             dc.b    "Sa taille par défaut est de 7808 octets. (-b4)",10,0
  533.  
  534. ouvrirMess: dc.b    " : ouverture impossible.",10,0
  535.  
  536. ecrireMess: dc.b    "erreur en écriture sur le fichier cible.",10,0
  537.  
  538. LireMess:   dc.b    "erreur en lecture sur le fichier source.",10,0
  539.  
  540. MemMess:    dc.b    "impossible d'allouer assez de mémoire.",10,0
  541.  
  542. Mac2Amiga:
  543.         dc.b    'Ä','Â',
  544.         dc.b    'Ç',
  545.         dc.b    'É',
  546.         dc.b    'Ñ',
  547.         dc.b    'Ö',
  548.         dc.b    'Ü',
  549.         dc.b    'á','à','â','ä','ã','å',
  550.         dc.b    'ç',
  551.         dc.b    'é','è','ê','ë',
  552.         dc.b    'í','ì','î','ï',
  553.         dc.b    'ñ',
  554.         dc.b    'ó','ò','ô','ö','õ',
  555.         dc.b    'ú','ù','û','ü',
  556.         dc.b    $80,'°','¢','£','§','·','¶','ß',
  557.         dc.b    '®','©',$81,'´','¨',$82,'Æ','Ø',
  558.         dc.b    $83,'±',$84,$85,'¥','µ','ð',$86,
  559.         dc.b    $87,$88,$89,'ª','º',$8a,'æ','ø',
  560.         dc.b    '¿','¡','¬',$8b,$8c,$8d,$8e,'«',
  561.         dc.b    '»',$8f,$a0,'À','Ã','Õ',$90,$91,
  562.         dc.b    '­','¯','"','"','`',$2c,'÷',$92,
  563.         dc.b    'ÿ',$93,'/','¤',$94,$95,$96,$97,
  564.         dc.b    $98,'.','¸',$99,$9a,'Â','Ê','Á',
  565.         dc.b    'Ë','È','Í','Î','Ï','Ì','Ó','Ô',
  566.         dc.b    $9b,'Ò','Ú','Û','Ù',$9c,'^','~',
  567.         dc.b    '­',$9d,'·','°',$9e,'"','.',$9f
  568.  
  569. Amiga2Mac:
  570.         dc.b    $a0,$aa,$ad,$b0,$b2,$b3,$b7,$b8,
  571.         dc.b    $b9,$ba,$bd,$c3,$c4,$c5,$c6,$c9,
  572.         dc.b    $ce,$cf,$d7,$d9,$dc,$dd,$de,$df,
  573.         dc.b    $e0,$e3,$e4,$f0,$f5,$f9,$fc,$ff,
  574.  
  575.         dc.b    $ca,$c1,$a2,$a3,$db,$b4,EUH,$a4,
  576.         dc.b    $ac,$a9,$bb,$c7,$c2,$d0,$a8,$d1,
  577.         dc.b    $a1,$b1,EUH,EUH,$ab,$b5,$a6,$a5,
  578.         dc.b    $e2,EUH,$bc,$c8,EUH,EUH,EUH,$c0,
  579.         dc.b    $cb,$e7,$e5,$cc,$80,$81,$ae,
  580.         dc.b    $82,
  581.         dc.b    $e9,$83,$e6,$e8,
  582.         dc.b    $ed,$ea,$eb,$ec,
  583.         dc.b    EUH,$84,
  584.         dc.b    $f1,$ee,$ef,$cd,$85,
  585.         dc.b    EUH,$a0,
  586.         dc.b    $f4,$f2,$f3,$86,
  587.         dc.b    EUH,
  588.         dc.b    EUH,$a7,
  589.         dc.b    $88,$87,$89,$8b,$8a,$8c,$be,
  590.         dc.b    $8d,
  591.         dc.b    $8f,$8e,$90,$91,
  592.         dc.b    $93,$92,$94,$95,
  593.         dc.b    $b6,$96,
  594.         dc.b    $98,$97,$99,$9b,$9a,
  595.         dc.b    $d6,$bf,
  596.         dc.b    $9d,$9c,$9e,$9f,
  597.         dc.b    EUH,EUH,$d8
  598.  
  599.         end
  600.