| QBASIC - maskinkode - array - INT21 - Convert String |
En tekst kan konverteres til store bogstaver med Qbasic's funktion UCASE$() - men denne funktion konverterer ikke æ, ø og å. Man kan selv skrive en Qbasic-funktion, som konverterer æ, ø og å, men det kan gøres hurtigere med INT 21 funktionen 6521h: Convert String.
Med Qbasic's funktion LCASE$() kan en tekst konverteres til små bogstaver - men ikke Æ, Ø og Å. Man kan selv skrive en Qbasic-funktion, som konverterer, men der er findes ingen INT 21 funktion, som kan konvertere til små bogstaver. Så her vil vi skrive en funktion i MASM-assembler.
Basic-koden
TYPE Tregs ax AS INTEGER bx AS INTEGER cx AS INTEGER dx AS INTEGER si AS INTEGER di AS INTEGER ec AS INTEGER END TYPE |
||
| DECLARE SUB init () DECLARE SUB Int21h () DECLARE FUNCTION UpCaseQ$ (t$) DECLARE FUNCTION UpCaseI$ (t$) DECLARE FUNCTION LoCaseQ$ (t$) DECLARE FUNCTION LoCaseM$ (t$) |
konvertering af små bogstaver (også æ, ø og å) til store - med Qbasic - med INT 21, 6521: Convert String konvertering af store bogstaver (også Æ, Ø og Å) til små - med Qbasic - med MASM assembler |
|
| DIM SHARED r AS Tregs DIM SHARED i21 AS STRING * 80 DIM SHARED lcs AS STRING * 80 DIM SHARED Int21 AS INTEGER DIM SHARED LoCase AS INTEGER |
cpu registers buffer for Int21 machine code buffer for LoCase machine code Int21 code offset in data segment LoCase code offset |
init t$ = "ål og æblegrød" |
||
| PRINT t$ PRINT UCASE$(t$) PRINT UpCaseQ$(t$) PRINT UpCaseI$(t$) t$ = UpCaseI$ (t$) PRINT LCASE$(t$) PRINT LoCaseQ$(t$) PRINT LoCaseM$(t$) |
ål og æblegrød åL OG æBLEGRøD ÅL OG ÆBLEGRØD ÅL OG ÆBLEGRØD Ål og ÆblegrØd ål og æblegrød ål og æblegrød |
SUB init Int21 = VARPTR(i21) BLOAD "int21.bin", Int21 LoCase = VARPTR(lcs) BLOAD "locase.bin", LoCase END SUB |
koden i int21.bin >MASM: Qbasic - INT21 koden i locase.bin >MASM: Qbasic - LoCase |
SUB Int21h% CALL ABSOLUTE(r, Int21) END SUB |
FUNCTION UpCaseQ$ (t$) FOR i% = 1 TO LEN(t$) c$ = MID$(t$, i%, 1) SELECT CASE c$ CASE "a" TO "z": c$ = UCASE$(c$) CASE "æ": c$ = "Æ" CASE "ø": c$ = "Ø" CASE "å": c$ = "Å" END SELECT MID$(t$, i%, 1) = c$ NEXT UpCaseQ$ = t$ END FUNCTION |
FUNCTION UpCaseI$ (t$) r.ax = &H6521 r.cx = LEN(t$) r.dx = SADD(t$) Int21h UpCaseI$ = t$ END FUNCTION |
INT 21 funktionen 6521h: Convert String |
FUNCTION LoCaseQ$ (t$) FOR i% = 1 TO LEN(t$) c$ = MID$(t$, i%, 1) SELECT CASE c$ CASE "A" TO "Z": c$ = LCASE$(c$) CASE "Æ": c$ = "æ" CASE "Ø": c$ = "ø" CASE "Å": c$ = "å" END SELECT MID$(t$, i%, 1) = c$ NEXT LoCaseQ$ = t$ END FUNCTION |
FUNCTION LoCaseM$ (t$) CALL ABSOLUTE(t$, LoCase) LoCaseM$ = t$ END FUNCTION |
|