;Include-Datei "Prädiktor"
;PagePredict=object
;bitfield:array[byte]of byte
;LastPut, LastGet: word;
;constructor init
;procedure put(DX:Videotextseite)
;procedure delete(DX:Videotextseite)
;function get:DX:Videotextseite
;function next:DX:Videotextseite
proc PagePredict_Init ;Aufruf auch bei erkanntem Senderwechsel
push di
mov di,ofs Bitfield
xor ax,ax
mov cx,256/2
rep stosw
mov [by Bitfield],bit 1 ;Seite 100
mov [LastPut],100h
pop di
ret
endp
proc PagePredict_PutLast ;Vorhersagbare Seite vom Schnüffler
btst [acq.fBits],bit 6 ;Untertitel
jnz @@e
btst [ctrl0],bit 1 ;Pseudoseitensuche erlaubt?
jnz @@1 ;ja, kein Check
mov ax,dx
call CheckPseudoPage
jc @@e ;Duchgefallen!
@@1: mov [LastPut],dx
PagePredict_Put: ;"Bekannte" Seite des Videotextsenders
;Seiten "filtern" wenn Pseudotetraden nicht erlaubt sind!
btst [ctrl0],bit 1 ;Pseudoseiten erlaubt?
jnz @@ok ;ja, nicht filtern!
mov ax,dx
call CheckPseudoPage
jc @@e ;Kein Eintrag in die Tabelle der Bits!
@@ok: push bx
mov cl,dh
mov al,1
rol al,cl ;Was passiert bei cl=0?
mov bl,dl
xor bh,bh
or [Bitfield+bx],al ;Bit setzen
pop bx
; mov [by Bitfield+255],0 ;Immer löschen (testweise)
@@e: ret
endp
proc PagePredict_Delete ;Vorhersagbare Seite
push bx
mov cl,dh
mov al,not 1
rol al,cl ;Was passiert bei cl=0?
mov bl,dl
xor bh,bh
and [Bitfield+bx],al ;Bit löschen
pop bx
ret
endp
proc PagePredict_Next
push bx
mov bx,[LastGet]
call prw
cmp dx,[LastPut]
stc
jz @@e
clc
@@e: pop bx
ret
endp
proc PagePredict_Get
push bx
mov bx,[LastPut]
call prw
cmp dx,[LastPut]
stc
jz @@e
clc
@@e: pop bx
ret
endp
proc prw
inc bx
mov cl,bh
mov al,1
rol al,cl
xor bh,bh
@@l: test [Bitfield+bx],al ;Suche bis Du findest!
jnz @@1
inc bl
jnz @@l
rol al,1
inc cl
and cl,7
jr @@l
@@1: mov dh,cl
mov dl,bl
and dh,7 ;Nur sicherheitshalber? (800er Seiten
;traten irgendwie auf! Wo steckt der Fehler?)
mov [LastGet],dx
ret
endp
Detected encoding: OEM (CP437) | 1
|
|