home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / txtutl / magic.lbr / MAGIC.BAS next >
BASIC Source File  |  1987-03-08  |  6KB  |  228 lines

  1. 10 REM ***************************************************
  2. 20 REM          T H E  M A G I C  M A R Q U E E
  3. 30 REM                 BY GEORGE STEWARD
  4. 40 REM      POPULAR COMPUTING NOV. 84, PROGRAM FACTORY
  5. 50 REM
  6. 60 REM      EDITED BY M. SKAL, 9/27/84
  7. 70 REM ****************************************************
  8. 80 '
  9. 90 S1$=" "
  10. 100 NU$=""
  11. 110 UD$="@":     'UNIFORM DENSITY FILL CHARACTER
  12. 120 READ NC
  13. 130 CL$=NU$
  14. 140 LZ=12 :      'MAX. NO. OF LINES IN MESSAGE
  15. 150 DIM CH$(NC,7),M1(3),M2(5),EM$(LZ)
  16. 160 FOR J=1 TO 3
  17. 170 M1(J)=2^((J-1)*5)
  18. 180 NEXT J
  19. 190 FOR J=1 TO 5
  20. 200 M2(J)=2^(J-1)
  21. 210 NEXT J
  22. 220 PRINT CHR$(26)
  23. 230 PRINT"********************************************"
  24. 240 PRINT"    T H E  M A G I C  M A R Q U E E
  25. 250 PRINT"********************************************"
  26. 260 PRINT
  27. 270 INPUT "HORIZONTAL FACTOR (1-10): ",HT
  28. 280 IF HT<1 OR HT>10 THEN 270
  29. 290 INPUT "VERTICAL FACTOR (1-10)  : ",VT
  30. 300 IF VT<1 OR HT>10 THEN 290
  31. 310 PRINT
  32. 320 PRINT"SELECT CHARACTER DENSITY."
  33. 330 PRINT"UNIFORM=1  VARIABLE=2"
  34. 340 PRINT
  35. 350 INPUT "ENTER DENSITY CODE : ",UV
  36. 360 IF UV<>1 AND UV<>2 THEN 320
  37. 370 PRINT
  38. 380 PRINT"LOADING ";NC;" CHARACTER PATTERNS . . . "
  39. 390 FOR C=1 TO NC
  40. 400 READ C$
  41. 410 PRINT C$;
  42. 420 CL$=CL$+C$
  43. 430 IF UV=1 THEN FL$=UD$
  44. 440 IF UV=2 THEN FL$=C$
  45. 450 FOR S=1 TO 3
  46. 460 READ SV
  47. 470 FOR N=3 TO 1 STEP -1
  48. 480 NV=INT(SV/M1(N))
  49. 490 SV=SV-NV*M1(N)
  50. 500 IX=(S-1)*3+N
  51. 510 IF IX>7 THEN 620 :    'SKIP
  52. 520 L$=NU$
  53. 530 FOR P=5 TO 1 STEP -1
  54. 540 CV=INT(NV/M2(P))
  55. 550 NV=NV-CV*M2(P)
  56. 560    FOR T=1 TO HT
  57. 570    IF CV=0 THEN L$=L$+S1$
  58. 580    IF CV<>0 THEN L$=L$+FL$
  59. 590    NEXT T
  60. 600 NEXT P
  61. 610 CH$(C,IX)=L$
  62. 620 NEXT N
  63. 630 NEXT S
  64. 640 NEXT C
  65. 650 PRINT
  66. 660 CW=LEN(CH$(1,1))
  67. 670 CS$=STRING$(CW,S1$)
  68. 680 LS=INT(CW/5)
  69. 690 LS$=STRING$(LS,S1$)
  70. 700 TW=CW+LS
  71. 710 PRINT
  72. 720 PRINT"MAXIMUM LINE WIDTH OF OUTPUT DEV. (";CW;" TO 132) :";
  73. 730 INPUT LW
  74. 740 IF LW<CW OR LW>132 THEN 720
  75. 750 MC=INT(LW/TW)
  76. 760 MC=MC+INT((LW-MC*TW)/CW)
  77. 770 PRINT
  78. 780 PRINT"HOW MANY LINES ARE IN MESSAGE ? (1-";LZ;") : ";
  79. 790 INPUT LL
  80. 800 IF LL<1 OR LL>LZ THEN 780
  81. 810 FOR ML=1 TO LL
  82. 820 EM$(ML)=NU$
  83. 830 PRINT
  84. 840 PRINT"ENTER LINE # ";ML
  85. 850 PRINT"(MAX LEN. = ";MC;") CHARACTERS."
  86. 860 M$=""
  87. 870 INPUT M$
  88. 880 IF M$=NU$ THEN M$=S1$ :    'DON'T ALLOW NULLSTRING
  89. 890 IF LEN(M$)<=MC THEN 920
  90. 900 PRINT"LINE IS TOO LONG! PLEASE REENTER."
  91. 910 GOTO 830
  92. 920 PRINT"CREATING EXPANDED LINE IMAGE. PLEASE WAIT . . ."
  93. 930 FOR C=1 TO LEN(M$)
  94. 940 C$=MID$(M$,C,1)
  95. 950 P=INSTR(1,CL$,C$)
  96. 960 P$=RIGHT$(S1$+STR$(P),2)
  97. 970 EM$(ML)=EM$(ML)+P$
  98. 980 NEXT C
  99. 990 PRINT
  100. 1000 NEXT ML
  101. 1010 PRINT : PRINT
  102. 1020 PRINT"1-PRINT ONE COPY"
  103. 1030 PRINT"2-PRINT CONTINOUSLY"
  104. 1040 PRINT"3-NEW MESSAGE"
  105. 1050 PRINT"4-NEW SIZE"
  106. 1060 PRINT"5-END"
  107. 1070 PRINT
  108. 1080 INPUT"SELECT 1-5 : ",A
  109. 1090 IF A<1 OR A>5 THEN 1010
  110. 1100 ON A GOTO 1130,1210,720,1110,1120
  111. 1110 RESTORE:READ NC: GOTO 160
  112. 1120 PRINT:PRINT"***** BYE ! *****" :PRINT :END
  113. 1130 PRINT
  114. 1140 INPUT"SELECT: 1-CRT, 2-PRINTER, 3-DISK : ",DV
  115. 1150 IF DV<1 AND DV>3 THEN 1130
  116. 1160 PRINT
  117. 1170 ON DV GOSUB 1240,2000,2900
  118. 1180 PRINT"PRESS ANY KEY TO CONTINUE !";
  119. 1190 IF INKEY$=NU$ THEN 1190
  120. 1200 GOTO 1010
  121. 1210 GOSUB 1240
  122. 1220 IF INKEY$=NU$ THEN 1210
  123. 1230 GOTO 1010
  124. 1240 FOR ML=1 TO LL          'OUTPUT TO CRT ROUTINE
  125. 1250    FOR L=1 TO 7
  126. 1260       FOR T=1 TO VT
  127. 1270          FOR P=1 TO LEN(EM$(ML))/2
  128. 1280          PV=VAL(MID$(EM$(ML),(P*2)-1,2))
  129. 1290          IF PV=0 THEN PRINT CS$;
  130. 1300          IF PV<>0 THEN PRINT CH$(PV,L);
  131. 1310          IF P<LEN(EM$(ML))/2 THEN PRINT LS$;
  132. 1320          NEXT P
  133. 1330       PRINT
  134. 1340       NEXT T
  135. 1350    NEXT L
  136. 1360 FOR T=1 TO VT
  137. 1370 PRINT
  138. 1380 NEXT T
  139. 1390 NEXT ML
  140. 1400 RETURN
  141. 1500 DATA 40
  142. 1510 DATA "$", 20964, 30894,4
  143. 1520 DATA "+",  4224,  4255,0
  144. 1530 DATA "-",     0,    14,0
  145. 1540 DATA ".",     0, 14464,4
  146. 1550 DATA "0", 22143, 17977,31
  147. 1560 DATA "1", 20868,  4228,31
  148. 1570 DATA "2",  1582,  8322,31
  149. 1580 DATA "3",  2111, 17446,14
  150. 1590 DATA "4", 10434,  2143,2
  151. 1600 DATA "5", 16927,  1086,30
  152. 1610 DATA "6", 16646, 17982,14
  153. 1620 DATA "7",  2111,  4228,4
  154. 1630 DATA "8", 17966, 17966,14
  155. 1640 DATA "9", 17966,  4175,8
  156. 1650 DATA "A", 17732, 17983,17
  157. 1660 DATA "B", 17982, 17982,31
  158. 1670 DATA "C", 16942, 17936,14
  159. 1680 DATA "D", 17982, 17969,30
  160. 1690 DATA "E", 16927, 16926,31
  161. 1700 DATA "F", 16927, 16926,16
  162. 1710 DATA "G", 16911, 18032,15
  163. 1720 DATA "H", 17969, 17983,17
  164. 1730 DATA "I",  4255,  4228,31
  165. 1740 DATA "J",  2127, 18498,12
  166. 1750 DATA "K", 21073, 19096,17
  167. 1760 DATA "L", 16912, 16912,31
  168. 1770 DATA "M", 22385, 17969,17
  169. 1780 DATA "N", 22321, 20149,17
  170. 1790 DATA "O", 17966, 17969,14
  171. 1800 DATA "P", 17982, 16926,16
  172. 1810 DATA "Q", 17983, 19121,29
  173. 1820 DATA "R", 17982, 19102,17
  174. 1830 DATA "S", 16911,  1070,30
  175. 1840 DATA "T",  4255,  4228,4
  176. 1850 DATA "U", 17969, 17969,15
  177. 1860 DATA "V", 17969, 10801,4
  178. 1870 DATA "W", 17969, 28337,17
  179. 1880 DATA "X",  4433, 17732,17
  180. 1890 DATA "Y", 10801,  4228,4
  181. 1900 DATA "Z",  2111,  8324,31
  182. 2000 FOR ML=1 TO LL        'OUTPUT TO PRINTER ROUTINE
  183. 2010    FOR L=1 TO 7
  184. 2020       FOR T=1 TO VT
  185. 2030          FOR P=1 TO LEN(EM$(ML))/2
  186. 2040          PV=VAL(MID$(EM$(ML),(P*2)-1,2))
  187. 2050          IF PV=0 THEN LPRINT CS$;
  188. 2060          IF PV<>0 THEN LPRINT CH$(PV,L);
  189. 2070          IF P<LEN(EM$(ML))/2 THEN LPRINT LS$;
  190. 2080          NEXT P
  191. 2090       LPRINT
  192. 2100       NEXT T
  193. 2110    NEXT L
  194. 2120 FOR T=1 TO VT
  195. 2130 LPRINT
  196. 2140 NEXT T
  197. 2150 NEXT ML
  198. 2160 RETURN
  199. 2900 PRINT                        'OUTPUT TO FILE ROUTINE
  200. 2910 INPUT "WHAT IS THE FILENAME :";DN$
  201. 2920 PRINT 
  202. 3000 OPEN "O",#1, DN$
  203. 3010 FOR ML=1 TO LL          
  204. 3020    FOR L=1 TO 7
  205. 3030       FOR T=1 TO VT
  206. 3040          FOR P=1 TO LEN(EM$(ML))/2
  207. 3050          PV=VAL(MID$(EM$(ML),(P*2)-1,2))
  208. 3060          IF PV=0 THEN PRINT #1, CS$;
  209. 3070          IF PV<>0 THEN PRINT #1, CH$(PV,L);
  210. 3080          IF P<LEN(EM$(ML))/2 THEN PRINT #1, LS$;
  211. 3090          NEXT P
  212. 3100       PRINT #1,
  213. 3110       NEXT T
  214. 3120    NEXT L
  215. 3130 FOR T=1 TO VT
  216. 3140 PRINT #1,
  217. 3150 NEXT T
  218. 3160 NEXT ML
  219. 3170 CLOSE #1
  220. 3180 PRINT "*** MESSAGE WRITTEN TO FILE : ";DN$;" .***"
  221. 3190 PRINT 
  222. 3200 RETURN
  223. 
  224. 3150 NEXT T
  225. 3160 NEXT ML
  226. 3170 CLOSE #1
  227. 3180 PRINT "*** MESSAGE WRITTEN TO FILE : ";DN$;" .***"
  228. 3190 PRINT