0 ' FONTFX.BA V 1.0C 6/12/86-Jay Holovacs 95 King George Rd.; Warren, NJ 07060 1 'Club 100 Library - 415/939-1246 BBS, 937-5039 NEWSLETTER, 932-8856 VOICE 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 503 LROW=YCNR-6:LCOL=XCNR+1+3*(CCUR-1):GOSUB 650:RETURN 'HORIZONTAL 504 LCOL=XCNR-5:LROW=YCNR+1+5*(RCUR-1):GOSUB 650:RETURN 'VERTICAL 650 REM DRAW CURSORS--ENTRY/LCOL,LROW 651 FOR Q=1 TO 2:FOR Q1=1 TO 2:PSET(LCOL+Q,LROW+Q1,SW):NEXT Q1,Q:RETURN 700 REM LEFT/RIGHT SCROLL--ENTRY/DIR,CCUR 701 IF CCUR+DIR<1 OR CCUR+DIR>11 OR NE THEN RETURN 702 SW=0:GOSUB 503:CCUR=CCUR+DIR:SW=1:GOSUB 503:RETURN 750 REM UP/DOWN SCROLL--ENTRY/DIR,RCUR 751 IF RCUR+DIR<1 OR RCUR+DIR>8 OR NE THEN RETURN 752 SW=0:GOSUB 504:RCUR=RCUR+DIR:SW=1:GOSUB 504:RETURN 800 REM MODIFY A BIT IN ARRAY VALUE--ENTRY/SW,CHAR,RCUR,CCUR 801 IF SW THEN CD(CHAR,CCUR)=CD(CHAR,CCUR) OR 2^(8-RCUR) ELSE CD(CHAR,CCUR)=CD(CHAR,CCUR)AND NOT(2^(8-RCUR)) 802 RETURN 900 REM ACCEPT PARAMETERS 901 NE=0:SW=1:CLS:RCUR=1:CCUR=1:GOSUB 503:GOSUB 504:GOSUB 300 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 907 GOSUB 1000:RCUR=1:CCUR=1:RETURN 908 PRINT @240,"F)ill C)lear S)ave B)lank E)dit":PRINT @280,"L)oad D)own T)est K)lone Q)uit M)ove";:RETURN 'COMMAND LINE 1000 REM DRAW A CHARACTER--ENTRY/CHAR 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 1403 INPUT "PROPORTIONAL MODE";R$:LPRINT ES$;"p";:IF INSTR(1,"Yy",R$) THEN LPRINT CHR$(49); ELSE LPRINT CHR$(48); 1404 LPRINT TS$ 1405 CLS:RETURN 1500 REM KLONE A CHARACTER 1501 NE=1:CLS:PRINT " * * COPY A CHARACTER * *":GOSUB 1003:A1=0:A2=0:INPUT "SOURCE ASCII";A1:INPUT "DEST ASCII";A2:IF A1=0 OR A2=0 THEN 1504 1502 PRINT "OK? (Y/N)";:IF INPUT$(1)<>"Y" THEN PRINT". . CANCELLED. .":RETURN 1503 A1=A1-33:A2=A2-33:FOR QQ=0 TO 11:CD(A2,QQ)=CD(A1,QQ):NEXT QQ:RETURN 1504 CLS:RETURN 1550 REM BLANK A CHARACTER--ENTRY/CHAR 1551 IF NE THEN RETURN 1552 FOR CCUR=1 TO 11:CD(CHAR,CCUR)=0:NEXT:GOSUB 1708:FL=1:RETURN 1600 REM ERROR HANDLING 1601 IF ERR=7 AND ERL=1103 THEN BEEP:PRINT".. MEMORY OVERFLOW. .HIT ANY KEY" ELSE 1604 1602 IF INSTR(1,F$,".DO")=0 THEN F$=F$+".DO" 1603 INPUT$(1):KILL F$:RESUME 100 'GOSUB STACK IS LOST ON MEMORY ERROR 1604 IF ERR=9 OR (ERR=5 AND (ERL=1305 OR ERL=1503)) THEN BEEP:PRINT "BAD INPUT VALUE . . hit any key":R$=INPUT$(1):RESUME 1504 1605 IF ERL<>1110 AND ERL<>1108 THEN 1610 ELSE IF ERR>58 THEN PRINT". .DISK ERROR" 1606 IF ERR=64 THEN PRINT ". .DISK FULL" 1607 IF ERR=63 THEN PRINT". .DISK WRITE PROTECTED" 1608 IF ERR=59 THEN PRINT". .DRIVE NOT READY" 1609 BEEP:PRINT ". . hit any key":R$=INPUT$(1):RESUME 1104 1610 IF ERL<>1206 THEN 1614 1611 IF ERR=52 THEN BEEP:PRINT". .FILE NOT FOUND" 1612 IF ERR=59 THEN PRINT ". .DRIVE NOT READY" 1613 BEEP:PRINT "FILE ERROR. . .HIT ANY KEY":R$=INPUT$(1):RESUME 1204 1614 PRINT "ERR:";ERR;" IN LINE:";ERL:STOP:RESUME NEXT 1700 REM SHIFT CONTROLLER--ENTRY/CHAR=CURRENT ASCII 1701 IF NE THEN RETURN ELSE PRINT @200,"R/L/U/D/[enter]?";:R$=INPUT$(1):GOSUB 1708:FL=1 1702 ON INSTR(1,CHR$(13)+"RDUL",R$) GOSUB 1703,1704,1705,1706,1707:PRINT@200," ";:GOSUB 1000:RCUR=1:CCUR=1:RETURN 1703 RETURN 1704 FOR QQ=10 TO 1 STEP -1:CD(CHAR,QQ+1)=CD(CHAR,QQ):NEXT QQ:CD(CHAR,1)=0:RETURN 'RIGHT SHIFT 1705 FOR QQ=1 TO 11:CD(CHAR,QQ)=CD(CHAR,QQ)\2:NEXT QQ:RETURN 'SHIFT DOWN 1706 FOR QQ=1 TO 11:CD(CHAR,QQ)=(CD(CHAR,QQ)*2)AND 255:NEXT QQ:RETURN 'SHIFT UP 1707 FOR QQ=2 TO 11:CD(CHAR,QQ-1)=CD(CHAR,QQ):NEXT QQ:CD(CHAR,11)=0:RETURN 'LEFT SHIFT 1708 FOR QQ=31 TO 271 STEP 40:PRINT @QQ," ";:NEXT QQ:GOSUB 300:RCUR=1:CCUR=1:SW=1:GOSUB 503:GOSUB 504:RETURN 'DRAW NEW GRID