home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Crawly Crypt Collection 2
/
crawlyvol2.bin
/
apps
/
dtp
/
pgsmodst
/
atariimp
/
rediger.s
< prev
next >
Wrap
Text File
|
1991-05-23
|
7KB
|
345 lines
Include "equ.h"
Include "impequ.h"
SECTION rediger,CODE,PUBLIC
***********************************************************
*** ***
***********************************************************
dumbentry:
clr.l d0
rts
dc.l "IMPT"
dc.w 200
dc.l 0
table: dc.l 0
dc.l name,special,check,Rediger
* Vrification du type de document
* Le fichier doit commencer par les 3 caractres LIB
* partir du second octet.
check: moveq #0,D0 ; never par dfaut
move.l table,A0
move.l buff1(A0),A1
move.l (A1),A1
cmp.b #'L',1(A1)
bne.s never
cmp.b #'I',2(A1)
bne.s never
cmp.b #'B',3(A1)
bne.s never
moveq #2,d0 ; C'est bien un fichier LIB !!!
never: rts
; Importation d'un document de type Le rdacteur
;
Rediger:
move.l table,a0
move.l flen(A0),A1
move.l (A1),DocLen
move.l f_openr(a0),a0 ; Ouvre le fichier
jsr (a0)
beq Erreur ; Erreur, on sort
move.l table,a0
move.l t_open(a0),a0 ; Ouvre le fichier
jsr (a0)
beq Erreur ; Erreur, on sort
; On commence par saisir l'entete du document
; Saute les 8 premiers caractres
moveq #8,D0
bsr SkipByte ; saute les 8 premiers octets
; et les diffrentes chaines de configuration
moveq #7-1,D7 ; On saute 7 chaines
skp0: bsr SkipString ; La rgle de tabulation
dbra D7,skp0 ; les 6 chaines de mise en page
; On prend l'interlignage qui est sur 2 octets selon un
; code trs bizzare
bsr GetWord
sub.w #$2020,D0
lsl.b #4,D0
lsr.w #4,D0
move.w D0,Interligne
bsr SkipString ; Saute la chaine dfinissant le
; nombre de signes dans le texte
; Cherche la chaine $1B-$1B-$1B-$1B-$0 dfinissant la fin de l'entete
WaitFin:
bsr GetByte
cmp.b #$1B,D0
bne.s WaitFin
bsr GetByte
cmp.b #$1B,D0
bne.s WaitFin
bsr GetByte
cmp.b #$1B,D0
bne.s WaitFin
bsr GetByte
cmp.b #$1B,D0
bne.s WaitFin
bsr GetByte
tst.b D0
bne.s WaitFin
; On configure PPM avec le bon interlignage
; move.w #CMD_LSP,D0
; bsr PutWord
; move.w Interligne,D0
; bsr PutWord
; On est sur le texte proprement dit, au boulot ...
; C'est la boucle de conversion.
; On peut, selon le code reu, avoir plusieurs possibilits
; 00 : on saute
; 08 : on saute
; 0A : Fin de ligne, on envoie un espace
; 0B : on saute
; 0C : Saut de page forc, on envoie un CR
; 0D : Fin de paragraphe, on envoie CR
; 1A : on saute
; 1B : Gre les attributs
; autre, on envoie tel-quel
Redac1: tst.l DocLen
bls FinDoc ; Fin du document, on sort
bsr GetByte
tst.b D0
beq Redac1
cmp.b #8,D0 ; rserv
beq Redac1
cmp.b #$0B,D0 ; rserv
beq Redac1
cmp.b #$1A,D0 ; rserv
beq Redac1
cmp.b #$0C,D0 ; Saute de page forc, on fait rien
beq Redac1
cmp.b #$0A,D0 ; Fin de ligne, on en tient pas compte
beq SendSpace
cmp.b #$0D,D0 ; Fin de paragraphe, on envoie CR-LF
beq SendCR
cmp.b #$1B,D0 ; Gestion d'attribut
beq Attribute
lea ktoi,a0
and.w #$ff,d0
move.b 0(a0,d0.w),d1
beq.s Send
move.b d1,d0
Send: bsr PutByte ; Sinon, on envoie tel quel vers PPM
bra Redac1
; Fin du document, on ferme tout
FinDoc:
Erreur: move.l table,a0
move.l f_closer(a0),a0
jsr (a0)
move.l table,a0
move.l t_close(a0),a0
jmp (a0)
; Envoie un espace vers PPM
SendSpace:
moveq #' ',D0
bra Send
; Envoie un retour chariot vers PPM
SendCR: moveq #0,D0
bsr PutByte
moveq #1,D0
bra Send
; Gestion des attributs de police, de style et de centrage
Attribute:
bsr GetByte
cmp.b #$01,D0
beq Indent
cmp.b #$20,D0
beq LeftJust
cmp.b #$21,D0
beq LeftRightJust
cmp.b #$22,D0
beq Centrage
cmp.b #$23,D0
beq RightJust
cmp.b #$40,D0
bmi None
cmp.b #$60,D0
bmi SetFont
btst #7,D0
bne SetAtt
None: bra Redac1
Indent:
bra Redac1
LeftJust:
move.w #CMD_JST,D0
bsr PutWord
moveq #0,D0 ; Justification gauche
bra Send
RightJust:
move.w #CMD_JST,D0
bsr PutWord
moveq #2,D0 ; Justification droite
bra Send
LeftRightJust:
move.w #CMD_JST,D0
bsr PutWord
moveq #5,D0 ; Justification automatique
bra Send
Centrage:
move.w #CMD_JST,D0
bsr PutWord
moveq #1,D0 ; Centrage du texte
bra Send
SetFont:
bra Redac1
; Gestion des attributs, on met les bits dans l'ordre PPM
; et on envoie la commande.
SetAtt: moveq #0,D1
btst #0,D0
beq.s Bold
bset #0,D1
Bold: btst #1,D0
beq.s Light
bset #5,D1
Light: btst #2,D0
beq.s Italic
bset #1,D1
Italic: btst #3,D0
beq.s Under
bset #9,D1
Under:
move.w D1,-(SP)
move.w #CMD_AT,D0
bsr PutWord
moveq #0,d0
move.w (SP)+,D0
bsr PutLong
bra Redac1
; Envoie un mot vers PP
PutLong:
move.l table,a0
move.l t_putl(a0),a0
jmp (a0)
; Envoie un mot vers PP
PutWord:
move.l table,a0
move.l t_putw(a0),a0
jmp (a0)
; Envoie un octet vers PP
PutByte:
move.l table,a0
move.l t_put(a0),a0
jmp (a0)
; Lit un octet dans le fichier
GetByte:
move.l table,a0
move.l f_get(a0),a0
jsr (a0)
subq.l #1,DocLen
rts
; Lit un Word dans le fichier
GetWord:
move.l table,a0
move.l f_getw(a0),a0
jsr (a0)
subq.l #2,DocLen
rts
; Saute une chaine de caractres dans le fichier
SkipString:
bsr GetByte
tst.b D0
beq.s SkipString
rts
; Saute un certain nombre d'octets
SkipByte:
move.w D0,-(SP)
bsr GetByte
move.w (SP)+,D0
dbra D0,SkipByte
rts
***********************************************************
*** ***
***********************************************************
SECTION rediger,DATA,PUBLIC
special:dc.w 1
dc.l spcl1
name: dc.b "Redacteur v2.0.0",0
spcl1: dc.b "Formated Text",0
* ATARIST ktoi
ktoi: dc.b $00,$00,$00,$00,$00,$00,$00,$00 ;$00-$07
dc.b $00,$00,$00,$00,$00,$00,$00,$00 ;$08-$0f
dc.b $00,$00,$00,$00,$00,$00,$00,$00 ;$10-$17
dc.b $00,$00,$00,$00,$00,$00,$00,$00 ;$18-$1f
dc.b $20,$21,$22,$23,$24,$25,$26,$27
dc.b $28,$29,$2a,$2b,$2c,$2d,$2e,$2f
dc.b $30,$31,$32,$33,$34,$35,$36,$37
dc.b $38,$39,$3a,$3b,$3c,$3d,$3e,$3f
dc.b $40,$41,$42,$43,$44,$45,$46,$47
dc.b $48,$49,$4a,$4b,$4c,$4d,$4e,$4f
dc.b $50,$51,$52,$53,$54,$55,$56,$57
dc.b $58,$59,$5a,$5b,$5c,$5d,$5e,$5f
dc.b $60,$61,$62,$63,$64,$65,$66,$67
dc.b $68,$69,$6a,$6b,$6c,$6d,$6e,$6f
dc.b $70,$71,$72,$73,$74,$75,$76,$77
dc.b $78,$79,$7a,$7b,$7c,$7d,$7e,$00
dc.b 199,252,233,226,228,224,229,231
dc.b 234,235,232,239,238,236,196,197
dc.b 201,230,198,244,246,242,251,249
dc.b 254,214,220,162,163,161,187,164
dc.b 225,237,243,250,241,209,189,156
dc.b 185,000,141,145,144,186,136,137
dc.b 227,245,159,191,247,215,192,195
dc.b 213,000,000,180,181,183,184,182
dc.b 000,000,138,000,000,000,000,000
dc.b 000,000,000,000,000,000,000,000
dc.b 000,000,000,000,000,000,000,000
dc.b 000,000,000,000,000,165,000,151
dc.b 000,000,000,150,000,000,153,000
dc.b 000,000,000,000,000,160,000,000
dc.b 131,140,135,134,000,000,139,130
dc.b 155,172,171,128,147,148,149,173
SECTION rediger,BSS,PUBLIC
Interligne: ds.w 1 ; Interligne
DocLen: ds.l 1 ; Longueur du fichier