10 '********************************************* 20 '* Maxifont startup program * 30 '* Detects which version of firmware * 40 '* V2.7B , V3.0 , V3.0A or V3.1 * 50 '********************************************* 60 version = MM.VER 70 IF version = 3.01 THEN RUN "Maxf3_1.bas" 80 IF version = 3 or version = 3.0001 THEN RUN "Maxf3_0.bas" 90 IF version = 2.0702 THEN RUN "MaxF2_7.bas" 100 CLS 120 PRINT " Sorry your firmware version is not supported yet" 130 END
10 '********************************** 15 '* Maxi-Font * 20 '* Font Editor by Dennis Wyatt * 30 '* Using mmBasic for the * 40 '* Maximite computer * 50 '********************************** 55 ' get maximum screen dimension-split into 20 parts 60 Max_x=MM.HRES : Min_x=CINT(Max_x/20) 70 Max_y=MM.VRES : Min_y=CINT(max_y/20) 80 CLS 84 addchar=1 85 '*********************************** 86 ' Set to Capture SD card errors 87 '*********************************** 90 OPTION Error Continue 95 '*********************************** 96 '* Show front page 97 '*********************************** 100 FONT LOAD "gothic.fnt" AS #4 : FONT #4 110 LOCATE 0,1 : ?"200000000000004" 115 LOCATE 0,33 : ? "1" : LOCATE max_x-32,33 : ? "1" 116 LOCATE 0,65 : ? "1" : LOCATE max_x-32,65 : ? "1" 120 LOCATE 0,92 130 ?"300000000000005" 135 '********************************************** 136 '* return to font 1 and unload gothic font 137 '* need the memory 138 '********************************************** 140 FONT #1 : FONT unload #4 150 FONT LOAD "invade.fnt" AS #5 :FONT #5 160 LOCATE 40,57 : ? "0 2 4": LOCATE 15*min_x,57: ? "1 3 5" 170 FONT #1 180 LOCATE 9*min_x,37: ? "Welcome to" 190 FONT #1,3 : LOCATE 7.3*min_x,52 : ? "MaxiFont" 200 LINE (0,124)-(max_x,124),1 210 FONT #1,1 220 LOCATE 2*min_x,130 230 ? "This program will help you to design some interesting fonts, with" 240 LOCATE 2*min_x,145 250 ? "the added scope of allowing the design of program sprites, for the" 260 LOCATE 2*min_x,160 270 ? "inclusion into some Maximite games, or just make some gothic borders." 280 LOCATE 2*min_x,190 290 ? "The design of the font should take into account the available" 300 LOCATE 2*min_x,205 310 ? "memory in the system. This is about 37 Kb, for arrays, used in the" 320 LOCATE 2*min_x,220 330 ?"design process. This limits the number of characters, in the editor" 340 LOCATE 2*min_x,235 350 ?"at one time. A 255 pixel wide font by 64 pixels high can only have" 360 LOCATE 2*min_x,250 370 ?"2 Characters, if I rewrite the code. A 10 pixel by 10 pixel font can" 380 LOCATE 2*min_x,265 390 ?"have only 70 characters in the editor at one time." 400 LOCATE 2*min_x,280 410 ?"You can always append the files together later. Once saved the font" 420 LOCATE 2*min_x,295 430 ?"takes up one quarter the size." 440 LOCATE 2*min_x,310 450 ?"It would be easier to design a smaller font and just piece them" 460 LOCATE 2*min_x,325 470 ?"together to form one large picture." 480 LOCATE 2*min_x,340 490 ?"If you encounter an out of memory error, then reduce the number of " 500 LOCATE 2*min_x,355 510 ?"Characters" 520 LOCATE 9*min_x,385 : ?"press any key" 530 DO WHILE (INKEY$="") 540 FONT #5 550 PAUSE 100 560 frontpage=NOT frontpage 580 IF (frontpage=1) THEN 590 LOCATE 40,57 : ? "1 3 5": LOCATE 15*min_x,57: ? "0 2 4" 600 ELSE 610 LOCATE 40,57 : ? "0 2 4": LOCATE 15*min_x,57: ? "1 3 5" 620 ENDIF 630 LOOP 640 FOR a=1 TO 5 650 PAUSE 150 660 ON a GOTO 670,680,690,700,710 670 LOCATE 40,57 : ? "6 6 6": LOCATE 15*min_x,57: ? "6 6 6":NEXT a 680 LOCATE 40,57 : ? "7 7 7": LOCATE 15*min_x,57: ? "7 7 7":NEXT a 690 LOCATE 40,57 : ? "8 8 8": LOCATE 15*min_x,57: ? "8 8 8":NEXT a 700 LOCATE 40,57 : ? "9 9 9": LOCATE 15*min_x,57: ? "9 9 9":NEXT a 710 t$=CHR$(59)+" "+CHR$(59)+" "+CHR$(59) 720 LOCATE 40,57 : ? t$: LOCATE 15*min_x,57: ? t$ :NEXT a 730 FONT #1 : FONT unload #5 735 t$=" " 740 LINE(2*min_x,130)-(max_x,max_y),0,BF 745 LOCATE 0,130 750 ? t$; : INPUT "Width of Font? ",fwidth 760 IF (fwidth>255) THEN 761 ? t$+"Cannot be bigger than 255 pixels": GOTO 750 762 ENDIF 770 ? t$; : INPUT "Height of Font ? ",fheight 780 IF (fheight > 64) THEN 781 ? t$+"Cannot be higher than 64 pixels":GOTO 770 782 ENDIF 790 IF (fheight =0) THEN 791 ? t$+"Cannot be lower than 1 pixels":GOTO 770 792 ENDIF 800 ? t$; : INPUT "Number of Characters ? ",fnumber 810 IF (fnumber =0) THEN 811 ? t$+"Cannot be less than 1 Character":GOTO 800 812 ENDIF 820 IF (fnumber >128) THEN 821 ? t$+"Cannot be more than 128 Characters":GOTO 800 822 ENDIF 830 ? t$; : INPUT "Start Character set at ?";fstart 840 IF (fstart<32) THEN 841 ? t$+"Cannot be less than 32 ": GOTO 830 842 ENDIF 850 CLS 860 OPTION base 0 870 DIM values(4) 880 DIM plot(fnumber,fwidth,fheight) 890 LINE (0,0)-(max_x-1,100),1,BF 900 LINE (10,10)-(max_x-11,90),0,BF 910 GOSUB 3050 920 LINE (0,101)-(max_x-1,max_y-1),1,B 930 LINE (2,103)-(6*min_x,max_y-3),1,B 940 screenx=Max_x-1-(7*min_x) 950 screenstepx=CINT(screenx/fwidth-1) 960 countxmax=screenstepx*fwidth+7*min_x 970 screeny=max_y-104 : screenstepy=CINT(screeny/fheight-1) 980 countymax=screenstepy*fheight+104 990 LINE (7*min_x,103)-(19*min_x,19*min_y),0,BF 1000 FOR countx = 7*min_x TO countxmax STEP screenstepx 1010 LINE (countx,103)-(countx,countymax),1 1020 NEXT countx 1030 FOR county = 103 TO countymax STEP screenstepy 1040 LINE (7*min_x,county)-(countxmax,county),1 1050 NEXT county 1060 box_x=screenstepx-2 : box_y=screenstepy-2 1070 cursorx=7*min_x+1 : cursory=104 1080 GOSUB 3100 1090 GOSUB 2880 ' read font info into display 1100 TIMER=0 1110 plotx=1 : ploty=1 : charxy=1 1120 LOCATE 160,15 : ?"X-Position":GOSUB 1830 1130 LOCATE 160,30 : ?"Y-Position":GOSUB 1850 1140 LOCATE 160,45 : ?"Character #":GOSUB 1870 1145 LOCATE 160,60 : ? "Character code ":GOSUB 1880 1150 DO 1160 text$=INKEY$ 1170 IF (text$<>"") THEN GOSUB 1270 1180 timerloop=TIMER 1190 IF (timerloop>oldloop+100) THEN 1200 oldloop=oldloop+100 1210 cmode=NOT cmode 1220 GOSUB 1250 1230 ENDIF 1240 LOOP 1250 LINE (cursorx,cursory)-(cursorx+box_x,cursory+box_y),cmode,BF 1260 RETURN 1270 IF (ASC(text$)=131) THEN 1280 IF (plotx=fwidth) THEN 1290 ' do nothing at right edge already 1300 ELSE 1310 cursorx=cursorx+screenstepx 1320 plotx=plotx+1 1330 GOSUB 1830 1340 ENDIF 1350 IF (plot(charxy,plotx-1,ploty)=0) THEN direction=1:GOSUB 1890 1360 IF(plot(charxy,plotx-1,ploty)=1) THEN direction=1 :GOSUB 1920 1370 ENDIF 1380 ENDIF 1390 IF (ASC(text$)=130) THEN 1400 IF (plotx=1) THEN 1410 ' do nothing at left edge already 1420 ELSE 1430 cursorx=cursorx-screenstepx 1440 plotx=plotx-1 1450 GOSUB 1830 1460 ENDIF 1470 IF (plot(charxy,plotx+1,ploty)=0) THEN direction=-1 : GOSUB 1890 1480 IF(plot(charxy,plotx+1,ploty)=1) THEN direction=-1 :GOSUB 1920 1490 ENDIF 1500 ENDIF 1510 IF (ASC(text$)=128) THEN 1520 IF (ploty=1) THEN 1530 ' do nothing at top edge already 1540 ELSE 1550 cursory=cursory-screenstepy 1560 ploty=ploty-1 1570 GOSUB 1850 1580 ENDIF 1590 IF (plot(charxy,plotx,ploty+1)=0) THEN direction=-1 : GOSUB 1950 1600 IF(plot(charxy,plotx,ploty+1)=1) THEN direction=-1 :GOSUB 1980 1610 ENDIF 1620 ENDIF 1630 IF (ASC(text$)=129) THEN 1640 IF (ploty=fheight) THEN 1650 ' do nothing at bottom edge already 1660 ELSE 1670 cursory=cursory+screenstepy 1680 ploty=ploty+1 1690 GOSUB 1850 1700 IF (plot(charxy,plotx,ploty-1)=0) THEN direction=1 : GOSUB 1950 1710 IF(plot(charxy,plotx,ploty-1)=1) THEN direction=1 :GOSUB 1980 1720 ENDIF 1730 ENDIF 1740 IF(text$="-") THEN GOSUB 2720 1745 IF (ASC(text$)=132) THEN GOSUB 5000 1750 IF(text$="e"OR text$="E") THEN 1760 CLS : ? "Hope you found this tool useful!" : END 1770 ENDIF 1775 IF (text$="c" OR text$="C") THEN GOSUB 5500 1776 IF (text$="v" OR text$="V") THEN GOSUB 6500 1777 IF (text$="h" OR text$="H") THEN GOSUB 7500 1780 IF (ASC(text$)=139) THEN GOSUB 2010 1790 IF(text$="+") THEN GOSUB 2800 1800 IF (ASC(text$)=32) THEN GOSUB 2040 1810 IF (text$="s" OR text$="S") THEN GOSUB 2070 1820 IF (text$="l" OR text$="L") THEN GOTO 2260 1830 LOCATE 220,15 : ?" ":LOCATE 220,15 : ? plotx 1840 RETURN 1850 LOCATE 220,30 : ? " ":LOCATE 220,30: ? ploty 1860 RETURN 1870 LOCATE 230,45 : ?" " : LOCATE 230,45 : ? charxy 1880 LOCATE 245,60 : ?" " : LOCATE 245,60 : ? fstart+charxy-1 1885 RETURN 1890 tempx=cursorx-(direction*screenstepx) 1900 LINE (tempx,cursory)-(tempx+box_x,cursory+box_y),0,BF 1910 RETURN 1920 tempx=cursorx-(direction*screenstepx) 1930 LINE (tempx,cursory)-(tempx+box_x,cursory+box_y),1,BF 1940 RETURN 1950 tempy=cursory-(direction*screenstepy) 1960 LINE (cursorx,tempy)-(cursorx+box_x,tempy+box_y),0,BF 1970 RETURN 1980 tempy=cursory-(direction*screenstepy) 1990 LINE (cursorx,tempy)-(cursorx+box_x,tempy+box_y),1,BF 2000 RETURN 2010 PIXEL(52+plotx,292+ploty)=1 2020 plot(charxy,plotx,ploty)=1 2030 RETURN 2040 plot(charxy,plotx,ploty)=0 2050 PIXEL(52+plotx,292+ploty)=0 2060 RETURN 2070 GOSUB 5300: LOCATE 270,20 : ? " " 2075 LOCATE 270,20 : INPUT "Filename to Save : ",savename$ 2080 IF (RIGHT$(savename$,3)<>"fnt") THEN savename$=savename$+".fnt" 2090 OPEN savename$ FOR output AS #1 2100 typefile$="save" 2110 ON MM.ERRNO GOTO 3350,3410,3470,3530,3590,3650 2120 PRINT #1,fheight","fwidth","fstart","fstart+fnumber-addchar 2130 FOR numchar=1 TO fnumber 2140 FOR row = 1 TO fheight 2150 temp$="" 2160 FOR column=1 TO fwidth 2170 IF (plot(numchar,column,row)=1) THEN temp$=temp$+"X" 2180 IF (plot(numchar,column,row)=0) THEN temp$=temp$+" " 2190 NEXT column 2200 PRINT #1,temp$ 2210 NEXT row,numchar 2215 IF addchar=0 THEN GOSUB 5100 2220 CLOSE #1 2230 GOSUB 5300 2240 LOCATE 270,20 : ?"save ok" 2250 RETURN 2260 GOSUB 5300: LOCATE 270,20 : ? " " 2270 LOCATE 270,20 : INPUT "Filename to load : ",fname$ 2280 IF (RIGHT$(fname$,3)<>"fnt") THEN fname$=fname$+".fnt" 2290 OPEN fname$ FOR input AS #2 2300 typefile$="load" 2310 ON MM.ERRNO GOTO 3350,3410,3470,3530,3590,3650 2320 LINE INPUT #2,temp$ 2330 ERASE values 2340 DIM values(4) 2350 pointer=1: fwidth =0: fheight=0 :fnumber=0 :fstart=0 2360 FOR a= 1 TO LEN(temp$) 2370 a$=MID$(temp$,a,1) 2380 IF (a$=",") THEN 2390 values(pointer)=VAL(rwidth$) 2400 pointer=pointer+1 2410 rwidth$="" 2420 ELSE 2430 rwidth$=rwidth$+a$ 2440 ENDIF 2450 NEXT a 2460 LOCATE 300,45 2480 values(4)= VAL(rwidth$) 2490 LOCATE 300,60 2510 fwidth=values(2) 2520 fheight=VAL(temp$) 2530 fstart=values(3) 2540 fnumber=values(4)-values(3)+1 2550 ERASE plot : GOSUB 3290 2560 DIM plot(fnumber,fwidth,fheight) 2565 GOSUB 3290 2570 FOR a= 1 TO fnumber 2580 FOR c=1 TO fheight 2590 LINE INPUT #2,temp$ 2600 FOR b=1 TO fwidth 2610 IF (MID$(temp$,b,1)=CHR$(32)) THEN 2620 plot(a,b,c)=0 2630 ELSE 2640 plot(a,b,c)=1 2650 ENDIF 2660 NEXT b,c,a 2670 CLOSE #2 2680 GOSUB 5300 2690 LOCATE 270,20 2695 ?"load ok" 2700 GOSUB 3050 2710 GOTO 950 2720 IF (charxy =1) THEN 2730 'rem do nothing 2740 ELSE 2750 charxy=charxy-1 2760 GOSUB 1870 2770 GOSUB 2880 2780 ENDIF 2790 RETURN 2800 IF (charxy =fnumber) THEN 2810 'rem do nothing 2820 ELSE 2830 charxy=charxy+1 2840 GOSUB 1870 2850 GOSUB 2880 2860 ENDIF 2870 RETURN 2880 LINE (52,292)-(52+fwidth,292+fheight),0,BF 2890 a=charxy : IF (a=0) THEN a=1 2900 cursorx=7*min_x+2 : cursory=105 2910 plotx=1 :ploty=1 2920 FOR c=1 TO fheight 2930 FOR b=1 TO fwidth 2940 tempx=cursorx+(b-1)*screenstepx : tempy=cursory+(c-1)*screenstepy 2950 temp2x=tempx+box_x : temp2y=tempy+box_y 2960 IF (plot(a,b,c)=0) THEN 2970 LINE (tempx,tempy)-(temp2x,temp2y),0,BF 2980 ELSE 2990 LINE (tempx,tempy)-(temp2x,temp2y),1,BF 3000 PIXEL(52+b,292+c)=1 3010 ENDIF 3020 NEXT b,c 3030 GOSUB 1870 3040 RETURN 3050 LOCATE 100,15 : ? " ":LOCATE 20,15: ? "Width ";fwidth 3060 LOCATE 50,30 : ? " ":LOCATE 20,30: ? "Height ";fheight 3070 LOCATE 130,45 : ? " ":LOCATE 20,45: ? "Characters in Set ";fnumber 3080 LOCATE 80,60 : ? " ":LOCATE 20,60: ? "Start Character ";fstart 3090 RETURN 3100 LOCATE 10,110 : ? "Move --- Cursor keys" 3110 LOCATE 10,125 : ? "Set ___ Left Alt." 3120 LOCATE 10,140 : ? "Erase --- Space" 3130 LOCATE 10,155 : ? "Load --- l or L" 3140 LOCATE 10,170 : ? "Save --- s or S" 3150 LOCATE 10,185 : ? "Char Up ___ +" 3160 LOCATE 10,200 : ? "Char Down --- -" 3165 LOCATE 10,215 : ? "Add Char ___ Insert" 3166 LOCATE 10,230 : ? "Copy Char ___ c or C" 3167 LOCATE 10,245 : ? "Flip Vert. ___ v or V" 3168 LOCATE 10,260 : ? "Flip Horiz.___ h or H" 3170 LOCATE 10,275 : ? "Exit ___ e or E" 3180 LINE (4,290)- (6*min_x-2,max_y-6),1,B 3190 LOCATE 10,300: ?"Pixel":LOCATE 10,320: ? "Size" 3200 LINE (50,291)-(6*min_x-4,max_y-70),0,BF 3210 LINE (50,290)-(50+fwidth+4,290+fheight+4),1,B 3220 LOCATE 30,Max_y-65 3230 ? "Code Written by" 3240 LOCATE 15,Max_y-45 3250 ? "Dennis Wyatt ";:FONT LOAD "copyr.fnt" AS #6 :FONT #6 3252 ? " "; : FONT #1 : FONT unload #6 : ? " 2011" 3260 LOCATE 15,Max_y-25 3270 ? "dpwyatt@iinet.net.au" 3280 RETURN 3290 'pause routine for array erasure completion 3300 TIMER=0 3310 DO WHILE timertemp<3000 3320 timertemp=TIMER 3330 LOOP 3340 RETURN 3350 LOCATE 270,40: ? "ERROR -No SD Card present" 3352 LOCATE 270,55: ? "Please insert card and re-enter" 3354 LOCATE 270,70: ? "Filename at the prompt above" 3356 PAUSE 2000 3360 IF (typefile$="save") THEN 3370 GOTO 2070 3380 ELSE 3390 GOTO 2260 3400 ENDIF 3410 LOCATE 270,40: ? "Card is Write Protected" 3412 LOCATE 270,55: ? "Please write enable and re-enter" 3414 LOCATE 270,70: ? "Filename at the prompt above" 3420 IF (typefile$="save") THEN 3430 GOTO 2070 3440 ELSE 3450 GOTO 2260 3460 ENDIF 3470 LOCATE 270,40: ? "not enough space" 3472 LOCATE 270,55: ? "Please rectify and re-enter" 3474 LOCATE 270,70: ? "Filename at the prompt above" 3480 IF (typefile$="save") THEN 3490 GOTO 2070 3500 ELSE 3510 GOTO 2260 3520 ENDIF 3530 LOCATE 270,40 : ? "All root dir. taken" 3540 IF (typefile$="save") THEN 3550 GOTO 2070 3560 ELSE 3570 GOTO 2260 3580 ENDIF 3590 LOCATE 270,40 : ? "Invalid Filename" 3592 LOCATE 270,55: ? "Please rectify and re-enter" 3594 LOCATE 270,70: ? "Filename at the prompt above" 3600 IF (typefile$="save") THEN 3610 GOTO 2070 3620 ELSE 3630 GOTO 2260 3640 ENDIF 3650 LOCATE 270,40: ? "Cannot find File" 3652 LOCATE 270,55: ? "Please re-enter" 3654 LOCATE 270,70: ? "Filename at the prompt above" 3660 IF (typefile$="save") THEN 3670 GOTO 2070 3680 ELSE 3690 GOTO 2260 3700 ENDIF 5000 ' insert character function 5001 addchar=0 5010 savename$="temp.fnt" 5015 GOSUB 2090 5020 fname$="temp.fnt" 5030 GOSUB 2290 5088 addchar=1 5089 KILL "temp.fnt" 5090 RETURN 5100 temp$="" 5105 FOR column=1 TO fwidth 5110 temp$=temp$+" " 5120 NEXT column 5130 FOR row = 1 TO fheight 5140 PRINT #1,temp$ 5150 NEXT row 5160 RETURN 5300 LOCATE 270,20 : LINE (270,20)-(19*min_x,80),0,bf 5310 RETURN 5500 ' Copy function 5510 GOSUB 5300 5520 LOCATE 270,20 5530 INPUT "Copy which Character # ";copychar 5535 IF copychar>fnumber THEN 5536 LOCATE 270,35 : ? "Not that many Char." : GOTO 5520 5537 ENDIF 5540 LOCATE 270,35 5550 INPUT "To which Character # ";tochar 5555 IF tochar>fnumber THEN 5556 LOCATE 270,50 : ? "Not that many Char." : GOTO 5540 5557 ENDIF 5560 FOR copy1= 1 TO fwidth 5570 FOR copy2= 1 TO fheight 5580 plot(tochar,copy1,copy2)=plot(copychar,copy1,copy2) 5590 NEXT copy2,copy1 5600 LOCATE 270,50 : ? " " 5610 LOCATE 270,50 : ? "done" 6000 RETURN 6500 ' flip vertical function 6510 FOR flipV = 1 TO INT(fheight/2) 6520 FOR flipV1 = 1 TO fwidth 6530 flipvtemp=plot(charxy,flipV1,flipV) 6540 plot(charxy,flipV1,flipV)=plot(charxy,flipV1,fheight-flipV+1) 6550 plot(charxy,flipV1,fheight-flipV+1)=flipvtemp 6560 NEXT flipV1 : NEXT flipV 6570 GOSUB 5300 6580 LOCATE 270,20 6590 ? "Vertical Flip Done" 6600 GOSUB 2880 7000 RETURN 7500 ' flip horizontal function 7510 FOR flipH = 1 TO INT(fwidth/2) 7520 FOR flipH1 = 1 TO fheight 7530 fliphtemp=plot(charxy,flipH,flipH1) 7540 plot(charxy,flipH,flipH1)=plot(charxy,fwidth-flipH+1,flipH1) 7550 plot(charxy,fwidth-flipH+1,flipH1)=fliphtemp 7560 NEXT fliph1 7570 NEXT flipH 7580 GOSUB 5300 7590 LOCATE 270,20 7600 ? "Horizontal Flip Done" 7610 GOSUB 2880 8000 RETURN
'********************************** '* Maxi-Font * '* Font Editor by Dennis Wyatt * '* Using mmBasic for the * '* Maximite computer * '********************************** ' get maximum screen dimension-split into 20 parts Max_x=MM.HRes : Min_x=Cint(Max_x/20) Max_y=MM.VRes : Min_y=Cint(max_y/20) Cls addchar=1 '*********************************** ' Set to Capture SD card errors '*********************************** Option Error Continue '*********************************** '* Show front page '*********************************** Font Load "gothic.fnt" As #4 : Font #4 Locate 0,1 : ?"200000000000004" Locate 0,33 : ? "1" : Locate max_x-32,33 : ? "1" Locate 0,65 : ? "1" : Locate max_x-32,65 : ? "1" Locate 0,92 ?"300000000000005" '********************************************** '* return to font 1 and unload gothic font '* need the memory '********************************************** Font #1 : Font unload #4 Font Load "invade.fnt" As #5 :Font #5 Locate 40,57 : ? "0 2 4": Locate 15*min_x,57: ? "1 3 5" Font #1 Locate 9*min_x,37: ? "Welcome to" Font #1,3 Locate 7.3*min_x,52 : ? "MaxiFont" Line (0,124)-(max_x,124),1 Font #1,1 Locate 2*min_x,130 ? "This program will help you to design some interesting fonts, with" Locate 2*min_x,145 ? "the added scope of allowing the design of program sprites, for the" Locate 2*min_x,160 ? "inclusion into some Maximite games, or just make some gothic borders." Locate 2*min_x,190 ? "The design of the font should take into account the available" Locate 2*min_x,205 ? "memory in the system. This is about 37 Kb, for arrays, used in the" Locate 2*min_x,220 ?"design process. This limits the number of characters, in the editor" Locate 2*min_x,235 ?"at one time. A 255 pixel wide font by 64 pixels high can only have" Locate 2*min_x,250 ?"2 Characters, if I rewrite the code. A 10 pixel by 10 pixel font can" Locate 2*min_x,265 ?"have only 70 characters in the editor at one time." Locate 2*min_x,280 ?"You can always append the files together later. Once saved the font" Locate 2*min_x,295 ?"takes up one quarter the size." Locate 2*min_x,310 ?"It would be easier to design a smaller font and just piece them" Locate 2*min_x,325 ?"together to form one large picture." Locate 2*min_x,340 ?"If you encounter an out of memory error, then reduce the number of " Locate 2*min_x,355 ?"Characters" Locate 9*min_x,385 : ?"press any key" Do While (Inkey$="") Font #5 Pause 100 frontpage=Not frontpage If (frontpage=1) Then Locate 40,57 : ? "1 3 5": Locate 15*min_x,57: ? "0 2 4" Else Locate 40,57 : ? "0 2 4": Locate 15*min_x,57: ? "1 3 5" EndIf Loop For a=1 To 5 Pause 150 On a GoTo explode1,explode2,explode3,explode4,explode5 explode1: Locate 40,57 : ? "6 6 6": Locate 15*min_x,57: ? "6 6 6":Next a explode2: Locate 40,57 : ? "7 7 7": Locate 15*min_x,57: ? "7 7 7":Next a explode3: Locate 40,57 : ? "8 8 8": Locate 15*min_x,57: ? "8 8 8":Next a explode4: Locate 40,57 : ? "9 9 9": Locate 15*min_x,57: ? "9 9 9":Next a explode5: t$=Chr$(59)+" "+Chr$(59)+" "+Chr$(59) Locate 40,57 : ? t$: Locate 15*min_x,57: ? t$ :Next a Font #1 : Font unload #5 t$=" " Line(2*min_x,130)-(max_x,max_y),0,BF Locate 0,130 Fontwidth: ? t$; : Input "Width of Font? ",fwidth If (fwidth>255) Then ? t$+"Cannot be bigger than 255 pixels": GoTo Fontwidth EndIf Fontheight: ? t$; : Input "Height of Font ? ",fheight If (fheight > 64) Then ? t$+"Cannot be higher than 64 pixels":GoTo Fontheight EndIf If (fheight =0) Then ? t$+"Cannot be lower than 1 pixels":GoTo Fontheight EndIf Fontnumber: ? t$; : Input "Number of Characters ? ",fnumber If (fnumber =0) Then ? t$+"Cannot be less than 1 Character":GoTo Fontnumber EndIf If (fnumber >128) Then ? t$+"Cannot be more than 128 Characters":GoTo Fontnumber EndIf Fontstart: ? t$; : Input "Start Character set at ?";fstart If (fstart<32) Then ? t$+"Cannot be less than 32 ": GoTo Fontstart EndIf Cls Option base 0 Dim values(4) Dim plot(fnumber,fwidth,fheight) Line (0,0)-(max_x-1,100),1,BF Line (10,10)-(max_x-11,90),0,BF GoSub UpdateFontDetails Line (0,101)-(max_x-1,max_y-1),1,B Line (2,103)-(6*min_x,max_y-3),1,B screenx=Max_x-1-(7*min_x) Setupgrid: screenstepx=Cint(screenx/fwidth-1) countxmax=screenstepx*fwidth+7*min_x screeny=max_y-104 : screenstepy=Cint(screeny/fheight-1) countymax=screenstepy*fheight+104 Line (7*min_x,103)-(19*min_x,19*min_y),0,BF For countx = 7*min_x To countxmax Step screenstepx Line (countx,103)-(countx,countymax),1 Next countx For county = 103 To countymax Step screenstepy Line (7*min_x,county)-(countxmax,county),1 Next county box_x=screenstepx-2 : box_y=screenstepy-2 cursorx=7*min_x+1 : cursory=104 GoSub Instructions GoSub Displayfontchar ' read font info into display Timer=0 plotx=1 : ploty=1 : charxy=1 Locate 160,15 : ?"X-Position":GoSub update_x_position Locate 160,30 : ?"Y-Position":GoSub update_y_position Locate 160,45 : ?"Character #":GoSub update_char_number Locate 160,60 : ? "Character code ":GoSub update_char_code Do text$=Inkey$ If (text$<>"") Then GoSub Continueloop timerloop=Timer If (timerloop>oldloop+100) Then oldloop=oldloop+100 cmode=Not cmode GoSub flash_cursor_pos EndIf Loop flash_cursor_pos: Line (cursorx,cursory)-(cursorx+box_x,cursory+box_y),cmode,BF Return Continueloop: If (Asc(text$)=131) Then If (plotx=fwidth) Then ' do nothing at right edge already Else cursorx=cursorx+screenstepx plotx=plotx+1 GoSub update_x_position EndIf If (plot(charxy,plotx-1,ploty)=0) Then direction=1:GoSub clear_right If(plot(charxy,plotx-1,ploty)=1) Then direction=1 :GoSub draw_right EndIf EndIf If (Asc(text$)=130) Then If (plotx=1) Then ' do nothing at left edge already Else cursorx=cursorx-screenstepx plotx=plotx-1 GoSub update_x_position EndIf If (plot(charxy,plotx+1,ploty)=0) Then direction=-1 : GoSub clear_right If(plot(charxy,plotx+1,ploty)=1) Then direction=-1 :GoSub draw_right EndIf EndIf If (Asc(text$)=128) Then If (ploty=1) Then ' do nothing at top edge already Else cursory=cursory-screenstepy ploty=ploty-1 GoSub update_y_position EndIf If (plot(charxy,plotx,ploty+1)=0) Then direction=-1 : GoSub clear_down If(plot(charxy,plotx,ploty+1)=1) Then direction=-1 :GoSub clear_up EndIf EndIf If (Asc(text$)=129) Then If (ploty=fheight) Then ' do nothing at bottom edge already Else cursory=cursory+screenstepy ploty=ploty+1 GoSub update_y_position If (plot(charxy,plotx,ploty-1)=0) Then direction=1 : GoSub clear_down If(plot(charxy,plotx,ploty-1)=1) Then direction=1 :GoSub clear_up EndIf EndIf If(text$="-") Then GoSub Char_up If (Asc(text$)=132) Then GoSub Insert_char If(text$="e"Or text$="E") Then Cls : ? "Hope you found this tool useful!" : End EndIf If (text$="c" Or text$="C") Then GoSub Copy_char If (text$="v" Or text$="V") Then GoSub Vertical_flip If (text$="h" Or text$="H") Then GoSub horizontal_flip If (Asc(text$)=139) Then GoSub Set_plot If(text$="+") Then GoSub Char_down If (Asc(text$)=32) Then GoSub Clear_plot If (text$="s" Or text$="S") Then GoSub Save_font If (text$="l" Or text$="L") Then GoTo Load_font update_x_position: Locate 220,15 : ? plotx;" " Return update_y_position: Locate 220,30: ? ploty;" " Return update_char_number: Locate 230,45 : ? charxy;" " update_char_code: Locate 245,60 : ? fstart+charxy-1;" " Return clear_right: tempx=cursorx-(direction*screenstepx) Line (tempx,cursory)-(tempx+box_x,cursory+box_y),0,BF Return draw_right: tempx=cursorx-(direction*screenstepx) Line (tempx,cursory)-(tempx+box_x,cursory+box_y),1,BF Return clear_down: tempy=cursory-(direction*screenstepy) Line (cursorx,tempy)-(cursorx+box_x,tempy+box_y),0,BF Return clear_up: tempy=cursory-(direction*screenstepy) Line (cursorx,tempy)-(cursorx+box_x,tempy+box_y),1,BF Return Set_plot: Pixel(52+plotx,292+ploty)=1 plot(charxy,plotx,ploty)=1 Return Clear_plot: plot(charxy,plotx,ploty)=0 Pixel(52+plotx,292+ploty)=0 Return Save_font: GoSub Clear_box : Locate 270,20 : ? " " Locate 270,20 : Input "Filename to Save : ",savename$ If (Right$(savename$,3)<>"fnt") Then savename$=savename$+".fnt" Insert_save_font: Open savename$ For output As #1 typefile$="save" On MM.Errno GoTo No_sd_card, Card_protected, no_space_left, All_root_gone, Invalid_filename, Cannot_find_file Print #1,fheight","fwidth","fstart","fstart+fnumber-addchar For numchar=1 To fnumber For row = 1 To fheight temp$="" For column=1 To fwidth If (plot(numchar,column,row)=1) Then temp$=temp$+"X" If (plot(numchar,column,row)=0) Then temp$=temp$+" " Next column Print #1,temp$ Next row next numchar If addchar=0 Then GoSub Insert_Char_now Close #1 GoSub Clear_box Locate 270,20 : ?"save ok" Return Load_font: GoSub Clear_box : Locate 270,20 : ? " " Locate 270,20 : Input "Filename to load : ",fname$ If (Right$(fname$,3)<>"fnt") Then fname$=fname$+".fnt" Insert_Load_Font: Open fname$ For input As #2 typefile$="load" On MM.Errno GoTo No_sd_card, Card_protected, no_space_left, All_root_gone, Invalid_filename, Cannot_find_file Line Input #2,temp$ Erase values Dim values(4) pointer=1: fwidth =0: fheight=0 :fnumber=0 :fstart=0 For a= 1 To Len(temp$) a$=Mid$(temp$,a,1) If (a$=",") Then values(pointer)=Val(rwidth$) pointer=pointer+1 rwidth$="" Else rwidth$=rwidth$+a$ EndIf Next a values(4)= Val(rwidth$) fwidth=values(2) fheight=Val(temp$) fstart=values(3) fnumber=values(4)-values(3)+1 Erase plot : GoSub My_pause Dim plot(fnumber,fwidth,fheight) GoSub My_pause For a= 1 To fnumber For c=1 To fheight Line Input #2,temp$ For b=1 To fwidth If (Mid$(temp$,b,1)=Chr$(32)) Then plot(a,b,c)=0 Else plot(a,b,c)=1 EndIf Next b nextc next a Close #2 GoSub Clear_box Locate 270,20 ?"load ok" GoSub UpdateFontDetails GoTo Setupgrid Char_up: If (charxy =1) Then 'rem do nothing Else charxy=charxy-1 GoSub update_char_number GoSub Displayfontchar EndIf Return Char_down: If (charxy =fnumber) Then 'rem do nothing Else charxy=charxy+1 GoSub update_char_number GoSub Displayfontchar EndIf Return Displayfontchar: Line (52,292)-(52+fwidth,292+fheight),0,BF a=charxy : If (a=0) Then a=1 cursorx=7*min_x+2 : cursory=105 plotx=1 :ploty=1 For c=1 To fheight For b=1 To fwidth tempx=cursorx+(b-1)*screenstepx : tempy=cursory+(c-1)*screenstepy temp2x=tempx+box_x : temp2y=tempy+box_y If (plot(a,b,c)=0) Then Line (tempx,tempy)-(temp2x,temp2y),0,BF Else Line (tempx,tempy)-(temp2x,temp2y),1,BF Pixel(52+b,292+c)=1 EndIf Next b next c GoSub update_char_number Return UpdateFontDetails: Locate 100,15 : ? " ":Locate 20,15: ? "Width ";fwidth Locate 50,30 : ? " ":Locate 20,30: ? "Height ";fheight Locate 130,45 : ? " ":Locate 20,45: ? "Characters in Set ";fnumber Locate 80,60 : ? " ":Locate 20,60: ? "Start Character ";fstart Return Instructions: Locate 10,110 : ? "Move --- Cursor keys" Locate 10,125 : ? "Set ___ Left Alt." Locate 10,140 : ? "Erase --- Space" Locate 10,155 : ? "Load --- l or L" Locate 10,170 : ? "Save --- s or S" Locate 10,185 : ? "Char Up ___ +" Locate 10,200 : ? "Char Down --- -" Locate 10,215 : ? "Add Char ___ Insert" Locate 10,230 : ? "Copy Char ___ c or C" Locate 10,245 : ? "Flip Vert. ___ v or V" Locate 10,260 : ? "Flip Horiz.___ h or H" Locate 10,275 : ? "Exit ___ e or E" Line (4,290)- (6*min_x-2,max_y-6),1,B Locate 10,300: ?"Pixel":Locate 10,320: ? "Size" Line (50,291)-(6*min_x-4,max_y-70),0,BF Line (50,290)-(50+fwidth+4,290+fheight+4),1,B Locate 30,Max_y-65 ? "Code Written by" Locate 15,Max_y-45 ? "Dennis Wyatt ";:Font Load "copyr.fnt" As #6 :Font #6 ? " "; : Font #1 : Font unload #6 : ? " 2011" Locate 15,Max_y-25 ? "dpwyatt@iinet.net.au" Return My_pause: 'pause routine for array erasure completion Timer=0 Do While timertemp<3000 timertemp=Timer oop Return No_sd_card: Locate 270,40: ? "ERROR -No SD Card present" Locate 270,55: ? "Please insert card and re-enter" Locate 270,70: ? "Filename at the prompt above" Pause 2000 If (typefile$="save") Then GoTo Save_font Else GoTo Load_font EndIf Card_protected: Locate 270,40: ? "Card is Write Protected" Locate 270,55: ? "Please write enable and re-enter" Locate 270,70: ? "Filename at the prompt above" If (typefile$="save") Then GoTo Save_font Else GoTo Load_font EndIf no_space_left: Locate 270,40: ? "not enough space" Locate 270,55: ? "Please rectify and re-enter" Locate 270,70: ? "Filename at the prompt above" If (typefile$="save") Then GoTo Save_font Else GoTo Load_font EndIf All_root_gone: Locate 270,40 : ? "All root dir. taken" If (typefile$="save") Then GoTo Save_font Else GoTo Load_font EndIf Invalid_filename: Locate 270,40 : ? "Invalid Filename" Locate 270,55: ? "Please rectify and re-enter" Locate 270,70: ? "Filename at the prompt above" If (typefile$="save") Then GoTo Save_font Else GoTo Load_font EndIf Cannot_find_file: Locate 270,40: ? "Cannot find File" Locate 270,55: ? "Please re-enter" Locate 270,70: ? "Filename at the prompt above" If (typefile$="save") Then GoTo Save_font Else GoTo Load_font EndIf Insert_char: ' insert character function addchar=0 savename$="temp.fnt" GoSub Insert_save_font fname$="temp.fnt" GoSub Insert_Load_Font addchar=1 Kill "temp.fnt" Return Insert_Char_now: temp$="" For column=1 To fwidth temp$=temp$+" " Next column For row = 1 To fheight Print #1,temp$ Next row Return Clear_box: Locate 270,20 : Line (270,20)-(19*min_x,80),0,bf Return Copy_char: ' Copy function GoSub Clear_box Copy_input1_error: Locate 270,20 Input "Copy which Character # ";copychar If copychar>fnumber Then Locate 270,35 : ? "Not that many Char." GoTo Copy_input1_error EndIf Copy_input2_error: Locate 270,35 Input "To which Character # ";tochar If tochar>fnumber Then Locate 270,50 : ? "Not that many Char." : GoTo Copy_input2_error EndIf For copy1= 1 To fwidth For copy2= 1 To fheight plot(tochar,copy1,copy2)=plot(copychar,copy1,copy2) Next copy2 next copy1 Locate 270,50 : ? " " Locate 270,50 : ? "done" Return Vertical_flip: ' flip vertical function For flipV = 1 To Int(fheight/2) For flipV1 = 1 To fwidth flipvtemp=plot(charxy,flipV1,flipV) plot(charxy,flipV1,flipV)=plot(charxy,flipV1,fheight-flipV+1) plot(charxy,flipV1,fheight-flipV+1)=flipvtemp Next flipV1 Next flipV GoSub Clear_box Locate 270,20 ? "Vertical Flip Done" GoSub Displayfontchar Return horizontal_flip: ' flip horizontal function For flipH = 1 To Int(fwidth/2) For flipH1 = 1 To fheight fliphtemp=plot(charxy,flipH,flipH1) plot(charxy,flipH,flipH1)=plot(charxy,fwidth-flipH+1,flipH1) plot(charxy,fwidth-flipH+1,flipH1)=fliphtemp Next fliph1 Next flipH GoSub Clear_box Locate 270,20 ? "Horizontal Flip Done" GoSub Displayfontchar Return
'********************************** '* Maxi-Font * '* Font Editor by Dennis Wyatt * '* Using mmBasic for the * '* Maximite computer * '* V 3.1 * '********************************** ' get maximum screen dimension-split into 20 parts Max_x=MM.HRes : Min_x=Cint(Max_x/20) Max_y=MM.VRes : Min_y=Cint(max_y/20) Cls addchar=1 '*********************************** ' Set to Capture SD card errors '*********************************** Option Error Continue '*********************************** '* Show front page '*********************************** Font Load "gothic.fnt" As #4 : Font #4 Print @(0,1) "200000000000004" Print @(0,33) "1" Print @(max_x-32,33) "1" Print @(0,65) "1" Print @(max_x-32,65) "1" Print @(0,92) "300000000000005" '********************************************** '* return to font 1 and unload gothic font '* need the memory '********************************************** Font #1 Font unload #4 Font Load "invade.fnt" As #5 Font #5 Print @(40,57) "0 2 4" Print @(15*min_x,57) "1 3 5" Font #1 Print @(9*min_x,37) "Welcome to" Font #1,3 Print @(7.3*min_x,52)"MaxiFont" Line (0,124)-(max_x,124),1 Font #1,1 Print @(2*min_x,130)"This program will help you to design some interesting fonts, with" Print @(2*min_x,145)"the added scope of allowing the design of program sprites, for the" Print @(2*min_x,160)"inclusion into some Maximite games, or just make some gothic borders." Print @(2*min_x,190)"The design of the font should take into account the available" Print @(2*min_x,205)"memory in the system. This is about 37 Kb, for arrays, used in the" Print @(2*min_x,220)"design process. This limits the number of characters, in the editor" Print @(2*min_x,235)"at one time. A 255 pixel wide font by 64 pixels high can only have" Print @(2*min_x,250)"2 Characters, if I rewrite the code. A 10 pixel by 10 pixel font can" Print @(2*min_x,265)"have only 70 characters in the editor at one time." Print @(2*min_x,280)"You can always append the files together later. Once saved the font" Print @(2*min_x,295)"takes up one quarter the size." Print @(2*min_x,310)"It would be easier to design a smaller font and just piece them" Print @(2*min_x,325)"together to form one large picture." Print @(2*min_x,340)"If you encounter an out of memory error, then reduce the number of " Print @(2*min_x,355)"Characters" Print @(9*min_x,385)"press any key" Do While (Inkey$="") Font #5 Pause 100 frontpage=Not frontpage If (frontpage=1) Then Print @(40,57)"1 3 5" @(15*min_x,57)"0 2 4" Else Print @(40,57)"0 2 4" @(15*min_x,57)"1 3 5" EndIf Loop For a=1 To 5 Pause 150 On a GoTo explode1,explode2,explode3,explode4,explode5 explode1: Print @(40,57)"6 6 6" @(15*min_x,57)"6 6 6" Next a explode2: Print @(40,57)"7 7 7" @(15*min_x,57)"7 7 7" Next a explode3: Print @(40,57)"8 8 8" @(15*min_x,57)"8 8 8" Next a explode4: Print @(40,57)"9 9 9" @(15*min_x,57)"9 9 9" Next a explode5: t$=Chr$(59)+" "+Chr$(59)+" "+Chr$(59) Print @(40,57)t$ @(15*min_x,57) t$ Next a Font #1 Font unload #5 t$=" " Line(2*min_x,130)-(max_x,max_y),0,BF Print @(0,130)""; Fontwidth: ? t$; Input "Width of Font? ",fwidth If (fwidth>255) Then ? t$+"Cannot be bigger than 255 pixels" GoTo Fontwidth EndIf Fontheight: ? t$; Input "Height of Font ? ",fheight If (fheight > 64) Then ? t$+"Cannot be higher than 64 pixels" GoTo Fontheight EndIf If (fheight =0) Then ? t$+"Cannot be lower than 1 pixels" GoTo Fontheight EndIf Fontnumber: ? t$; Input "Number of Characters ? ",fnumber If (fnumber =0) Then ? t$+"Cannot be less than 1 Character" GoTo Fontnumber EndIf If (fnumber >128) Then ? t$+"Cannot be more than 128 Characters" GoTo Fontnumber EndIf Fontstart: ? t$; : Input "Start Character set at ?";fstart If (fstart<32) Then ? t$+"Cannot be less than 32 " GoTo Fontstart EndIf Cls Option base 0 Dim values(4) Dim plot(fnumber,fwidth,fheight) Line (0,0)-(max_x-1,100),1,BF Line (10,10)-(max_x-11,90),0,BF GoSub UpdateFontDetails Line (0,101)-(max_x-1,max_y-1),1,B Line (2,103)-(6*min_x,max_y-3),1,B screenx=Max_x-1-(7*min_x) Setupgrid: screenstepx=Cint(screenx/fwidth-1) countxmax=screenstepx*fwidth+7*min_x screeny=max_y-104 screenstepy=Cint(screeny/fheight-1) countymax=screenstepy*fheight+104 Line (7*min_x,103)-(19*min_x,19*min_y),0,BF For countx = 7*min_x To countxmax Step screenstepx Line (countx,103)-(countx,countymax),1 Next countx For county = 103 To countymax Step screenstepy Line (7*min_x,county)-(countxmax,county),1 Next county box_x=screenstepx-2 box_y=screenstepy-2 cursorx=7*min_x+1 cursory=104 GoSub Instructions GoSub Displayfontchar ' read font info into display Timer=0 plotx=1 : ploty=1 : charxy=1 Print @(160,15)"X-Position" GoSub update_x_position Print @(160,30)"Y-Position" GoSub update_y_position Print @(160,45)"Character #" GoSub update_char_number Print @(160,60)"Character code " GoSub update_char_code Do text$=Inkey$ If (text$<>"") Then GoSub Continueloop timerloop=Timer If (timerloop>oldloop+100) Then oldloop=oldloop+100 cmode=Not cmode GoSub flash_cursor_pos EndIf Loop flash_cursor_pos: Line (cursorx,cursory)-(cursorx+box_x,cursory+box_y),cmode,BF Return Continueloop: If (Asc(text$)=131) Then If (plotx=fwidth) Then ' do nothing at right edge already Else cursorx=cursorx+screenstepx plotx=plotx+1 GoSub update_x_position EndIf If (plot(charxy,plotx-1,ploty)=0) Then direction=1 : GoSub clear_right If(plot(charxy,plotx-1,ploty)=1) Then direction=1 : GoSub draw_right EndIf EndIf If (Asc(text$)=130) Then If (plotx=1) Then ' do nothing at left edge already Else cursorx=cursorx-screenstepx plotx=plotx-1 GoSub update_x_position EndIf If (plot(charxy,plotx+1,ploty)=0) Then direction=-1 : GoSub clear_right If(plot(charxy,plotx+1,ploty)=1) Then direction=-1 :GoSub draw_right EndIf EndIf If (Asc(text$)=128) Then If (ploty=1) Then ' do nothing at top edge already Else cursory=cursory-screenstepy ploty=ploty-1 GoSub update_y_position EndIf If (plot(charxy,plotx,ploty+1)=0) Then direction=-1 : GoSub clear_down If(plot(charxy,plotx,ploty+1)=1) Then direction=-1 :GoSub clear_up EndIf EndIf If (Asc(text$)=129) Then If (ploty=fheight) Then ' do nothing at bottom edge already Else cursory=cursory+screenstepy ploty=ploty+1 GoSub update_y_position If (plot(charxy,plotx,ploty-1)=0) Then direction=1 : GoSub clear_down If(plot(charxy,plotx,ploty-1)=1) Then direction=1 :GoSub clear_up EndIf EndIf If(text$="-") Then GoSub Char_up If (Asc(text$)=132) Then GoSub Insert_char If(text$="e"Or text$="E") Then Cls ? "Hope you found this tool useful!" End EndIf If (text$="c" Or text$="C") Then GoSub Copy_char If (text$="v" Or text$="V") Then GoSub Vertical_flip If (text$="h" Or text$="H") Then GoSub horizontal_flip If (Asc(text$)=139) Then GoSub Set_plot If(text$="+") Then GoSub Char_down If (Asc(text$)=32) Then GoSub Clear_plot If (text$="s" Or text$="S") Then GoSub Save_font If (text$="l" Or text$="L") Then GoTo Load_font update_x_position: Print @(220,15)plotx;" " Return update_y_position: Print @(220,30)ploty;" " Return update_char_number: Print @(230,45)charxy;" " Return update_char_code: Print @(245,60)fstart+charxy-1;" " Return clear_right: tempx=cursorx-(direction*screenstepx) Line (tempx,cursory)-(tempx+box_x,cursory+box_y),0,BF Return draw_right: tempx=cursorx-(direction*screenstepx) Line (tempx,cursory)-(tempx+box_x,cursory+box_y),1,BF Return clear_down: tempy=cursory-(direction*screenstepy) Line (cursorx,tempy)-(cursorx+box_x,tempy+box_y),0,BF Return clear_up: tempy=cursory-(direction*screenstepy) Line (cursorx,tempy)-(cursorx+box_x,tempy+box_y),1,BF Return Set_plot: Pixel(52+plotx,292+ploty)=1 plot(charxy,plotx,ploty)=1 Return Clear_plot: plot(charxy,plotx,ploty)=0 Pixel(52+plotx,292+ploty)=0 Return Save_font: GoSub Clear_box Print @(270,20)" " Print @(270,20); Input "Filename to Save : ",savename$ If (Right$(savename$,3)<>"fnt") Then savename$=savename$+".fnt" Insert_save_font: Open savename$ For output As #1 typefile$="save" On MM.Errno GoTo No_sd_card, Card_protected, no_space_left, All_root_gone, Invalid_filename, Cannot_find_file Print #1,fheight","fwidth","fstart","fstart+fnumber-addchar For numchar=1 To fnumber For row = 1 To fheight temp$="" For column=1 To fwidth If (plot(numchar,column,row)=1) Then temp$=temp$+"X" If (plot(numchar,column,row)=0) Then temp$=temp$+" " Next column Print #1,temp$ Next row next numchar If addchar=0 Then GoSub Insert_Char_now Close #1 GoSub Clear_box Print @(270,20)"save ok" Return Load_font: GoSub Clear_box Print @(270,20)" " Print @(270,20); Input "Filename to load : ",fname$ If (Right$(fname$,3)<>"fnt") Then fname$=fname$+".fnt" Insert_Load_Font: Open fname$ For input As #2 typefile$="load" On MM.Errno GoTo No_sd_card, Card_protected, no_space_left, All_root_gone, Invalid_filename, Cannot_find_file Line Input #2,temp$ Erase values Dim values(4) pointer=1: fwidth =0: fheight=0 :fnumber=0 :fstart=0 For a= 1 To Len(temp$) a$=Mid$(temp$,a,1) If (a$=",") Then values(pointer)=Val(rwidth$) pointer=pointer+1 rwidth$="" Else rwidth$=rwidth$+a$ EndIf Next a values(4)= Val(rwidth$) fwidth=values(2) fheight=Val(temp$) fstart=values(3) fnumber=values(4)-values(3)+1 Erase plot GoSub My_pause Dim plot(fnumber,fwidth,fheight) GoSub My_pause For a= 1 To fnumber For c=1 To fheight Line Input #2,temp$ For b=1 To fwidth If (Mid$(temp$,b,1)=Chr$(32)) Then plot(a,b,c)=0 Else plot(a,b,c)=1 EndIf Next b next c next a Close #2 GoSub Clear_box Print @(270,20)"load ok" GoSub UpdateFontDetails GoTo Setupgrid Char_up: If (charxy =1) Then 'rem do nothing Else charxy=charxy-1 GoSub update_char_number GoSub Displayfontchar EndIf Return Char_down: If (charxy =fnumber) Then 'rem do nothing Else charxy=charxy+1 GoSub update_char_number GoSub Displayfontchar EndIf Return Displayfontchar: Line (52,292)-(52+fwidth,292+fheight),0,BF a=charxy If (a=0) Then a=1 cursorx=7*min_x+2 : cursory=105 plotx=1 :ploty=1 For c=1 To fheight For b=1 To fwidth tempx=cursorx+(b-1)*screenstepx tempy=cursory+(c-1)*screenstepy temp2x=tempx+box_x temp2y=tempy+box_y If (plot(a,b,c)=0) Then Line (tempx,tempy)-(temp2x,temp2y),0,BF Else Line (tempx,tempy)-(temp2x,temp2y),1,BF Pixel(52+b,292+c)=1 EndIf Next b next c GoSub update_char_number Return UpdateFontDetails: Print @(100,15) " " @(20,15)"Width ";fwidth Print @(50,30) " " @(20,30)"Height ";fheight Print @(130,45) " " @(20,45)"Characters in Set ";fnumber Print @(80,60) " "@(20,60)"Start Character ";fstart Return Instructions: Print @(10,110)"Move --- Cursor keys" Print @(10,125)"Set ___ Left Alt." Print @(10,140)"Erase --- Space" Print @(10,155)"Load --- l or L" Print @(10,170)"Save --- s or S" Print @(10,185)"Char Up ___ +" Print @(10,200)"Char Down --- -" Print @(10,215)"Add Char ___ Insert" Print @(10,230)"Copy Char ___ c or C" Print @(10,245)"Flip Vert. ___ v or V" Print @(10,260)"Flip Horiz.___ h or H" Print @(10,275)"Exit ___ e or E" Line (4,290)- (6*min_x-2,max_y-6),1,B Print @(10,300)"Pixel" @(10,320)"Size" Line (50,291)-(6*min_x-4,max_y-70),0,BF Line (50,290)-(50+fwidth+4,290+fheight+4),1,B Print @(30,Max_y-65)"Code Written by" Print @(15,Max_y-45)"Dennis Wyatt "; Font Load "copyr.fnt" As #6 Font #6 Print " "; Font #1 Font unload #6 Print " 2011" Print @(15,Max_y-25)"dpwyatt@iinet.net.au" Return My_pause: 'pause routine for array erasure completion Timer=0 Do While timertemp<3000 timertemp=Timer Loop Return No_sd_card: Print @(270,40)"ERROR -No SD Card present" Print @(270,55)"Please insert card and re-enter" Print @(270,70)"Filename at the prompt above" Pause 2000 If (typefile$="save") Then GoTo Save_font Else GoTo Load_font EndIf Card_protected: Print @(270,40)"Card is Write Protected" Print @(270,55)"Please write enable and re-enter" Print @(270,70)"Filename at the prompt above" If (typefile$="save") Then GoTo Save_font Else GoTo Load_font EndIf no_space_left: Print @(270,40)"not enough space" Print @(270,55)"Please rectify and re-enter" Print @(270,70)"Filename at the prompt above" If (typefile$="save") Then GoTo Save_font Else GoTo Load_font EndIf All_root_gone: Print @(270,40)"All root dir. taken" If (typefile$="save") Then GoTo Save_font Else GoTo Load_font EndIf Invalid_filename: Print @(270,40)"Invalid Filename" Print @(270,55)"Please rectify and re-enter" Print @(270,70)"Filename at the prompt above" If (typefile$="save") Then GoTo Save_font Else GoTo Load_font EndIf Cannot_find_file: Print @(270,40)"Cannot find File" Print @(270,55)"Please re-enter" Print @(270,70)"Filename at the prompt above" If (typefile$="save") Then GoTo Save_font Else GoTo Load_font EndIf Insert_char: ' insert character function addchar=0 savename$="temp.fnt" GoSub Insert_save_font fname$="temp.fnt" GoSub Insert_Load_Font addchar=1 Kill "temp.fnt" Return Insert_Char_now: temp$="" For column=1 To fwidth temp$=temp$+" " Next column For row = 1 To fheight Print #1,temp$ Next row Return Clear_box: Line (270,20)-(19*min_x,80),0,bf Return Copy_char: ' Copy function GoSub Clear_box Copy_input1_error: Print @(270,20); Input "Copy which Character # ";copychar If copychar>fnumber Then Print @(270,35)"Not that many Char." GoTo Copy_input1_error EndIf Copy_input2_error: Print @(270,35); Input "To which Character # ";tochar If tochar>fnumber Then Print @(270,50) "Not that many Char." GoTo Copy_input2_error EndIf For copy1= 1 To fwidth For copy2= 1 To fheight plot(tochar,copy1,copy2)=plot(copychar,copy1,copy2) Next copy2 Next copy1 Print @(270,50)" " Print @(270,50)"done" Return Vertical_flip: ' flip vertical function For flipV = 1 To Int(fheight/2) For flipV1 = 1 To fwidth flipvtemp=plot(charxy,flipV1,flipV) plot(charxy,flipV1,flipV)=plot(charxy,flipV1,fheight-flipV+1) plot(charxy,flipV1,fheight-flipV+1)=flipvtemp Next flipV1 Next flipV GoSub Clear_box Print @(270,20)"Vertical Flip Done" GoSub Displayfontchar Return horizontal_flip: ' flip horizontal function For flipH = 1 To Int(fwidth/2) For flipH1 = 1 To fheight fliphtemp=plot(charxy,flipH,flipH1) plot(charxy,flipH,flipH1)=plot(charxy,fwidth-flipH+1,flipH1) plot(charxy,fwidth-flipH+1,flipH1)=fliphtemp Next fliph1 Next flipH GoSub Clear_box Print @(270,20)"Horizontal Flip Done" GoSub Displayfontchar Return