home *** CD-ROM | disk | FTP | other *** search
- ' $INCLUDE: 'E:\bc7\bin\t90feb\tFONTS\FontScr.BI'
-
- DIM SHARED CS AS CurrentSetUp
- DIM SHARED FI AS FontInfo
- DIM SHARED Totalfonts AS INTEGER
- DIM SHARED CurrentFont AS INTEGER
- DIM SHARED CurrentMode AS INTEGER
-
- FUNCTION CalcGPos% (GLine%, GCol%, VPos, HPos)
- VPos = GLine% * FI.PixHeight - FI.PixHeight
- HPos = GCol% * FI.AvgWidth - FI.AvgWidth
- IF VPos > CS.YMax OR VPos < 0 OR HPos > CS.XMax OR HPos < 0 THEN
- CalcGPos% = False
- ELSE
- CalcGPos% = True
- END IF
- END FUNCTION
-
- FUNCTION GCentered% (GLine%, Text$)
- GCol% = 1
- Res% = CalcGPos%(GLine%, GCol%, VPos, HPos)
- PPos% = (CS.XMax - GetGTextLen%(Text$)) \ 2
- IF PPos% >= 0 THEN
- PLen% = OutGText%(CSNG(PPos%), VPos, Text$)
- END IF
- GCentered% = PPos%
- END FUNCTION
-
- FUNCTION GInput$ (GLine%, GCol%, GLen%)
- GPos% = GCol%
-
- CR$ = CHR$(13): Tab$ = CHR$(9): Esc$ = CHR$(27)
- TestStr$ = CR$ + Tab$ + Esc$
- CurRefresh% = 300: CurCtr% = 0
- SetCOff% = False: CurOff% = True 'Initialize cursor
- DO
- GOSUB DoCursor
- a$ = INKEY$
- EndChr% = (LEN(a$) * INSTR(TestStr$, a$)) > 0 'Mult then cmp because of instr null match
- IF a$ <> "" AND NOT EndChr% THEN
- SetCOff% = True
- GOSUB DoCursor
- IF a$ = CHR$(8) THEN
- IF LEN(Istr$) > 0 THEN
- Istr$ = LEFT$(Istr$, LEN(Istr$) - 1)
- GPos% = GPos% - 1
- Res% = GSpace(GLine%, GPos%, CS.BGColor%)
- END IF
- ELSE
- SetGTextColor CS.FGColor%
- Istr$ = Istr$ + a$
- Res% = GPLine%(GLine%, GPos%, a$)
- GPos% = GPos% + 1
- END IF
- SetCOff% = False
- END IF
- LOOP UNTIL EndChr% OR LEN(Istr$) = GLen%
- SetCOff% = True
- GOSUB DoCursor
- GInput$ = Istr$
- COLOR CS.FGColor%
- EXIT FUNCTION
-
- DoCursor:
-
- CurCtr% = CurCtr% + 1
- Refreshing% = CurCtr% > CurRefresh%
- IF (Refreshing% AND NOT CurOff%) OR SetCOff% THEN 'Turn the cursor off
- Res% = CalcGPos%(GLine%, GPos%, VPos, HPos)
- COLOR CS.BGColor
- LINE (HPos, VPos)-(HPos, VPos + FI.PixHeight)
- CurOff% = True
- ELSEIF (Refreshing% AND CurOff%) THEN 'Turn the cursor on
- Res% = CalcGPos%(GLine%, GPos%, VPos, HPos)
- COLOR CS.FGColor
- LINE (HPos, VPos)-(HPos, VPos + FI.PixHeight)
- CurOff% = False
- END IF
- IF Refreshing% THEN CurCtr% = 0
- RETURN
-
- END FUNCTION
-
- FUNCTION GPLine% (GLine%, GCol%, Text$)
- GPLine% = -1
- IF GLine% > CS.NbrLines OR GCol% > CS.NbrCols THEN EXIT FUNCTION
- Res% = CalcGPos%(GLine%, GCol%, VPos, HPos)
- XPPos = HPos + GetGTextLen%(Text$)
- IF XPPos > CS.XMax THEN EXIT FUNCTION
- Res% = OutGText%(HPos, VPos, Text$)
- GPLine% = GCol% + LEN(Text$)
- END FUNCTION
-
- FUNCTION GSpace% (GLine%, GCol%, GColor%)
- Res% = CalcGPos%(GLine%, GCol%, VPos, HPos)
- LINE (HPos, VPos)-(HPos + FI.AvgWidth, VPos + FI.PixHeight), GColor%, BF
- END FUNCTION
-
- SUB Pause (Msg$)
- CCol% = POS(0)
- CRow% = CSRLIN
- LOCATE 25, 1: PRINT Msg$; : BEEP
- WHILE INKEY$ = "": WEND
- LOCATE 25, 1: PRINT STRING$(79, " ");
- LOCATE CRow%, CCol%
- END SUB
-
- SUB PrtFontInfo
- PRINT "Number of Fonts Registered "; CS.NbrReg%
- PRINT "Number of Fonts Loaded "; CS.NbrLoaded%
- FOR I% = 1 TO CS.NbrReg%
- GetRFontInfo I%, FI
- PRINT " Font number: "; FI.FontNum
- PRINT " Ascent: "; FI.Ascent
- PRINT " Points: "; FI.Points
- PRINT " Pixel Width: "; FI.PixWidth
- PRINT " Pixel Height: "; FI.PixHeight
- PRINT " Leading: "; FI.Leading
- PRINT "Average Width: "; FI.AvgWidth
- PRINT "Maximum Width: "; FI.MaxWidth
- DspFileName$ = LEFT$(FI.FileName, INSTR(FI.FileName, " ") - 1)
- PRINT " File Name: "; DspFileName$
- PRINT " Face Name: "; FI.FaceName
- PRINT " "
- PRINT "Press any key to view the next font specification."
- WHILE INKEY$ = "": WEND
- CLS
- NEXT I%
- Pause "Waiting for keypress..."
- END SUB
-
- FUNCTION RegLoadFonts% (FileName$, FontNbr)
- RegLoadFonts% = False 'Initialize status
-
- SetMaxFonts 10, 10
- X$ = DIR$(FileName$)
-
- IF X$ = "" THEN
- PRINT "The font file "; FileName$; " can't be found."
- PRINT "Please place the file in the correct directory and restart the program"
- EXIT FUNCTION
- ELSE
- CS.NbrReg% = RegisterFonts(FileName$)
- IF CS.NbrReg% = 0 THEN
- PRINT "Invalid Font File"
- EXIT FUNCTION
- ELSEIF FontErr THEN
- PRINT "Font error #"; FontErr
- EXIT FUNCTION
- END IF
- END IF
-
- IF FontNbr = 0 THEN 'Load all fonts
- LoadStr$ = LEFT$("N1/N2/N3/N4/N5/N6/N7/N8/N9", CS.NbrReg% * 3 - 1)
- ELSE 'Load specific fonts
- LoadStr$ = "N" + RIGHT$(STR$(FontNbr), 1)
- END IF
-
- CS.NbrLoaded% = LoadFont(LoadStr$)
- RegLoadFonts% = True 'Successful
- END FUNCTION
-
- SUB ScreenSize (XMax%, YMax%)
- SELECT CASE CurrentMode
- CASE 1: XMax% = 320: YMax% = 200
- CASE 2: XMax% = 640: YMax% = 200
- CASE 3: XMax% = 720: YMax% = 350
- CASE 4: XMax% = 640: YMax% = 400
- CASE 7: XMax% = 320: YMax% = 200
- CASE 8: XMax% = 640: YMax% = 200
- CASE 9: XMax% = 640: YMax% = 350
- CASE 10: XMax% = 640: YMax% = 350
- CASE 11: XMax% = 640: YMax% = 480
- CASE 12: XMax% = 640: YMax% = 480
- CASE 13: XMax% = 320: YMax% = 200
- END SELECT
- END SUB
-
- FUNCTION SetFont% (FontNbr AS INTEGER, FontColor AS INTEGER)
- IF FontNbr <> 0 OR FontNbr <= CS.NbrReg THEN
- CurrentFont = FontNbr
- SelectFont CurrentFont
- GetRFontInfo CurrentFont, FI
- CS.NbrLines = CS.YMax \ FI.PixHeight
- CS.NbrCols = CS.XMax \ FI.AvgWidth
- SetGTextColor FontColor
- SetFont% = 0
- ELSE
- SetFont% = 1
- END IF
- END FUNCTION
-
- SUB SetScreen (FGColor%, BGColor%, SMode%)
- CurrentMode = SMode% 'Set for EGA/VGA screen mode
- SCREEN CurrentMode
- CALL ScreenSize(CS.XMax, CS.YMax)
- CS.FGColor = FGColor%
- CS.BGColor = BGColor%
- COLOR CS.FGColor, CS.BGColor 'Set screen colors
- CLS
- END SUB
-
-