1 REM Ins{nd av: Kristoffer Eriksson <5357>    1987-05-26 03.06.02 (WRITE)
20 ! DATERAZ - Ett enkelt program f|r datumm{rkning av AZZAM-BAC-program.
30 ! Av Kristoffer Eriksson
40 ! 
50 ! Ver  / Datum  / Sign / Kom
60 ! 1.0  / 870525 / SKE  /
70 ! 
80 INTEGER : EXTEND : DIM I$=253
90 ! 
100 INPUT "Fil att datumm{rka eller titta p}: "Fil$
110 IF INSTR(1,Fil$,".")=0 THEN Fil$=Fil$+".BAC"
120 OPEN Fil$ AS FILE 1
130 ! 
140 GET #1 I$ COUNT 23
150 Basver=ASCII(I$)
160 Prstat=ASCII(RIGHT$(I$,3))
170 Pgmlen=CVT$%(MID$(I$,5,2))
180 Kgoto=ASCII(RIGHT$(I$,21))
190 Relgoto=CVT$%(MID$(I$,22,2))
200 ! 
210 IF Basver<>143 AND Basver<>144 THEN ; "[r inte ett Basic-program." : STOP 
220 IF (Prstat AND 1)=0 THEN ; "[r ej k|rklart (Fixed-up)." : STOP 
230 IF Kgoto<>129 THEN ; "Inneh}ller ej maskinkod fr}n AZZAM." : STOP 
240 ! 
250 POSIT #1,22+Relgoto
260 GET #1 I$
270 IF ASCII(I$)<>203 THEN ; "Inneh}ller ej maskinkod fr}n AZZAM." : STOP 
280 GET #1 I$
290 IF ASCII(I$)=29 THEN ; "Ej m{rkningsbar version av relokeringsrutinen." : STOP 
300 ! 
310 POSIT #1,23
320 GET #1 I$
330 IF ASCII(I$)=0 THEN GET #1 I$ COUNT 2 : GET #1 Org$ COUNT CVT$%(I$)
340 ! 
350 ; 
360 IF LEN(Org$) THEN ; "Nuvarande data:" ELSE ; "Ingen m{rkning."
370 Tidp=0
380 P=1 : WHILE P0 THEN ; MID$(Org$,P+2,L)
410   IF L>=8 IF MID$(Org$,P+2,8)="SKAPTID=" THEN Tidp=P
420   P=P+L+2
430 WEND 
440 ; 
450 ! 
460 WHILE 1
470   INPUT "Ska jag m{rka filen med nuvarande tid? J/N/R  "I$
480   IF I$="" THEN ; "N{h{..." : CLOSE : GOTO 1130
490   IF INSTR(1,"Nn",LEFT$(I$,1)) THEN CLOSE : GOTO 1130
500   IF INSTR(1,"Rr",LEFT$(I$,1)) THEN Ny$="" : GOTO 580
510 IF INSTR(1,"Jj",LEFT$(I$,1))=0 WEND 
520 ! 
530 Tid$=TIME$
540 Tid$=MID$(Tid$,3,2)+MID$(Tid$,6,2)+MID$(Tid$,9,2)+MID$(Tid$,12,2)+MID$(Tid$,15,2)
550 Tid$=CVT%$(8+LEN(Tid$))+"SKAPTID="+Tid$
560 IF Tidp THEN Ny$=LEFT$(Org$,Tidp-1)+Tid$+RIGHT$(Org$,Tidp+2+CVT$%(MID$(Org$,Tidp,2))) ELSE Ny$=Tid$+CVT%$(0)
570 ! 
580 Orglen=LEN(Org$)+(3 AND LEN(Org$)>0)
590 Nylen=LEN(Ny$)+(3 AND LEN(Ny$)>0)
600 Slutsektor.=INT(FNUs.(Pgmlen)/253.)
610 L{gst.=INT((23.+FNUs.(Orglen)+252.)/253.)
620 ! 
630 WHILE LEN(Ny$)>LEN(Org$)
640   ! F|rl{ng filen.
650   Sektor.=Slutsektor.
660   Sektorlen=FNUs.(Pgmlen)-Slutsektor.*253
670   WHILE Sektor.>=L{gst.
680     POSIT #1,Sektor.*253. : GET #1 I$ COUNT Sektorlen
690     POSIT #1,Sektor.*253.+Nylen-Orglen : PUT #1 I$
700     Sektor.=Sektor.-1.
710     Sektorlen=253
720   WEND 
730   POSIT #1,23+Orglen : GET #1 I$ COUNT L{gst.*253.-23-Orglen
740   POSIT #1,23+Nylen : PUT #1 I$
750   POSIT #1,21 : PUT #1 CVT%$(Relgoto+Nylen-Orglen)
760   POSIT #1,23 : PUT #1 CHR$(0)+CVT%$(LEN(Ny$)) : PUT #1 Ny$
770   POSIT #1,4 : PUT #1 CVT%$(Pgmlen+Nylen-Orglen)
780 IF 0 WEND 
790 ! 
800 WHILE LEN(Ny$)=LEN(Org$)
810   IF LEN(Ny$) THEN POSIT #1,23 : PUT #1 CHR$(0)+CVT%$(LEN(Ny$)) : PUT #1 Ny$
820 IF 0 WEND 
830 ! 
840 WHILE LEN(Ny$)0
1210     IF MID$(Fil$,P,1)="/" OR MID$(Fil$,P,1)=":" THEN RETURN LEFT$(Fil$,P)
1220   P=P-1 : WEND 
1230   RETURN ""
1240 FNEND