home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 1 / GoldFishApril1994_CD2.img / d4xx / d487 / mfsrc / mfsrc.lzh / line.mf < prev    next >
Text File  |  1990-02-14  |  9KB  |  552 lines

  1. qqs:=ceiling(qqs#*hppp); % the way rule widths are calculated
  2. define_pixels(qqh,qqw,arrowlen,arrowht,arrowcurve);
  3.  
  4. def line (expr delx, dely) =
  5. numeric qht,qwd,absdely;
  6.  
  7. if dely > 0:
  8.       if delx > dely: qwd# := qqw#; qht# := dely*qqw#/delx;
  9.               else: qht# := qqw#; qwd# := delx*qqw#/dely;    fi;
  10.       beginchar( 8(delx-1)+(dely-1),qwd#,qht#,0pt#);
  11.       x0=0; y0=0;
  12.       x1=w; y1=h;
  13.   else:
  14.       absdely=-dely;
  15.       if delx > absdely: qwd# := qqw#; qht# := absdely*qqw#/delx;
  16.               else: qht# := qqw#; qwd# := delx*qqw#/absdely;    fi;
  17.       beginchar(64+8(delx-1)+(absdely-1),qwd#,qht#,0pt#);
  18.       x0=0; y0=h;
  19.       x1=w; y1=0;
  20. fi;
  21. pickup pencircle scaled qqs;
  22. draw z0..z1
  23. enddef;
  24.  
  25. def larrow (expr char, delx, dely) =
  26. numeric rxa,rxb,rxc,rxd,rxe,rya,ryb,ryc,ryd,rye;
  27. numeric qht,qwd,absdely;
  28. if dely > 0:
  29.       if delx > dely: qwd# := qqw#; qht# := dely*qqw#/delx;
  30.               else: qht# := qqw#; qwd := delx*qqw#/dely;    fi;
  31.   else:
  32.       absdely=-dely;
  33.       if delx > absdely: qwd# := qqw#; qht# := absdely*qqw#/delx;
  34.               else: qht# := qqw#; qwd# := delx*qqw#/absdely;    fi;
  35. fi;
  36.  
  37. beginchar(char,qwd#,qht#,0pt#);
  38. if dely > 0: y0=0; else: y0=h; fi;
  39.  
  40. x0=0;
  41. rxa=arrowlen; rya=0;
  42. rxb=arrowlen; ryb=arrowht;
  43. rxc=arrowlen; ryc=-arrowht;
  44. rxd=.5rxa; ryd=.5ryb-arrowcurve;
  45. rxe=rxd; rye=-ryd;
  46.  
  47. numeric rlen;
  48. rlen = sqrt(delx*delx + dely*dely);
  49.  
  50. x1=(rxa*delx - rya*dely)/rlen;
  51. y1=(rxa*dely+rya*delx)/rlen + y0;
  52.  
  53. %x2=rxb; y2=ryb;
  54. x2=(rxb*delx - ryb*dely)/rlen;
  55. y2=(rxb*dely+ryb*delx)/rlen + y0;
  56.  
  57. %x3=rxc; y3=ryc;
  58. x3=(rxc*delx - ryc*dely)/rlen;
  59. y3=(rxc*dely+ryc*delx)/rlen + y0;
  60.  
  61. %x4=rxd; y4=ryd;
  62. x4=(rxd*delx - ryd*dely)/rlen;
  63. y4=(rxd*dely+ryd*delx)/rlen + y0;
  64.  
  65. %x5=rxe; y5=rye;
  66. x5=(rxe*delx - rye*dely)/rlen;
  67. y5=(rxe*dely+rye*delx)/rlen + y0;
  68.  
  69. fill z0..z5..z3--z1--z2..z4..z0--cycle
  70. enddef;
  71.  
  72. def rarrow (expr char, delx, dely) =
  73.  
  74. numeric rxa,rxb,rxc,rxd,rxe,rya,ryb,ryc,ryd,rye;
  75. numeric qht,qwd,absdely;
  76. if dely > 0:
  77.       if delx > dely: qwd# := qqw#; qht# := dely*qqw#/delx;
  78.               else: qht# := qqw#; qwd# := delx*qqw#/dely;    fi;
  79.   else:
  80.       absdely=-dely;
  81.       if delx > absdely: qwd# := qqw#; qht# := absdely*qqw#/delx;
  82.               else: qht# := qqw#; qwd# := delx*qqw#/absdely;    fi;
  83. fi;
  84.  
  85. beginchar(char,qwd#,qht#,0pt#);
  86.  
  87. if dely > 0: y0=h; else: y0=0; fi;
  88.  
  89. x0=w;
  90. rxa=-arrowlen; rya=0;
  91. rxb=rxa; ryb=arrowht;
  92. rxc=rxa; ryc=-arrowht;
  93. rxd=.5rxa; ryd=.5ryb-arrowcurve;
  94. rxe=rxd; rye=-ryd;
  95.  
  96. numeric rlen;
  97. rlen = sqrt(delx*delx + dely*dely);
  98.  
  99. %x1= rxa;y1=rya;   %%%% replace the following by rotations
  100. x1=(rxa*delx - rya*dely)/rlen + x0;
  101. y1=(rxa*dely+rya*delx)/rlen + y0;
  102.  
  103. %x2=rxb; y2=ryb;
  104. x2=(rxb*delx - ryb*dely)/rlen + x0;
  105. y2=(rxb*dely+ryb*delx)/rlen + y0;
  106.  
  107. %x3=rxc; y3=ryc;
  108. x3=(rxc*delx - ryc*dely)/rlen + x0;
  109. y3=(rxc*dely+ryc*delx)/rlen + y0;
  110.  
  111. %x4=rxd; y4=ryd;
  112. x4=(rxd*delx - ryd*dely)/rlen + x0;
  113. y4=(rxd*dely+ryd*delx)/rlen + y0;
  114.  
  115. %x5=rxe; y5=rye;
  116. x5=(rxe*delx - rye*dely)/rlen + x0;
  117. y5=(rxe*dely+rye*delx)/rlen + y0;
  118.  
  119. fill z0..z5..z3--z1--z2..z4..z0--cycle
  120. enddef;
  121.  
  122. % character code rules, for
  123. %    line(x,y):
  124. %         0 < x,y <= 6     :  8*(x-1) +  (y-1)
  125. %
  126. %    larrow(x,y):
  127. %         0 < x,y <= 4     : 8*(2x-1) + (2y-1)
  128. %         y=0              : '33
  129. %    rarrow(x,y):
  130. %         0 < x,y < 3      : 8*(3x-1) + (3y-1)
  131. %         0 < x <= 4, y=3  : 8*(2x-1) +      6
  132. %         0 < x < 4, y = 4 :   8*(2x) +      7
  133. %         x=3, 0 < y <=4   :      8*6 + (2y-1)
  134. %         x = 4, 0 < y < 4 :      8*7 +     2y
  135. %         y=0              : 55
  136. %
  137. %   for y < 0: value is 64 + value for (x, |y|)
  138. %
  139. %   up arrow: '66   down arrow: '77
  140.  
  141. fontdimen 1: 0,0,0,0,0,0,0,qqs#; % line thickness in points
  142. let cmchar=\; % cmchar should precede each character, for testing purposes
  143.  
  144.  
  145. font_coding_scheme:= "LaTeX line";
  146.  
  147. cmchar "Character '00";
  148. line(1,1);
  149. endchar;
  150.  
  151. cmchar "Character '11";
  152. larrow(9,1,1);
  153. endchar;
  154.  
  155. cmchar "Character '22";
  156. rarrow(18,1,1);
  157. endchar;
  158.  
  159. cmchar "Character '01";
  160. line(1,2);
  161. endchar;
  162.  
  163. cmchar "Character '13";
  164. larrow(11,1,2);
  165. endchar;
  166.  
  167. cmchar "Character '25";
  168. rarrow(21,1,2);
  169. endchar;
  170.  
  171. cmchar "Character '02";
  172. line(1,3);
  173. endchar;
  174.  
  175. cmchar "Character '15";
  176. larrow(13,1,3);
  177. endchar;
  178.  
  179. cmchar "Character '16";
  180. rarrow(14,1,3);
  181. endchar;
  182.  
  183. cmchar "Character '03";
  184. line(1,4);
  185. endchar;
  186.  
  187. cmchar "Character '17";
  188. larrow(15,1,4);
  189. endchar;
  190.  
  191. cmchar "Character '27";
  192. rarrow(23,1,4);
  193. endchar;
  194.  
  195. cmchar "Character '04";
  196. line(1,5);
  197. endchar;
  198.  
  199. cmchar "Character '05";
  200. line(1,6);
  201. endchar;
  202.  
  203. cmchar "Character '10";
  204. line(2,1);
  205. endchar;
  206.  
  207. cmchar "Character '31";
  208. larrow(25,2,1);
  209. endchar;
  210.  
  211. cmchar "Character '52";
  212. rarrow(42,2,1);
  213. endchar;
  214.  
  215. cmchar "Character '12";
  216. line(2,3);
  217. endchar;
  218.  
  219. cmchar "Character '35";
  220. larrow(29,2,3);
  221. endchar;
  222.  
  223. cmchar "Character '36";
  224. rarrow(30,2,3);
  225. endchar;
  226.  
  227. cmchar "Character '14";
  228. line(2,5);
  229. endchar;
  230.  
  231. cmchar "Character '20";
  232. line(3,1);
  233. endchar;
  234.  
  235. cmchar "Character '51";
  236. larrow(41,3,1);
  237. endchar;
  238.  
  239. cmchar "Character '61";
  240. rarrow(49,3,1);
  241. endchar;
  242.  
  243. cmchar "Character '21";
  244. line(3,2);
  245. endchar;
  246.  
  247. cmchar "Character '53";
  248. larrow(43,3,2);
  249. endchar;
  250.  
  251. cmchar "Character '63";
  252. rarrow(51,3,2);
  253. endchar;
  254.  
  255. cmchar "Character '23";
  256. line(3,4);
  257. endchar;
  258.  
  259. cmchar "Character '57";
  260. larrow(47,3,4);
  261. endchar;
  262.  
  263. cmchar "Character '67";
  264. rarrow(55,3,4);
  265. endchar;
  266.  
  267. cmchar "Character '24";
  268. line(3,5);
  269. endchar;
  270.  
  271. cmchar "Character '30";
  272. line(4,1);
  273. endchar;
  274.  
  275. cmchar "Character '71";
  276. larrow(57,4,1);
  277. endchar;
  278.  
  279. cmchar "Character '72";
  280. rarrow(58,4,1);
  281. endchar;
  282.  
  283. cmchar "Character '32";
  284. line(4,3);
  285. endchar;
  286.  
  287. cmchar "Character '75";
  288. larrow(61,4,3);
  289. endchar;
  290.  
  291. cmchar "Character '76";
  292. rarrow(62,4,3);
  293. endchar;
  294.  
  295. cmchar "Character '34";
  296. line(4,5);
  297. endchar;
  298.  
  299. cmchar "Character '40";
  300. line(5,1);
  301. endchar;
  302.  
  303. cmchar "Character '41";
  304. line(5,2);
  305. endchar;
  306.  
  307. cmchar "Character '42";
  308. line(5,3);
  309. endchar;
  310.  
  311. cmchar "Character '43";
  312. line(5,4);
  313. endchar;
  314.  
  315. cmchar "Character '45";
  316. line(5,6);
  317. endchar;
  318.  
  319. cmchar "Character '50";
  320. line(6,1);
  321. endchar;
  322.  
  323. cmchar "Character '54";
  324. line(6,5);
  325. endchar;
  326.  
  327. cmchar "Character '100";
  328. line(1,-1);
  329. endchar;
  330.  
  331. cmchar "Character '111";
  332. larrow(73,1,-1);
  333. endchar;
  334.  
  335. cmchar "Character '122";
  336. rarrow(82,1,-1);
  337. endchar;
  338.  
  339. cmchar "Character '101";
  340. line(1,-2);
  341. endchar;
  342.  
  343. cmchar "Character '113";
  344. larrow(75,1,-2);
  345. endchar;
  346.  
  347. cmchar "Character '125";
  348. rarrow(85,1,-2);
  349. endchar;
  350.  
  351. cmchar "Character '102";
  352. line(1,-3);
  353. endchar;
  354.  
  355. cmchar "Character '115";
  356. larrow(77,1,-3);
  357. endchar;
  358.  
  359. cmchar "Character '116";
  360. rarrow(78,1,-3);
  361. endchar;
  362.  
  363. cmchar "Character '103";
  364. line(1,-4);
  365. endchar;
  366.  
  367. cmchar "Character '117";
  368. larrow(79,1,-4);
  369. endchar;
  370.  
  371. cmchar "Character '127";
  372. rarrow(87,1,-4);
  373. endchar;
  374.  
  375. cmchar "Character '104";
  376. line(1,-5);
  377. endchar;
  378.  
  379. cmchar "Character '105";
  380. line(1,-6);
  381. endchar;
  382.  
  383. cmchar "Character '110";
  384. line(2,-1);
  385. endchar;
  386.  
  387. cmchar "Character '131";
  388. larrow(89,2,-1);
  389. endchar;
  390.  
  391. cmchar "Character '152";
  392. rarrow(106,2,-1);
  393. endchar;
  394.  
  395. cmchar "Character '112";
  396. line(2,-3);
  397. endchar;
  398.  
  399. cmchar "Character '135";
  400. larrow(93,2,-3);
  401. endchar;
  402.  
  403. cmchar "Character '136";
  404. rarrow(94,2,-3);
  405. endchar;
  406.  
  407. cmchar "Character '114";
  408. line(2,-5);
  409. endchar;
  410.  
  411. cmchar "Character '120";
  412. line(3,-1);
  413. endchar;
  414.  
  415. cmchar "Character '151";
  416. larrow(105,3,-1);
  417. endchar;
  418.  
  419. cmchar "Character '161";
  420. rarrow(113,3,-1);
  421. endchar;
  422.  
  423. cmchar "Character '121";
  424. line(3,-2);
  425. endchar;
  426.  
  427. cmchar "Character '153";
  428. larrow(107,3,-2);
  429. endchar;
  430.  
  431. cmchar "Character '163";
  432. rarrow(115,3,-2);
  433. endchar;
  434.  
  435. cmchar "Character '123";
  436. line(3,-4);
  437. endchar;
  438.  
  439. cmchar "Character '157";
  440. larrow(111,3,-4);
  441. endchar;
  442.  
  443. cmchar "Character '167";
  444. rarrow(119,3,-4);
  445. endchar;
  446.  
  447. cmchar "Character '124";
  448. line(3,-5);
  449. endchar;
  450.  
  451. cmchar "Character '130";
  452. line(4,-1);
  453. endchar;
  454.  
  455. cmchar "Character '171";
  456. larrow(121,4,-1);
  457. endchar;
  458.  
  459. cmchar "Character '172";
  460. rarrow(122,4,-1);
  461. endchar;
  462.  
  463. cmchar "Character '132";
  464. line(4,-3);
  465. endchar;
  466.  
  467. cmchar "Character '175";
  468. larrow(125,4,-3);
  469. endchar;
  470.  
  471. cmchar "Character '176";
  472. rarrow(126,4,-3);
  473. endchar;
  474.  
  475. cmchar "Character '134";
  476. line(4,-5);
  477. endchar;
  478.  
  479. cmchar "Character '140";
  480. line(5,-1);
  481. endchar;
  482.  
  483. cmchar "Character '141";
  484. line(5,-2);
  485. endchar;
  486.  
  487. cmchar "Character '142";
  488. line(5,-3);
  489. endchar;
  490.  
  491. cmchar "Character '143";
  492. line(5,-4);
  493. endchar;
  494.  
  495. cmchar "Character '145";
  496. line(5,-6);
  497. endchar;
  498.  
  499. cmchar "Character '150";
  500. line(6,-1);
  501. endchar;
  502.  
  503. cmchar "Character '154";
  504. line(6,-5);
  505. endchar;
  506.  
  507. %%%Horizontal arrows:
  508.  
  509.  
  510. cmchar "Character '33";
  511. larrow(27,1,0);
  512. endchar;
  513.  
  514. cmchar "Character '55";  %right arrow
  515. beginchar(45,qqw#,qqw#,0pt#);
  516. x0=w; y0=0;
  517. x1=x0-arrowlen; y1=0;
  518. x2=x1; y2=arrowht;
  519. x3=x1; y3=-y2;
  520. x4=.5[x0,x1]; y4=.5y2-arrowcurve;
  521. x5=x4; y5=-y4;
  522. fill z0..z4..z2--z1--z3..z5..z0--cycle;
  523. endchar;
  524.  
  525. %%%vertical arrows
  526.  
  527.  
  528. cmchar "Character '66";  %up arrow
  529. beginchar(54,qqw#,qqw#,0pt#);
  530. x0=0; y0=w;
  531. y1=y0-arrowlen; x1=0;
  532. y2=y1; x2=arrowht;
  533. y3=y1; x3=-x2;
  534. y4=.5[y0,y1]; x4=.5x2-arrowcurve;
  535. y5=y4; x5=-x4;
  536. fill z0..z4..z2--z1--z3..z5..z0--cycle;
  537. endchar;
  538.  
  539.  
  540. cmchar "Character '77"; %down arrow
  541. beginchar(63,qqw#,qqw#,0pt#);
  542. x0=0; y0=0;
  543. y1=arrowlen; x1=0;
  544. y2=y1; x2=arrowht;
  545. y3=y1; x3=-x2;
  546. y4=.5y1; x4=.5x2-arrowcurve;
  547. y5=y4; x5=-x4;
  548. fill z0..z4..z2--z1--z3..z5..z0--cycle;
  549. endchar;
  550.  
  551. bye
  552.