pr-text.red 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. % 8 * 12 Vector Characters
  2. CV := MkVect(127)$
  3. BlankChar := 'NIL$
  4. % Labeled Points on Rectangle (8 x 12 )
  5. % C4 Q6 S3 Q5 C3
  6. %
  7. %
  8. % Q7 M3 Q4
  9. %
  10. %
  11. % S4 M4 M0 M2 S2
  12. %
  13. %
  14. % Q8 M1 Q3
  15. %
  16. %
  17. % C1 Q1 S1 Q2 C2
  18. % Corners:
  19. C1:={0,0}$ C2 := {8,0}$ C4:={0,12}$ C3:= {8,12}$
  20. % Side MidPoints:
  21. S1 := {4,0}$ S3 := {4,12}$
  22. S4 := {0,6}$ S2 := {8,6}$
  23. % Middle:
  24. M0 := {4,6}$
  25. M1 := {4,3}$
  26. M2 := {6,6}$
  27. M3 := {4,9}$
  28. M4 := {2,6}$
  29. % Side Quarter Points:
  30. Q1 := {2,0}$ Q2 := {6,0}$
  31. Q3 := {8,3}$ Q4 := {8,9}$
  32. Q5 := {6,12}$ Q6 := {2,12}$
  33. Q7 := {0,9}$ Q8 := {0,3}$
  34. For i:=0:127 do CV[I]:=BlankChar;
  35. % UpperCase:
  36. CV[Char A] := C1 _ S3 _ C2 & M4 _ M2$
  37. CV[Char B] := C1 _ C4 _ Q5 _ Q4 _ M2 _ S4 & M2 _ Q3 _ Q2 _ C1 $
  38. CV[Char C] := Q3 _ Q2 _ Q1 _ Q8 _ Q7 _ Q6 _ Q5 _ Q4$
  39. CV[Char D] := C1 _ C4 _ Q5 _ Q4 _ Q3 _ Q2 _ C1$
  40. CV[Char E] := C3 _ C4 _ C1 _ C2 & S4 _ S2$
  41. CV[Char F] := C3 _ C4 _ C1 & S4 _ S2$
  42. CV[Char G] := M0 _ S2 _ Q2 _ Q1 _ Q8 _ Q7 _ Q6 _ Q5 _ Q4$
  43. CV[Char H] := C4 _ C1 & S4 _ S2 & C3 _ C2$
  44. CV[Char I] := S1 _ S3$
  45. CV[Char J] := C3 _ Q3 _ Q2 _ Q1 _ Q8$
  46. CV[Char K] := C4 _ C1 & C3 _ S4 _ C2$
  47. CV[Char L] := C4 _ C1 _ C2$
  48. CV[Char M] := C1 _ C4 _ M0 _ C3 _ C2$
  49. CV[Char N] := C1 _ C4 _ C2 _ C3$
  50. CV[Char O] := Q3 _ Q2 _ Q1 _ Q8 _ Q7 _ Q6 _ Q5 _ Q4 _ Q3$
  51. CV[Char P] := C1 _ C4 _ Q5 _ Q4 _ M2 _ S4$
  52. CV[Char Q] := Q3 _ Q2 _ Q1 _ Q8 _ Q7 _ Q6 _ Q5 _ Q4 _ Q3 & C2 _ M1$
  53. CV[Char R] := C1 _ C4 _ Q5 _ Q4 _ M2 _ S4 & M0 _ C2$
  54. CV[Char S] := Q4 _ Q5 _ Q6 _ Q7 _ M4 _ M2 _ Q3 _ Q2 _ Q1 _ Q8$
  55. CV[Char T] := C4 _ C3 & S3 _ S1$
  56. CV[Char U] := C4 _ Q8 _ Q1 _ Q2 _ Q3 _ C3$
  57. CV[Char V] := C4 _ S1 _ C3$
  58. CV[Char W] := C4 _ Q1 _ M0 _ Q2 _ C3$
  59. CV[Char X] := C1 _ C3 & C4 _ C2$
  60. CV[Char Y] := C4 _ M0 _ C3 & M0 _ S1$
  61. CV[Char Z] := C4 _ C3 _ C1 _ C2$
  62. % Lower Case, Alias for Now:
  63. CV[Char Lower A] := CV[Char A]$
  64. CV[Char Lower B] := CV[Char B]$
  65. CV[Char Lower C] := CV[Char C]$
  66. CV[Char Lower D] := CV[Char D]$
  67. CV[Char Lower E] := CV[Char E]$
  68. CV[Char Lower F] := CV[Char F]$
  69. CV[Char Lower G] := CV[Char G]$
  70. CV[Char Lower H] := CV[Char H]$
  71. CV[Char Lower I] := CV[Char I]$
  72. CV[Char Lower J] := CV[Char J]$
  73. CV[Char Lower K] := CV[Char K]$
  74. CV[Char Lower L] := CV[Char L]$
  75. CV[Char Lower M] := CV[Char M]$
  76. CV[Char Lower N] := CV[Char N]$
  77. CV[Char Lower O] := CV[Char O]$
  78. CV[Char Lower P] := CV[Char P]$
  79. CV[Char Lower Q] := CV[Char Q]$
  80. CV[Char Lower R] := CV[Char R]$
  81. CV[Char Lower S] := CV[Char S]$
  82. CV[Char Lower T] := CV[Char T]$
  83. CV[Char Lower U] := CV[Char U]$
  84. CV[Char Lower V] := CV[Char V]$
  85. CV[Char Lower W] := CV[Char W]$
  86. CV[Char Lower X] := CV[Char X]$
  87. CV[Char Lower Y] := CV[Char Y]$
  88. CV[Char Lower Z] := CV[Char Z]$
  89. % Digits:
  90. CV[Char 0] := CV[Char O]$
  91. CV[Char 1] := CV[Char I]$
  92. CV[Char 2] := Q7 _ Q6 _ Q5 _ Q4 _ M0 _ C1 _ C2$
  93. CV[Char 3] := C4 _ C3 _ M0 _ Q3 _ Q2 _ Q1 _ Q8$
  94. CV[Char 4] := S1 _ S3 _ S4 _ S2$
  95. CV[Char 5] := C3 _ C4 _ S4 _ M0 _ Q3 _ Q2 _ Q1 _ Q8$
  96. CV[Char 6] := Q4 _ Q5 _ Q6 _ Q7 _ Q8 _ Q1 _ Q2 _ Q3 _
  97. M2 _ M4 _ Q8$
  98. CV[Char 7] := C4 _ C3 _ S1$
  99. CV[Char 8] := M0 _ M4 _ Q8 _ Q1 _ Q2 _ Q3 _ M2 _ M0
  100. & M2 _ Q4 _ Q5 _ Q6 _ Q7 _ M4$
  101. CV[Char 9] := Q8 _ Q1 _ Q2 _ Q3 _ Q4 _ Q5 _
  102. Q6 _ Q7 _ M4 _ M2 _ Q4$
  103. % Some Special Chars:
  104. CV[Char !+ ] := S1 _ S3 & S4 _ S2$
  105. CV[Char !- ] := S4 _ S2 $
  106. CV[Char !* ] := S1 _ S3 & S4 _ S2 & C1 _ C3 & C4 _ C2 $
  107. CV[Char !/ ] := C1 _ C3 $
  108. CV[Char !\ ] := C4 _ C2 $
  109. CV[Char !( ] := Q6 _ Q7 _ Q8 _ Q1 $
  110. CV[Char !) ] := Q5 _ Q4 _ Q3 _ Q2 $
  111. CV[Char ![ ] := Q6 _ C4 _ C1 _ Q1$
  112. CV[Char !] ] := Q5 _ C3 _ C2 _ Q2$
  113. CV[Char != ] := Q7 _ Q4 & Q8 _ Q3 $
  114. % Some Simple Display Routines:
  115. Xshift := Xmove(10)$
  116. Yshift := Ymove(15)$
  117. Procedure ShowString(S);
  118. <<Graphon();
  119. ShowString1(S,Global!.Transform);
  120. Graphoff()>>;
  121. Procedure ShowString1(S,Current!.Transform);
  122. Begin scalar i,ch;
  123. For i:=0:Size S
  124. do <<Draw1(CV[S[i]],Current!.Transform);
  125. Current!.Transform := Mat!*mat(XShift,Current!.TRansform)>>;
  126. End;
  127. Procedure C x;
  128. if x:=CV[x] then EShow x;
  129. Procedure FullTest();
  130. <<Global!.Transform := MAT!*1;
  131. ShowString "ABCDEFGHIJKLMNOPQRTSUVWXYZ 0123456789";
  132. NIL>>;
  133. Procedure SpeedTest();
  134. <<Global!.Transform := Mat!*1;
  135. For i:=0:127 do C i;
  136. NIL>>;
  137. Procedure SlowTest();
  138. <<Global!.Transform := Mat!*1;
  139. For i:=0:127 do
  140. <<C i;
  141. Delay()>>;
  142. NIL>>;
  143. Procedure Delay;
  144. For i:=1:500 do nil;
  145. Procedure Text(S);
  146. List('TEXT,S);
  147. Put('TEXT,'PBINTRP,'DrawTEXT)$
  148. Procedure DrawText(StartPoint,S); %. Draw a Text String
  149. Begin scalar MoveP;
  150. If IDP StartPoint then StartPoint := EVAL StartPoint$
  151. S := CAR1 S$
  152. If IDP S then
  153. S := EVAL S$
  154. MoveP:=PositionAt StartPoint;
  155. ShowString1(S,Mat!*Mat(MoveP,Current!.Transform));
  156. Return NIL;
  157. end$
  158. Procedure PositionAt StartPoint; % return A matrix to set relative Origin
  159. << If IDP StartPoint then StartPoint := EVAL StartPoint$
  160. Mat16(1,0,0,StartPoint[1],
  161. 0,1,0,StartPoint[2],
  162. 0,0,1,StartPoint[3],
  163. 0,0,0,StartPoint[4])>>;