home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / apps / dtp / pgsmodst / atariimp / rediger.s < prev    next >
Text File  |  1991-05-23  |  7KB  |  345 lines

  1.  
  2.  Include "equ.h"
  3.  Include "impequ.h"
  4.  
  5.  
  6.  SECTION rediger,CODE,PUBLIC
  7. ***********************************************************
  8. ***                            ***
  9. ***********************************************************
  10. dumbentry:
  11.     clr.l    d0
  12.     rts
  13.  
  14.     dc.l    "IMPT"
  15.     dc.w    200
  16.     dc.l    0
  17.  
  18. table:    dc.l    0
  19.     dc.l    name,special,check,Rediger
  20.  
  21.  
  22. * Vrification du type de document
  23. * Le fichier doit commencer par les 3 caractres LIB 
  24. *  partir du second octet.
  25. check:    moveq    #0,D0        ; never par dfaut
  26.     move.l    table,A0
  27.     move.l    buff1(A0),A1
  28.     move.l    (A1),A1
  29.     cmp.b    #'L',1(A1)
  30.     bne.s    never
  31.     cmp.b    #'I',2(A1)
  32.     bne.s    never
  33.     cmp.b    #'B',3(A1)
  34.     bne.s    never
  35.     moveq    #2,d0        ; C'est bien un fichier LIB !!!
  36. never:    rts
  37.  
  38.  
  39. ; Importation d'un document de type Le rdacteur
  40. ;
  41. Rediger:
  42.     move.l    table,a0
  43.     move.l    flen(A0),A1
  44.     move.l    (A1),DocLen
  45.  
  46.     move.l    f_openr(a0),a0        ; Ouvre le fichier
  47.     jsr    (a0)
  48.     beq    Erreur            ; Erreur, on sort
  49.  
  50.     move.l    table,a0
  51.     move.l    t_open(a0),a0        ; Ouvre le fichier
  52.     jsr    (a0)
  53.     beq    Erreur            ; Erreur, on sort
  54.  
  55. ; On commence par saisir l'entete du document
  56. ; Saute les 8 premiers caractres
  57.     moveq    #8,D0
  58.     bsr    SkipByte        ; saute les 8 premiers octets
  59.  
  60. ; et les diffrentes chaines de configuration
  61.     moveq    #7-1,D7            ; On saute 7 chaines
  62. skp0:    bsr    SkipString        ; La rgle de tabulation
  63.     dbra    D7,skp0            ; les 6 chaines de mise en page
  64.  
  65. ; On prend l'interlignage qui est sur 2 octets selon un
  66. ; code trs bizzare
  67.     bsr    GetWord
  68.     sub.w    #$2020,D0
  69.     lsl.b    #4,D0
  70.     lsr.w    #4,D0
  71.     move.w    D0,Interligne
  72.  
  73.     bsr    SkipString        ; Saute la chaine dfinissant le
  74.                     ; nombre de signes dans le texte
  75.  
  76. ; Cherche la chaine $1B-$1B-$1B-$1B-$0 dfinissant la fin de l'entete
  77. WaitFin:
  78.     bsr    GetByte
  79.     cmp.b    #$1B,D0
  80.     bne.s    WaitFin
  81.     bsr    GetByte
  82.     cmp.b    #$1B,D0
  83.     bne.s    WaitFin
  84.     bsr    GetByte
  85.     cmp.b    #$1B,D0
  86.     bne.s    WaitFin
  87.     bsr    GetByte
  88.     cmp.b    #$1B,D0
  89.     bne.s    WaitFin
  90.     bsr    GetByte
  91.     tst.b    D0
  92.     bne.s    WaitFin
  93.  
  94. ; On configure PPM avec le bon interlignage
  95. ;    move.w    #CMD_LSP,D0
  96. ;    bsr    PutWord
  97. ;    move.w    Interligne,D0
  98. ;    bsr    PutWord
  99.  
  100. ; On est sur le texte proprement dit, au boulot ...    
  101. ; C'est la boucle de conversion.
  102. ; On peut, selon le code reu, avoir plusieurs possibilits
  103. ; 00 : on saute
  104. ; 08 : on saute
  105. ; 0A : Fin de ligne, on envoie un espace
  106. ; 0B : on saute
  107. ; 0C : Saut de page forc, on envoie un CR
  108. ; 0D : Fin de paragraphe, on envoie CR
  109. ; 1A : on saute
  110. ; 1B : Gre les attributs
  111. ; autre, on envoie tel-quel
  112. Redac1:    tst.l    DocLen
  113.     bls    FinDoc        ; Fin du document, on sort
  114.  
  115.     bsr    GetByte
  116.     tst.b    D0
  117.     beq    Redac1
  118.  
  119.     cmp.b    #8,D0        ; rserv
  120.     beq    Redac1
  121.  
  122.     cmp.b    #$0B,D0        ; rserv
  123.     beq    Redac1
  124.  
  125.     cmp.b    #$1A,D0        ; rserv
  126.     beq    Redac1
  127.  
  128.     cmp.b    #$0C,D0        ; Saute de page forc, on fait rien
  129.     beq    Redac1
  130.  
  131.     cmp.b    #$0A,D0        ; Fin de ligne, on en tient pas compte
  132.     beq    SendSpace
  133.  
  134.     cmp.b    #$0D,D0        ; Fin de paragraphe, on envoie CR-LF 
  135.     beq    SendCR
  136.  
  137.     cmp.b    #$1B,D0        ; Gestion d'attribut
  138.     beq    Attribute
  139.  
  140.     lea    ktoi,a0
  141.     and.w    #$ff,d0
  142.     move.b    0(a0,d0.w),d1
  143.     beq.s    Send
  144.     move.b    d1,d0
  145. Send:    bsr    PutByte        ; Sinon, on envoie tel quel vers PPM
  146.     bra    Redac1    
  147.  
  148. ; Fin du document, on ferme tout
  149. FinDoc:
  150. Erreur:    move.l    table,a0
  151.     move.l    f_closer(a0),a0
  152.     jsr    (a0)
  153.  
  154.     move.l    table,a0
  155.     move.l    t_close(a0),a0
  156.     jmp    (a0)
  157.  
  158. ; Envoie un espace vers PPM
  159. SendSpace:
  160.     moveq    #' ',D0
  161.     bra    Send
  162.  
  163. ; Envoie un retour chariot vers PPM
  164. SendCR:    moveq    #0,D0
  165.     bsr    PutByte
  166.     moveq    #1,D0
  167.     bra    Send
  168.  
  169. ; Gestion des attributs de police, de style et de centrage
  170. Attribute:
  171.     bsr    GetByte
  172.     cmp.b    #$01,D0
  173.     beq    Indent
  174.     cmp.b    #$20,D0
  175.     beq    LeftJust
  176.     cmp.b    #$21,D0
  177.     beq    LeftRightJust
  178.     cmp.b    #$22,D0
  179.     beq    Centrage
  180.     cmp.b    #$23,D0
  181.     beq    RightJust
  182.     cmp.b    #$40,D0
  183.     bmi    None
  184.     cmp.b    #$60,D0
  185.     bmi    SetFont
  186.     btst    #7,D0
  187.     bne    SetAtt
  188. None:    bra    Redac1
  189.  
  190. Indent:    
  191.     bra    Redac1
  192.  
  193. LeftJust:
  194.     move.w    #CMD_JST,D0
  195.     bsr    PutWord
  196.     moveq    #0,D0            ; Justification  gauche
  197.     bra    Send
  198.  
  199. RightJust:
  200.     move.w    #CMD_JST,D0
  201.     bsr    PutWord
  202.     moveq    #2,D0            ; Justification  droite
  203.     bra    Send
  204.  
  205. LeftRightJust:
  206.     move.w    #CMD_JST,D0
  207.     bsr    PutWord
  208.     moveq    #5,D0            ; Justification automatique
  209.     bra    Send
  210.  
  211. Centrage:
  212.     move.w    #CMD_JST,D0
  213.     bsr    PutWord
  214.     moveq    #1,D0            ; Centrage du texte
  215.     bra    Send
  216.  
  217. SetFont:
  218.     bra    Redac1
  219.  
  220. ; Gestion des attributs, on met les bits dans l'ordre PPM
  221. ; et on envoie la commande.
  222. SetAtt:    moveq    #0,D1
  223.     btst    #0,D0
  224.     beq.s    Bold
  225.     bset    #0,D1
  226. Bold:    btst    #1,D0
  227.     beq.s    Light
  228.     bset    #5,D1
  229. Light:    btst    #2,D0
  230.     beq.s    Italic
  231.     bset    #1,D1
  232. Italic:    btst    #3,D0
  233.     beq.s    Under
  234.     bset    #9,D1
  235. Under:
  236.     move.w    D1,-(SP)
  237.     move.w    #CMD_AT,D0
  238.     bsr    PutWord
  239.     moveq    #0,d0
  240.     move.w    (SP)+,D0
  241.     bsr    PutLong
  242.     bra    Redac1
  243.  
  244. ; Envoie un mot vers PP
  245. PutLong:
  246.     move.l    table,a0
  247.     move.l    t_putl(a0),a0
  248.     jmp    (a0)
  249.  
  250. ; Envoie un mot vers PP
  251. PutWord:
  252.     move.l    table,a0
  253.     move.l    t_putw(a0),a0
  254.     jmp    (a0)
  255.  
  256. ; Envoie un octet vers PP
  257. PutByte:
  258.     move.l    table,a0
  259.     move.l    t_put(a0),a0
  260.     jmp    (a0)
  261.  
  262. ; Lit un octet dans le fichier
  263. GetByte:
  264.     move.l    table,a0
  265.     move.l    f_get(a0),a0
  266.     jsr    (a0)
  267.     subq.l    #1,DocLen
  268.     rts
  269.  
  270. ; Lit un Word dans le fichier
  271. GetWord:
  272.     move.l    table,a0
  273.     move.l    f_getw(a0),a0
  274.     jsr    (a0)
  275.     subq.l    #2,DocLen
  276.     rts
  277.  
  278. ; Saute une chaine de caractres dans le fichier
  279. SkipString:
  280.     bsr    GetByte
  281.     tst.b    D0
  282.     beq.s    SkipString
  283.     rts
  284.  
  285. ; Saute un certain nombre d'octets
  286. SkipByte:
  287.     move.w    D0,-(SP)
  288.     bsr    GetByte
  289.     move.w    (SP)+,D0
  290.     dbra    D0,SkipByte
  291.     rts
  292.  
  293.  
  294. ***********************************************************
  295. ***                            ***
  296. ***********************************************************
  297.  SECTION rediger,DATA,PUBLIC
  298.  
  299. special:dc.w    1
  300.     dc.l    spcl1
  301.  
  302. name:    dc.b    "Redacteur v2.0.0",0
  303.  
  304. spcl1:    dc.b    "Formated Text",0
  305.  
  306.  
  307. * ATARIST ktoi
  308. ktoi:    dc.b    $00,$00,$00,$00,$00,$00,$00,$00        ;$00-$07
  309.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00        ;$08-$0f
  310.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00        ;$10-$17
  311.     dc.b    $00,$00,$00,$00,$00,$00,$00,$00        ;$18-$1f
  312.     dc.b    $20,$21,$22,$23,$24,$25,$26,$27
  313.     dc.b    $28,$29,$2a,$2b,$2c,$2d,$2e,$2f
  314.     dc.b    $30,$31,$32,$33,$34,$35,$36,$37
  315.     dc.b    $38,$39,$3a,$3b,$3c,$3d,$3e,$3f
  316.     dc.b    $40,$41,$42,$43,$44,$45,$46,$47
  317.     dc.b    $48,$49,$4a,$4b,$4c,$4d,$4e,$4f
  318.     dc.b    $50,$51,$52,$53,$54,$55,$56,$57
  319.     dc.b    $58,$59,$5a,$5b,$5c,$5d,$5e,$5f
  320.     dc.b    $60,$61,$62,$63,$64,$65,$66,$67
  321.     dc.b    $68,$69,$6a,$6b,$6c,$6d,$6e,$6f
  322.     dc.b    $70,$71,$72,$73,$74,$75,$76,$77
  323.     dc.b    $78,$79,$7a,$7b,$7c,$7d,$7e,$00
  324.     dc.b    199,252,233,226,228,224,229,231
  325.     dc.b    234,235,232,239,238,236,196,197
  326.     dc.b    201,230,198,244,246,242,251,249
  327.     dc.b    254,214,220,162,163,161,187,164
  328.     dc.b    225,237,243,250,241,209,189,156
  329.     dc.b    185,000,141,145,144,186,136,137
  330.     dc.b    227,245,159,191,247,215,192,195
  331.     dc.b    213,000,000,180,181,183,184,182
  332.     dc.b    000,000,138,000,000,000,000,000
  333.     dc.b    000,000,000,000,000,000,000,000
  334.     dc.b    000,000,000,000,000,000,000,000
  335.     dc.b    000,000,000,000,000,165,000,151
  336.     dc.b    000,000,000,150,000,000,153,000
  337.     dc.b    000,000,000,000,000,160,000,000
  338.     dc.b    131,140,135,134,000,000,139,130
  339.     dc.b    155,172,171,128,147,148,149,173
  340.  
  341.  SECTION rediger,BSS,PUBLIC
  342.  
  343. Interligne:    ds.w    1            ; Interligne
  344. DocLen:        ds.l    1            ; Longueur du fichier
  345.