home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / umind.zip / U-MIND.BAS < prev    next >
BASIC Source File  |  1986-04-25  |  19KB  |  266 lines

  1. 0 REM *** DO NOT REMOVE OR MODIFY LINES 0 THROUGH 10
  2. 1 REM *** U-MIND.BAS and SKELETON.BAS are copyrighted (C),1983 by The FreeSoft
  3. 2 REM *** Company, P.O. Box 27608, St. Louis, MO 63146
  4. 3 REM *** To get copies of the entire 5 volume set of Ultra-Utilties, send 2
  5. 4 REM *** double sided diskettes or 4 single sided diskettes to us at the above
  6. 5 REM *** address.  Be sure to include a postage-paid, self-addressed return
  7. 6 REM *** mailer and specify that you want LIBRARIES #1 and #2.
  8. 7 REM *** The Ultra-Utilities include Ultra-Zap, Ultra-Format, Ultra-File,
  9. 8 REM *** Ultra-Optimize, and Ultra-Mind.
  10. 9 REM *** AUTHOR: WAT BUCHANON, All Rights Reserved.
  11. 10 AQ$=" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890!@#$%^&*()_-=+}{[]`~':;?><|\,./":AX$=AQ$
  12. 20 KEY OFF
  13. 30 ON ERROR GOTO 1150
  14. 40 DIM EL$(10),CL$(10):CLS:A$="The FreeSoft Company Presents:":A1$="Ultra-Mind":A2$="The Intelligent Data Base Generator":A3$=" Copyright, 1983, The FreeSoft Co."
  15. 50 COLOR 7,0:LOCATE 5,(40-LEN(A$)/2):PRINT A$:COLOR 15,0:LOCATE 7,(40-LEN(A1$)/2):PRINT A1$
  16. 60 A4$=STRING$(LEN(A3$)," ")
  17. 70 LOCATE 9,(40-LEN(A2$)/2):PRINT A2$:COLOR 0,7:LOCATE 13,(40-LEN(A3$)/2):PRINT A3$
  18. 80 LOCATE 12,(40-LEN(A3$)/2):PRINT A4$:LOCATE 14,(40-LEN(A3$)/2):PRINT A4$
  19. 90 LOCATE 1,1:COLOR 15,0:PRINT STRING$(79,205):LOCATE 24,1:PRINT STRING$(79,205);
  20. 100 COLOR 7,0:FOR Z=1 TO 2000:NEXT Z:CLS
  21. 110 PRINT"Do you wish to:":PRINT:PRINT"1) Define a database":PRINT"2) Generate a defined database":PRINT:PRINT:PRINT"Enter your choice (1 or 2)"
  22. 120 A$=INKEY$:IF A$<>"1" AND A$<>"2" GOTO 120
  23. 130 IF A$="2" GOTO 1510
  24. 140 CLS
  25. 150 PRINT "Enter the filename of your data base (DO NOT INCLUDE AN EXTENSION)"
  26. 160 INPUT NA$
  27. 170 PRINT:PRINT"Now enter a heading title that will be displayed on the screen:":INPUT TI$
  28. 180 PRINT:PRINT"Who is the author of this program:":INPUT AU$:PRINT
  29. 190 INPUT "What drive will the data diskette be in (A,B,etc.) ";DA$
  30. 200 NA$=DA$+":"+NA$
  31. 210 OPEN "O",#1,NA$+".atr":WRITE#1,AU$,NA$,TI$
  32. 220 ND=1:NF=1:CLS:LOCATE 24,1:PRINT STRING$(79,205);:GOTO 320
  33. 230 TY=0:LOCATE 24,1:PRINT STRING$(79,205);:LOCATE 25,1:PRINT STRING$(79,32);:LOCATE 25,1:PRINT "1) Enter new fibf5%  2) Start new page  3) Enter non-field symbols.  4) Quit";
  34. 240 A$=INKEY$:IF A$="" OR INSTR("1234",A$)=0 GOTO 240
  35. 250 IF A$="1" THEN NF=NF+1:GOTO 320
  36. 260 IF A$="3" THEN TY=7:NF=NF+1:GOTO 340
  37. 270 IF A$="2" THEN ND=ND+1:CLS:GOTO 230
  38. 280 IF A$="4" THEN CLOSE:OPEN "O",#1,NA$+".HDR":WRITE#1,NF,ND,TB:CLOSE:CLS
  39. 290 PRINT "Do you wish to go ahead and generate the database? (Y/N)"
  40. 300 A$=INKEY$:IF A$<>"Y" AND A$<>"y" AND A$<>"N" AND A$<>"n" GOTO 300
  41. 310 IF A$="Y" OR A$="y" GOTO 1520 ELSE CLS:PRINT"Program finished...":END
  42. 320 LOCATE 24,1:PRINT STRING$(79,205);:LOCATE 25,1:PRINT STRING$(79,32);:LOCATE 25,1:IF NF=1 THEN PRINT "<KEY FIELD>"; ELSE PRINT "Field ";NF;
  43. 330 GOTO 350
  44. 340 LOCATE 25,1:PRINT STRING$(79,32);:LOCATE 25,1:PRINT "Symbols";
  45. 350 PRINT ", Page";ND;": Use arrow keys to position cursor then press <H>";
  46. 360 GOSUB 820
  47. 370 IF TY=7 THEN MR=R:MC=C:B$="":GOTO 410
  48. 380 A$=RIGHT$(STR$(NF),LEN(STR$(NF))-1):B$=A$+") "
  49. 390 MR=R:MC=C:LOCATE R,C:PRINT B$
  50. 400 GOTO 420
  51. 410 A$=" Now enter the symbols you wish to put at that position: ":A1%=79:GOTO 430
  52. 420 A$=" Now enter the field prompt you wish to use: ":A1%=50
  53. 430 WRITE #1,ND,MR,MC:LOCATE 24,(40-LEN(A$)/2):PRINT A$;:ROW=25:COLUMN=1:LOCATE ROW,COLUMN:PRINT STRING$(79,32);
  54. 440 GOSUB 1320:LOCATE 24,1:PRINT STRING$(79,205);:LOCATE 25,1:PRINT STRING$(79,32);:M$=B$+AN$:LOCATE MR,MC:IF TY<>7 THEN PRINT M$;:WRITE #1,M$
  55. 450 IF (TY=7 AND M$="@") GOTO 2510 ELSE IF TY=7 THEN GOSUB 1050:GOTO 810
  56. 460 A$=" Now enter the type of field: 1) Numeric, ":LOCATE 24,40-LEN(A$)/2:PRINT A$;:LOCATE 25,1:PRINT "2) Alphanumeric, 3) Formatted Numeric, 4) Calculated, 5) Date, 6) Time";
  57. 470 A$=INKEY$:IF A$="" OR INSTR("123456",A$)=0 GOTO 470
  58. 480 TY=VAL(A$):WRITE#1,TY
  59. 490 IF A$="5" THEN AF$=DATE$:FL=10:TB=TB+FL
  60. 500 IF A$="6" THEN AF$=TIME$:FL=8:TB=TB+FL
  61. 510 LOCATE 24,1:PRINT STRING$(79,205);:LOCATE 25,1:PRINT STRING$(79,32);:LOCATE 25,1:PRINT "Use arrow keys to position cursor, then press <H>";
  62. 520 GOSUB 820:FR=R:FC=C:WRITE #1,FR,FC:IF TY=5 OR TY=6 THEN WRITE#1,FL
  63. 530 LOCATE 25,1:PRINT STRING$(79,32);:LOCATE 25,1
  64. 540 IF TY=1 OR TY=2 OR TY=4 THEN A$="How many characters long is this field? ":PRINT A$;:ROW=25:COLUMN=LEN(A$)+1:A1%=2:GOSUB 1320:FL=VAL(AN$):AF$=STRING$(FL,22)
  65. 550 IF TY=3 THEN A$="Enter your special format below.  Use \'s for input character positions:":LOCATE 24,1:PRINT A$;:ROW=25:COLUMN=1:A1%=80-FC:GOSUB 1320:AF$=AN$:LOCATE 24,1:PRINT STRING$(79,205);
  66. 560 IF TY=3 THEN FOR A=1 TO LEN(AF$):IF MID$(AF$,A,1)="\" THEN MID$(AF$,A,1)=CHR$(22)
  67. 570 IF TY=3 THEN NEXT A:FL=LEN(AF$)
  68. 580 IF FL=0 THEN LOCATE 25,1:PRINT STRING$(79,32);:LOCATE 25,1:PRINT "ERROR - Null fields not allowed. Use symbolic fields.  Press <C> to continue";:ELSE GOTO 600
  69. 590 A$=INKEY$:IF A$="C" OR A$="c" THEN LOCATE MR,MC:PRINT STRING$(LEN(M$),32);:GOTO 320 ELSE GOTO 590
  70. 600 IF TY=1 OR TY=2 OR TY=3 THEN TB=TB+FL:WRITE #1,FL
  71. 610 IF TY=3 THEN WRITE #1,AF$
  72. 620 LOCATE FR,FC:PRINT AF$;
  73. 630 IF TY=4 THEN LOCATE 25,1:A$="How many lines of calculations for this field? ":PRINT A$;:ROW=25:COLUMN=LEN(A$)+1:A1%=2:GOSUB 1320:CL=VAL(AN$):IF CL=0 GOTO 630 ELSE WRITE#1,CL
  74. 640 IF TY=4 THEN FOR A=1 TO CL:LOCATE 25,1:PRINT STRING$(79,32);:A$=" Enter calculation line #"+STR$(A)+" of"+STR$(CL)+" ":LOCATE 24,40-LEN(A$)/2:PRINT A$;:ROW=25:COLUMN=1:A1%=70:GOSUB 1320:CL$=AN$:WRITE#1,CL$:NEXT A
  75. 650 LOCATE 24,1:PRINT STRING$(79,205);:LOCATE 25,1:PRINT STRING$(79,32);
  76. 660 GOSUB 1160:IF TY=1 THEN LOCATE 25,1:PRINT STRING$(73,32);:LOCATE 25,1:A$="How many lines of edit checking for this field? ":PRINT A$;:ROW=25:COLUMN=LEN(A$)+1:A1%=2:GOSUB 1320:EL=VAL(AN$)
  77. 670 IF TY=1 OR TY=2 THEN WRITE#1,AI$:IF TY=1 THEN WRITE#1,EL
  78. 680 IF (TY=2 AND NF<>1) THEN LOCATE 25,1:PRINT STRING$(79,32);:LOCATE 25,1:A$="Null entry valid (Y/N)":PRINT A$;:ROW=25:COLUMN=LEN(A$)+2:A1%=1:GOSUB 1320:IF INSTR("YyNn",AN$)=0 GOTO 680 ELSE PRINT#1,AN$
  79. 690 IF TY=1 AND EL<>0 THEN FOR A=1 TO EL:A$=" Enter edit check line #"+STR$(A)+" of"+STR$(EL)+" ":LOCATE 24,40-(LEN(A$)/2):PRINT A$;:ROW=25:COLUMN=1:A1%=70:GOSUB 1320:EL$=AN$
  80. 700 IF TY=1 AND EL<>0 THEN GOSUB 1020:IF T=0 THEN WRITE#1,EL$:NEXT A:GOTO 730:ELSE LOCATE 25,1:PRINT STRING$(79,32);:LOCATE 25,1:PRINT "ERROR - illegal edit command! Press <C> to continue.";
  81. 710 IF TY=3 THEN WRITE#1,AI$
  82. 720 IF TY=1 AND EL<>0 THEN A$=INKEY$:IF A$="c" OR A$="C" GOTO 660 ELSE GOTO 720
  83. 730 LOCATE 24,1:PRINT STRING$(79,205);:LOCATE 25,1:PRINT STRING$(79,32);
  84. 740 IF TY=1 OR TY=4 THEN LOCATE 25,1:A$="Do you wish to have a special format for printing the field (Y/N)? ":PRINT A$;:ROW=25:COLUMN=LEN(A$)+1:A1%=1:GOSUB 1320:SP$=AN$:IF SP$<>"Y" AND SP$<>"y" AND SP$<>"N" AND SP$<>"n" GOTO 740
  85. 750 IF TY=1 OR TY=4 THEN WRITE#1,SP$
  86. 760 IF (TY=1 OR TY=4) AND (SP$="Y" OR SP$="y") THEN A$="Enter your printing format below. Use #'s for char. positions":LOCATE 24,40-LEN(A$)/2:PRINT A$;:LOCATE 25,1:PRINT STRING$(79,32);:ROW=25:COLUMN=1:A1%=FL:GOSUB 1320:SF$=AN$
  87. 770 LOCATE 24,1:PRINT STRING$(79,205);:IF (TY=1 OR TY=4) AND (SP$="y" OR SP$="Y") THEN AC=0:FOR A=1 TO LEN(SF$):IF MID$(SF$,A,1)="#" THEN AC=AC+1
  88. 780 IF (TY=1 OR TY=4) AND (SP$="Y" OR SP$="y") THEN NEXT A:IF AC>0  THEN WRITE#1,SF$:GOTO 810
  89. 790 IF (TY=1 OR TY=4) AND (SP$="Y" OR SP$="y") THEN LOCATE 24,1:PRINT STRING$(79,205);:LOCATE 25,1:PRINT STRING$(79,32);:LOCATE 25,1:PRINT "ERROR - null print field! Press <C> to continue.";
  90. 800 IF (TY=1 OR TY=4) AND (SP$="y" OR SP$="Y") THEN A$=INKEY$:IF A$="c" OR A$="C" THEN LOCATE 25,1:PRINT STRING$(79,32);:GOTO 740:ELSE GOTO 800
  91. 810 GOTO 230
  92. 820 R=23:C=40
  93. 830 HOLD=SCREEN(R,C,0)
  94. 840 DEF SEG = &H40:A=PEEK(&H17):B= A OR 32:POKE &H17,B
  95. 850 LOCATE R,C: PRINT CHR$(4);
  96. 860 A$=INKEY$:IF A$="" GOTO 860
  97. 870 IF INSTR ("48621793Hh",A$)=0 GOTO 860
  98. 880 IF A$="H" OR A$="h" THEN LOCATE R,C:PRINT CHR$(HOLD):GOTO 1000
  99. 890 IF A$="4" THEN AR=0:AC=-1:GOTO 970
  100. 900 IF A$="8" THEN AR=-1:AC=0:GOTO 970
  101. 910 IF A$="6" THEN AR=0:AC=1:GOTO 970
  102. 920 IF A$="7" THEN AR=-R+1:AC=-C+1:GOTO 970
  103. 930 IF A$="9" THEN AR=-R+1:AC=73-C:GOTO 970
  104. 940 IF A$="3" THEN AR=23-R:AC=73-C:GOTO 970
  105. 950 IF A$="1" THEN AR=23-R:AC=-C+1:GOTO 970
  106. 960 AR=1:AC=0
  107. 970 IF R+AR>23 OR R+AR<1 THEN BEEP:GOTO 840
  108. 980 IF C+AC>73 OR C+AC<1 THEN BEEP:GOTO 840
  109. 990 LOCATE R,C:PRINT CHR$(HOLD):R=R+AR:C=C+AC:SOUND 7000,1:GOTO 830
  110. 1000 IF HOLD=32 THEN RETURN ELSE LOCATE 25,1:PRINT STRING$(79,32);:LOCATE 25,1:PRINT "ERROR - You are overwriting other screen information!  Press <C> to continue";
  111. 1010 A$=INKEY$:IF A$="C" OR A$="c" THEN LOCATE 25,1:PRINT STRING$(79,32);:GOTO 820 ELSE GOTO 1010
  112. 1020 REM *** check edits for syntax
  113. 1030 A$=LEFT$(EL$,1):IF A$="<" OR A$=">" OR A$="=" THEN T=0 ELSE T=1
  114. 1040 RETURN
  115. 1050 IF LEFT$(M$,1)<>"@" GOTO 1140
  116. 1060 REM *** PROCESS REPEATING SYMBOL LINE ***
  117. 1070 Q$=RIGHT$(M$,LEN(M$)-1):AZ=LEN(Q$)
  118. 1080 A$="":T$="":FOR Z=1 TO AZ
  119. 1090 K$=MID$(Q$,Z,1):IF K$="," THEN A9=VAL(T$):A$=A$+CHR$(A9):T$="":GOTO 1110
  120. 1100 T$=T$+K$
  121. 1110 NEXT Z:A9=VAL(T$):A$=A$+CHR$(A9):M$=""
  122. 1120 R$=LEFT$(A$,1):R=ASC(R$):A$=RIGHT$(A$,LEN(A$)-1)
  123. 1130 FOR A=1 TO R:M$=M$+A$:NEXT A
  124. 1140 PRINT M$;:WRITE #1,M$,TY:RETURN
  125. 1150 CLOSE:CLS:PRINT"ERROR";ERR;"in line";ERL:STOP
  126. 1160 IF TY<>1 AND TY<>2 AND TY<>3 THEN RETURN ELSE LOCATE 24,1:PRINT STRING$(79,32);
  127. 1170 LOCATE 24,1:PRINT STRING$(79,205);:LOCATE 25,1:A1$="Do you wish to restrict input characters (Y/N)? ":PRINT A1$;:ROW=25:COLUMN=LEN(A1$)+1:A1%=1:GOSUB 1320
  128. 1180 IF INSTR("YyNn",AN$)=0 GOTO 1170
  129. 1190 IF INSTR("Yy",AN$)=0 AND TY=2 THEN AI$=AX$:RETURN
  130. 1200 IF INSTR("Yy",AN$)=0 AND (TY=1 OR TY=3) THEN AI$="0123456789.-":RETURN
  131. 1210 LOCATE 24,1:PRINT STRING$(79,32);:LOCATE 25,1:PRINT STRING$(79,32);:LOCATE 24,1:A1$="Type X under character to restrict it: ":PRINT A1$;
  132. 1220 AI$="":AT$="0123456789+.-":GOSUB 1260:IF TY=1 OR TY=3 THEN LOCATE 24,1:PRINT STRING$(79,205);:LOCATE 25,1:PRINT STRING$(79,32);:RETURN
  133. 1230 AT$="ABCDEFGHIJKLMNOPQRSTUVWXYZ":GOSUB 1260
  134. 1240 AT$="abcdefghijklmnopqrstuvwxyz":GOSUB 1260
  135. 1250 AT$="!@#$%^&*()_=[]}{;:"'`~<>?,/\|":gosub 10100:LOCATE 24,1:PRINT STRING$(79,205);:LOCATE 25,1:PRINT STRING$(79,32);:return
  136. 1260 LOCATE 24,LEN(A1$)+1:PRINT AT$;:ROW=25:COLUMN=LEN(A1$)+1:A1%=LEN(AT$):AX$=" Xx":GOSUB 1320:AX$=AQ$:IF LEN(AN$)<>LEN(AT$) THEN AN$=AN$+STRING$(LEN(AT$)-LEN(AN$),32)
  137. 1270 FOR Z=1 TO LEN(AN$):IF MID$(AN$,Z,1)=" " THEN AI$=AI$+MID$(AT$,Z,1)
  138. 1280 NEXT Z:LOCATE 24,LEN(A1$)+1:PRINT STRING$(LEN(AT$),32);:LOCATE 25,1:PRINT STRING$(79,32);:RETURN
  139. 1290 REM _____________________________________________________________________
  140. 1300 REM * IN: ROW,COLUMN, A1%     OUT: AN$
  141. 1310 REM _____________________________________________________________________
  142. 1320 AN$="":A%=0:LOCATE ROW,COLUMN,0,1,20:PRINT STRING$(A1%,CHR$(22));
  143. 1330 IF A%=A1% THEN 1360 ELSE LOCATE ROW,COLUMN+A%,0,1,20:PRINT CHR$(22);
  144. 1340 A$=INKEY$:IF A$="" THEN 1340 ELSE IF INSTR(AX$,A$) THEN AN$=AN$+A$:LOCATE ROW,COLUMN+A%,0,1,20:PRINT A$;:A%=A%+1:GOTO 1330
  145. 1350 ON INSTR(CHR$(8)+CHR$(13),A$) GOTO 1370,1390:GOTO 1330
  146. 1360 A$=INKEY$:IF A$="" THEN 1360 ELSE 1350
  147. 1370 IF A%<A1% THEN LOCATE ROW,COLUMN+A%,0,1,20:PRINT CHR$(22);
  148. 1380 A%=A%-1:IF A%<0 THEN A%=0:GOTO 1330:ELSE AN$=LEFT$(AN$,LEN(AN$)-1):GOTO 1330
  149. 1390 LOCATE ROW,COLUMN+A%,0,1,20:PRINT STRING$(A1%-A%," ");
  150. 1400 RETURN
  151. 1410 REM _____________________________________________________________________
  152. 1420 REM   FORMATTED NUMERIC INPUT  IN:ROW,COLUMN,AF$   OUT: AN$
  153. 1430 REM _____________________________________________________________________
  154. 1440 AN$="":A%=0:LOCATE ROW,COLUMN:PRINT AF$;:A1%=LEN(AF$)
  155. 1450 IF A%=>LEN(AF$) THEN 1490 ELSE A%=INSTR(A%+1,AF$,CHR$(22)):LOCATE ROW,COLUMN+A%-1
  156. 1460 A$=INKEY$:IF A$=""THEN 1460 ELSE IF INSTR("1234567890",A$) THEN PRINT A$;:AN$=AN$+A$:GOTO 1450
  157. 1470 ON INSTR(CHR$(8)+CHR$(13),A$) GOTO 1440, 1500
  158. 1480 GOTO 1450
  159. 1490 A$=INKEY$:IF A$="" THEN 1490 ELSE 1470
  160. 1500 RETURN
  161. 1510 CLS:INPUT "NAME ";NA$
  162. 1520 OPEN "I",#1,NA$+".HDR":INPUT #1,NF,ND,TB
  163. 1530 CLOSE:TB=TB+1
  164. 1540 OPEN "I",#2,NA$+".ATR":OPEN "O",#1,NA$+".BAS"
  165. 1550 LN=1:Q$=CHR$(34):RM$="REM "+STRING$(65,"*")
  166. 1560 PRINT#1,LN;RM$:INPUT#2,AU$,NA$,TI$:DR$=LEFT$(NA$,2):LN=2:PRINT#1,LN;"REM *** PROGRAM ";NA$;".BAS":LN=3:PRINT#1,LN;"REM *** AUTHOR: ";AU$
  167. 1570 LN=4:PRINT#1,LN;"REM *** DATA DISKETTE MOUNTED ON DRIVE ";DR$
  168. 1580 LN=5:PRINT#1,LN;RM$
  169. 1590 LN=10:PRINT#1,LN;"SIZE=";TB;":ND=";ND;":TI$=";Q$;TI$;Q$;":NF=";NF;":AU$=";Q$;AU$;Q$;":na$=";Q$;NA$;Q$
  170. 1600 LN=20:PRINT#1,LN;"DIM F$(";NF;"),fr$(";NF;")"
  171. 1610 REM *****************************************************************
  172. 1620 PRINT "*** GENERATE BLOCKING ROUTINE                                 ***"
  173. 1630 REM *****************************************************************
  174. 1640 LN=12010:CT=1:PRINT#1,LN;"FIELD #1, 1 AS STAT$:LSET STAT$=STAT1$"
  175. 1650 FOR Z1=1 TO NF:V1=Z1:GOSUB 2330:IF TY=4 OR TY=7 GOTO 1710
  176. 1660 LN=LN+5:PX=CT:PRINT#1,LN;"field 1, ";
  177. 1670 IF PX>=255 THEN PRINT #1,"255 as n$, ";:PX=PX-255:GOTO 1670
  178. 1680 IF PX<>0 THEN PRINT#1,PX;" as n$, ";
  179. 1690 PRINT#1,FL;" as fr$(";Z1;"):lset fr$(";Z1;")=f$(";Z1;")"
  180. 1700 CT=CT+FL
  181. 1710 NEXT Z1:LN=LN+5:PRINT#1,LN;"RETURN":CLOSE#2:OPEN "I",2,NA$+".ATR":INPUT#2,AU$,NA$,TI$
  182. 1720 REM *****************************************************************
  183. 1730 PRINT "*** GENERATE UN-BLOCKING ROUTINE                              ***"
  184. 1740 REM *****************************************************************
  185. 1750 LN=17010:CT=1:PRINT#1,LN;"FIELD #1, 1 AS STAT$:STAT1$=STAT$"
  186. 1760 FOR Z1=1 TO NF:V1=Z1:GOSUB 2330:IF TY=4 OR TY=7 GOTO 1820
  187. 1770 LN=LN+5:PX=CT:PRINT#1,LN;"FIELD 1, ";
  188. 1780 IF PX>=255 THEN PRINT#1,"255 AS N$, ";:PX=PX-255:GOTO 1780
  189. 1790 IF PX<>0 THEN PRINT#1,PX;" AS N$, ";
  190. 1800 PRINT#1,FL;" AS FR$(";Z1;"):F$(";Z1;")=FR$(";Z1;")";:IF TY=1 THEN K=Z1:GOSUB 2310:PRINT#1,":";V$;"=VAL(F$(";Z1;"))" ELSE PRINT #1,""
  191. 1810 CT=CT+FL
  192. 1820 NEXT Z1:LN=LN+5:PRINT#1,LN;"RETURN":CLOSE#2:OPEN "I",2,NA$+".ATR":INPUT#2,AU$,NA$,TI$
  193. 1830 REM *****************************************************************
  194. 1840 PRINT "*** GENERATE DISPLAY FIELDS ROUTINE                           ***"
  195. 1850 REM *****************************************************************
  196. 1860 LN=7010:FOR Z1=1 TO NF:V1=Z1:GOSUB 2330:IF TY=4 OR TY=7 GOTO 1910
  197. 1870 LN=LN+5:PRINT#1,LN;"IF PAGE=";PG;" THEN LOCATE ";FR;",";FC;":";
  198. 1880 IF TY=1 AND (SP$="y" OR SP$="Y") THEN PRINT#1,"PRINT USING ";Q$;SF$;Q$;";";:K=Z1:GOSUB 2310:PRINT#1,V$:GOTO 1900:ELSE PRINT #1,"PRINT ";
  199. 1890 PRINT#1,"F$(";Z1;");"
  200. 1900 NEXT Z1:LN=LN+5:PRINT#1,LN;"RETURN":CLOSE#2:OPEN "I",2,NA$+".ATR":INPUT#2,AU$,NA$,TI$:GOTO 1970
  201. 1910 IF TY=7 GOTO 1900
  202. 1920 LN=LN+5:PRINT#1,LN;"IF PAGE<>";PG;" GOTO ";LN+((CL+2)*5)
  203. 1930 FOR Q=1 TO CL:LN=LN+5:PRINT#1,LN;CL$(Q):NEXT Q
  204. 1940 LN=LN+5:PRINT#1,LN;"F$(";Z1;")=STR$(F";:Z1$=STR$(Z1):Z1$=RIGHT$(Z1$,LEN(Z1$)-1):PRINT#1,Z1$;"#):LOCATE ";FR;",";FC;":PRINT ";:IF SP$="y" OR SP$="Y" THEN PRINT#1,"USING ";Q$;SF$;Q$;";
  205. 1950 K=Z1:GOSUB 2310:PRINT#1,V$
  206. 1960 GOTO 1900
  207. 1970 REM ****************************************************************
  208. 1980 PRINT "*** GENERATE SCREEN INFO DISPLAY ROUTINE                      ***"
  209. 1990 REM ****************************************************************
  210. 2000 LN=2013:PRINT#1,LN;"LOCATE 24,1:PRINT STRING$(79,61);":LN=2010:FOR Z2=1 TO NF:V1=Z2:GOSUB 2330
  211. 2010 LN=LN+5:PRINT#1,LN;"IF PAGE=";PG;" THEN LOCATE ";MR;",";MC;":PRINT ";Q$;M$;Q$;";"
  212. 2020 NEXT Z2:CLOSE #2:OPEN "I",2,NA$+".ATR":INPUT#2,AU$,NA$,TI$:LN=LN+5
  213. 2030 PRINT#1,LN;"RETURN":LN=LN+5
  214. 2040 X=2010:PRINT#1,X;"IF FL<>0 GOTO ";LN
  215. 2050 FOR Z2=1 TO NF:V1=Z2:GOSUB 2330:PRINT#1,LN;"IF (FL=";Z2;" AND PAGE<>";PG;") THEN PAGE=";PG;":CLS:GOTO 2013":LN=LN+5:NEXT Z2:PRINT#1,LN;"RETURN"
  216. 2060 CLOSE #2:OPEN "I",2,NA$+".ATR":INPUT#2,AU$,NA$,TI$
  217. 2070 REM ****************************************************************
  218. 2080 PRINT "*** GENERATE INPUT FIELD AND EDIT CHECKING ROUTINE            ***"
  219. 2090 REM ****************************************************************
  220. 2100 LN=22010:FOR Z2=1 TO NF:V1=Z2:GOSUB 2330
  221. 2110 IF TY=4 OR TY=7 THEN PRINT#1,LN;"IF Fl=";Z2;" THEN RETURN":GOTO 2190
  222. 2120 IF TY=5 THEN PRINT#1,LN;"IF Fl=";Z2;" THEN F$(";Z2;")=DATE$:LOCATE ";FR;",";FC;":PRINT F$(";Z2;"):RETURN":GOTO 2190
  223. 2130 IF TY=6 THEN PRINT#1,LN;"IF Fl=";Z2;" THEN F$(";Z2;")=TIME$:LOCATE ";FR;",";FC;":PRINT F$(";Z2;"):RETURN":GOTO 2190
  224. 2140 IF TY=2 THEN PRINT#1,LN;"IF Fl=";Z2" THEN ROW=";FR;":COLUMN=";FC;":A1%=";FL;":AX$=";Q$;AI$;Q$;":GOSUB 40130:";:IF Z2=1 OR (Z2<>1 AND NE$="n" OR NE$="N") THEN PRINT#1,"IF AN$="Q$;Q$;" GOTO ";LN;" ELSE ";
  225. 2150 IF TY=2 THEN PRINT#1,"F$(";Z2;")=AN$:RETURN":GOTO 2190
  226. 2160 IF TY=3 THEN PRINT#1,LN;"IF Fl=";Z2;" THEN ROW=";FR;":COLUMN=";FC;":AF$=";Q$;AF$;Q$;":AX$=";Q$;AI$;Q$;":GOSUB 40150:";:IF Z1=1 THEN PRINT#1,"IF AN$=";Q$;Q$;" GOTO ";LN;" ELSE ";
  227. 2170 IF TY=3 THEN PRINT#1,"F$(";Z2;")=AN$:RETURN":GOTO 2190
  228. 2180 IF TY=1 GOTO 2200
  229. 2190 LN=LN+5:NEXT Z2:PRINT#1,LN;"RETURN":GOTO 2250
  230. 2200 SV=LN:PRINT#1,LN;"IF Fl<>";Z2;" GOTO ";LN+((EL+2)*5);" ELSE ROW=";FR;":COLUMN=";FC;":A1%=";FL;":AX$=";Q$;AI$;Q$;":GOSUB 40130:";:IF Z2=1 THEN PRINT#1,"IF AN$=";Q$;Q$;" GOTO ";LN;" ELSE ";
  231. 2210 PRINT#1,"F$(";Z2;")=AN$:";:P$=STR$(Z2):P1$=RIGHT$(P$,LEN(P$)-1)+"#":PRINT#1,"F";P1$;"=VAL(AN$)"
  232. 2220 IF EL=0 GOTO 2240 ELSE FOR Z3=1 TO EL:LN=LN+5:PRINT#1,LN;"IF F";P1$;EL$(Z3);"THEN ER$=";Q$;EL$(Z3);Q$;":ER=4:GOSUB 36000:GOTO ";SV
  233. 2230 NEXT Z3
  234. 2240 LN=LN+5:PRINT#1,LN;"RETURN":GOTO 2190
  235. 2250 CLOSE:OPEN "o",1,NA$+".bat":PRINT#1,"BASIC ";NA$+".bas";"/F:2/S:";TB:CLOSE
  236. 2260 PRINT:PRINT "Now Merging Skeleton Program...":CL$=STRING$(255,32)
  237. 2270 OPEN "a",1,NA$+".bas":OPEN "i",2,"skeleton.bas"
  238. 2280 LINE INPUT#2,A$:PRINT ".";:PRINT#1,A$
  239. 2290 IF EOF(2) GOTO 2300 ELSE GOTO 2280
  240. 2300 RESET:CLS:PRINT "Program ";NA$+".BAS";" has been generated!":END
  241. 2310 V$=STR$(K):V$=RIGHT$(V$,LEN(V$)-1):V$="F"+V$+"#":RETURN
  242. 2320 RESET:STOP
  243. 2330 REM *** READ IN NEXT FIELD ATTRIBUTES
  244. 2340 INPUT#2,PG,MR,MC,M$,TY:IF TY=7 THEN RETURN
  245. 2350 IF TY<>1 AND TY<>2 GOTO 2400
  246. 2360 INPUT#2,FR,FC,FL,AI$:IF TY=2 GOTO 2490 ELSE INPUT#2,EL:IF EL=0 GOTO 2380
  247. 2370 ERASE EL$:DIM EL$(EL):FOR Z=1 TO EL:INPUT#2,EL$(Z):NEXT Z
  248. 2380 INPUT#2,SP$:IF SP$="y" OR SP$="Y" THEN INPUT#2,SF$
  249. 2390 RETURN
  250. 2400 IF TY<>3 GOTO 2430
  251. 2410 INPUT#2,FR,FC,FL,AF$,AI$
  252. 2420 RETURN
  253. 2430 IF TY<>4 GOTO 2460
  254. 2440 INPUT#2,FR,FC,CL:ERASE CL$:DIM CL$(CL):FOR Z=1 TO CL:INPUT#2,CL$(Z):NEXT Z:INPUT#2,SP$:IF SP$="y" OR SP$="Y" THEN INPUT#2,SF$
  255. 2450 RETURN
  256. 2460 IF TY<>5 AND TY<>6 GOTO 2480
  257. 2470 INPUT#2,FR,FC,FL:RETURN
  258. 2480 RETURN
  259. 2490 IF V1<>1 THEN INPUT#2,NE$
  260. 2500 RETURN
  261. 2510 LOCATE 25,1:PRINT"<Help>: Enter key-> ";
  262. 2520 Z$=INKEY$:IF Z$="" GOTO 2520
  263. 2530 PRINT Z$;" is ASCII code";ASC(Z$);"... Press <C> to cont.";
  264. 2540 Z$=INKEY$:IF Z$<>"C" AND Z$<>"c" GOTO 2540
  265. 2550 GOTO 410
  266.