Files
2018-12-30 16:52:33 +01:00

299 lines
4.7 KiB
Plaintext
Raw Permalink Blame History

;ACME 0.07
;ChangesNotSaved.Save?
!zone
willblost
ldx changes
bne .j
inx
rts; return with X=1 ("Changes safe, go on")
.j jsr crsrnew
ldx #hWindow_DCS
stx menunr
jsr makewin
ldy #$0b; y-pos of cursor in window
lda #$32; x-pos
jsr crsrset
wblchoice
jsr getchar
cmp #Char_DEL
beq wblchoiced
cmp #Char_STOP
beq wblchoicec
cmp #Char_RETURN
bne wblchoice
jsr pullscr
jsr crsrold
jsr F_saveas
jmp willblost
wblchoiced
jsr pullscr
jsr crsrold
ldx #FALSE
stx changes
ldx #2
rts; return with X=2 ("Changes discarded, go on")
wblchoicec
jsr pullscr
jsr crsrold
ldx #0
rts; return with X=1 ("Cancel operation !")
eotflag !byte 0;End-Flag
!zone
F_mergeas
lda #$1f;get Mergename
sta loadflag;Mode MERGE
jmp .j
noload
rts
F_loadas
jsr willblost;Changes saved ?
beq noload
lda #0;Mode LOAD
sta loadflag
lda #$3f;get LOADname
.j jsr rename
bne load;ggfs Abbruch
rts
!zone
loadalien
lda loadflag
bne loadfirst
jmp noheader
load lda conreg;Bank sichern
pha
jsr crsrnew;new copy (hidden)
ldx #hWindow_Load
stx menunr
jsr makewin
jsr copypara;Parameter setzen
lda #"r";Lesemodus
sta dosmode
+bank15
jsr open;Open File
ldx #lf;File: = Input
jsr chkin
ldy #$0f;Header pruefen
.l3 jsr basin
cmp idfile,y
bne loadalien
dey
bpl .l3
ldy #$0f;Namen holen
.l2 jsr basin
sta dosname,y
dey
bpl .l2
lda loadflag;Bei LOAD
bne loadfirst; Name kopieren,
sta unnamed;(clear Flag)
ldy #$0f
.l lda dosname,y
sta txtname,y
sta lodname,y
dey
bpl .l
sty updatewbi; Update verlangen,
jsr newtext; Defaultwerte
loadfirst
ldy #FALSE;Pufferstart
sty eotflag;init Flag
!zone
loadline
+xbank15
.l4 iny;Eins weiter
lda #" ";get Space
ldx status
bne .j6;ggfs
jsr basin; get Byte
.j6 sta linebuf,y; und setzen
cpy llen
bne .l4
ldy #1;Neustart
.l3 lda linebuf,y
cmp #Char_RETURN
beq .j2
cmp #"-"
bne .j5
sty linebuf;Dann Pos merken
.j5 cmp #" "
bne .j4
sty linebuf;Dann Pos merken
.j4 iny;weiter
cpy llen
bne .l3
lda linebuf,y;LineEnd = Space ?
cmp #" "; Dann Grenze: = Y &
bne .j3
sty linebuf
lda status
beq .j3; ggfs setflag
sta eotflag
.j3 ldy linebuf;get Grenze
bne .j
ldy llen
dey
.j2 sty linebuf
.j +xram0
jsr needline;fordert Zeile
bcs nomemleft;ggfs Abbruch
ldy linebuf; copy buffer2line
.l2 lda linebuf,y
sta (lvek),y
dey
bne .l2
lda eotflag;Ende ?
bne endoffile
ldx linebuf;shift buffer
.l cpx llen;fertig ?
beq loadline;Dann lesen !
inx
iny
lda linebuf,x
sta linebuf,y
jmp .l
nomemleft
jsr memfull;Warnung
endoffile
+bank15
lda loadflag
sta changes
noheader
jsr clrchn;Standard
lda #lf;Close File
jsr close
jsr pullscr;Win weg
jsr crsrold;restore cursor
pla;alte Bank
sta conreg
rts
!zone
nosave
rts;Abbruch
F_saveas
jsr F_rnmtxt;get Textname
beq nosave;ggfs Abbruch
lda #FALSE;Name vorhanden
sta unnamed
F_save
lda unnamed;Name ?
bne F_saveas;ggfs holen
ldy #$0f;proof "?"
.l6 lda txtname,y
cmp #"?"
beq F_saveas
cmp #"*"
beq F_saveas
cmp #","
beq F_saveas
cmp #":"
beq F_saveas
sta dosname,y
dey
bpl .l6
lda #"w";Schreibmodus
sta dosmode
lda conreg;Bank sichern
pha
+bank15
jsr crsrnew;new copy (hidden)
ldx #hWindow_Save;Save-Win
stx menunr
jsr makewin
jsr copykill;Killparameter
jsr open;Open CmdChannel
lda killpara+1; (Scratch)
jsr close;Close CC
jsr copypara;Dateiparameter
jsr open;Open Outputfile
ldx #lf
jsr chkout
ldy #$0f;Sendet Header
.l5 lda idfile,y
jsr basout
dey
bpl .l5
ldy #$0f;Sendet Name
.l4 lda txtname,y
jsr basout
dey
bpl .l4
iny;Y: = 0, tmpy wird fuers
sty tmpy+1; Speichern init.
tya;A: = 0
iny;Y: = 1
sty tmpy
sec;errechnet negativen
sbc zzbe; Zeilenzaehler (tmp2)
sta tmp2
lda #0
sbc zzbe+1
sta tmp2+1
.l3 +xram0;volles RAM
ldx #1;mind. 1 Byte/Zeile
stx linebuf
ldx #TMP
jsr getlvek;LineVek
ldy #1;Versatz: = 1
.l2 lda (lvek),y;Byte in Puffer
cmp #" "
beq .j3
sty linebuf;Pos sichern
.j3 sta linebuf,y
iny
cpy llen
bne .l2
ldx linebuf
lda linebuf,x;letztes Byte
cmp #Char_RETURN
beq .j2
cmp #"-"
beq .j2
cmp #" "
beq .j2
inx;Dann Space hinter
lda #" "; die Zeile
sta linebuf,x
.j2 stx .m+1;Ende speichern
+xbank15
.l inx;X = 1
lda linebuf,x;Zeichen senden
jsr basout
.m cpx #MODIFIED8; L<>nge
bne .l;alle ?
+inc16 tmpy;tmpy += 1
inc tmp2;zaehler += 1
bne .l3
inc tmp2+1
bne .l3
jsr clrchn;Standardkanaele
lda #lf
jsr close;Close File
jsr pullscr;Win weg
jsr crsrold;restore cursor
pla;alte Bank
sta conreg
lda #FALSE;Changes saved !
sta changes
rts
!zone
copykill
ldy #$0b;Scratchparameter
+bit16;BIT-Trick !
copypara
ldy #$05;Fileparameter
ldx #5;6 Bytes
.l lda filepara,y; ins System
sta fnlen,x
dey
dex
bpl .l
rts