12/10/2023 - oregon ha scritto:
Sinceramente non si capisce molto.
Spiega meglio il problema che hai soprattutto indica il contesto in cui operi, strumenti, tool. Inoltre il significato delle variabili utilizzate(a noi sconoaciuto) e due parole sul codice.
Inoltre il codice andrebbe sul forum tra tag CODE
Hai ragione, andavo un po di fretta al momento della domanda. Mi spiego meglio:
Queta è una funzione che andrà in una libreria FPC , ho gia realizzato la funzione che una volta chiamata CALL UpdateCursor, questa aggiorna rispettivamente due variabili (NewX e NewY) che trasportano la posizione già adeguata per stampare un carattere in una WINDOW x,y,xx,yy.
Adesso ho realizzato quest'altra che stampa direttamente nella VRAM una stringa passata in STR a cordinate di partenza X,Y con colori di primo piano FC e secondo piano BC. La domanda (intoppo) che non riesco ad uscirne dopo vari tentativi è:
Come posso stampare ogni singolo carattere della stringa, poi chiamare UpdateCursor e ricavare NewX, NewY per il prossimo carattere e così via?
CODICE ATTUALE:
push ds
dec x
dec y
les di, VIDEO_PTR_ADDR ;PUNTATORE VIDEO
mov ah, BC ; colore sfondo
shl ah, 4
add ah, fc ; colore testo
mov bx, y ; riga iniziale
add bx, bx
add di, word ptr VIDEO_TABLE[bx] ; Puntatore TABELLA VIDEO
mov bx, X ; Colonna iniziale
add bx, bx
add di, bx
lds si, str : sringa
xor ch, ch
mov cl, byte ptr[si]
jcxz @exit
inc si
cld
@next:
lodsb
stosw
loop @next
@exit:
pop ds
ho provato vari tentativi senza successo, ma da qualche parte dovrebbe andare
CALL UpdateCursor
mov dh, NewY
mov dl, NewX
per indicare le cordinate giuste al prossimo carattere della stringa.
Questa funzione dovrebbe comportarsi come fa un semplice printf o write all'interno si una finestra window, e UpdateCursor non fa altro che spostare la posizione NewX di un passo finche non trova il bordo della window per poi incrementere NewY e spostare NewX all'estrema sinistra.
Spero di essermi espresso meglio