2 DEFINT A-Z:DIM CD(94,11):XCNR=190:YCNR=10:AC$=CHR$(28)+CHR$(29)+CHR$(30)+CHR$(31)+"FCSLDTKQMBE":ES$=CHR$(27):ZO$=CHR$(0):FL=0:FOR CHAR=0 TO 94:CD(CHAR,0)=139:NEXT CHAR 'DEFAULT PARAMETERS
3 ON ERROR GOTO 1600:CLS:PRINT@93,"* * FONTFX * *":PRINT:PRINT@161,"Typeface editor for Epson FX printers":PRINT @220," by Jay Holovacs":PRINT @295,". . hit any key";:R$=INPUT$(1):GOSUB 1200:CLS
100 REM LOOP
101 GOSUB 908
102 R$=INKEY$:IF R$="" THEN 102
103 IF INSTR(1,AC$,R$) THEN 104 ELSE 102
104 ON INSTR(1,AC$,R$) GOTO 105,106,107,108,109,110,111,112,113,114,115,119,116,117,118
105 DIR=1:GOSUB 700:GOTO 102'RIGHT
106 DIR=-1:GOSUB 700:GOTO 102 'LEFT
107 DIR=-1:GOSUB 750:GOTO 102 'UP
108 DIR=1:GOSUB 750:GOTO 102 'DOWN
109 IF NE THEN 102 ELSE SW=1:GOSUB 500:GOSUB 800:FL=1:GOTO 102 'FILL BIT
110 IF NE THEN 102 ELSE SW=0:GOSUB 500:GOSUB 800:FL=1:GOTO 102 'CLEAR BIT
111 GOSUB 1100:GOTO 100 'SAVE
112 GOSUB 1200:GOTO 100 'LOAD
113 GOSUB 1300:GOTO 100 'DOWNLOAD
114 GOSUB 1400:GOTO 100 'TEST
115 GOSUB 1500:GOTO 100 'KLONE
116 GOSUB 1700:GOTO 102 'SHIFT CHAR
117 GOSUB 1550:GOTO 102 'BLANK A CHAR
118 GOSUB 900:GOTO 100 'EDIT MODE
119 CLOSE:CLS:IF FL THEN PRINT @40,"Data modified since last save":PRINT"QUIT (Y/N)?";:IF INPUT$(1)<>"Y" THEN 100
120 END
300 REM DRAW GRID--ENTRY/XCNR,YCNR
301 LINE(XCNR,YCNR)-(XC+34,YC+41),1,B:FOR X=5 TO 40 STEP 5:LINE(XC,X+YC)-(XC-3,X+YC):NEXT:FOR X=4 TO 33 STEP 3:LINE(X+XC,YC)-(X+XC,YC-3):NEXT:RETURN
400 REM DRAW PIXEL--ENTRY/LROW,LCOL,SW
401 FOR Q=0 TO 2:FOR Q1=0 TO 3:PSET(LCOL+Q,LROW+Q1,SW):NEXT Q1,Q:RETURN
500 REM DRAW A PIXEL--ENTRY/SW,RCUR,CCUR
501 IF NE THEN RETURN
502 LROW=YCNR+1+5*(RCUR-1):LCOL=XCNR+1+3*(CCUR-1):GOSUB 400:RETURN:REM PLACE CURSOR MARKERS--ENTRY/SW,RCUR,CCUR=CURSOR LOCATION
902 PRINT @5,"* *EDIT CHARACTER* *":CHAR=65:INPUT "ASCII (33-127)";CHAR:CHAR=CHAR-33:IF CHAR<0 OR CHAR>94 THEN 902
903 PRINT@55,CHAR+33:IF CD(CHAR,0)AND128 THEN PRINT @97,"N"; ELSE PRINT @97,"Y";
904 R$="":PRINT@80,;:INPUT "DESCENDER (Y/N)";R$:IF R$<>"" THEN FL=1:IF R$<>"Y" THEN CD(CHAR,0)=CD(CHAR,0)OR 128 ELSE CD(CHAR,0)=CD(CHAR,0) AND 127
905 PRINT@137,(CD(CHAR,0)\16)AND7;:QQ=0:PRINT@120,;:INPUT "CHAR START (0-7)";QQ:IF QQ THEN PRINT@137,QQ:QQ=(QQAND7)*16:CD(CHAR,0)=(CD(CHAR,0)AND112)ORQQ:FL=1
906 PRINT@176,CD(CHAR,0)AND15;:QQ=12:PRINT@160,;:INPUT "CHAR END (5-11)";QQ:IF QQ<>12 THEN FL=1:CD(CHAR,0)=(CD(CHAR,0)AND240) OR QQ:PRINT @176,QQ 'ALLOW FOR DEFAULT ENTRY
1001 SW=1:FOR RCUR=1 TO 8:MSK=2^(8-RCUR):FOR CCUR=1 TO 11:IF CD(CHAR,CCUR) AND MSK THEN GOSUB 500
1002 NEXT CCUR,RCUR:RETURN
1003 PRINT". . hit [enter] to BYPASS":RETURN
1100 REM SAVE ROUTINE
1101 NE=1:F$="":CLS:PRINT" * *SAVE A SET OF CHARACTERS* *":PRINT@85,;:GOSUB 1003:PRINT @125,;:INPUT "SAVE FILE";F$:IF F$="" THEN 1105
1102 OPEN F$ FOR OUTPUT AS 1 ELSE RETURN:PRINT@165,". . FILE BEING WRITTEN. ."
1103 FOR CHAR=0 TO 94:FOR CCUR=0 TO 11:PRINT #1,CD(CHAR,CCUR);" ";:NEXT CCUR,CHAR
1104 CLOSE:FL=0
1105 CLS:RETURN
1200 REM LOAD FILE
1201 NE=1:CLS:PRINT @5,"* *LOAD AN EXISTING FILE* *":IF FL THEN PRINT@40,"NOTE: Current Data has been modified":PRINT " since last SAVE"
1202 F$="":PRINT @125,;:GOSUB 1003:PRINT @165,;:INPUT "FILE TO LOAD";F$:IF F$<>"" THEN OPEN F$ FOR INPUT AS 1 ELSE 1205
1203 PRINT @205,". .FILE BEING LOADED. .":FOR CHAR=0 TO 94:FOR CCUR=0 TO 11:INPUT #1,CD(CHAR,CCUR):NEXT CCUR,CHAR:CLOSE #1
1204 FL=0
1205 CLS:RETURN
1300 REM DOWNLOAD TO PRINTER
1301 NE=1:CLS:PRINT"* * DOWNLOAD TO PRINTER * *":IF(INP(187)AND6)<>2 THEN BEEP:PRINT" Printer not ready . . Hit any key";:R$=INPUT$(1):GOTO 1306
1302 GOSUB 1003:A1=0:A2=0:PRINT"ASCII RANGE:";:INPUT "from ";A1:INPUT " to ";A2:IF A1=0 OR A2=0 THEN 1306
1303 INPUT "LOAD STD CHAR SET FIRST";R$:IF INSTR(1,"Yy",R$) THEN LPRINT ES$;":";ZO$;ZO$;ZO$;
1304 PRINT "DOWNLOAD IN PROGRESS...":LPRINT ES$;"%";CHR$(1);ZO$;:LPRINT ES$;"&";ZO$;CHR$(A1);CHR$(A2);
1305 A1=A1-33:A2=A2-33:FOR CHAR=A1 TO A2:FOR CCUR=0 TO 11:LPRINT CHR$(CD(CHAR,CCUR));:NEXT CCUR,CHAR:CLS:PRINT"DOWNLOAD COMPLETE":BEEP:PRINT" TEST (Y/N)?";:IF INPUT$(1)="Y" THEN GOSUB 1400
1306 CLS:RETURN
1400 REM TEST CHARACTERS
1401 NE=1:CLS:TS$="":PRINT "* *TEST CHARACTERS* *":IF(INP(187)AND6)<>2 THEN BEEP:PRINT" Printer not ready . . Hit any key";:R$=INPUT$(1):GOTO 1405
1402 GOSUB 1003:LINE INPUT "STRING TO PRINT:";TS$:IF TS$=""THEN 1405