Source file: /~heha/vt/viewers/vt080.zip/src/PREDICT.ASM

;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
Wrong umlauts? - Assume file is ANSI (CP1252) encoded