Kent Jönsson
<5924>
· Text 3692 · w8 · kommentar
1987-07-18 18:43
Ärende: Fylla på en file
Vidarutveckling av inlägg 3676, Fylla på data-fil. 50 rader.
Jag har tänkt i BASIC men man kan säkert fixa det i assembler.
Q0¤ = direktfil-interface
B¤ = data-buffert
D¤() = data-poster
D% = block-nr
N% = antal poster
P% = pos i buffert
I% = loop
J% = loop
Z% = slask
Hämta block-nr för sista datablock (ej slutblock).
110 OPEN 'BOKFRAD .TXT' ASFILE 1% : INPUT #1%,D% : CLOSE 1%
Öppna dagboken.
120 OPEN 'DAGBOKEN.TXT' ASFILE 1%
Hämta sista data-blocket.
130 Z%=CALL(28666%,1%)+CALL(28668%,D%) : B¤=Q0¤ : P%=0%
Ta reda på filslutmärke CHR¤(3) men ej CHR¤(9,3).
140 P%=INSTR(P%+1%,B¤,CHR¤(3%)) : IF P%>1% IF MID¤(B¤,P%-1%,1%)=CHR¤(9%)
140
Fyll buff med data ur sista datablocket.
150 IF P%=1% B¤='' ELSE B¤=LEFT¤B¤,P%-1%) : IF LEN(B¤y=252% GOSUB 260
Fyll buff med N% antal poster.
160 FOR I%=1% TO N%-1% : P%=0% : FOR J%=1% TO LEN(D¤(I%))
Räkna mellanslag.
170 IF MID¤(D¤(I%),J%,1%)=' ' P%=P%+1% ELSE IF P% 190 ELSE 220
Nästa position.
180 GOTO 230
Fyll buff med endast ett mellanslag. Om buff > 252 tkn, spara.
190 IF P%=1% B¤=B¤+' ' : P%=0% : IF LEN(B¤)=252% GOSUB 260 : GOTO 220
ELSE 220
Om buff > 250 tkn, spara.
200 IF LEN(B¤)>250% GOSUB 260
Fyll buff med packad mellanslag. Om buff > 252 tkn, spara.
210 B¤=B¤+CHR¤(9%,P%) : P%=0% : IF LEN(B¤)=252% GOSUB 260
Fyll buff med data (tkn). Om buff > 252 tkn, spara.
220 B¤=B¤+MID¤(D¤(I%),J%,1%) : IF LEN(B¤)=252% GOSUB 260
Nästa tkn, fyll på med CR. Om buff > 252 tkn, spara.
230 NEXT J% : B¤=B¤+CHR¤(13%) : IF LEN(B¤)=252% GOSUB 260
Nästa post.
240 NEXT I% : IF LEN(B¤) GOSUB 260
Slut-block
250 B¤=STRING¤(6%,0%) : GOSUB 260 : CLOSE 1% : GOTO 280
Gör datablock för sekv-fil.
260 Z%=CALL(28666%,1%) : Q0¤=B¤+CHR¤(3%)+STRING¤(252%-LEN(B¤),0%)
Skriv block.
270 Z%=CALL(28670%,D%) : B¤='' : D%=D%+1% : RETURN
Spara block-nr för sista datablock (ej slutblock).
280 PREPARE 'BOKFRAD .TXT' ASFILE 1% : ; #1%,D%-2% : CLOSE 1%
S L U T !