|
06 |
如何讓QBe在不進入中文顯示中文字
複製下列
F16 模組,執行時只要:
DECLARE SUB f16 (FONT1$, X!, Y!, c!, BC!, WL!)
DIM SHARED etpath$
etpath$ = "c:\et3" '設定倚天中文字型路徑
SCREEN 12 '以繪圖模式
CALL f16("QB免進中文顯示中文字 - by 阿戊", 1, 1, 3, 1, 0)
就可以在指定的座標顯示你要的中文字了...^^
以下為F16模組--顯示16字型(含特殊符號)
SUB f16 (FONT1$, X, Y, c, BC, WL)
'c==>文字顏色 (forecolor)
'BC==>背景顏色 (backcolor)
'WL==>字距 (word space)
FONT$ = FONT1$
DO WHILE FONT$ <> ""
FS = 0
AH = ASC(MID$(FONT$, 1, 1))
IF AH <= 128 THEN GOTO FASC
IF LEN(FONT$) < 2 THEN GOTO PASS1
AL = ASC(MID$(FONT$, 2, 1))
AHL = AH * 256 + AL
IF AL >= &H40 AND AL <= &H7E THEN
IF AH >= &HC9 THEN SAL = (AH - &HC9) * 99
IF AH <= &HC6 THEN SAL = (AH - &HA4) * 99
SAL1 = (AH - &HC9) * 99
SAL2 = (AH - &HA1) * 99
SAL3 = (AH - &HC6) * 99 + 34
END IF
IF AL >= &HA1 AND AL <= &HFE THEN
IF AH >= &HC9 THEN SAL = (AH - &HC9) * 99 + 34
IF AH <= &HC6 THEN SAL = (AH - &HA4) * 99 + 34
SAL1 = (AH - &HC9) * 99 + 34
SAL2 = (AH - &HA1) * 99 + 34
SAL3 = (AH - &HC6) * 99
END IF
IF HEX$(AHL) >= "A440" AND HEX$(AHL) <= "C67E" THEN FS = AHL - 42047 - SAL: OFN$ = "STDFONT.15"
IF HEX$(AHL) >= "C940" AND HEX$(AHL) <= "F9FE" THEN FS = AHL - SAL1 - 46118: OFN$ = "STDFONT.15"
IF HEX$(AHL) >= "A140" AND HEX$(AHL) <= "A3FE" THEN FS = AHL - SAL2 - 41279: OFN$ = "SPCFONT.15"
IF HEX$(AHL) >= "C6A1" AND HEX$(AHL) <= "C8FE" THEN FS = AHL - SAL3 - 50848: OFN$ = "SPCFSUPP.15"
IF FS = 0 THEN FONT$ = RIGHT$(FONT$, LEN(FONT$) - 1): X = X + FL + WL: GOTO FAAA
IF BC <> -1 THEN LINE (X + 1, Y)-STEP(15, 15), BC, BF'
OPEN etpath$ + "\" + OFN$ FOR RANDOM AS #1 LEN = 30
FIELD #1, 30 AS F$
FONT$ = RIGHT$(FONT$, LEN(FONT$) - 2)
GET #1, FS
FOR i = 1 TO 29 STEP 2
LINE (X, Y + (i - 1) / 2)-STEP(8, 0), c, , ASC(MID$(F$, i, 1)) * 128
LINE -STEP(8, 0), c, , ASC(MID$(F$, i + 1, 1)) * 128
NEXT i
CLOSE #1
'''IF BC <> -1 AND FONT$ <> "" THEN LINE (X + 17, Y)-STEP(WL - 1, 15), BC, BF
X = X + 16 + WL
GOTO FAAA
FASC:
IF BC <> -1 THEN LINE (X + 1, Y)-(X + 8 + WL, Y + 15), BC, BF
IF ASC(FONT$) = 32 THEN GOTO PASS1
OPEN etpath$ + "\ASCFONT.15" FOR RANDOM AS #1 LEN = 15
FIELD #1, 15 AS F$
GET #1, ASC(FONT$) + 1
FOR i = 1 TO 15 STEP 1
LINE (X, Y + i - 1)-STEP(8, 0), c, , ASC(MID$(F$, i, 1)) * 128
NEXT i
CLOSE #1
PASS1:
FONT$ = RIGHT$(FONT$, LEN(FONT$) - 1)
X = X + 8 + WL
FAAA:
LOOP
END SUB |
|
05 |
如何製作防拷磁片(超軌保護法)
本範例是以1.44MB的磁片為例,其磁片的規格為:2面、79軌、19個磁區、512
位元/磁區 超軌就是把資料寫在79軌之外,而一般的Copy或DiskCopy都無法對其資料做讀寫,所以即使磁片對拷,也無法複製該段資料,就算磁片被完整重新Format,資料仍會存在!來做為真正無法取代、獨一無二的磁片鎖! 不過一旦技術在此公開,此法的保護效果,可能就大打折扣了吧....^^!!!
警告:如果下載的網友對磁碟配置不清楚,建議不要以嘗試的心理改變變數值,否則後果可能會難以收拾! 寫入超軌資料
(載入QB時需同時載入QB.QLB 語法為:QB /L QB.QLB)
'$INCLUDE:
'qb.bi'
DIM SHARED inregs AS RegTypeX
DIM SHARED outregs AS RegTypeX
Dtype% = 3 '1.44 MB
password$ = "This's my disk" '超軌資料
track% = 81 '1.44 MB最後一軌之外的磁軌
side% = 0
sector% = 18
n% = 2 '512 bytes
id% = 0 'A:
槽磁碟機
label$ = ""
FOR i% = 1 TO sector% '定義磁區
label$ = label$ + CHR$(track%) + CHR$(side%) + CHR$(i%) + CHR$(n%)
NEXT i%
'Format 超軌磁軌
inregs.ax = &H500 + sector%
'AH=5
inregs.cx = &H100 * track%
inregs.dx = &H100 * side% + id%
inregs.es = VARSEG(label$)
inregs.bx = SADD(label$)
interruptx &H13, inregs, outregs '呼叫&h13中斷
'重置磁碟機
inregs.ax = 0
interruptx &H13, inregs, outregs
sector% = 1
id$ = password$
ec% = 1
FOR i = 1 TO 5 '開始寫入超軌資料(嘗試五次)
inregs.ax = &H301 'AH=3
AL=1
inregs.cx = &H100 * track% + sector%
inregs.dx = &H100 * side% + id%
inregs.es = VARSEG(id$)
inregs.bx = SADD(id$)
interruptx &H13, inregs, outregs'呼叫&h13中斷
IF (outregs.flags AND 1) = 0 THEN
i = 5
ec% = 0
END IF
NEXT i
IF ec% = 0 THEN PRINT "Finished ! 寫入成功!" ELSE PRINT "Can't Write to Disk
! 無法寫入資料" 判讀超軌資料
(載入QB時需同時載入QB.QLB 語法為:QB /L QB.QLB) '$INCLUDE: 'qb.bi'
DIM SHARED inregs AS RegTypeX
DIM SHARED outregs AS RegTypeX
password$ = "This's my disk" '要核對的資料(視需要自行編碼或另存) track% = 81
'1.44 MB最後一軌之外的磁軌
side% = 0
sector% = 1
n% = 2 '512 bytes
id% = 0 ' A:
槽磁碟機
id$ = SPACE$(512)
'讀取超軌資料
FOR i = 1 TO 5
inregs.ax = &H201'AH=2 AL=1
inregs.cx = &H100 * track% + sector%
inregs.dx = &H100 * side% + id%
inregs.es = VARSEG(id$)
inregs.bx = SADD(id$)
interruptx &H13, inregs, outregs '呼叫&h13中斷
IF (outregs.flags AND 1) = 0 THEN
i = 5
NEXT i
IF MID$(id$, 1, LEN(password$)) = password$ THEN
PRINT MID$(id$, 1, LEN(password$)) '秀出正確資料
ELSE
PRINT "Disk Copied!!!" '不是正確的磁片 END IF |
|
01 |
如何由
CMOS
讀取現在的電腦時間
DIM pcdate(&HD)
CLS
aa:
k$ = INKEY$
IF k$ <> "" THEN END
OUT &H70, &H0
FOR i = 0 TO &HD
OUT &H70, i
pcdate(i) = INP(&H71)
NEXT i
LOCATE 1, 1
PRINT HEX$(pcdate(4)); ":"; HEX$(pcdate(2)); ":"; HEX$(pcdate(0)); " "
PRINT HEX$(pcdate(8)); "-"; HEX$(pcdate(7)); " "
GOTO aa
'由於2K(千禧蟲)之後的年份計算,阿戊不確定各家BIOS的公式是否都相同,所以上面就沒列出來了!不過大家還是可以試試
!
DIM t(2) AS INTEGER
DIM d(2) AS INTEGER
CLS
aa:
k$ = INKEY$: IF k$ <> "" THEN END
LOCATE 1, 1
FOR i = 4 TO 0 STEP -2
OUT &H70, i: t(2 - i / 2) = INP(&H71)
NEXT i
FOR i = 9 TO 7 STEP -1
OUT &H70, i: d(9 - i) = INP(&H71)
NEXT i
PRINT HEX$(t(0)); ":"; HEX$(t(1)); ":"; HEX$(t(2)); " "
OUT &H70, &H32: tmp = INP(&H71) '讀取西元紀元
PRINT HEX$(tmp);
IF d(0) <= 9 THEN tmp$ = "0" ELSE tmp$ = ""
PRINT tmp$; HEX$(d(0)); "/"; HEX$(d(1)); "/"; HEX$(d(2)); " "
GOTO aa |