home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #19 / NN_1992_19.iso / spool / vmsnet / sources / 357 < prev    next >
Encoding:
Internet Message Format  |  1992-09-04  |  27.1 KB

  1. Path: sparky!uunet!stanford.edu!agate!dog.ee.lbl.gov!network.ucsd.edu!mvb.saic.com!vmsnet-sources
  2. Newsgroups: vmsnet.sources
  3. From: MASRICH@ubvms.cc.buffalo.edu
  4. Subject: VT320 Font Editor, part 01/01
  5. Date: Fri, 04 Sep 1992 05:59:15 GMT
  6. Message-ID: <8045597@MVB.SAIC.COM>
  7. Organization: University at Buffalo
  8. Lines: 1046
  9. Approved: Mark.Berryman@Mvb.Saic.Com
  10.  
  11. Submitted-by: MASRICH@ubvms.cc.buffalo.edu
  12. Posting-number: Volume 3, Issue 162
  13. Archive-name: vt320_font_editor/part01
  14.  
  15.     Hello, I just wrote this little ditty of a Font Editor for The Vax 
  16. System.  As you can see it is in C and is ONLY for VT320's.  I have no
  17. clue if it will work with a higher terminal, but I know it won't work
  18. on the VT220's and certainly not on 100's or 52's.  This is my first
  19. version so the code will someday be cleaned up if anyone shows any interest
  20. in it whatsoever.
  21.  
  22.     After you make a font with this program all you have to do is type
  23. the file you edited.  There is help within the program.  This MUST be
  24. setup as a symbol.  I used a .jou file for backup purposes and the -r
  25. switch will recover a lost or destroyed file.
  26.  
  27.     Usage is FED -{srznfh} [filename].  I wrote this for VAX orriginally
  28. but with some minor modifications it will work on UNIX.  The reason this is
  29. to be setup as a symbol instead of a verb is to retain portability.  Type Fed -h
  30. to get a list of switches. 
  31.  
  32. Thanks,
  33. -Rich
  34.  
  35. P.S.  pick up a vt320 manual to find out how all this stuff works.  You must
  36. be in VT320 mode on a VT320 terminal for this to work properly.  This is also
  37. great for games making!!
  38.  
  39. $! ------------------ CUT HERE -----------------------
  40. $ v='f$verify(f$trnlnm("SHARE_VERIFY"))'
  41. $!
  42. $! This archive created by VMS_SHARE Version 7.2-010  25-Jun-1992
  43. $!   On  3-SEP-1992 22:52:26.71   By user BERRYMAN 
  44. $!
  45. $! This VMS_SHARE Written by:
  46. $!    Andy Harper, Kings College London UK
  47. $!
  48. $! Acknowledgements to:
  49. $!    James Gray       - Original VMS_SHARE
  50. $!    Michael Bednarek - Original Concept and implementation
  51. $!
  52. $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER
  53. $! AND EXECUTE AS A COMMAND PROCEDURE  (  @name  )
  54. $!
  55. $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING:
  56. $!       1. FED.C;1
  57. $!
  58. $set="set"
  59. $set symbol/scope=(nolocal,noglobal)
  60. $f=f$parse("SHARE_TEMP","SYS$SCRATCH:.TMP_"+f$getjpi("","PID"))
  61. $e="write sys$error  ""%UNPACK"", "
  62. $w="write sys$output ""%UNPACK"", "
  63. $ if f$trnlnm("SHARE_LOG") then $ w = "!"
  64. $ ve=f$getsyi("version")
  65. $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto START
  66. $ e "-E-OLDVER, Must run at least VMS 4.4"
  67. $ v=f$verify(v)
  68. $ exit 44
  69. $UNPACK: SUBROUTINE ! P1=filename, P2=checksum
  70. $ x = P1 - f$parse(P1,,,"version")
  71. $ y = f$search(x)
  72. $ if y .eqs. "" then $ goto file_absent
  73. $ x = f$integer(f$parse(P1,,,"version")-";")
  74. $ y = f$integer(f$parse(y,,,"version")-";")
  75. $ if x .gt. y then $ goto file_absent
  76. $ if f$mode() .eqs. "INTERACTIVE" then $ goto file_interactive
  77. $ if x .eq. y then e "-W-EXISTS, File ''P1' exists. Skipped."
  78. $ if x .ne. y then e "-W-NEWERVERSION, of File ''P1' exists. Skipped."
  79. $file_delete:
  80. $ delete 'f'*
  81. $ exit
  82. $file_interactive:
  83. $ if x .eq. y then e "-W-EXISTS, File ''P1' exists."
  84. $ if x .ne. y then e "-W-NEWERVERSION, of File ''P1' exists."
  85. $ read/error=file_delete/end=file_delete-
  86.   /prompt="Create new version [y/n]: " -
  87.   sys$command x
  88. $ if .not. x then $ e "-W-SKIPPED, File ''P1' skipped."
  89. $ if .not. x then $ goto file_delete
  90. $ P1 = P1 - f$parse(P1,,,"version")
  91. $file_absent:
  92. $ if f$parse(P1) .nes. "" then $ goto dirok
  93. $ dn=f$parse(P1,,,"DIRECTORY")
  94. $ w "-I-CREDIR, Creating directory ''dn'."
  95. $ create/dir 'dn'
  96. $ if $status then $ goto dirok
  97. $ e "-E-CREDIRFAIL, Unable to create ''dn'. File skipped."
  98. $ delete 'f'*
  99. $ exit
  100. $dirok:
  101. $ w "-I-PROCESS, Processing file ''P1'."
  102. $ if .not. f$verify() then $ define/user sys$output nl:
  103. $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='P1'
  104. PROCEDURE Unpacker ON_ERROR ENDON_ERROR;SET(FACILITY_NAME,"UNPACK");SET(
  105. SUCCESS,OFF);SET(INFORMATIONAL,OFF);f:=GET_INFO(COMMAND_LINE,"file_name");b:=
  106. CREATE_BUFFER(f,f);p:=SPAN(" ")@r&LINE_END;POSITION(BEGINNING_OF(b));
  107. LOOP EXITIF SEARCH(p,FORWARD)=0;POSITION(r);ERASE(r);ENDLOOP;POSITION(
  108. BEGINNING_OF(b));g:=0;LOOP EXITIF MARK(NONE)=END_OF(b);x:=ERASE_CHARACTER(1);
  109. IF g=0 THEN IF x="X" THEN MOVE_VERTICAL(1);ENDIF;IF x="V" THEN APPEND_LINE;
  110. MOVE_HORIZONTAL(-CURRENT_OFFSET);MOVE_VERTICAL(1);ENDIF;IF x="+" THEN g:=1;
  111. ERASE_LINE;ENDIF;ELSE IF x="-" THEN IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+")=
  112. 1 THEN g:=0;ENDIF;ENDIF;ERASE_LINE;ENDIF;ENDLOOP;t:="0123456789ABCDEF";
  113. POSITION(BEGINNING_OF(b));LOOP r:=SEARCH("`",FORWARD);EXITIF r=0;POSITION(r);
  114. ERASE(r);x1:=INDEX(t,ERASE_CHARACTER(1))-1;x2:=INDEX(t,ERASE_CHARACTER(1))-1;
  115. COPY_TEXT(ASCII(16*x1+x2));ENDLOOP;WRITE_FILE(b,GET_INFO(COMMAND_LINE,
  116. "output_file"));ENDPROCEDURE;Unpacker;QUIT;
  117. $ delete/nolog 'f'*
  118. $ CHECKSUM 'P1'
  119. $ IF CHECKSUM$CHECKSUM .eqs. P2 THEN $ EXIT
  120. $ e "-E-CHKSMFAIL, Checksum of ''P1' failed."
  121. $ ENDSUBROUTINE
  122. $START:
  123. $ create 'f'
  124. X/* This is a vt320 soft font maker, do NOT try to use it on a 220!! */
  125. X/*
  126. X * you need the following in you o.opt to compile this:
  127. X *    sys$share:vaxcrtl.exe/share
  128. X */
  129. X
  130. X/*`20
  131. X * Feel free to redistribute or modify this code.  All I ask is that my name
  132. X * be tied to it as the orriginator.  Note that this program is not intended
  133. X * to view pre-made fonts.  This program requires a specific format in order
  134. X * to correctly interpret the font so if you already have a font, and you wa
  135. Vnt
  136. X * to change it with this, you're going to have to either modify this code
  137. X * or read a vt320 manual on how to make fonts.  I would recommend both.
  138. X *
  139. X * Richard Wicks
  140. X * masrich@ubvms.cc.buffalo.edu
  141. X * acscrbw@ubvms.cc.buffalo.edu
  142. X * v128ll9e@ubvms.cc.buffalo.edu
  143. X * wicks@lictor.acsu.buffalo.edu
  144. X *
  145. X */
  146. X
  147. X# include <curses.h>
  148. X# include <stdio.h>
  149. X
  150. XWINDOW *font,*back,*let,*help,*filen;
  151. Xint grid `5B97`5D`5B16`5D`5B13`5D;
  152. Xchar fn`5B80`5D,jf`5B80`5D;
  153. XFILE *jp;
  154. XFILE *rp;
  155. Xint bkup=1;                         /* controlls wether journals are made */
  156. Xint autop=1;                        /* allows continuous preview update   */
  157. Xint rem=0;                          /* prints character for file ref.     */
  158. Xint recover=0;                      /* allows recover of a .jou file      */
  159. Xint zoom=0;                         /* when recovering, no screen junk    */
  160. X
  161. Xvoid dispfilen ()
  162. X
  163. X`7B
  164. X  wmove (filen,0,0);
  165. X  waddstr (filen,"#$$$$$$$$$$$$$$$$$$$$$$%\n");
  166. X  waddstr (filen,"*                      &\n");
  167. X  waddstr (filen,")(((((((((((((((((((((('");
  168. X  wrefresh (filen);
  169. X  wmove (filen,1,2);
  170. X  printf ("\033(B\017");
  171. X  waddstr (filen,"FILE: ");
  172. X  waddstr (filen,fn);
  173. X  wrefresh (filen);
  174. X  printf ("\033).A\016");
  175. X`7D
  176. X
  177. Xvoid helpme ()                      /* I need somebody...                */
  178. X
  179. X`7B
  180. X  wmove (help,0,0);
  181. X  waddstr (help,"#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%\n");
  182. X  waddstr (help,"*                                               &\n");
  183. X  waddstr (help,"*                                               &\n");
  184. X  waddstr (help,"*                                               &\n");
  185. X  waddstr (help,"*                                               &\n");
  186. X  waddstr (help,"*                                               &\n");
  187. X  waddstr (help,"*                                               &\n");
  188. X  waddstr (help,"*                                               &\n");
  189. X  waddstr (help,"*                                               &\n");
  190. X  waddstr (help,"*                                               &\n");
  191. X  waddstr (help,")((((((((((((((((((((((((((((((((((((((((((((((('\n");
  192. X  wrefresh (help);
  193. X  printf ("\033(B\017");
  194. X  wmove (help,1,1);
  195. X  waddstr (help," h: left               P: preview letter");
  196. X  wmove (help,2,1);
  197. X  waddstr (help," j: down               R: reverse video");
  198. X  wmove (help,3,1);
  199. X  waddstr (help," k: up                 X: flip on X axis");
  200. X  wmove (help,4,1);
  201. X  waddstr (help," l: right              Y: file on Y axis");
  202. X  wmove (help,5,1);
  203. X  waddstr (help," H: shift left        `5EE: erase work area");
  204. X  wmove (help,6,1);
  205. X  waddstr (help," J: shift down        `5EP: preview all");
  206. X  wmove (help,7,1);
  207. X  waddstr (help," K: shift up          `5EI: copy letter (import)");
  208. X  wmove (help,8,1);
  209. X  waddstr (help," L: shift right       `5EZ: save and quit");
  210. X  wmove (help,9,1);
  211. X  waddstr (help," S: save           Space: toggle bit");
  212. X  wrefresh (help);
  213. X  printf ("\033).A\016");
  214. X`7D
  215. X
  216. Xvoid savefile (a)
  217. X     char a`5B`5D;
  218. X`7B
  219. X  int i,j;
  220. X  FILE *fp;
  221. X
  222. X  fp = fopen (a,"w+");
  223. X  fprintf (fp,"\033P1;0;1;0;0;2;`7B.A\012");
  224. X
  225. X  for (j=1;j<96;j++)
  226. X  `7B
  227. X    fprintf (fp,";");
  228. X    for (i=1;i<16;i++)
  229. X      fprintf (fp,"%c",63+(bindec(grid`5Bj`5D`5Bi`5D`5B6`5D,grid`5Bj`5D`5Bi`
  230. V5D`5B5`5D,grid`5Bj`5D`5Bi`5D`5B4`5D,grid`5Bj`5D`5Bi`5D`5B3`5D,grid`5Bj`5D`5B
  231. Vi`5D`5B2`5D,grid`5Bj`5D`5Bi`5D`5B1`5D)));
  232. X    fprintf (fp,"/");
  233. X    for (i=1;i<16;i++)
  234. X      fprintf (fp,"%c",63+(bindec(grid`5Bj`5D`5Bi`5D`5B12`5D,grid`5Bj`5D`5Bi
  235. V`5D`5B11`5D,grid`5Bj`5D`5Bi`5D`5B10`5D,grid`5Bj`5D`5Bi`5D`5B9`5D,grid`5Bj`5D
  236. V`5Bi`5D`5B8`5D,grid`5Bj`5D`5Bi`5D`5B7`5D)));
  237. X    if (rem)
  238. X    `7B
  239. X      if (32+j != ';')
  240. X      `7B
  241. X        fprintf (fp," %c",32+j);
  242. X      `7D else
  243. X        fprintf (fp," semicolin");
  244. X    `7D
  245. X    fprintf (fp,"\012");
  246. X  `7D
  247. X  fprintf (fp,"\033\\\033).A\016");
  248. X  fclose (fp);
  249. X`7D
  250. X
  251. Xvoid initback ()
  252. X
  253. X`7B
  254. X  wmove (back,0,0);
  255. X  waddstr (back,"#$$$$$$$$$$$$$$$%\n");
  256. X  waddstr (back,"*               &\n");
  257. X  waddstr (back,"*               &\n");
  258. X  waddstr (back,"*               &\n");
  259. X  waddstr (back,"*               &\n");
  260. X  waddstr (back,"*               &\n");
  261. X  waddstr (back,"*               &\n");
  262. X  waddstr (back,"*               &\n");
  263. X  waddstr (back,"*               &\n");
  264. X  waddstr (back,"*               &\n");
  265. X  waddstr (back,"*               &\n");
  266. X  waddstr (back,"*               &\n");
  267. X  waddstr (back,"*               &\n");
  268. X  waddstr (back,")((((((((((((((('\n");
  269. X  wrefresh (back);
  270. X`7D
  271. X
  272. Xvoid custcharset ()               /* create Fed character set */
  273. X
  274. X`7B
  275. X  printf ("\033P1;2;1;0;0;2;`7B.A");
  276. X  printf (";???????????????/??????`7B`7BCCCCCcc"); /* # */
  277. X  printf (";???????????????/ccccccccccccccc"); /* $ */
  278. X  printf (";???????????????/ccCCCCC`7B`7B??????"); /* % */
  279. X  printf (";`7E`7E?????`7E`7E??????/`7E`7E?????`7E`7E??????"); /* & */
  280. X  printf (";HHGGGGGNN??????/???????????????"); /* ' */
  281. X  printf (";HHHHHHHHHHHHHHH/???????????????"); /* ( */
  282. X  printf (";??????NNGGGGGHH/???????????????"); /* ) */
  283. X  printf (";??????`7E`7E?????`7E`7E/??????`7E`7E?????`7E`7E"); /* * */
  284. X  printf (";Ti@?@?@?@?@?@iT/Ti?_?_?_?_?_?iT"); /* + */
  285. X  printf (";Ti`7E`7D`7E`7D`7E`7D`7E`7D`7E`7D`7EiT/Ti`5E`7E`5E`7E`5E`7E`5E`7E
  286. V`5E`7E`5EiT"); /* , */
  287. X  printf ("\033\\\033).A\016");
  288. X`7D
  289. X
  290. Xvoid letbox ()
  291. X
  292. X`7B
  293. X  wmove (let,0,0);
  294. X  waddstr (let,"#$$$$$$$$$$$$$$$$$$$$$$%\n");
  295. X  waddstr (let,"*                      &\n");
  296. X  waddstr (let,")(((((((((((((((((((((('\n");
  297. X  wrefresh (let);
  298. X`7D
  299. X
  300. Xvoid redraw (a)
  301. X     int a`5B16`5D`5B13`5D;
  302. X
  303. X`7B
  304. X  int i,j;
  305. X
  306. X  wmove (font,0,0);
  307. X  for (j=1;j<13;j++)
  308. X  `7B
  309. X    for (i=1;i<16;i++)
  310. X      if (a`5Bi`5D`5Bj`5D == 1)
  311. X      `7B
  312. X        waddch (font,',');
  313. X      `7D else
  314. X      `7B
  315. X        waddch (font,'+');
  316. X      `7D
  317. X    waddch (font,'\n');
  318. X  `7D
  319. X  wmove (font,0,0);
  320. X`7D
  321. X
  322. Xint bindec (a,b,c,d,e,f)
  323. X    int a,b,c,d,e,f;
  324. X`7B
  325. X  return ((32*a)+(16*b)+(8*c)+(4*d)+(2*e)+f);
  326. X`7D
  327. X
  328. Xvoid preview (a)
  329. X     int a`5B16`5D`5B13`5D;
  330. X`7B
  331. X  int i;
  332. X
  333. X  if (zoom && recover) return;
  334. X  printf ("\033P1;0;1;0;0;2;`7B.A\n");
  335. X  printf (";");
  336. X  for (i=1;i<16;i++)
  337. X    printf ("%c",63+(bindec(a`5Bi`5D`5B6`5D,a`5Bi`5D`5B5`5D,a`5Bi`5D`5B4`5D,
  338. Va`5Bi`5D`5B3`5D,a`5Bi`5D`5B2`5D,a`5Bi`5D`5B1`5D)));
  339. X  printf ("/");
  340. X  for (i=1;i<16;i++)
  341. X    printf ("%c",63+(bindec(a`5Bi`5D`5B12`5D,a`5Bi`5D`5B11`5D,a`5Bi`5D`5B10`
  342. V5D,a`5Bi`5D`5B9`5D,a`5Bi`5D`5B8`5D,a`5Bi`5D`5B7`5D)));
  343. X  printf ("\033\\");
  344. X`7D
  345. X
  346. Xvoid reverse (a)
  347. X     int *a`5B16`5D`5B13`5D;
  348. X`7B
  349. X  int i=0,j=0;
  350. X
  351. X  for (i=1;i<16;i++)
  352. X    for (j=1;j<13;j++)
  353. X      if (a`5Bi`5D`5Bj`5D == 0)
  354. X      `7B
  355. X        a`5Bi`5D`5Bj`5D = 1;
  356. X      `7D else
  357. X      `7B
  358. X        a`5Bi`5D`5Bj`5D = 0;
  359. X      `7D
  360. X`7D
  361. X
  362. Xvoid copy (a,b)
  363. X     int *a`5B16`5D`5B13`5D;
  364. X     int b;
  365. X`7B
  366. X  int c;
  367. X  int i,j;
  368. X
  369. X  wmove (let,1,2);
  370. X  printf ("\033(B\017");
  371. X  waddstr (let,"Import from:        ");
  372. X  wrefresh (let);
  373. X  wmove (let,1,15);
  374. X  if (recover)
  375. X  `7B
  376. X    if (recover) c = fgetc (rp);
  377. X    if (c == EOF)
  378. X    `7B
  379. X      recover = 0;
  380. X      fclose (rp);
  381. X      if (bkup) jp = fopen (jf,"a");
  382. X      c = wgetch (let);
  383. X      if (bkup) fputc (c,jp);
  384. X    `7D
  385. X  `7D else
  386. X  `7B
  387. X    c = wgetch (let);
  388. X    if (bkup) fputc (c,jp);
  389. X  `7D
  390. X  if (c > 32)
  391. X  `7B
  392. X    waddch (let,c);
  393. X    c = c - 32;
  394. X    waddstr (let," to: ");
  395. X    waddch (let,b);
  396. X    wrefresh (let);
  397. X    for (i=1;i<16;i++)
  398. X      for (j=1;j<13;j++)
  399. X        a`5Bi`5D`5Bj`5D = grid`5Bc`5D`5Bi`5D`5Bj`5D;
  400. X  `7D else
  401. X  `7B
  402. X    waddstr (let,"abort");
  403. X    wrefresh (let);
  404. X  `7D
  405. X  printf ("\033).A\016");
  406. X`7D
  407. X
  408. Xvoid flipx (a)
  409. X     int *a`5B16`5D`5B13`5D;
  410. X
  411. X`7B
  412. X  int b`5B16`5D`5B13`5D;
  413. X  int i,j,k=12;
  414. X
  415. X  for (i=1;i<16;i++)
  416. X    for (j=1;j<13;j++)
  417. X      b`5Bi`5D`5Bj`5D = a`5Bi`5D`5Bj`5D;
  418. X
  419. X  for (j=1;j<13;j++)
  420. X    `7B
  421. X    for (i=1;i<16;i++)
  422. X      a`5Bi`5D`5Bk`5D = b`5Bi`5D`5Bj`5D;
  423. X    k--;
  424. X    `7D
  425. X`7D
  426. X
  427. Xvoid flipy (a)
  428. X     int *a`5B16`5D`5B13`5D;
  429. X
  430. X`7B
  431. X  int b`5B16`5D`5B13`5D;
  432. X  int i,j,k=15;
  433. X
  434. X  for (i=1;i<16;i++)
  435. X    for (j=1;j<13;j++)
  436. X      b`5Bi`5D`5Bj`5D = a`5Bi`5D`5Bj`5D;
  437. X
  438. X  for (i=1;i<16;i++)
  439. X    `7B
  440. X    for (j=1;j<13;j++)
  441. X      a`5Bk`5D`5Bj`5D = b`5Bi`5D`5Bj`5D;
  442. X    k--;
  443. X    `7D
  444. X`7D
  445. X
  446. Xvoid left (a)
  447. X     int *a`5B16`5D`5B13`5D;
  448. X`7B
  449. X  int b`5B16`5D;
  450. X  int i,j;
  451. X
  452. X  for (j=1;j<13;j++)
  453. X    b`5Bj`5D = a`5B1`5D`5Bj`5D;
  454. X
  455. X  for (i=1;i<15;i++)
  456. X    for (j=1;j<13;j++)
  457. X      a`5Bi`5D`5Bj`5D = a`5Bi+1`5D`5Bj`5D;
  458. X
  459. X  for (j=1;j<13;j++)
  460. X    a`5B15`5D`5Bj`5D = b`5Bj`5D;
  461. X`7D
  462. X
  463. Xvoid right (a)
  464. X     int *a`5B16`5D`5B13`5D;
  465. X`7B
  466. X  int b`5B16`5D;
  467. X  int i,j;
  468. X
  469. X  for (j=1;j<13;j++)
  470. X    b`5Bj`5D = a`5B15`5D`5Bj`5D;
  471. X
  472. X  for (i=15;i>1;i--)
  473. X    for (j=1;j<13;j++)
  474. X      a`5Bi`5D`5Bj`5D = a`5Bi-1`5D`5Bj`5D;
  475. X
  476. X  for (j=1;j<13;j++)
  477. X    a`5B1`5D`5Bj`5D = b`5Bj`5D;
  478. X`7D
  479. X
  480. Xvoid up (a)
  481. X     int *a`5B16`5D`5B13`5D;
  482. X`7B
  483. X  int b`5B16`5D;
  484. X  int i,j;
  485. X
  486. X  for (i=1;i<16;i++)
  487. X    b`5Bi`5D = a`5Bi`5D`5B1`5D;
  488. X
  489. X  for (i=1;i<16;i++)
  490. X    for (j=1;j<12;j++)
  491. X      a`5Bi`5D`5Bj`5D = a`5Bi`5D`5Bj+1`5D;
  492. X
  493. X  for (i=1;i<16;i++)
  494. X    a`5Bi`5D`5B12`5D = b`5Bi`5D;
  495. X`7D
  496. X
  497. Xvoid down (a)
  498. X     int *a`5B16`5D`5B13`5D;
  499. X`7B
  500. X  int b`5B16`5D;
  501. X  int i,j;
  502. X
  503. X  for (i=1;i<16;i++)
  504. X    b`5Bi`5D = a`5Bi`5D`5B12`5D;
  505. X
  506. X  for (i=1;i<16;i++)
  507. X    for (j=12;j>1;j--)
  508. X      a`5Bi`5D`5Bj`5D = a`5Bi`5D`5Bj-1`5D;
  509. X
  510. X  for (i=1;i<16;i++)
  511. X    a`5Bi`5D`5B1`5D = b`5Bi`5D;
  512. X`7D
  513. X
  514. Xvoid junk ()
  515. X`7B
  516. X  printf ("\033(B\017");
  517. X  printf ("\033`5B15;0Hstandard width & height:");
  518. X  printf ("\033`5B16;0H\033#6double width:");
  519. X  printf ("\033`5B17;0H\033#3double height:");
  520. X  printf ("\033`5B18;0H\033#4double height:");
  521. X  printf ("\033).A\016");
  522. X  printf ("\033`5B15;29H!!!!   !");
  523. X  printf ("\033`5B16;15H!! !");
  524. X  printf ("\033`5B17;15H!! !");
  525. X  printf ("\033`5B18;15H!! !");
  526. X`7D
  527. X
  528. Xvoid t_preview ()
  529. X`7B
  530. X  int i,j;
  531. X  WINDOW *prev;
  532. X
  533. X  /* erase all windows */
  534. X  werase (font);
  535. X  werase (back);
  536. X  werase (let);
  537. X  werase (help);
  538. X  werase (filen);
  539. X  wrefresh (back);
  540. X  wrefresh (font);
  541. X  wrefresh (let);
  542. X  wrefresh (help);
  543. X  wrefresh (filen);
  544. X  prev = newwin (8,80,11,0);
  545. X  printf ("\033(B\017");
  546. X  printf ("\033`5B1;35HWorking...");
  547. X
  548. X  /* read character set */
  549. X  printf ("\033P1;0;1;0;0;2;`7B.A\n");
  550. X
  551. X  for (j=1;j<96;j++)
  552. X  `7B
  553. X    printf (";");
  554. X    for (i=1;i<16;i++)
  555. X      printf ("%c",63+(bindec(grid`5Bj`5D`5Bi`5D`5B6`5D,grid`5Bj`5D`5Bi`5D`5
  556. VB5`5D,grid`5Bj`5D`5Bi`5D`5B4`5D,grid`5Bj`5D`5Bi`5D`5B3`5D,grid`5Bj`5D`5Bi`5D
  557. V`5B2`5D,grid`5Bj`5D`5Bi`5D`5B1`5D)));
  558. X    printf ("/");
  559. X    for (i=1;i<16;i++)
  560. X      printf ("%c",63+(bindec(grid`5Bj`5D`5Bi`5D`5B12`5D,grid`5Bj`5D`5Bi`5D`
  561. V5B11`5D,grid`5Bj`5D`5Bi`5D`5B10`5D,grid`5Bj`5D`5Bi`5D`5B9`5D,grid`5Bj`5D`5Bi
  562. V`5D`5B8`5D,grid`5Bj`5D`5Bi`5D`5B7`5D)));
  563. X  `7D
  564. X  printf ("\033\\");
  565. X
  566. X  /* print character set */
  567. X
  568. X  printf ("\033`5B15;0H");
  569. X  for (i=33;i<73;i++)
  570. X  `7B
  571. X    waddch (prev,i);
  572. X    waddch (prev,' ');
  573. X  `7D
  574. X  waddch (prev,'\n');
  575. X  wrefresh (prev);
  576. X  printf ("\033).A\016");
  577. X  for (i=33;i<73;i++)
  578. X  `7B
  579. X    waddch (prev,i);
  580. X    waddch (prev,' ');
  581. X  `7D
  582. X  waddch (prev,'\n');
  583. X  waddch (prev,'\n');
  584. X  wrefresh (prev);
  585. X
  586. X  printf ("\033(B\017");
  587. X  for (i=73;i<113;i++)
  588. X  `7B
  589. X    waddch (prev,i);
  590. X    waddch (prev,' ');
  591. X  `7D
  592. X  waddch (prev,'\n');
  593. X  wrefresh (prev);
  594. X  printf ("\033).A\016");
  595. X  for (i=73;i<113;i++)
  596. X  `7B
  597. X    waddch (prev,i);
  598. X    waddch (prev,' ');
  599. X  `7D
  600. X  waddch (prev,'\n');
  601. X  waddch (prev,'\n');
  602. X  wrefresh (prev);
  603. X
  604. X  printf ("\033(B\017");
  605. X  for (i=113;i<127;i++)
  606. X  `7B
  607. X    waddch (prev,i);
  608. X    waddch (prev,' ');
  609. X  `7D
  610. X  waddch (prev,'\n');
  611. X  wrefresh (prev);
  612. X  printf ("\033).A\016");
  613. X  for (i=113;i<127;i++)
  614. X  `7B
  615. X    waddch (prev,i);
  616. X    waddch (prev,' ');
  617. X  `7D
  618. X  waddch (prev,'\n');
  619. X  wrefresh (prev);
  620. X
  621. X  /* prompt for a key */
  622. X  printf ("\033(B\017");
  623. X  waddstr (prev,"press any key to continue...");
  624. X  wrefresh (prev);
  625. X  wgetch(prev);
  626. X  delwin (prev);
  627. X  printf ("\033).A\016");
  628. X
  629. X  /* redo screen */
  630. X  custcharset ();
  631. X  initback ();
  632. X  letbox ();
  633. X  dispfilen ();
  634. X  junk ();
  635. X  helpme ();
  636. X `7D
  637. X
  638. Xvoid ferase (a)
  639. X     int a`5B16`5D`5B13`5D;
  640. X`7B
  641. X  int i,j;
  642. X
  643. X  for (i=1;i<16;i++)
  644. X    for (j=1;j<13;j++)
  645. X      a`5Bi`5D`5Bj`5D = 0;
  646. X`7D
  647. X
  648. Xchar getcmmd ()
  649. X
  650. X`7B
  651. X  char a;
  652. X
  653. X  if (recover)
  654. X  `7B
  655. X    if ((a = fgetc (rp)) == EOF)
  656. X    `7B
  657. X      recover = 0;
  658. X      fclose (rp);
  659. X      if (bkup) jp = fopen (jf,"a");
  660. X      return wgetch (font);
  661. X    `7D else
  662. X      return a;
  663. X  `7D else
  664. X  `7B
  665. X    return wgetch (font);
  666. X  `7D
  667. X
  668. X`7D
  669. X
  670. Xvoid quit ()
  671. X
  672. X`7B
  673. X  wmove (let,1,2);
  674. X  printf ("\033(B\017");
  675. X  waddstr (let,"To Quit, type Y: n  ");
  676. X  wrefresh (let);
  677. X  wmove (let,1,19);
  678. X  if (wgetch (let) == 'Y')
  679. X  `7B
  680. X    /* need to remove .jou file first */
  681. X    waddch (let,'Y');
  682. X    wrefresh (let);
  683. X    printf ("\033`5B23;0H");
  684. X    fclose (jp);
  685. X    delete (jf);
  686. X    exit (1);
  687. X  `7D
  688. X`7D
  689. X
  690. X
  691. Xint draw (a,b)
  692. X    int *a`5B16`5D`5B13`5D;
  693. X    int b;
  694. X`7B
  695. X  int x=1,y=1;
  696. X  char ch;
  697. X
  698. X  redraw (a);
  699. X
  700. X  printf ("\033(B\017");
  701. X  junk ();
  702. X  preview (a);
  703. X
  704. X  while ((ch = getcmmd()) != 'S' && ch != 26)
  705. X  `7B
  706. X    if (bkup) fputc (ch,jp);
  707. X    switch (ch)
  708. X    `7B
  709. X      case 'h' : x = x - 1;
  710. X                 break;
  711. X      case 'j' : y = y + 1;
  712. X                 break;
  713. X      case 'k' : y = y - 1;
  714. X                 break;
  715. X      case 'l' : x = x + 1;
  716. X                 break;
  717. X      case ' ' : if (a`5Bx`5D`5By`5D == 1)
  718. X                 `7B
  719. X                   a`5Bx`5D`5By`5D = 0;
  720. X                   wmove (font,y-1,x-1);
  721. X                   waddch (font,'+');
  722. X                 `7D else
  723. X                 `7B
  724. X                   a`5Bx`5D`5By`5D = 1;
  725. X                   wmove (font,y-1,x-1);
  726. X                   waddch (font,',');
  727. X                 `7D
  728. X                 if (autop) preview(a);
  729. X                 break;
  730. X      case 'P' : preview (a);
  731. X                 break;
  732. X      case 'R' : reverse (a);
  733. X                 redraw (a);
  734. X                 if (autop) preview (a);
  735. X                 break;
  736. X      case 'X' : flipx (a);
  737. X                 redraw (a);
  738. X                 if (autop) preview (a);
  739. X                 break;
  740. X      case 'Y' : flipy (a);
  741. X                 redraw (a);
  742. X                 if (autop) preview (a);
  743. X                 break;
  744. X      case 'H' : left(a);
  745. X                 redraw(a);
  746. X                 if (autop) preview(a);
  747. X                 break;
  748. X      case 'L' : right(a);
  749. X                 redraw(a);
  750. X                 if (autop) preview(a);
  751. X                 break;
  752. X      case 'K' : up(a);
  753. X                 redraw(a);
  754. X                 if (autop) preview(a);
  755. X                 break;
  756. X      case 'J' : down(a);
  757. X                 redraw(a);
  758. X                 if (autop) preview(a);
  759. X                 break;
  760. X      case 'Q' : if (!(recover)) quit ();
  761. X                 `7B
  762. X                   redraw(a);
  763. X                   wmove (let,1,2);
  764. X                   waddstr (let,"edit which letter? ");
  765. X                   waddch (let,b);
  766. X                   wrefresh (let);
  767. X                   printf ("\033).A\016");
  768. X                 `7D
  769. X                 break;
  770. X      case 16  : if (!(recover))
  771. X                 `7B
  772. X                   t_preview();
  773. X                   redraw (a);
  774. X                   wmove (let,1,2);
  775. X                   printf ("\033(B\017");
  776. X                   waddstr (let,"edit which letter? ");
  777. X                   waddch (let,b);
  778. X                   wrefresh (let);
  779. X                   printf ("\033).A\016");
  780. X                   preview(a);
  781. X                 `7D
  782. X                 break;
  783. X      case 5   : ferase (a);
  784. X                 redraw (a);
  785. X                 preview(a);
  786. X                 break;
  787. X      case 9   : copy (a,b);
  788. X                 redraw (a);
  789. X                 preview (a);
  790. X                 break;
  791. X      case 12  : werase (back);
  792. X                 werase (font);
  793. X                 werase (let);
  794. X                 werase (help);
  795. X                 werase (filen);
  796. X                 wrefresh (back);
  797. X                 wrefresh (font);
  798. X                 wrefresh (let);
  799. X                 wrefresh (help);
  800. X                 wrefresh (filen);
  801. X                 initback ();
  802. X                 letbox ();
  803. X                 dispfilen ();
  804. X                 junk ();
  805. X                 helpme ();
  806. X                 redraw (a);
  807. X                 wmove (let,1,2);
  808. X                 printf ("\033(B\017");
  809. X                 waddstr (let,"edit which letter? ");
  810. X                 waddch (let,b);
  811. X                 wrefresh (let);
  812. X                 printf ("\033).A\016");
  813. X                 preview(a);
  814. X                 break;
  815. X   `7D
  816. X    if (x > 15) x = 1;
  817. X    if (x < 1) x = 15;
  818. X    if (y > 12) y = 1;
  819. X    if (y < 1) y = 12;
  820. X    wmove (font,y-1,x-1);
  821. X    if (!(zoom && recover)) wrefresh (font);  /* had touchwin here before */
  822. X  `7D
  823. X  if (bkup) fputc (ch,jp);
  824. X  if (ch == 26) return 1;
  825. X  return 0;                                   /* sent an S here */
  826. X`7D
  827. X
  828. Xvoid readfile (a,b)
  829. X     char a`5B`5D;
  830. X     int *b`5B97`5D`5B16`5D`5B13`5D;
  831. X
  832. X`7B
  833. X  FILE *fp;
  834. X  char c`5B132`5D;
  835. X  int d;
  836. X  int i=0,j=0,k=0;
  837. X
  838. X  fp = fopen (a,"r");
  839. X  fgets (c,132,fp);
  840. X  for (d=1;d<97;d++)
  841. X  `7B
  842. X    if (fgets (c,132,fp) == NULL) break;
  843. X    if (strstr (c,"\033\\") != NULL) break;
  844. X    i++;
  845. X    for (j=1;j<16;j++)          /* first top half       */
  846. X    `7B
  847. X      c`5Bj`5D = c`5Bj`5D - 63;
  848. X      if (c`5Bj`5D >= 32)
  849. X      `7B
  850. X        b`5Bi`5D`5Bj`5D`5B6`5D=1;
  851. X        c`5Bj`5D = c`5Bj`5D - 32;
  852. X      `7D
  853. X      if (c`5Bj`5D >= 16)
  854. X      `7B
  855. X        b`5Bi`5D`5Bj`5D`5B5`5D=1;
  856. X        c`5Bj`5D = c`5Bj`5D - 16;
  857. X      `7D
  858. X      if (c`5Bj`5D >= 8)
  859. X      `7B
  860. X        b`5Bi`5D`5Bj`5D`5B4`5D=1;
  861. X        c`5Bj`5D = c`5Bj`5D - 8;
  862. X      `7D
  863. X      if (c`5Bj`5D >= 4)
  864. X      `7B
  865. X        b`5Bi`5D`5Bj`5D`5B3`5D=1;
  866. X        c`5Bj`5D = c`5Bj`5D - 4;
  867. X      `7D
  868. X      if (c`5Bj`5D >= 2)
  869. X      `7B
  870. X        b`5Bi`5D`5Bj`5D`5B2`5D=1;
  871. X        c`5Bj`5D = c`5Bj`5D - 2;
  872. X      `7D
  873. X      if (c`5Bj`5D == 1)
  874. X      `7B
  875. X        b`5Bi`5D`5Bj`5D`5B1`5D=1;
  876. X      `7D
  877. X    `7D
  878. X    for (j=17;j<33;j++)          /* does the bottom half */
  879. X    `7B
  880. X      c`5Bj`5D = c`5Bj`5D - 63;
  881. X      if (c`5Bj`5D >= 32)
  882. X      `7B
  883. X        b`5Bi`5D`5Bj-16`5D`5B12`5D=1;
  884. X        c`5Bj`5D = c`5Bj`5D - 32;
  885. X      `7D
  886. X      if (c`5Bj`5D >= 16)
  887. X      `7B
  888. X        b`5Bi`5D`5Bj-16`5D`5B11`5D=1;
  889. X        c`5Bj`5D = c`5Bj`5D - 16;
  890. X      `7D
  891. X      if (c`5Bj`5D >= 8)
  892. X      `7B
  893. X        b`5Bi`5D`5Bj-16`5D`5B10`5D=1;
  894. X        c`5Bj`5D = c`5Bj`5D - 8;
  895. X      `7D
  896. X      if (c`5Bj`5D >= 4)
  897. X      `7B
  898. X        b`5Bi`5D`5Bj-16`5D`5B9`5D=1;
  899. X        c`5Bj`5D = c`5Bj`5D - 4;
  900. X      `7D
  901. X      if (c`5Bj`5D >= 2)
  902. X      `7B
  903. X        b`5Bi`5D`5Bj-16`5D`5B8`5D=1;
  904. X        c`5Bj`5D = c`5Bj`5D - 2;
  905. X      `7D
  906. X      if (c`5Bj`5D == 1)
  907. X      `7B
  908. X        b`5Bi`5D`5Bj-16`5D`5B7`5D=1;
  909. X      `7D
  910. X    `7D
  911. X  `7D
  912. X  close (fp);
  913. X`7D
  914. X
  915. Xint getletter ()
  916. X
  917. X`7B
  918. X  int a;
  919. X
  920. X  printf ("\033(B\017");
  921. X  wmove (let,1,1);
  922. X  waddstr (let,"                      ");
  923. X  wmove (let,1,2);
  924. X  waddstr (let,"edit which letter? ");
  925. X  wrefresh (let);
  926. X  if (recover)
  927. X  `7B
  928. X    a = fgetc (rp);
  929. X    while (a != 26 && a < 33 && a != EOF) a = fgetc (rp);
  930. X    if (a == EOF)
  931. X    `7B
  932. X      fclose (rp);
  933. X      if (bkup) jp = fopen (jf,"a");
  934. X      recover = 0;
  935. X      while ((a = wgetch (let)) < 33 && a != 26);    `20
  936. X    `7D
  937. X  `7D else
  938. X  `7B
  939. X    while ((a = wgetch (let)) < 33 && a != 26);
  940. X  `7D
  941. X  waddch (let,a);
  942. X  wrefresh (let);
  943. X  printf ("\033).A\016");
  944. X  if (bkup && (!(recover))) fputc (a,jp);
  945. X  return a;
  946. X`7D
  947. X
  948. Xchar *getjou_ext (a)
  949. X      char a`5B80`5D;
  950. X`7B
  951. X  int i=0;
  952. X  char b`5B80`5D;
  953. X
  954. X  while (a`5Bi`5D != '.' && a`5Bi`5D != '\0')
  955. X  `7B
  956. X    b`5Bi`5D = a`5Bi`5D;
  957. X    i++;
  958. X  `7D
  959. X  b`5Bi`5D = '\0';
  960. X  strcat (b,".jou");
  961. X  return b;
  962. X`7D
  963. X
  964. Xmain (argc,argv)
  965. X      int argc;
  966. X      char *argv`5B`5D;
  967. X`7B
  968. X  int i,j,k;
  969. X  int letter;
  970. X
  971. X  strcpy (fn,"nl:\0");
  972. X  while (!(argc <= 1))
  973. X  `7B
  974. X    argc--;
  975. X    if (argv`5Bargc`5D`5B0`5D == '-')
  976. X      `7B
  977. X        while (argv`5Bargc`5D`5B0`5D != '\0')
  978. X          `7B
  979. X            argv`5Bargc`5D++;
  980. X            switch (argv`5Bargc`5D`5B0`5D)
  981. X            `7B
  982. X              case 's' : autop = 0;
  983. X                         break;
  984. X              case 'n' : bkup = 0;
  985. X                         break;
  986. X              case 'f' : rem = 1;
  987. X                         break;
  988. X              case 'r' : recover = 1;
  989. X                         break;
  990. X              case 'z' : recover = 1;
  991. X                         zoom=1;
  992. X                         break;
  993. X              case 'h' : printf ("\n Fed Version 1.00 Vt320 Graphic Font Edi
  994. Vtor\n\n");
  995. X                         printf ("     -s turns off auto preview\n");
  996. X                         printf ("     -r to recover interupted files\n");
  997. X                         printf ("     -z same as r but much faster (zoom!)\
  998. Vn");
  999. X                         printf ("     -n turns off auto backup (no bkup)\n"
  1000. V);
  1001. X                         printf ("     -f prints a reminder in file\n\n");
  1002. X                         exit(0);
  1003. X              case 0   : break;
  1004. X              default  : printf (" switch -%c unknown, ignored.\n",argv`5Bar
  1005. Vgc`5D`5B0`5D);
  1006. X                         sleep (1);
  1007. X            `7D
  1008. X          `7D
  1009. X      `7D else
  1010. X      `7B
  1011. X        if (argc != 0) strcpy (fn,argv`5Bargc`5D);
  1012. X      `7D
  1013. X  `7D
  1014. X
  1015. X  strcpy (jf,getjou_ext (fn));
  1016. X
  1017. X  /* zero the font so the file reading isn't too messy */
  1018. X  for (i=1;i<97;i++)
  1019. X    for (j=1;j<16;j++)
  1020. X      for (k=1;k<13;k++)
  1021. X        grid`5Bi`5D`5Bj`5D`5Bk`5D = 0;
  1022. X
  1023. X  initscr();
  1024. X  crmode();
  1025. X  noecho();
  1026. X  back = newwin(14,17,0,0);
  1027. X  font = newwin(12,15,1,1);
  1028. X  let = newwin(3,24,0,20);
  1029. X  help = newwin(11,49,3,20);
  1030. X  filen = newwin(3,24,0,45);
  1031. X  custcharset();
  1032. X  letbox();
  1033. X  dispfilen ();
  1034. X  initback ();
  1035. X  helpme ();
  1036. X  if (recover)
  1037. X  `7B
  1038. X    rp = fopen (jf,"r");
  1039. X  `7D else
  1040. X  `7B
  1041. X    if (bkup) jp = fopen (jf,"w");
  1042. X  `7D
  1043. X  readfile (fn,grid);
  1044. X  while ((letter = getletter ()) != 26)
  1045. X  `7B
  1046. X    if (draw (grid`5Bletter-32`5D,letter) == 1) break;
  1047. X  `7D
  1048. X  fclose (jp);
  1049. X  delete (jf);
  1050. X  savefile(fn);
  1051. X  printf ("\033(B\017");
  1052. X  printf ("\033`5B23;0H");
  1053. X`7D
  1054. $ CALL UNPACK FED.C;1 1600229959
  1055. $ v=f$verify(v)
  1056. $ EXIT
  1057.