59 lines
2.1 KiB
Plaintext
59 lines
2.1 KiB
Plaintext
VDU 23,22,640;512;8,16,16,128+8 : REM Select UTF-8 mode
|
|
*FONT Times New Roman, 20
|
|
|
|
PRINT "Arabic:"
|
|
|
|
arabic1$ = "هنا مثال يمكنك من الكتابة من اليمين"
|
|
arabic2$ = "الى اليسار باللغة العربية"
|
|
|
|
VDU 23,16,2;0;0;0;13 : REM Select right-to-left printing
|
|
PRINT FNarabic(arabic1$) ' FNarabic(arabic2$)
|
|
VDU 23,16,0;0;0;0;13 : REM Select left-to-right printing
|
|
|
|
PRINT '"Hebrew:"
|
|
|
|
hebrew$ = "זוהי הדגמה של כתיבת טקסט בעברית מימין לשמאל"
|
|
|
|
VDU 23,16,2;0;0;0;13 : REM Select right-to-left printing
|
|
PRINT hebrew$
|
|
VDU 23,16,0;0;0;0;13 : REM Select left-to-right printing
|
|
|
|
END
|
|
|
|
REM!Eject
|
|
DEF FNarabic(A$)
|
|
LOCAL A%, B%, L%, O%, P%, U%, B$
|
|
A$ += CHR$0
|
|
FOR A% = !^A$ TO !^A$+LENA$-1
|
|
IF ?A%<&80 OR ?A%>=&C0 THEN
|
|
L% = O% : O% = P% : P% = U%
|
|
U% = ((?A% AND &3F) << 6) + (A%?1 AND &3F)
|
|
IF ?A%<&80 U% = 0
|
|
CASE TRUE OF
|
|
WHEN U%=&60C OR U%=&61F: U% = 0
|
|
WHEN U%<&622:
|
|
WHEN U%<&626: U% = &01+2*(U%-&622)
|
|
WHEN U%<&628: U% = &09+4*(U%-&626)
|
|
WHEN U%<&62A: U% = &0F+4*(U%-&628)
|
|
WHEN U%<&62F: U% = &15+4*(U%-&62A)
|
|
WHEN U%<&633: U% = &29+2*(U%-&62F)
|
|
WHEN U%<&63B: U% = &31+4*(U%-&633)
|
|
WHEN U%<&641:
|
|
WHEN U%<&648: U% = &51+4*(U%-&641)
|
|
WHEN U%<&64B: U% = &6D+2*(U%-&648)
|
|
ENDCASE
|
|
IF P% IF P%<&80 THEN
|
|
B% = P%
|
|
IF O%=&5D IF P%<&5 B% += &74
|
|
IF O%=&5D IF P%=&7 B% += &72
|
|
IF O%=&5D IF P%=&D B% += &6E
|
|
IF B%>P% B$=LEFT$(B$,LENB$-3) : O% = L%
|
|
IF U% IF P%>7 IF P%<>&D IF P%<>&13 IF P%<>&29 IF P%<>&2B IF P%<>&2D IF P%<>&2F IF P%<>&6D IF P%<>&6F B% += 2
|
|
IF O% IF O%>7 IF O%<>&D IF O%<>&13 IF O%<>&29 IF O%<>&2B IF O%<>&2D IF O%<>&2F IF O%<>&6D IF O%<>&6F B% += 1
|
|
B$ = LEFT$(LEFT$(B$))+CHR$&EF+CHR$(&BA+(B%>>6))+CHR$(&80+(B%AND&3F))
|
|
ENDIF
|
|
ENDIF
|
|
B$ += CHR$?A%
|
|
NEXT
|
|
= LEFT$(B$)
|