Article 498 of vmsnet.sources: Path: utkcs2!gatech!usenet.ins.cwru.edu!agate!dog.ee.lbl.gov!network.ucsd.edu!mvb.saic.com!vmsnet-sources Newsgroups: vmsnet.sources From: MASRICH@ubvms.cc.buffalo.edu Subject: VT320 Font Editor, part 01/01 Date: Fri, 04 Sep 1992 05:59:15 GMT Message-ID: <8045597@MVB.SAIC.COM> Organization: University at Buffalo Lines: 1046 Approved: Mark.Berryman@Mvb.Saic.Com Submitted-by: MASRICH@ubvms.cc.buffalo.edu Posting-number: Volume 3, Issue 162 Archive-name: vt320_font_editor/part01 Hello, I just wrote this little ditty of a Font Editor for The Vax System. As you can see it is in C and is ONLY for VT320's. I have no clue if it will work with a higher terminal, but I know it won't work on the VT220's and certainly not on 100's or 52's. This is my first version so the code will someday be cleaned up if anyone shows any interest in it whatsoever. After you make a font with this program all you have to do is type the file you edited. There is help within the program. This MUST be setup as a symbol. I used a .jou file for backup purposes and the -r switch will recover a lost or destroyed file. Usage is FED -{srznfh} [filename]. I wrote this for VAX orriginally but with some minor modifications it will work on UNIX. The reason this is to be setup as a symbol instead of a verb is to retain portability. Type Fed -h to get a list of switches. Thanks, -Rich P.S. pick up a vt320 manual to find out how all this stuff works. You must be in VT320 mode on a VT320 terminal for this to work properly. This is also great for games making!! $! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_VERIFY"))' $! $! This archive created by VMS_SHARE Version 7.2-010 25-Jun-1992 $! On 3-SEP-1992 22:52:26.71 By user BERRYMAN $! $! This VMS_SHARE Written by: $! Andy Harper, Kings College London UK $! $! Acknowledgements to: $! James Gray - Original VMS_SHARE $! Michael Bednarek - Original Concept and implementation $! $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER $! AND EXECUTE AS A COMMAND PROCEDURE ( @name ) $! $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING: $! 1. FED.C;1 $! $set="set" $set symbol/scope=(nolocal,noglobal) $f=f$parse("SHARE_TEMP","SYS$SCRATCH:.TMP_"+f$getjpi("","PID")) $e="write sys$error ""%UNPACK"", " $w="write sys$output ""%UNPACK"", " $ if f$trnlnm("SHARE_LOG") then $ w = "!" $ ve=f$getsyi("version") $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto START $ e "-E-OLDVER, Must run at least VMS 4.4" $ v=f$verify(v) $ exit 44 $UNPACK: SUBROUTINE ! P1=filename, P2=checksum $ x = P1 - f$parse(P1,,,"version") $ y = f$search(x) $ if y .eqs. "" then $ goto file_absent $ x = f$integer(f$parse(P1,,,"version")-";") $ y = f$integer(f$parse(y,,,"version")-";") $ if x .gt. y then $ goto file_absent $ if f$mode() .eqs. "INTERACTIVE" then $ goto file_interactive $ if x .eq. y then e "-W-EXISTS, File ''P1' exists. Skipped." $ if x .ne. y then e "-W-NEWERVERSION, of File ''P1' exists. Skipped." $file_delete: $ delete 'f'* $ exit $file_interactive: $ if x .eq. y then e "-W-EXISTS, File ''P1' exists." $ if x .ne. y then e "-W-NEWERVERSION, of File ''P1' exists." $ read/error=file_delete/end=file_delete- /prompt="Create new version [y/n]: " - sys$command x $ if .not. x then $ e "-W-SKIPPED, File ''P1' skipped." $ if .not. x then $ goto file_delete $ P1 = P1 - f$parse(P1,,,"version") $file_absent: $ if f$parse(P1) .nes. "" then $ goto dirok $ dn=f$parse(P1,,,"DIRECTORY") $ w "-I-CREDIR, Creating directory ''dn'." $ create/dir 'dn' $ if $status then $ goto dirok $ e "-E-CREDIRFAIL, Unable to create ''dn'. File skipped." $ delete 'f'* $ exit $dirok: $ w "-I-PROCESS, Processing file ''P1'." $ if .not. f$verify() then $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='P1' PROCEDURE Unpacker ON_ERROR ENDON_ERROR;SET(FACILITY_NAME,"UNPACK");SET( SUCCESS,OFF);SET(INFORMATIONAL,OFF);f:=GET_INFO(COMMAND_LINE,"file_name");b:= CREATE_BUFFER(f,f);p:=SPAN(" ")@r&LINE_END;POSITION(BEGINNING_OF(b)); LOOP EXITIF SEARCH(p,FORWARD)=0;POSITION(r);ERASE(r);ENDLOOP;POSITION( BEGINNING_OF(b));g:=0;LOOP EXITIF MARK(NONE)=END_OF(b);x:=ERASE_CHARACTER(1); IF g=0 THEN IF x="X" THEN MOVE_VERTICAL(1);ENDIF;IF x="V" THEN APPEND_LINE; MOVE_HORIZONTAL(-CURRENT_OFFSET);MOVE_VERTICAL(1);ENDIF;IF x="+" THEN g:=1; ERASE_LINE;ENDIF;ELSE IF x="-" THEN IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+")= 1 THEN g:=0;ENDIF;ENDIF;ERASE_LINE;ENDIF;ENDLOOP;t:="0123456789ABCDEF"; POSITION(BEGINNING_OF(b));LOOP r:=SEARCH("`",FORWARD);EXITIF r=0;POSITION(r); ERASE(r);x1:=INDEX(t,ERASE_CHARACTER(1))-1;x2:=INDEX(t,ERASE_CHARACTER(1))-1; COPY_TEXT(ASCII(16*x1+x2));ENDLOOP;WRITE_FILE(b,GET_INFO(COMMAND_LINE, "output_file"));ENDPROCEDURE;Unpacker;QUIT; $ delete/nolog 'f'* $ CHECKSUM 'P1' $ IF CHECKSUM$CHECKSUM .eqs. P2 THEN $ EXIT $ e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ ENDSUBROUTINE $START: $ create 'f' X/* This is a vt320 soft font maker, do NOT try to use it on a 220!! */ X/* X * you need the following in you o.opt to compile this: X * sys$share:vaxcrtl.exe/share X */ X X/*`20 X * Feel free to redistribute or modify this code. All I ask is that my name X * be tied to it as the orriginator. Note that this program is not intended X * to view pre-made fonts. This program requires a specific format in order X * to correctly interpret the font so if you already have a font, and you wa Vnt X * to change it with this, you're going to have to either modify this code X * or read a vt320 manual on how to make fonts. I would recommend both. X * X * Richard Wicks X * masrich@ubvms.cc.buffalo.edu X * acscrbw@ubvms.cc.buffalo.edu X * v128ll9e@ubvms.cc.buffalo.edu X * wicks@lictor.acsu.buffalo.edu X * X */ X X# include X# include X XWINDOW *font,*back,*let,*help,*filen; Xint grid `5B97`5D`5B16`5D`5B13`5D; Xchar fn`5B80`5D,jf`5B80`5D; XFILE *jp; XFILE *rp; Xint bkup=1; /* controlls wether journals are made */ Xint autop=1; /* allows continuous preview update */ Xint rem=0; /* prints character for file ref. */ Xint recover=0; /* allows recover of a .jou file */ Xint zoom=0; /* when recovering, no screen junk */ X Xvoid dispfilen () X X`7B X wmove (filen,0,0); X waddstr (filen,"#$$$$$$$$$$$$$$$$$$$$$$%\n"); X waddstr (filen,"* &\n"); X waddstr (filen,")(((((((((((((((((((((('"); X wrefresh (filen); X wmove (filen,1,2); X printf ("\033(B\017"); X waddstr (filen,"FILE: "); X waddstr (filen,fn); X wrefresh (filen); X printf ("\033).A\016"); X`7D X Xvoid helpme () /* I need somebody... */ X X`7B X wmove (help,0,0); X waddstr (help,"#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%\n"); X waddstr (help,"* &\n"); X waddstr (help,"* &\n"); X waddstr (help,"* &\n"); X waddstr (help,"* &\n"); X waddstr (help,"* &\n"); X waddstr (help,"* &\n"); X waddstr (help,"* &\n"); X waddstr (help,"* &\n"); X waddstr (help,"* &\n"); X waddstr (help,")((((((((((((((((((((((((((((((((((((((((((((((('\n"); X wrefresh (help); X printf ("\033(B\017"); X wmove (help,1,1); X waddstr (help," h: left P: preview letter"); X wmove (help,2,1); X waddstr (help," j: down R: reverse video"); X wmove (help,3,1); X waddstr (help," k: up X: flip on X axis"); X wmove (help,4,1); X waddstr (help," l: right Y: file on Y axis"); X wmove (help,5,1); X waddstr (help," H: shift left `5EE: erase work area"); X wmove (help,6,1); X waddstr (help," J: shift down `5EP: preview all"); X wmove (help,7,1); X waddstr (help," K: shift up `5EI: copy letter (import)"); X wmove (help,8,1); X waddstr (help," L: shift right `5EZ: save and quit"); X wmove (help,9,1); X waddstr (help," S: save Space: toggle bit"); X wrefresh (help); X printf ("\033).A\016"); X`7D X Xvoid savefile (a) X char a`5B`5D; X`7B X int i,j; X FILE *fp; X X fp = fopen (a,"w+"); X fprintf (fp,"\033P1;0;1;0;0;2;`7B.A\012"); X X for (j=1;j<96;j++) X `7B X fprintf (fp,";"); X for (i=1;i<16;i++) X fprintf (fp,"%c",63+(bindec(grid`5Bj`5D`5Bi`5D`5B6`5D,grid`5Bj`5D`5Bi` V5D`5B5`5D,grid`5Bj`5D`5Bi`5D`5B4`5D,grid`5Bj`5D`5Bi`5D`5B3`5D,grid`5Bj`5D`5B Vi`5D`5B2`5D,grid`5Bj`5D`5Bi`5D`5B1`5D))); X fprintf (fp,"/"); X for (i=1;i<16;i++) X fprintf (fp,"%c",63+(bindec(grid`5Bj`5D`5Bi`5D`5B12`5D,grid`5Bj`5D`5Bi V`5D`5B11`5D,grid`5Bj`5D`5Bi`5D`5B10`5D,grid`5Bj`5D`5Bi`5D`5B9`5D,grid`5Bj`5D V`5Bi`5D`5B8`5D,grid`5Bj`5D`5Bi`5D`5B7`5D))); X if (rem) X `7B X if (32+j != ';') X `7B X fprintf (fp," %c",32+j); X `7D else X fprintf (fp," semicolin"); X `7D X fprintf (fp,"\012"); X `7D X fprintf (fp,"\033\\\033).A\016"); X fclose (fp); X`7D X Xvoid initback () X X`7B X wmove (back,0,0); X waddstr (back,"#$$$$$$$$$$$$$$$%\n"); X waddstr (back,"* &\n"); X waddstr (back,"* &\n"); X waddstr (back,"* &\n"); X waddstr (back,"* &\n"); X waddstr (back,"* &\n"); X waddstr (back,"* &\n"); X waddstr (back,"* &\n"); X waddstr (back,"* &\n"); X waddstr (back,"* &\n"); X waddstr (back,"* &\n"); X waddstr (back,"* &\n"); X waddstr (back,"* &\n"); X waddstr (back,")((((((((((((((('\n"); X wrefresh (back); X`7D X Xvoid custcharset () /* create Fed character set */ X X`7B X printf ("\033P1;2;1;0;0;2;`7B.A"); X printf (";???????????????/??????`7B`7BCCCCCcc"); /* # */ X printf (";???????????????/ccccccccccccccc"); /* $ */ X printf (";???????????????/ccCCCCC`7B`7B??????"); /* % */ X printf (";`7E`7E?????`7E`7E??????/`7E`7E?????`7E`7E??????"); /* & */ X printf (";HHGGGGGNN??????/???????????????"); /* ' */ X printf (";HHHHHHHHHHHHHHH/???????????????"); /* ( */ X printf (";??????NNGGGGGHH/???????????????"); /* ) */ X printf (";??????`7E`7E?????`7E`7E/??????`7E`7E?????`7E`7E"); /* * */ X printf (";Ti@?@?@?@?@?@iT/Ti?_?_?_?_?_?iT"); /* + */ X printf (";Ti`7E`7D`7E`7D`7E`7D`7E`7D`7E`7D`7EiT/Ti`5E`7E`5E`7E`5E`7E`5E`7E V`5E`7E`5EiT"); /* , */ X printf ("\033\\\033).A\016"); X`7D X Xvoid letbox () X X`7B X wmove (let,0,0); X waddstr (let,"#$$$$$$$$$$$$$$$$$$$$$$%\n"); X waddstr (let,"* &\n"); X waddstr (let,")(((((((((((((((((((((('\n"); X wrefresh (let); X`7D X Xvoid redraw (a) X int a`5B16`5D`5B13`5D; X X`7B X int i,j; X X wmove (font,0,0); X for (j=1;j<13;j++) X `7B X for (i=1;i<16;i++) X if (a`5Bi`5D`5Bj`5D == 1) X `7B X waddch (font,','); X `7D else X `7B X waddch (font,'+'); X `7D X waddch (font,'\n'); X `7D X wmove (font,0,0); X`7D X Xint bindec (a,b,c,d,e,f) X int a,b,c,d,e,f; X`7B X return ((32*a)+(16*b)+(8*c)+(4*d)+(2*e)+f); X`7D X Xvoid preview (a) X int a`5B16`5D`5B13`5D; X`7B X int i; X X if (zoom && recover) return; X printf ("\033P1;0;1;0;0;2;`7B.A\n"); X printf (";"); X for (i=1;i<16;i++) X printf ("%c",63+(bindec(a`5Bi`5D`5B6`5D,a`5Bi`5D`5B5`5D,a`5Bi`5D`5B4`5D, Va`5Bi`5D`5B3`5D,a`5Bi`5D`5B2`5D,a`5Bi`5D`5B1`5D))); X printf ("/"); X for (i=1;i<16;i++) X printf ("%c",63+(bindec(a`5Bi`5D`5B12`5D,a`5Bi`5D`5B11`5D,a`5Bi`5D`5B10` V5D,a`5Bi`5D`5B9`5D,a`5Bi`5D`5B8`5D,a`5Bi`5D`5B7`5D))); X printf ("\033\\"); X`7D X Xvoid reverse (a) X int *a`5B16`5D`5B13`5D; X`7B X int i=0,j=0; X X for (i=1;i<16;i++) X for (j=1;j<13;j++) X if (a`5Bi`5D`5Bj`5D == 0) X `7B X a`5Bi`5D`5Bj`5D = 1; X `7D else X `7B X a`5Bi`5D`5Bj`5D = 0; X `7D X`7D X Xvoid copy (a,b) X int *a`5B16`5D`5B13`5D; X int b; X`7B X int c; X int i,j; X X wmove (let,1,2); X printf ("\033(B\017"); X waddstr (let,"Import from: "); X wrefresh (let); X wmove (let,1,15); X if (recover) X `7B X if (recover) c = fgetc (rp); X if (c == EOF) X `7B X recover = 0; X fclose (rp); X if (bkup) jp = fopen (jf,"a"); X c = wgetch (let); X if (bkup) fputc (c,jp); X `7D X `7D else X `7B X c = wgetch (let); X if (bkup) fputc (c,jp); X `7D X if (c > 32) X `7B X waddch (let,c); X c = c - 32; X waddstr (let," to: "); X waddch (let,b); X wrefresh (let); X for (i=1;i<16;i++) X for (j=1;j<13;j++) X a`5Bi`5D`5Bj`5D = grid`5Bc`5D`5Bi`5D`5Bj`5D; X `7D else X `7B X waddstr (let,"abort"); X wrefresh (let); X `7D X printf ("\033).A\016"); X`7D X Xvoid flipx (a) X int *a`5B16`5D`5B13`5D; X X`7B X int b`5B16`5D`5B13`5D; X int i,j,k=12; X X for (i=1;i<16;i++) X for (j=1;j<13;j++) X b`5Bi`5D`5Bj`5D = a`5Bi`5D`5Bj`5D; X X for (j=1;j<13;j++) X `7B X for (i=1;i<16;i++) X a`5Bi`5D`5Bk`5D = b`5Bi`5D`5Bj`5D; X k--; X `7D X`7D X Xvoid flipy (a) X int *a`5B16`5D`5B13`5D; X X`7B X int b`5B16`5D`5B13`5D; X int i,j,k=15; X X for (i=1;i<16;i++) X for (j=1;j<13;j++) X b`5Bi`5D`5Bj`5D = a`5Bi`5D`5Bj`5D; X X for (i=1;i<16;i++) X `7B X for (j=1;j<13;j++) X a`5Bk`5D`5Bj`5D = b`5Bi`5D`5Bj`5D; X k--; X `7D X`7D X Xvoid left (a) X int *a`5B16`5D`5B13`5D; X`7B X int b`5B16`5D; X int i,j; X X for (j=1;j<13;j++) X b`5Bj`5D = a`5B1`5D`5Bj`5D; X X for (i=1;i<15;i++) X for (j=1;j<13;j++) X a`5Bi`5D`5Bj`5D = a`5Bi+1`5D`5Bj`5D; X X for (j=1;j<13;j++) X a`5B15`5D`5Bj`5D = b`5Bj`5D; X`7D X Xvoid right (a) X int *a`5B16`5D`5B13`5D; X`7B X int b`5B16`5D; X int i,j; X X for (j=1;j<13;j++) X b`5Bj`5D = a`5B15`5D`5Bj`5D; X X for (i=15;i>1;i--) X for (j=1;j<13;j++) X a`5Bi`5D`5Bj`5D = a`5Bi-1`5D`5Bj`5D; X X for (j=1;j<13;j++) X a`5B1`5D`5Bj`5D = b`5Bj`5D; X`7D X Xvoid up (a) X int *a`5B16`5D`5B13`5D; X`7B X int b`5B16`5D; X int i,j; X X for (i=1;i<16;i++) X b`5Bi`5D = a`5Bi`5D`5B1`5D; X X for (i=1;i<16;i++) X for (j=1;j<12;j++) X a`5Bi`5D`5Bj`5D = a`5Bi`5D`5Bj+1`5D; X X for (i=1;i<16;i++) X a`5Bi`5D`5B12`5D = b`5Bi`5D; X`7D X Xvoid down (a) X int *a`5B16`5D`5B13`5D; X`7B X int b`5B16`5D; X int i,j; X X for (i=1;i<16;i++) X b`5Bi`5D = a`5Bi`5D`5B12`5D; X X for (i=1;i<16;i++) X for (j=12;j>1;j--) X a`5Bi`5D`5Bj`5D = a`5Bi`5D`5Bj-1`5D; X X for (i=1;i<16;i++) X a`5Bi`5D`5B1`5D = b`5Bi`5D; X`7D X Xvoid junk () X`7B X printf ("\033(B\017"); X printf ("\033`5B15;0Hstandard width & height:"); X printf ("\033`5B16;0H\033#6double width:"); X printf ("\033`5B17;0H\033#3double height:"); X printf ("\033`5B18;0H\033#4double height:"); X printf ("\033).A\016"); X printf ("\033`5B15;29H!!!! !"); X printf ("\033`5B16;15H!! !"); X printf ("\033`5B17;15H!! !"); X printf ("\033`5B18;15H!! !"); X`7D X Xvoid t_preview () X`7B X int i,j; X WINDOW *prev; X X /* erase all windows */ X werase (font); X werase (back); X werase (let); X werase (help); X werase (filen); X wrefresh (back); X wrefresh (font); X wrefresh (let); X wrefresh (help); X wrefresh (filen); X prev = newwin (8,80,11,0); X printf ("\033(B\017"); X printf ("\033`5B1;35HWorking..."); X X /* read character set */ X printf ("\033P1;0;1;0;0;2;`7B.A\n"); X X for (j=1;j<96;j++) X `7B X printf (";"); X for (i=1;i<16;i++) X printf ("%c",63+(bindec(grid`5Bj`5D`5Bi`5D`5B6`5D,grid`5Bj`5D`5Bi`5D`5 VB5`5D,grid`5Bj`5D`5Bi`5D`5B4`5D,grid`5Bj`5D`5Bi`5D`5B3`5D,grid`5Bj`5D`5Bi`5D V`5B2`5D,grid`5Bj`5D`5Bi`5D`5B1`5D))); X printf ("/"); X for (i=1;i<16;i++) X printf ("%c",63+(bindec(grid`5Bj`5D`5Bi`5D`5B12`5D,grid`5Bj`5D`5Bi`5D` V5B11`5D,grid`5Bj`5D`5Bi`5D`5B10`5D,grid`5Bj`5D`5Bi`5D`5B9`5D,grid`5Bj`5D`5Bi V`5D`5B8`5D,grid`5Bj`5D`5Bi`5D`5B7`5D))); X `7D X printf ("\033\\"); X X /* print character set */ X X printf ("\033`5B15;0H"); X for (i=33;i<73;i++) X `7B X waddch (prev,i); X waddch (prev,' '); X `7D X waddch (prev,'\n'); X wrefresh (prev); X printf ("\033).A\016"); X for (i=33;i<73;i++) X `7B X waddch (prev,i); X waddch (prev,' '); X `7D X waddch (prev,'\n'); X waddch (prev,'\n'); X wrefresh (prev); X X printf ("\033(B\017"); X for (i=73;i<113;i++) X `7B X waddch (prev,i); X waddch (prev,' '); X `7D X waddch (prev,'\n'); X wrefresh (prev); X printf ("\033).A\016"); X for (i=73;i<113;i++) X `7B X waddch (prev,i); X waddch (prev,' '); X `7D X waddch (prev,'\n'); X waddch (prev,'\n'); X wrefresh (prev); X X printf ("\033(B\017"); X for (i=113;i<127;i++) X `7B X waddch (prev,i); X waddch (prev,' '); X `7D X waddch (prev,'\n'); X wrefresh (prev); X printf ("\033).A\016"); X for (i=113;i<127;i++) X `7B X waddch (prev,i); X waddch (prev,' '); X `7D X waddch (prev,'\n'); X wrefresh (prev); X X /* prompt for a key */ X printf ("\033(B\017"); X waddstr (prev,"press any key to continue..."); X wrefresh (prev); X wgetch(prev); X delwin (prev); X printf ("\033).A\016"); X X /* redo screen */ X custcharset (); X initback (); X letbox (); X dispfilen (); X junk (); X helpme (); X `7D X Xvoid ferase (a) X int a`5B16`5D`5B13`5D; X`7B X int i,j; X X for (i=1;i<16;i++) X for (j=1;j<13;j++) X a`5Bi`5D`5Bj`5D = 0; X`7D X Xchar getcmmd () X X`7B X char a; X X if (recover) X `7B X if ((a = fgetc (rp)) == EOF) X `7B X recover = 0; X fclose (rp); X if (bkup) jp = fopen (jf,"a"); X return wgetch (font); X `7D else X return a; X `7D else X `7B X return wgetch (font); X `7D X X`7D X Xvoid quit () X X`7B X wmove (let,1,2); X printf ("\033(B\017"); X waddstr (let,"To Quit, type Y: n "); X wrefresh (let); X wmove (let,1,19); X if (wgetch (let) == 'Y') X `7B X /* need to remove .jou file first */ X waddch (let,'Y'); X wrefresh (let); X printf ("\033`5B23;0H"); X fclose (jp); X delete (jf); X exit (1); X `7D X`7D X X Xint draw (a,b) X int *a`5B16`5D`5B13`5D; X int b; X`7B X int x=1,y=1; X char ch; X X redraw (a); X X printf ("\033(B\017"); X junk (); X preview (a); X X while ((ch = getcmmd()) != 'S' && ch != 26) X `7B X if (bkup) fputc (ch,jp); X switch (ch) X `7B X case 'h' : x = x - 1; X break; X case 'j' : y = y + 1; X break; X case 'k' : y = y - 1; X break; X case 'l' : x = x + 1; X break; X case ' ' : if (a`5Bx`5D`5By`5D == 1) X `7B X a`5Bx`5D`5By`5D = 0; X wmove (font,y-1,x-1); X waddch (font,'+'); X `7D else X `7B X a`5Bx`5D`5By`5D = 1; X wmove (font,y-1,x-1); X waddch (font,','); X `7D X if (autop) preview(a); X break; X case 'P' : preview (a); X break; X case 'R' : reverse (a); X redraw (a); X if (autop) preview (a); X break; X case 'X' : flipx (a); X redraw (a); X if (autop) preview (a); X break; X case 'Y' : flipy (a); X redraw (a); X if (autop) preview (a); X break; X case 'H' : left(a); X redraw(a); X if (autop) preview(a); X break; X case 'L' : right(a); X redraw(a); X if (autop) preview(a); X break; X case 'K' : up(a); X redraw(a); X if (autop) preview(a); X break; X case 'J' : down(a); X redraw(a); X if (autop) preview(a); X break; X case 'Q' : if (!(recover)) quit (); X `7B X redraw(a); X wmove (let,1,2); X waddstr (let,"edit which letter? "); X waddch (let,b); X wrefresh (let); X printf ("\033).A\016"); X `7D X break; X case 16 : if (!(recover)) X `7B X t_preview(); X redraw (a); X wmove (let,1,2); X printf ("\033(B\017"); X waddstr (let,"edit which letter? "); X waddch (let,b); X wrefresh (let); X printf ("\033).A\016"); X preview(a); X `7D X break; X case 5 : ferase (a); X redraw (a); X preview(a); X break; X case 9 : copy (a,b); X redraw (a); X preview (a); X break; X case 12 : werase (back); X werase (font); X werase (let); X werase (help); X werase (filen); X wrefresh (back); X wrefresh (font); X wrefresh (let); X wrefresh (help); X wrefresh (filen); X initback (); X letbox (); X dispfilen (); X junk (); X helpme (); X redraw (a); X wmove (let,1,2); X printf ("\033(B\017"); X waddstr (let,"edit which letter? "); X waddch (let,b); X wrefresh (let); X printf ("\033).A\016"); X preview(a); X break; X `7D X if (x > 15) x = 1; X if (x < 1) x = 15; X if (y > 12) y = 1; X if (y < 1) y = 12; X wmove (font,y-1,x-1); X if (!(zoom && recover)) wrefresh (font); /* had touchwin here before */ X `7D X if (bkup) fputc (ch,jp); X if (ch == 26) return 1; X return 0; /* sent an S here */ X`7D X Xvoid readfile (a,b) X char a`5B`5D; X int *b`5B97`5D`5B16`5D`5B13`5D; X X`7B X FILE *fp; X char c`5B132`5D; X int d; X int i=0,j=0,k=0; X X fp = fopen (a,"r"); X fgets (c,132,fp); X for (d=1;d<97;d++) X `7B X if (fgets (c,132,fp) == NULL) break; X if (strstr (c,"\033\\") != NULL) break; X i++; X for (j=1;j<16;j++) /* first top half */ X `7B X c`5Bj`5D = c`5Bj`5D - 63; X if (c`5Bj`5D >= 32) X `7B X b`5Bi`5D`5Bj`5D`5B6`5D=1; X c`5Bj`5D = c`5Bj`5D - 32; X `7D X if (c`5Bj`5D >= 16) X `7B X b`5Bi`5D`5Bj`5D`5B5`5D=1; X c`5Bj`5D = c`5Bj`5D - 16; X `7D X if (c`5Bj`5D >= 8) X `7B X b`5Bi`5D`5Bj`5D`5B4`5D=1; X c`5Bj`5D = c`5Bj`5D - 8; X `7D X if (c`5Bj`5D >= 4) X `7B X b`5Bi`5D`5Bj`5D`5B3`5D=1; X c`5Bj`5D = c`5Bj`5D - 4; X `7D X if (c`5Bj`5D >= 2) X `7B X b`5Bi`5D`5Bj`5D`5B2`5D=1; X c`5Bj`5D = c`5Bj`5D - 2; X `7D X if (c`5Bj`5D == 1) X `7B X b`5Bi`5D`5Bj`5D`5B1`5D=1; X `7D X `7D X for (j=17;j<33;j++) /* does the bottom half */ X `7B X c`5Bj`5D = c`5Bj`5D - 63; X if (c`5Bj`5D >= 32) X `7B X b`5Bi`5D`5Bj-16`5D`5B12`5D=1; X c`5Bj`5D = c`5Bj`5D - 32; X `7D X if (c`5Bj`5D >= 16) X `7B X b`5Bi`5D`5Bj-16`5D`5B11`5D=1; X c`5Bj`5D = c`5Bj`5D - 16; X `7D X if (c`5Bj`5D >= 8) X `7B X b`5Bi`5D`5Bj-16`5D`5B10`5D=1; X c`5Bj`5D = c`5Bj`5D - 8; X `7D X if (c`5Bj`5D >= 4) X `7B X b`5Bi`5D`5Bj-16`5D`5B9`5D=1; X c`5Bj`5D = c`5Bj`5D - 4; X `7D X if (c`5Bj`5D >= 2) X `7B X b`5Bi`5D`5Bj-16`5D`5B8`5D=1; X c`5Bj`5D = c`5Bj`5D - 2; X `7D X if (c`5Bj`5D == 1) X `7B X b`5Bi`5D`5Bj-16`5D`5B7`5D=1; X `7D X `7D X `7D X close (fp); X`7D X Xint getletter () X X`7B X int a; X X printf ("\033(B\017"); X wmove (let,1,1); X waddstr (let," "); X wmove (let,1,2); X waddstr (let,"edit which letter? "); X wrefresh (let); X if (recover) X `7B X a = fgetc (rp); X while (a != 26 && a < 33 && a != EOF) a = fgetc (rp); X if (a == EOF) X `7B X fclose (rp); X if (bkup) jp = fopen (jf,"a"); X recover = 0; X while ((a = wgetch (let)) < 33 && a != 26); `20 X `7D X `7D else X `7B X while ((a = wgetch (let)) < 33 && a != 26); X `7D X waddch (let,a); X wrefresh (let); X printf ("\033).A\016"); X if (bkup && (!(recover))) fputc (a,jp); X return a; X`7D X Xchar *getjou_ext (a) X char a`5B80`5D; X`7B X int i=0; X char b`5B80`5D; X X while (a`5Bi`5D != '.' && a`5Bi`5D != '\0') X `7B X b`5Bi`5D = a`5Bi`5D; X i++; X `7D X b`5Bi`5D = '\0'; X strcat (b,".jou"); X return b; X`7D X Xmain (argc,argv) X int argc; X char *argv`5B`5D; X`7B X int i,j,k; X int letter; X X strcpy (fn,"nl:\0"); X while (!(argc <= 1)) X `7B X argc--; X if (argv`5Bargc`5D`5B0`5D == '-') X `7B X while (argv`5Bargc`5D`5B0`5D != '\0') X `7B X argv`5Bargc`5D++; X switch (argv`5Bargc`5D`5B0`5D) X `7B X case 's' : autop = 0; X break; X case 'n' : bkup = 0; X break; X case 'f' : rem = 1; X break; X case 'r' : recover = 1; X break; X case 'z' : recover = 1; X zoom=1; X break; X case 'h' : printf ("\n Fed Version 1.00 Vt320 Graphic Font Edi Vtor\n\n"); X printf (" -s turns off auto preview\n"); X printf (" -r to recover interupted files\n"); X printf (" -z same as r but much faster (zoom!)\ Vn"); X printf (" -n turns off auto backup (no bkup)\n" V); X printf (" -f prints a reminder in file\n\n"); X exit(0); X case 0 : break; X default : printf (" switch -%c unknown, ignored.\n",argv`5Bar Vgc`5D`5B0`5D); X sleep (1); X `7D X `7D X `7D else X `7B X if (argc != 0) strcpy (fn,argv`5Bargc`5D); X `7D X `7D X X strcpy (jf,getjou_ext (fn)); X X /* zero the font so the file reading isn't too messy */ X for (i=1;i<97;i++) X for (j=1;j<16;j++) X for (k=1;k<13;k++) X grid`5Bi`5D`5Bj`5D`5Bk`5D = 0; X X initscr(); X crmode(); X noecho(); X back = newwin(14,17,0,0); X font = newwin(12,15,1,1); X let = newwin(3,24,0,20); X help = newwin(11,49,3,20); X filen = newwin(3,24,0,45); X custcharset(); X letbox(); X dispfilen (); X initback (); X helpme (); X if (recover) X `7B X rp = fopen (jf,"r"); X `7D else X `7B X if (bkup) jp = fopen (jf,"w"); X `7D X readfile (fn,grid); X while ((letter = getletter ()) != 26) X `7B X if (draw (grid`5Bletter-32`5D,letter) == 1) break; X `7D X fclose (jp); X delete (jf); X savefile(fn); X printf ("\033(B\017"); X printf ("\033`5B23;0H"); X`7D $ CALL UNPACK FED.C;1 1600229959 $ v=f$verify(v) $ EXIT