home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oakland CPM Archive
/
oakcpm.iso
/
cpm
/
txtutl
/
magic.lbr
/
MAGIC.BAS
next >
Wrap
BASIC Source File
|
1987-03-08
|
6KB
|
228 lines
10 REM ***************************************************
20 REM T H E M A G I C M A R Q U E E
30 REM BY GEORGE STEWARD
40 REM POPULAR COMPUTING NOV. 84, PROGRAM FACTORY
50 REM
60 REM EDITED BY M. SKAL, 9/27/84
70 REM ****************************************************
80 '
90 S1$=" "
100 NU$=""
110 UD$="@": 'UNIFORM DENSITY FILL CHARACTER
120 READ NC
130 CL$=NU$
140 LZ=12 : 'MAX. NO. OF LINES IN MESSAGE
150 DIM CH$(NC,7),M1(3),M2(5),EM$(LZ)
160 FOR J=1 TO 3
170 M1(J)=2^((J-1)*5)
180 NEXT J
190 FOR J=1 TO 5
200 M2(J)=2^(J-1)
210 NEXT J
220 PRINT CHR$(26)
230 PRINT"********************************************"
240 PRINT" T H E M A G I C M A R Q U E E
250 PRINT"********************************************"
260 PRINT
270 INPUT "HORIZONTAL FACTOR (1-10): ",HT
280 IF HT<1 OR HT>10 THEN 270
290 INPUT "VERTICAL FACTOR (1-10) : ",VT
300 IF VT<1 OR HT>10 THEN 290
310 PRINT
320 PRINT"SELECT CHARACTER DENSITY."
330 PRINT"UNIFORM=1 VARIABLE=2"
340 PRINT
350 INPUT "ENTER DENSITY CODE : ",UV
360 IF UV<>1 AND UV<>2 THEN 320
370 PRINT
380 PRINT"LOADING ";NC;" CHARACTER PATTERNS . . . "
390 FOR C=1 TO NC
400 READ C$
410 PRINT C$;
420 CL$=CL$+C$
430 IF UV=1 THEN FL$=UD$
440 IF UV=2 THEN FL$=C$
450 FOR S=1 TO 3
460 READ SV
470 FOR N=3 TO 1 STEP -1
480 NV=INT(SV/M1(N))
490 SV=SV-NV*M1(N)
500 IX=(S-1)*3+N
510 IF IX>7 THEN 620 : 'SKIP
520 L$=NU$
530 FOR P=5 TO 1 STEP -1
540 CV=INT(NV/M2(P))
550 NV=NV-CV*M2(P)
560 FOR T=1 TO HT
570 IF CV=0 THEN L$=L$+S1$
580 IF CV<>0 THEN L$=L$+FL$
590 NEXT T
600 NEXT P
610 CH$(C,IX)=L$
620 NEXT N
630 NEXT S
640 NEXT C
650 PRINT
660 CW=LEN(CH$(1,1))
670 CS$=STRING$(CW,S1$)
680 LS=INT(CW/5)
690 LS$=STRING$(LS,S1$)
700 TW=CW+LS
710 PRINT
720 PRINT"MAXIMUM LINE WIDTH OF OUTPUT DEV. (";CW;" TO 132) :";
730 INPUT LW
740 IF LW<CW OR LW>132 THEN 720
750 MC=INT(LW/TW)
760 MC=MC+INT((LW-MC*TW)/CW)
770 PRINT
780 PRINT"HOW MANY LINES ARE IN MESSAGE ? (1-";LZ;") : ";
790 INPUT LL
800 IF LL<1 OR LL>LZ THEN 780
810 FOR ML=1 TO LL
820 EM$(ML)=NU$
830 PRINT
840 PRINT"ENTER LINE # ";ML
850 PRINT"(MAX LEN. = ";MC;") CHARACTERS."
860 M$=""
870 INPUT M$
880 IF M$=NU$ THEN M$=S1$ : 'DON'T ALLOW NULLSTRING
890 IF LEN(M$)<=MC THEN 920
900 PRINT"LINE IS TOO LONG! PLEASE REENTER."
910 GOTO 830
920 PRINT"CREATING EXPANDED LINE IMAGE. PLEASE WAIT . . ."
930 FOR C=1 TO LEN(M$)
940 C$=MID$(M$,C,1)
950 P=INSTR(1,CL$,C$)
960 P$=RIGHT$(S1$+STR$(P),2)
970 EM$(ML)=EM$(ML)+P$
980 NEXT C
990 PRINT
1000 NEXT ML
1010 PRINT : PRINT
1020 PRINT"1-PRINT ONE COPY"
1030 PRINT"2-PRINT CONTINOUSLY"
1040 PRINT"3-NEW MESSAGE"
1050 PRINT"4-NEW SIZE"
1060 PRINT"5-END"
1070 PRINT
1080 INPUT"SELECT 1-5 : ",A
1090 IF A<1 OR A>5 THEN 1010
1100 ON A GOTO 1130,1210,720,1110,1120
1110 RESTORE:READ NC: GOTO 160
1120 PRINT:PRINT"***** BYE ! *****" :PRINT :END
1130 PRINT
1140 INPUT"SELECT: 1-CRT, 2-PRINTER, 3-DISK : ",DV
1150 IF DV<1 AND DV>3 THEN 1130
1160 PRINT
1170 ON DV GOSUB 1240,2000,2900
1180 PRINT"PRESS ANY KEY TO CONTINUE !";
1190 IF INKEY$=NU$ THEN 1190
1200 GOTO 1010
1210 GOSUB 1240
1220 IF INKEY$=NU$ THEN 1210
1230 GOTO 1010
1240 FOR ML=1 TO LL 'OUTPUT TO CRT ROUTINE
1250 FOR L=1 TO 7
1260 FOR T=1 TO VT
1270 FOR P=1 TO LEN(EM$(ML))/2
1280 PV=VAL(MID$(EM$(ML),(P*2)-1,2))
1290 IF PV=0 THEN PRINT CS$;
1300 IF PV<>0 THEN PRINT CH$(PV,L);
1310 IF P<LEN(EM$(ML))/2 THEN PRINT LS$;
1320 NEXT P
1330 PRINT
1340 NEXT T
1350 NEXT L
1360 FOR T=1 TO VT
1370 PRINT
1380 NEXT T
1390 NEXT ML
1400 RETURN
1500 DATA 40
1510 DATA "$", 20964, 30894,4
1520 DATA "+", 4224, 4255,0
1530 DATA "-", 0, 14,0
1540 DATA ".", 0, 14464,4
1550 DATA "0", 22143, 17977,31
1560 DATA "1", 20868, 4228,31
1570 DATA "2", 1582, 8322,31
1580 DATA "3", 2111, 17446,14
1590 DATA "4", 10434, 2143,2
1600 DATA "5", 16927, 1086,30
1610 DATA "6", 16646, 17982,14
1620 DATA "7", 2111, 4228,4
1630 DATA "8", 17966, 17966,14
1640 DATA "9", 17966, 4175,8
1650 DATA "A", 17732, 17983,17
1660 DATA "B", 17982, 17982,31
1670 DATA "C", 16942, 17936,14
1680 DATA "D", 17982, 17969,30
1690 DATA "E", 16927, 16926,31
1700 DATA "F", 16927, 16926,16
1710 DATA "G", 16911, 18032,15
1720 DATA "H", 17969, 17983,17
1730 DATA "I", 4255, 4228,31
1740 DATA "J", 2127, 18498,12
1750 DATA "K", 21073, 19096,17
1760 DATA "L", 16912, 16912,31
1770 DATA "M", 22385, 17969,17
1780 DATA "N", 22321, 20149,17
1790 DATA "O", 17966, 17969,14
1800 DATA "P", 17982, 16926,16
1810 DATA "Q", 17983, 19121,29
1820 DATA "R", 17982, 19102,17
1830 DATA "S", 16911, 1070,30
1840 DATA "T", 4255, 4228,4
1850 DATA "U", 17969, 17969,15
1860 DATA "V", 17969, 10801,4
1870 DATA "W", 17969, 28337,17
1880 DATA "X", 4433, 17732,17
1890 DATA "Y", 10801, 4228,4
1900 DATA "Z", 2111, 8324,31
2000 FOR ML=1 TO LL 'OUTPUT TO PRINTER ROUTINE
2010 FOR L=1 TO 7
2020 FOR T=1 TO VT
2030 FOR P=1 TO LEN(EM$(ML))/2
2040 PV=VAL(MID$(EM$(ML),(P*2)-1,2))
2050 IF PV=0 THEN LPRINT CS$;
2060 IF PV<>0 THEN LPRINT CH$(PV,L);
2070 IF P<LEN(EM$(ML))/2 THEN LPRINT LS$;
2080 NEXT P
2090 LPRINT
2100 NEXT T
2110 NEXT L
2120 FOR T=1 TO VT
2130 LPRINT
2140 NEXT T
2150 NEXT ML
2160 RETURN
2900 PRINT 'OUTPUT TO FILE ROUTINE
2910 INPUT "WHAT IS THE FILENAME :";DN$
2920 PRINT
3000 OPEN "O",#1, DN$
3010 FOR ML=1 TO LL
3020 FOR L=1 TO 7
3030 FOR T=1 TO VT
3040 FOR P=1 TO LEN(EM$(ML))/2
3050 PV=VAL(MID$(EM$(ML),(P*2)-1,2))
3060 IF PV=0 THEN PRINT #1, CS$;
3070 IF PV<>0 THEN PRINT #1, CH$(PV,L);
3080 IF P<LEN(EM$(ML))/2 THEN PRINT #1, LS$;
3090 NEXT P
3100 PRINT #1,
3110 NEXT T
3120 NEXT L
3130 FOR T=1 TO VT
3140 PRINT #1,
3150 NEXT T
3160 NEXT ML
3170 CLOSE #1
3180 PRINT "*** MESSAGE WRITTEN TO FILE : ";DN$;" .***"
3190 PRINT
3200 RETURN
3150 NEXT T
3160 NEXT ML
3170 CLOSE #1
3180 PRINT "*** MESSAGE WRITTEN TO FILE : ";DN$;" .***"
3190 PRINT