; SIFE.ACT; Super-IRG Font Editor; By Bill Kendrick; kendrick@zippy.sonoma.edu; New Breed Software; http://zippy.sonoma.edu/kendrick/nbs/; November 21, 1997 - November 26, 1997Byte Array Buffer(6144),ColorChar(30), Blue(4),Red(4),Green(4), RedChar(20),GreenChar(20), BlueChar(20)Byte VCOUNT=$D40B,WSYNC=$D40A, NMIEN=$D40E,KEY=764,CHBAS=756, RTCLOCK=20,CHBASE=$D409, STICK0=632,STRIG0=644, PMCOL0=704,PMCOL1=705Byte FLIP,ChPage,Colr,X,Y,Chr,OChr, Editing,Size,FLASHCard OLDVBI,OLDDLI,Ch,DL,PMG,OldErrorCard VDSLST=$200,SDLST=$230,SC=88, VVBLKD=$224Char Array File(128)Byte Array Colors(5)INCLUDE "RUNTIME.ACT"INCLUDE "SIFEINC.ACT"Proc CIO=$E456(Byte areg,xreg)Card Func Burst(Byte chan,mode, Card addr,buflen) Type IOCB=[Byte id,num,cmd,stat Card badr,padr,blen Byte a1,a2,a3,a4,a5,a6] IOCB Pointer iptr chan==&$07 iptr=$340+(chan LSH 4) iptr.cmd=mode iptr.blen=buflen iptr.badr=addr CIO(0,chan LSH 4)Return(iptr.blen)Card Func BGet(Byte chan Card addr,len) Card temp temp=Burst(chan,7,addr,len)Return(temp)Proc BPut(Byte chan Card addr,len) Burst(chan,11,addr,len)ReturnByte Func GetFileName() Char C Byte Len Close(1) Open(1,"K:",4,0) Len=0 Do C=GetD(1) If ((C>='0 And C<='9) Or C=': Or C='/ Or C='\ Or C='> Or C='. Or (C>='A And C<='Z) Or (C>='a And C<='z)) And Len<31 Then If C>='a And C<='z Then Poke(SC+22*32+Len,C) ELSE Poke(SC+22*32+Len,C-32) Fi Len=Len+1 File(Len)=C ElseIf C='~ And Len>0 Then Len=Len-1 Poke(SC+22*32+Len,0) Fi Until C=155 Or C=27 Od Zero(SC+22*32,32) File(0)=Len Close(1) If Len=0 Then C=27 FiReturn(C)Proc Off() MoveBlock(Colors,708,5) SETVBV(7,OLDVBI) StopDLI() Poke(SDLST+27,2) CHBAS=224 Poke(709,15) Poke(710,0)ReturnProc On() MoveBlock(708,Colors,5) Poke(SDLST+27,4) OLDVBI=VVBLKD SETVBV(7,VBLANKD) StartDLI(DLI) CHBAS=CHPageReturnProc Load() Card Len Byte C Off() C=GetFileName() If C=155 Then Close(1) Open(1,File,4,0) Len=BGet(1,CH+2048,1025) If Len<1025 Then MoveBlock(CH+2048,CH+3072,1024) Else BGet(1,CH+3073,1023) Fi Close(1) Fi On()ReturnProc Save() Byte C Off() C=GetFileName() If C=155 Then Close(1) Open(1,File,8,0) BPut(1,CH+2048,2048) Close(1) Fi On()ReturnProc Title() Graphics(0) PokeC(82,9984) Poke(752,1) Put('}) Put('}) PrintE(" 0.0") PrintE("Super-IRG Font Editor") PrintE("by Bill Kendrick") PrintE("New Breed Software, 1997") PutE() PrintE("Press a key to begin") KEY=255 Do Until KEY<255 Od KEY=255ReturnProc Main() Byte K,S,OS,OY,F,Z Title() SetUp() RTCLOCK=0 OY=Y+1 Do K=KEY S=STICK0 F=STRIG0 If S=OS And RTCLOCK<10 Then S=15 Else OS=S RTCLOCK=0 Fi OChr=Chr If K<255 Then KEY=255 If K=44 Then Colr=Colr+1 If Colr>9 Then Colr=0 Fi DrawColorArrow() ElseIf K=108 Then If Colr>0 Then Colr=Colr-1 Else Colr=9 Fi DrawColorArrow() ElseIf K=7 Then S=7 ElseIf K=6 Then S=11 ElseIf K=15 Then S=13 ElseIf K=14 Then S=14 ElseIf K=33 Then F=0 ElseIf K=7+128 Then If Size=4 Then Chr=Chr+1 Else Chr=Chr+4 Fi If Chr>127 Then Chr=Chr-128 Fi ElseIf K=6+128 Then If Size=4 Then If Chr>0 Then Chr=Chr-1 Else Chr=127 Fi Else If Chr>4 Then Chr=Chr-4 Else Chr=Chr+124 Fi Fi ElseIf K=15+128 Then Chr=Chr+32 If Chr>127 Then Chr=Chr-128 Fi ElseIf K=14+128 Then If Chr>31 Then Chr=Chr-32 Else Chr=Chr+96 Fi Fi Fi If Chr<>OChr Then If Editing=1 Then SaveChar() DrawChar() Fi Fi If K=12 Or K=28 Then If Editing=1 Then If K<>28 Then SaveChar() Fi Editing=0 ClearChar() Else DrawChar() Editing=1 Fi Fi If K=140 Then If Editing=1 Then SaveChar() Fi If Size=4 Then Size=8 Else Size=4 Fi If Editing=0 Then ClearChar() Else DrawChar() FI Fi If K=10 Then Z=8 If Size=8 Then Z=32 Fi MoveBlock(CH+2048+Chr*8,CH+18*8,Z) MoveBlock(CH+3072+Chr*8,CH+1024+18*8,Z) Fi If K=18 Then Zero(CH+18*8,32) Zero(CH+1024+18*8,32) Z=8 If Size=8 Then Z=32 Fi MoveBlock(CH+18*8,CH+2048+Chr*8,Z) MoveBlock(CH+1024+18*8,CH+3072+Chr*8,Z) Fi If K=54+128+64 Then ClearChar() Fi If K=0 Then Load() Fi If K=62 Then Save() Fi If F=0 And Editing=1 Then If Colr=0 Then PokeC(SC+Y*32+8+X*2+64,10+11*256) Else PokeC(SC+Y*32+8+X*2+64,Colr*257) Fi Fi OY=Y If Editing=1 Then If S>4 And S<8 Then X=X+1 If X>=Size Then X=0 Fi ElseIf S>8 And S<12 Then If X>0 Then X=X-1 Else X=Size-1 Fi Fi If S=13 Or S=9 Or S=5 Then Y=Y+1 If Y>Size*2-1 Then Y=0 Fi ElseIf S=14 Or S=10 Or S=6 Then If Y>0 Then Y=Y-1 Else Y=Size*2-1 Fi Fi Poke(53248,X*8+96) If OY<>Y Then MoveBlock(PMG+536+OY*4,""+1,4) Fi MoveBlock(PMG+536+Y*4,""+1,4) Else Poke(53248,0) Fi Poke(53249,62+(Chr MOD 32)*4) If OChr<>Chr Then MoveBlock(PMG+728+(OChr/32)*4-1,""+1,6) Fi MoveBlock(PMG+728+(Chr/32)*4-1,"~BBBB~"+1,6) Until K=28+128+64 Od KEY=255 ShutDown()Return