home *** CD-ROM | disk | FTP | other *** search
/ Generous Efforts of Many / gemcd.zip / GEM.CD.A.po / FEATURES:BEAGLE / UTIL.CITY.SHK / UTILITY.CITY / SCREENWRITER.bas < prev    next >
BASIC Source File  |  2000-01-01  |  12KB  |  154 lines

  1. 10  REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H>==================<CTRL-M>SCREENWRITER<CTRL-M>COPYRIGHT (C) 1982<CTRL-M>BEAGLE BROS<CTRL-M>==================<CTRL-J><CTRL-J>
  2. 13  REM (SEE LINE 3100 IF YOUR PRINTER REQUIRES EXTRA LINE FEEDS.)
  3. 15  IF  PEEK(103) + PEEK(104) *256 < >16385  THEN  POKE 16384,0: POKE 103,1: POKE 104,64: PRINT "<CTRL-D>RUN SCREENWRITER"
  4. 16  PRINT  CHR$(21): HGR : POKE  -16302,0: PRINT "<CTRL-D>BLOAD SCR.GRID": ONERR  GOTO 1810
  5. 18  GOTO 30
  6. 20 ST = 1: FOR I = 2000 TO 2039:SC(I) =  PEEK(I): NEXT : VTAB 24: HTAB 14: INVERSE : PRINT " STAND BY:   ";: FOR I = 0 TO 22: FOR J = V(I) TO V(I) +39:SC(J) =  PEEK(J): NEXT : HTAB 24: PRINT 22 -I;" ";: NEXT : NORMAL : GOSUB 1730: RETURN 
  7. 30  DIM V(23),SC(2039): PRINT "<CTRL-D>NOMONICO"
  8. 50  TEXT : HOME : POKE  -16300,0: POKE  -16302,0
  9. 60  PRINT "<CTRL-D>BLOAD SCR.LOGO,A$400"
  10. 70  PRINT "<CTRL-D>BLOAD SCR.HELP,A$800"
  11. 110 SC(0) = 0:J = 0:U = 160: RESTORE : FOR I = 0 TO 23: READ V(I): NEXT 
  12. 120  VTAB 24: HTAB 11: PRINT "(STAND BY.)";: FOR I = 2000 TO 2039:SC(I) = 160: NEXT 
  13. 130 UC = 1:SP = U:BS = 136:FS = 149:CA = 129:CZ = 154:ES = 155:CX = 152:CI = 137:CF = 134:CN = 142:CM = 141:CB = 157:CL = 140:CS = 147:CT = 148:Q =  -16384:QQ =  -16368:V = 0:H = 0: GOTO 1550
  14. 145  IF ST  THEN 169
  15. 146 ST = 1: HOME : GOSUB 20
  16. 148 :
  17. 150  REM <CTRL-J><CTRL-J>CURSOR<CTRL-J>
  18. 169 :
  19. 170 P = V(V) +H:S = SC(P): POKE P,94 +MF +(UC <0)
  20. 190 K =  PEEK(Q): IF K <SP  AND (K < >138  AND K < >139  AND K < >BS  AND K < >FS  AND K < >CA  AND K < >CZ  AND K < >ES  AND K < >CI  AND K < >CF  AND K < >CN  AND K < >CM  AND K < >CB  AND K < >CL  AND K < >CS  AND K < >CX  AND K < >CT)  THEN 190
  21. 200  POKE QQ,0: IF   NOT MF  THEN 210
  22. 201  IF K = ES  THEN EF = 1: GOTO 170
  23. 202  IF K = 212  OR K = 244  OR K = CT  THEN  POP : GOSUB 1730:MF = 0: GOTO 169
  24. 203  IF K = CM  THEN  RETURN 
  25. 205  IF K = 139  OR K = 193  THEN K = CA
  26. 206  IF K = 138  OR K = 218  THEN K = CZ
  27. 207  IF K < >ES  AND K < >BS  AND K < >FS  AND K < >CA  AND K < >CZ  THEN EF = 0
  28. 208  GOTO 420
  29. 210  IF K >159  THEN  POKE P,K +32 *(UC <0  AND K >191  AND K <224) +F -64 *(K >191  AND F <0):SC(P) =  PEEK(P):H = H +1:EF = 0: GOTO 510
  30. 220  IF K = ES  THEN EF = 1: GOTO 170
  31. 230  IF K = CS  THEN UC = UC * -1: GOTO 170
  32. 270  IF K = CB  THEN K = 219: GOTO 210
  33. 290  IF K = CX  THEN K = 220: GOTO 210
  34. 310  IF K = CL  THEN K = 223: GOTO 210
  35. 330  IF K = CI  THEN F =  -128:M$ = " INVERSE ": INVERSE : GOTO 610
  36. 350  IF K = CF  THEN F =  -64:M$ = "  FLASH  ": FLASH : GOTO 610
  37. 370  IF K = CN  THEN F = 0:M$ = " NORMAL ": NORMAL : GOTO 610
  38. 390  IF K = CM  THEN H = 0:V = V +1
  39. 420  IF K = FS  THEN H = H +1 +8 *(EF >0)
  40. 430  IF K = BS  THEN H = H -1 -8 *(EF >0)
  41. 450  IF K = CA  OR K = 139  THEN V = V -1 -4 *(EF >0)
  42. 470  IF K = CZ  OR K = 138  THEN V = V +1 +4 *(EF >0)
  43. 490  POKE P,S:EF = 0
  44. 510  IF H >39  THEN H = 0:V = V +1
  45. 530  IF H <0  THEN H = 39: IF V <23  THEN V = V -1
  46. 550  IF V <0  THEN V = 23
  47. 570  IF V >23  THEN V = 0
  48. 590  GOTO 170
  49. 610  VTAB 24: HTAB 1: PRINT M$;: FOR I = 1 TO 300: NEXT : FOR I = 2000 TO 2008: POKE I,SC(I): NEXT : GOTO 190
  50. 630  REM <CTRL-J><CTRL-J>(^C)OMMANDS<CTRL-J>
  51. 650  POKE P,SC(P): GOSUB 1760: PRINT "COMMAND? (C/G/H/L/M/P/Q/S):     (H=HELP";: POKE 2039, ASC(")") +128: HTAB 28: GET A$: IF A$ < >"C"  AND A$ < >"H"  AND A$ < >"G"  AND A$ < >"L"  AND A$ < >"M"  AND A$ < >"Q"  AND A$ < >"T"  AND A$ < >"S"  AND A$ < >"P"  THEN  GOSUB 1730: GOTO 169
  52. 651  PRINT A$;: POKE  -16368,0: VTAB 1
  53. 670  REM <CTRL-J><CTRL-J>(T)YPE<CTRL-J>
  54. 690  IF A$ = "T"  THEN  GOSUB 1730: GOTO 169
  55. 710  REM <CTRL-J><CTRL-J>(G)RID<CTRL-J>
  56. 730  IF A$ < >"G"  THEN 850
  57. 770  POKE  -16302,0: POKE  -16297,0: GOSUB 1730: VTAB 24: HTAB 9: INVERSE : PRINT " PRESS ANY KEY TO STOP. ";: FOR I = 1 TO 750: NEXT : NORMAL 
  58. 790  TEXT : FOR I = 1 TO 1: NEXT : POKE  -16304,0: IF  PEEK( -16384) <127  THEN 790
  59. 810  POKE QQ,0: TEXT : GOSUB 1730: GOTO 169
  60. 830  REM <CTRL-J><CTRL-J>(C)LEAR LINE, SCREEN<CTRL-J>
  61. 850  IF A$ < >"C"  THEN 1250
  62. 870  GOSUB 1760: PRINT "CLEAR LINE, COLUMN OR SCREEN? (L,C,S):";: GET A$: IF A$ < >"L"  AND A$ < >"C"  AND A$ < >"S"  THEN  GOSUB 1730: GOTO 169
  63. 890  REM <CTRL-J><CTRL-J>(L)INE CLEAR<CTRL-J>
  64. 910  GOSUB 1730: IF A$ < >"L"  THEN 1050
  65. 930  INVERSE : FOR I = 1 TO 24: VTAB I: HTAB 1: PRINT  CHR$(I +64);: NEXT : NORMAL 
  66. 950  VTAB 24: HTAB 2: CALL  -868: PRINT "  CLEAR WHICH LINE? (A-X):";: GET A$: VTAB 1
  67. 970  GOSUB 1730: FOR I = 0 TO 23: POKE V(I),SC(V(I)): NEXT : IF (A$ <"A"  OR A$ >"X")  THEN  GOSUB 1730: GOTO 169
  68. 990 LN =  ASC(A$) -65: FOR I = V(LN) TO V(LN) +39: POKE I,U: NEXT : GOSUB 1760: PRINT "O.K.? (Y/N):";: GET A$: GOSUB 1730: IF A$ < >"Y"  THEN  FOR I = V(LN) TO V(LN) +39: POKE I,SC(I): NEXT : GOTO 169
  69. 1010  FOR I = V(LN) TO V(LN) +39: POKE I,U:SC(I) = U: NEXT : GOTO 169
  70. 1030  REM <CTRL-J><CTRL-J>(C)OLUMN CLEAR<CTRL-J>
  71. 1050  IF A$ < >"C"  THEN 1190
  72. 1070  INVERSE : FOR I = 1 TO 40: VTAB 1: HTAB I: PRINT  CHR$(48 +I): NEXT : NORMAL 
  73. 1090  GOSUB 1760: PRINT "CLEAR WHICH COLUMN? (1-X):";: GET A$: VTAB 1: GOSUB 1730: FOR I = V(0) TO V(0) +39: POKE I,SC(I): NEXT : IF A$ <"1"  OR A$ >"X"  THEN 169
  74. 1110 LN =  ASC(A$) -49: FOR I = 0 TO 23: POKE V(I) +LN,U: NEXT 
  75. 1130  GOSUB 1760: PRINT "O.K.? (Y/N):";: GET A$: VTAB 1: GOSUB 1730: IF A$ < >"Y"  THEN  FOR I = 0 TO 23: POKE V(I) +LN,SC(V(I) +LN): NEXT : GOTO 169
  76. 1150  FOR I = 0 TO 23:SC(V(I) +LN) = U: NEXT : GOTO 169
  77. 1170  REM <CTRL-J><CTRL-J>(X) CLEAR SCREEN<CTRL-J>
  78. 1190  GOSUB 1760: PRINT "CLEAR ENTIRE SCREEN? (Y/N):";: GET A$: VTAB 1: GOSUB 1730: IF A$ < >"Y"  THEN 169
  79. 1210  HOME : GOSUB 20: GOTO 169
  80. 1230  REM <CTRL-J><CTRL-J>(S)AVE SCREEN<CTRL-J>
  81. 1250  IF A$ < >"S"  THEN 1350
  82. 1270  GOSUB 1760: PRINT "SAVE SCREEN TO DISK? (Y/N):";: GET A$: VTAB 1: GOSUB 1730: IF A$ < >"Y"  THEN 169
  83. 1290  GOSUB 1760: POKE 34,23: INPUT "NAME OF FILE? ";F$: POKE 34,0: VTAB 1: GOSUB 1730
  84. 1310  PRINT : PRINT "<CTRL-D>NOMONICO": PRINT "<CTRL-D>BSAVE ";F$;",A$400,L$400": GOTO 169
  85. 1330  REM <CTRL-J><CTRL-J>(Q)UIT<CTRL-J>
  86. 1350  IF A$ < >"Q"  THEN 1430
  87. 1370  GOSUB 1760: PRINT "READY TO QUIT? (Y/N):";: GET A$: VTAB 1: GOSUB 1730: IF A$ < >"Y"  THEN 169
  88. 1390  VTAB 23: HTAB 1: PRINT "  GOTO 9999 TO CONTINUE.";: VTAB 22: END 
  89. 1410  REM <CTRL-J><CTRL-J>(H)ELP<CTRL-J>
  90. 1430  IF A$ < >"H"  THEN 1530
  91. 1450  POKE  -16299,0: GOSUB 1730
  92. 1470 K =  PEEK(Q): IF K <128  THEN 1470
  93. 1490  POKE QQ,0: POKE  -16300,0: GOTO 170
  94. 1510  REM <CTRL-J><CTRL-J>(L)OAD FILE<CTRL-J>
  95. 1530  IF A$ < >"L"  THEN 1630
  96. 1550  GOSUB 1760: PRINT "DO YOU WANT TO LOAD A FILE? (Y/N):";: GET A$: VTAB 1: IF A$ < >"Y"  THEN  GOSUB 1730: GOTO 145
  97. 1570  GOSUB 1760: POKE 34,23: INPUT "LOAD FILE NAME:";F$: POKE 34,0
  98. 1572  IF F$ = "CATALOG"  THEN  VTAB 1: PRINT : PRINT "<CTRL-D>CATALOG": GOTO 1570
  99. 1580  IF  LEN(F$) = 0  THEN 1550
  100. 1581  VTAB 1: PRINT : PRINT "<CTRL-D>BLOAD ";F$;",A$400":H = 0:V = 0
  101. 1610  GOSUB 20: GOTO 169
  102. 1630  REM <CTRL-J><CTRL-J>(M)OVE<CTRL-J>
  103. 1650  IF A$ < >"M"  THEN 3000
  104. 1655 UC = 1:MF = 33: GOSUB 1760: PRINT "BLOCK-MOVE OR FORMAT (B/F):";: GET A$: VTAB 1: GOSUB 1730: IF A$ < >"B"  AND A$ < >"F"  THEN MF = 0: GOTO 169
  105. 1660  IF A$ = "F"  THEN 2000
  106. 1665  GOSUB 1760: PRINT "MARK CORNER OF BLOCK, & HIT <RETURN>:";: FLASH : PRINT " ";: NORMAL : GOSUB 170: POKE P,91:S1 = SC(P):SC(P) = 91:V1 = V:H1 = H:L1 = P
  107. 1668  GOSUB 1760: PRINT "MARK DIAGONAL CORNER, & HIT <RETURN>:";: FLASH : PRINT " ";: NORMAL : GOSUB 170: POKE P,93:S2 = SC(P):SC(P) = 93:V2 = V:H2 = H:L2 = P
  108. 1670  IF H1 >H2  THEN I = H1:H1 = H2:H2 = I
  109. 1671  IF V1 >V2  THEN I = V1:V1 = V2:V2 = I
  110. 1672  GOSUB 1760: PRINT "MARK NEW ";: FLASH : PRINT "UPPER-LEFT";: NORMAL : PRINT " CORNER & <RETURN>:";: FLASH : PRINT " ";: NORMAL : GOSUB 170: POKE P,106:S3 = SC(P):SC(P) = 93:V3 = V:H3 = H:V4 = V3 +(V2 -V1):H4 = H3 +(H2 -H1):L3 = P: IF H4 >39  THEN H4 = 39
  111. 1673  IF V4 >23  THEN V4 = 23
  112. 1674  GOSUB 1760: PRINT "O.K.? (Y/N):";: GET A$: VTAB 1: GOSUB 1730: IF A$ < >"Y"  THEN  POKE L3,S3:SC(L3) = S3: POKE L2,S2:SC(L2) = S2: POKE L1,S1:SC(L1) = S1: GOTO 1655
  113. 1677  GOSUB 1760: PRINT "ERASE OLD BLOCK? (Y/N):";: GET A$: VTAB 1: GOSUB 1730
  114. 1680  POKE L3,S3:SC(L3) = S3: POKE L2,S2:SC(L2) = S2: POKE L1,S1:SC(L1) = S1
  115. 1683  IF A$ = "Y"  THEN  FOR I = V1 TO V2 -(V2 = 23): VTAB I +1: HTAB H1 +1: PRINT  SPC( H2 -H1 +1): NEXT : IF V2 = 23  THEN  VTAB 24: HTAB H1 +1: PRINT  SPC( H2 -H1): POKE 2039,U
  116. 1686  FOR I = 0 TO V4 -V3: FOR J = 0 TO H4 -H3: POKE V(V3 +I) +H3 +J,SC(V(V1 +I) +H1 +J): NEXT : NEXT : IF A$ < >"Y"  THEN  VTAB 24: HTAB 14: INVERSE : PRINT " STAND BY...";: NORMAL : FOR I = 0 TO V4 -V3: FOR J = 0 TO H4 -H3:K = V(V3 +I) +H3 +J:SC(K) =  PEEK(K): NEXT : NEXT : GOSUB 1730
  117. 1695  IF A$ = "Y"  THEN  GOSUB 20
  118. 1700 MF = 0: GOSUB 1730: GOTO 169
  119. 1729  REM <CTRL-J><CTRL-J>GOSUBS<CTRL-J><CTRL-J>
  120. 1730 N = 2000
  121. 1750  FOR I = N TO N +39: POKE I,SC(I): NEXT : RETURN 
  122. 1760  NORMAL : VTAB 24: HTAB 1: CALL  -868: FOR I = 1 TO 2: FOR J = 1 TO 2:S =  PEEK( -16336): NEXT : FOR J = 1 TO 99: NEXT : NEXT : POKE QQ,0: RETURN 
  123. 1770  DATA 1024,1152,1280,1408,1536,1664,1792,1920,1064,1192,1320,1448,1576,1704,1832,1960,1104,1232,1360,1488,1616,1744,1872,2000 
  124. 1790  REM <CTRL-J><CTRL-J>ERROR MESSAGE<CTRL-J>
  125. 1810  NORMAL : POKE  -16300,0: VTAB 1: PRINT : PRINT "<CTRL-D>PR#0": IF  PEEK(222) < >255  THEN  GOSUB 1760: INVERSE : HTAB 4: PRINT  CHR$(7);" SOMETHING IS WRONG. TRY AGAIN. "; CHR$(7);: FOR I = 1 TO 999: NEXT : NORMAL : GOSUB 1730: GOTO 145
  126. 1830 MF = 0: GOTO 650
  127. 2000  REM <CTRL-J><CTRL-J>FORMAT MOVE<CTRL-J>
  128. 2005  GOSUB 1760: PRINT "FLUSH LEFT, RIGHT OR CENTERED? (L/R/C):";: GET A$: IF A$ < >"L"  AND A$ < >"R"  AND A$ < >"C"  THEN  GOSUB 1730:MF = 0: GOTO 169
  129. 2006  GOSUB 1760: PRINT "ALL LINES OR ONE AT A TIME? (A/O):";: GET Q$: GOSUB 1730: IF Q$ < >"A"  AND Q$ < >"O"  THEN  GOSUB 1730:MF = 0: GOTO 169
  130. 2010  IF Q$ = "O"  THEN  GOSUB 1760: PRINT "PUT CURSOR ON LINE & <RETURN>   (T=TYPE";: POKE 2039, ASC(")") +128: FLASH : HTAB 30: PRINT " ";: NORMAL : GOSUB 170
  131. 2030  IF Q$ = "O"  THEN J = V(V):LN = V
  132. 2032  IF Q$ = "A"  THEN  FOR LN = 0 TO 23:J = V(LN): POKE J,62: POKE J +39,60
  133. 2035  FOR I = 0 TO 39: IF SC(J +I) = U  THEN  NEXT : GOTO 2102
  134. 2040 S1 = I -1: FOR I = 39 TO 1  STEP  -1: IF SC(J +I) = U  THEN  NEXT 
  135. 2050 S2 = I +1:S3 = S2 -S1 -1: IF S3 = 40  OR S3 <0  THEN 2102
  136. 2052  VTAB LN +1: HTAB 1: PRINT  SPC( 39);: POKE V(LN) +39,U
  137. 2055  IF A$ = "L"  THEN  FOR I = 0 TO S3 -1: POKE J +I,SC(J +S1 +1 +I): NEXT : GOTO 2100
  138. 2060  IF A$ = "R"  THEN  FOR I = 1 TO S3: POKE J +39 -S3 +I,SC(J +S1 +I): NEXT : GOTO 2100
  139. 2070  IF A$ = "C"  THEN K =  INT((S1 +2 +39 -S2)/2): FOR I = 1 TO S3: POKE J +K +I -1,SC(J +S1 +I): NEXT 
  140. 2100  FOR I = J TO J +39:SC(I) =  PEEK(I): NEXT 
  141. 2102  IF Q$ = "O"  THEN 2010
  142. 2105  IF Q$ = "A"  THEN  POKE J,SC(J): POKE J +39,SC(J +39): NEXT LN: GOSUB 1730:MF = 0: GOTO 169
  143. 3000  REM <CTRL-J><CTRL-J>(P)RINTER DUMP<CTRL-J>
  144. 3010  GOSUB 1760: PRINT "PRINTER TURNED ON? (Y/N):";: GET A$: IF A$ < >"Y"  THEN  GOSUB 1730: GOTO 169
  145. 3020  GOSUB 1760: PRINT "PRINTER SLOT NUMBER? (1-7):";: GET A$: GOSUB 1730:LN =  VAL(A$): IF LN <0  OR LN >7  THEN 3020
  146. 3030  VTAB 1: PRINT : PRINT "<CTRL-D>PR#";LN: PRINT : PRINT : PRINT 
  147. 3040  FOR I = 0 TO 23: FOR J = 0 TO 39:K = SC(V(I) +J): IF K <32  THEN K = K +64
  148. 3060  IF K >95  AND K <128  THEN K = K -64
  149. 3070  IF K >159  THEN K = K -128
  150. 3100  VTAB 1: PRINT  CHR$(K);: NEXT : PRINT : REM PRINT CHR$(10);:REM(REMOVE 1ST REM IF YOUR PRINTER REQUIRES A LINE FEED.)
  151. 3105  NEXT : PRINT : PRINT : PRINT : PRINT "<CTRL-D>PR#0":N = 1024: GOSUB 1750: GOTO 169
  152. 9999  ONERR  GOTO 1810
  153. 10000 N = 1872: GOSUB 1750: GOTO 169
  154. 60000  REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H>==================<CTRL-M>SCREENWRITER<CTRL-M>COPYRIGHT (C) 1982<CTRL-M>BEAGLE BROS<CTRL-M>714-296-6400<CTRL-M>==================<CTRL-J><CTRL-J>