home *** CD-ROM | disk | FTP | other *** search
/ Best Objectech Shareware Selections / UNTITLED.iso / boss / educ / math / 023 / datfl.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1989-08-17  |  12.9 KB  |  213 lines

  1. 1  '        DATA FILER & EDITOR  ---  DATFL.BAS ---  by  Dr Russell Langley
  2. 2  GOTO 400
  3. 4  '<UNK! {000A}>--- Press Enter ---
  4. 5  IF PR THEN RETURN ELSE PRINT TAB(40);:PRINT "Press <Enter> to continue.";:IN$=INKEY$:WHILE INKEY$<>CHR$(13):WEND:LOCATE,40:PRINT SPACE$(26):RETURN
  5. 6  PRINT TAB(14);:PRINT "Press <Enter> to continue, or `/' to end viewing.";:IN$=INKEY$:WHILE IN$<>CHR$(13) AND IN$<>"/":IN$=INKEY$:WEND:LOCATE,14:PRINT SPACE$(50):IF IN$="/" THEN I=N:RETURN ELSE RETURN
  6. 7  '<UNK! {000A}><UNK! {000A}>--- Redirect to Block ---
  7. 9  ON QB GOTO 403,429,434,503,30:STOP'=start,menu,edit-prompt,print,quit.<UNK! {000A}><UNK! {000A}>--- Another go? ---
  8. 10  DO$="run this program again now":GOSUB 20:IF Z$="Y" THEN 2 ELSE 30
  9. 11  PRINT "Have you FILED the present data";:GOSUB 21:IF Z$="Y" THEN 10 ELSE QB=2:GOTO 9
  10. 19  '<UNK! {000A}>--- Yes/No? ---
  11. 20  PRINT:PRINT"Do you want to "+DO$;
  12. 21  INPUT" (Y/N)";Z$:IF Z$="" THEN Z$="N":RETURN ELSE Z$=CHR$(ASC(Z$) AND 95):IF Z$="Y" OR Z$="N" THEN RETURN ELSE PRINT"WHAT?  ";:GOTO 21
  13. 29  '<UNK! {000A}>--- Errors & End ---
  14. 30  IF ERR THEN BEEP ELSE RUN "MENU"
  15. 31  IF ERR=70 THEN INPUT"Can't write to that disk.  Remove its Write-Protect tab, then press <Enter>.";Z$:RESUME
  16. 32  IF ERR=71 THEN INPUT"That drive is empty or its gate is open.  Fix, then press <Enter>.";Z$:RESUME
  17. 39  ON ERROR GOTO 0:END'<UNK! {000A}><UNK! {000A}>--- Messages ---
  18. 40  BEEP:PRINT "---> Sorry, that entry is illegal.":RETURN
  19. 41  BEEP:PRINT "---> Sorry, double quotes are not allowed here.":RETURN
  20. 42  BEEP:PRINT"* * * Can't Do That.":QB=3:GOTO 9
  21. 43  BEEP:PRINT"You can't use '"L$"' with Upper Triangular matrices.":QB=3:GOTO 9
  22. 44  BEEP:PRINT"No, use REMAKE program to Delete rows of Upper Triangular matrices.":QB=3:GOTO 9
  23. 49  '<UNK! {000A}>*** Vetted Decoding of FF X(I,J) from X$ ***<UNK! {000A}>    Needs OP$, I, M, Q(0) from #96 or #256, & UT>0 if UT matrix.
  24. 50  L=M:IF OP$="XC" THEN K=J ELSE K=1:IF UT>0 THEN L=M-I+1
  25. 51  KX=0:FOR J=K TO L:Y$=SPACE$(10):KY=0
  26. 52  KX=KX+1:IF KX>LEN(X$) THEN IF J=L THEN 54 ELSE 57
  27. 53  Z$=MID$(X$,KX,1):IF INSTR("-.0123456789",Z$) THEN KY=KY+1:MID$(Y$,KY,1)=Z$:GOTO 52 ELSE IF Z$<>" " THEN 58 ELSE IF KY=0 THEN 52
  28. 54  IF Q(0) THEN Q(J)=VAL(Y$) ELSE X(I,J)=VAL(Y$)
  29. 55  NEXT J:IF KX>=LEN(X$) THEN 60
  30. 56  PLAY"L8O3CO2C":PRINT"Only the first"L"values have been read in that line.  Re-do it";:GOSUB 21:IF Z$="Y" THEN 59 ELSE 60
  31. 57  PLAY"L32O4CEG>C":PRINT"Not enough values in the line above.  Please re-do whole line.":GOTO 59
  32. 58  PLAY"L16O3CEL4>B":PRINT"That line contains a `non-numeric' entry.  Please re-do whole line."
  33. 59  PRINT"Row"STR$(I);:INPUT X$:IF RIGHT$(X$,1)<>"/" THEN 51 ELSE X$=LEFT$(X$,LEN(X$)-1):N=I+(X$=""):IF X$>"" THEN 51
  34. 60  RETURN
  35. 69  '<UNK! {000A}>--- K/b input of all X(I,J) in FF.  Counts N. ---<UNK! {000A}>    Needs first I, M, & if UT matrix UT>0.
  36. 70  PRINT"Enter data from keyboard, ";:IF M=1 THEN PRINT "pressing <Enter> after each number.":GOTO 72
  37. 71  PRINT"in Free Format, pressing <Enter> at end of each row.":IF UT>0 THEN 73
  38. 72  PRINT"Null entry duplicates previous row.  Signal `end-of-data' by entering a `/'"
  39. 73  PRINT"Row"STR$(I);:INPUT X$:IF UT>0 AND I=M THEN N=M:GOTO 75 ELSE IF X$="" THEN IF I>1 THEN FOR J=1 TO M:X(I,J)=X(I-1,J):NEXT J:I=I+1:LOCATE CSRLIN-1,POS(0)+9:PRINT"Ditto":GOTO 73
  40. 74  IF RIGHT$(X$,1)="/" THEN X$=LEFT$(X$,LEN(X$)-1):N=I+(X$=""):IF X$="" THEN 76
  41. 75  GOSUB 50:IF N=0 THEN IF I<MXR THEN I=I+1:GOTO 73 ELSE N=MXR
  42. 76  RETURN
  43. 79  '<UNK! {000A}>--- Disk Input of X(I,J), N, M, etc ---<UNK! {000A}>    Needs MNR, MNC.  Also ZZ$="UTOK" if UT is acceptable.
  44. 80  QD=1:IO$="I":GOSUB 110:CLS:PRINT "Loading data from disk.":INPUT #1,FL$,VR$
  45. 81  IF LEFT$(VR$,4)<>"(RL," THEN BEEP:PRINT "Unreadable file --- not made by our Data Filer/Editor program.":GOTO 86
  46. 82  INPUT #1,DT$,ID$,N,M,UT,VN$:PRINT "Filename: "FL$,"Made: "DT$,"Version: "VR$:PRINT"ID: "ID$:PRINT
  47. 83  IF UT>0 THEN IF ZZ$<>"UTOK" THEN PRINT "This file is an upper triangular matrix, which this program can't use!":GOTO 86
  48. 84  PRINT"File has"N"rows of data. ";:IF N<MNR THEN PRINT "--- Not enough!":GOTO 86 ELSE IF N>MXR THEN PRINT"--- Too many!":GOTO 86
  49. 85  PRINT:PRINT"File has"M"column variables. ";:IF M<MNC THEN PRINT "--- Not enough!" ELSE IF M>MXC THEN PRINT"Too many!" ELSE 88
  50. 86  CLOSE:BEEP:GOSUB 5:ERROR 210
  51. 87  '   Select variables
  52. 88  PRINT:IF VN$="N" THEN PRINT "The"M"variables are not named.":GOTO 90
  53. 89  PRINT "Variables in file are:":FOR J=1 TO M:INPUT #1,VN$(J):PRINT J;VN$(J),:NEXT J:PRINT
  54. 90  IF M=MNC OR UT>0 THEN 100 ELSE PRINT
  55. 91  PRINT"How many filed column variables are to be IGNORED (0-"MID$(STR$(M-MNC),2)")";:INPUT ND:IF ND<0 OR ND>M-MNC THEN 91 ELSE IF ND=0 THEN 100
  56. 92  '
  57. 93  '
  58. 94  IF ND=1 THEN PRINT "Number of the variable to be IGNORED (1-"MID$(STR$(M),2)")";:INPUT X$:Q(1)=VAL(X$):IF Q(1)<1 OR Q(1)>M THEN GOSUB 40:GOTO 94 ELSE 97
  59. 95  PRINT MID$(STR$(ND),2)" numbers of variables to be IGNORED (in ascending order & Free Format):":INPUT X$:IF VAL(X$)<1 THEN GOSUB 40:GOTO 95
  60. 96  Q(0)=1:MM=M:M=ND:GOSUB 50:Q(0)=0:M=MM
  61. 97  KK=1:L=1:FOR J=1 TO M:IF J=Q(KK) THEN KK=KK+1 ELSE VN$(L)=VN$(J):L=L+1
  62. 98  NEXT J
  63. 99  '   Now read numerical data from disk
  64. 100  PRINT:COLOR 23,0:PRINT"Loading numbers";:COLOR 7,0:FOR I=1 TO N:KK=1:LL=1:IF UT<=0 THEN L=M ELSE L=M-I+1
  65. 101  FOR J=1 TO L:INPUT #1,Z
  66. 102  IF J=Q(KK) THEN KK=KK+1 ELSE X(I,LL)=Z:LL=LL+1
  67. 103  NEXT J:NEXT I:CLOSE:LOCATE,1:PRINT SPACE$(15):M=M-ND:RETURN
  68. 104  I=0:MM=M:M=ND:GOSUB 50:FOR J=1 TO ND:Q(J)=X(0,J):NEXT J:M=MM
  69. 105  KK=1:L=1:FOR J=1 TO M:IF J=Q(KK) THEN KK=KK+1 ELSE VN$(L)=VN$(J):L=L+1
  70. 106  NEXT J
  71. 109  '<UNK! {000A}>--- Get Filespec ---
  72. 110  IF IO$="O" AND FL$>"" THEN PRINT "Will you file this data under the name "FL$;:GOSUB 21:IF Z$="Y" THEN 115
  73. 111  LINE INPUT "Filename (I will add .DAT extension)? ";FL$:IF FL$="" THEN 111 ELSE IF MID$(FL$,2,1)=":" THEN DR$=LEFT$(FL$,1):FL$=MID$(FL$,3)
  74. 112  ER=0:FOR I=1 TO LEN(FL$):Z$=MID$(FL$,I,1):IF INSTR(" .,/\|?*:;[]+="+CHR$(34),Z$) THEN ER=1
  75. 113  NEXT I
  76. 114  IF ER=0 AND FL$>"" AND LEN(FL$)<9 THEN FL$=FL$+".DAT" ELSE BEEP:PRINT "Invalid filename.  Will you try again";:GOSUB 21:IF Z$="Y" THEN 111 ELSE 2
  77. 115  INPUT "Which drive (A,B,C,D)";DR$:IF DR$="" THEN 115
  78. 116  DR$=CHR$(ASC(DR$) AND 95):IF INSTR("ABCD",DR$)=0 THEN 115
  79. 117  INPUT "Which directory (e.g. WORK, MYDATA, or Null Entry if root) ";DR2$:IF DR2$="" THEN DR$=DR$+":" ELSE DR$=DR$+":\"+DR2$+"\"
  80. 129  '<UNK! {000A}>--- Open File, IO$= "I" or "O" ---
  81. 130  IF IO$="I" THEN 134 ELSE ON ERROR GOTO 132:OPEN DR$+FL$ FOR INPUT AS #1
  82. 131  CLOSE:DO$="<OVERWRITE> existing "+FL$:GOSUB 20:IF Z$="N" THEN 110 ELSE 133
  83. 132  RESUME 133  'OK to start new file, since FL$ not present.
  84. 133  ON ERROR GOTO 30:OPEN DR$+FL$ FOR OUTPUT AS #1:RETURN  'print #1,Q$A$Q$Q$B$Q$:close
  85. 134  ON ERROR GOTO 136:OPEN DR$+FL$ FOR INPUT AS #1  'for input
  86. 135  ON ERROR GOTO 30:RETURN   'input #1,A$,B$:close
  87. 136  PRINT FL$" not found on Drive "DR$:RESUME 137
  88. 137  GOSUB 5:ON ERROR GOTO 30:CLS:ERASE X:SHELL "DIR "+DR$+"/W":GOSUB 5:DIM X(MXR,MXC):GOTO 110
  89. 139  '<UNK! {000A}>--- Save data, X(I,J) ---
  90. 140  IF ID$="" THEN LINE INPUT"Problem ID? ";ID$:GOTO 142
  91. 141  LINE INPUT"Problem ID (null = unchanged)? ";Z$:IF Z$>"" THEN ID$=Z$
  92. 142  Q$=CHR$(34):IO$="O":GOSUB 110
  93. 143  PRINT "Saving data on disk ..... ";:PRINT #1,Q$FL$Q$Q$VER$Q$:PRINT #1,Q$DAT$Q$Q$ID$Q$;N;M;UT;Q$VN$Q$
  94. 144  IF VN$="Y" THEN FOR J=1 TO M:PRINT #1,Q$VN$(J)Q$;:NEXT J:PRINT #1,""
  95. 145  FOR I=1 TO N:IF UT<=0 THEN L=M ELSE L=M-I+1
  96. 146  FOR J=1 TO L:PRINT #1,X(I,J);:NEXT J:NEXT I:CLOSE:PRINT "done."
  97. 147  DO$="backup this file under the name "+FL$:GOSUB 20:IF Z$="Y" THEN GOSUB 115:GOTO 143 ELSE RETURN
  98. 339  '<UNK! {000A}>--- Date ---
  99. 340  DAT$=MID$(DATE$,4,2)+" "+MID$("JanFebMarAprMayJunJulAugSepOctNovDec",-2+3*VAL(LEFT$(DATE$,2)),3)+" "+RIGHT$(DATE$,4):RETURN
  100. 399  '<UNK! {000A}>--- Start ---
  101. 400  KEY OFF:CLEAR:SCREEN 0,0,0,0:CLS:ON ERROR GOTO 30
  102. 401  DEFINT I-N,Q:Q$=CHR$(34):MXR=400:MXC=20
  103. 402  DIM I,J,K,L,M,N,Q,X$,Y$,Z$,X(MXR,MXC),VN$(MXC)
  104. 403  QB=5:CLOSE:GOSUB 340:VER$="(RL,11)":HD$=" D A T A   F I L E R   &   E D I T O R "
  105. 404  CLS:PRINT DAT$;TAB(21);:COLOR 0,7:PRINT HD$;:COLOR 7,0:PRINT TAB(73)VER$:K=12:LOCATE 4,1,0
  106. 405  PRINT TAB(K)"KEYTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENCLOSE"
  107. 406  PRINT TAB(K)"OPEN                                                       OPEN"
  108. 407  PRINT TAB(K)"OPEN    Data can be entered from keyboard or disk file.    OPEN"
  109. 408  PRINT TAB(K)"OPEN     Features vetted Free Format entry for numbers.    OPEN"
  110. 409  PRINT TAB(K)"OPEN           Max rows (persons, etc) = 400.              OPEN"
  111. 410  PRINT TAB(K)"OPEN           Max columns (variables) =  20.              OPEN"
  112. 411  PRINT TAB(K)"OPEN       If trouble, try <Ctrl-Break> & GOTO 9.          OPEN"
  113. 412  PRINT TAB(K)"OPEN                                                       OPEN"
  114. 413  PRINT TAB(K)"SCREENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENLOAD":LOCATE,,1
  115. 414  '   Get Data
  116. 415  PRINT:DO$="enter data from disk":GOSUB 20:QB=1:PRINT:IF Z$="N" THEN 420
  117. 416  '   Disk Entry
  118. 417  IF QD=0 THEN DIM Q(MXC)
  119. 418  MNR=1:MNC=1:ZZ$="UTOK":GOSUB 80:GOSUB 5:GOTO 429
  120. 419  '   K/b Entry
  121. 420  PRINT"No. of variables (columns, 1-"MID$(STR$(MXC),2)")";:INPUT M:IF M<1 OR M>MXC THEN GOSUB 40:GOTO 420 ELSE IF M=1 THEN 423
  122. 421  DO$="enter an Upper Triangular matrix":GOSUB 20:IF Z$="N" THEN 423
  123. 422  PRINT "Based on how many persons ("MID$(STR$(M+2),2)" or more)";:INPUT UT:IF UT<M+2 THEN PRINT "Not enough!":GOTO 422'<UNK! {000A}>  --->  Note:       UT holds # persons since matrix N=M
  124. 423  VN$="Y":PRINT"Variable Names (1-10 letters each) 1 per line, or Null Entry if no names:":FOR J=1 TO M
  125. 424  PRINT "Var"J"? ";:LINE INPUT VN$(J):IF VN$(1)="" THEN VN$="N":J=M:GOTO 426
  126. 425  IF INSTR(VN$(J),Q$) THEN GOSUB 41:GOTO 424 ELSE VN$(J)=LEFT$(VN$(J),10)
  127. 426  NEXT J:IF OP$="V" THEN 434
  128. 427  I=1:GOSUB 70
  129. 428  '   Menu
  130. 429  CLS:LOCATE,,0:PRINT TAB(26)"EDITING MENU":PRINT:PRINT"Indicate your Editing requirements as follows ---":K=12
  131. 430  PRINT"<UNK! {000A}>"TAB(K)"F  = File data now<UNK! {000A}>"TAB(K)"V  = Variable names to be changed or added<UNK! {000A}>"TAB(K)"SV = Show variable names<UNK! {000A}>"TAB(K)"SA = Show all data";
  132. 431  PRINT"<UNK! {000A}>"TAB(K)"S# = Show row # (e.g. S4 shows row 4)<UNK! {000A}>"TAB(K)"C# = Change row #";:IF UT>0 THEN 433
  133. 432  PRINT"<UNK! {000A}>"TAB(K)"I# = Insert row #<UNK! {000A}>"TAB(K)"D# or D#-# = Delete row or range-of-rows (work up if multiple)<UNK! {000A}>"TAB(K)"XR = Extra rows to be added (from keyboard)<UNK! {000A}>"TAB(K)"XC = Extra cols to be added (from keyboard)";
  134. 433  PRINT"<UNK! {000A}>"TAB(K)"P  = Print datafile on printer<UNK! {000A}>"TAB(K)"Q  = Quit or Re-run":LOCATE,,1
  135. 434  QB=2:CLOSE:PRINT:PRINT"====> Option (F, V, SV, SA, S#, C#,";:IF UT<=0 THEN PRINT" I#, D#, XR, XC,";
  136. 435  PRINT" P, Q, Null=Menu)";
  137. 436  INPUT OP$:IF OP$="" THEN 429 ELSE PRINT
  138. 437  IF OP$="F" OR OP$="f" THEN 488 ELSE IF OP$="V" OR OP$="v" THEN 441 ELSE IF OP$="SV" OR OP$="sv" THEN 447 ELSE IF OP$="SA" OR OP$="sa" THEN 450 ELSE IF OP$="P" OR OP$="p" THEN 490 ELSE IF OP$="Q" OR OP$="q" THEN 11
  139. 438  L$=CHR$(ASC(OP$) AND 95):IF INSTR("SCIDX",L$)=0 OR LEN(OP$)=1 THEN 42
  140. 439  IF L$="S" OR L$="C" THEN 460 ELSE IF L$="I" THEN 467 ELSE IF L$="D" THEN 471 ELSE IF L$="X" THEN 476
  141. 440  '  Edit Varnames
  142. 441  IF VN$="N" THEN QR=1 ELSE 448
  143. 442  INPUT"# of variable to be renamed (Null=Menu)";Z$:IF Z$="" THEN 429 ELSE J=VAL(Z$):IF J<1 OR J>M THEN 442 ELSE IF VN$(J)="" THEN VN$(J)="<blank> "
  144. 443  PRINT"Present name of Var"J"is: "VN$(J);
  145. 444  LINE INPUT"    New name? ";VN$(J):IF VN$(J)="" THEN 442
  146. 445  IF INSTR(VN$(J),Q$) THEN GOSUB 41:GOTO 444 ELSE VN$(J)=LEFT$(VN$(J),10):VN$="Y":GOTO 442
  147. 446  '   Show Varnames
  148. 447  IF VN$="N" THEN PRINT"Variables not named.":GOTO 434
  149. 448  FOR J=1 TO M:PRINT J;VN$(J),:NEXT J:PRINT:IF OP$="V" OR OP$="v" THEN 442 ELSE 434
  150. 449  '   Show Data
  151. 450  IF OP$="XR" OR OP$="xr" THEN PRINT:PRINT"Extra rows are---":II=N1:GOTO 453
  152. 451  II=1:PRINT"Filename: "FL$
  153. 452  PRINT:IF QR=0 THEN PRINT"Data read was---" ELSE PRINT"Revised data is---"
  154. 453  LN=0:FOR I=II TO N:LN=LN+1
  155. 454  IF UT<=0 THEN L=M ELSE L=M-I+1
  156. 455  IF LN=21 THEN LN=1:GOSUB 6:IF IN$="/" THEN 457
  157. 456  PRINT"Row";STR$(I);": ";:FOR J=1 TO L:PRINT X(I,J);:NEXT J:PRINT:IF LN=0 THEN RETURN
  158. 457  NEXT I:IF IN$="/" THEN 434 ELSE GOSUB 5
  159. 458  IF OP$="XR" OR OP$="xr" THEN 434 ELSE 447
  160. 459  '   Show a Row
  161. 460  I=VAL(MID$(OP$,2)):IF I<1 OR I>N THEN 42 ELSE LN=0:GOSUB 454:IF L$="S" THEN 434
  162. 461  '   Change Datum
  163. 462  QR=1:IF M=1 THEN J=1:GOTO 464 ELSE IF UT<=0 THEN L=M ELSE L=M-I+1
  164. 463  PRINT "Change which variable # (1-"MID$(STR$(L),2)")";:INPUT Z$:J=VAL(Z$):IF J<1 OR J>L THEN BEEP:GOTO 463
  165. 464  PRINT "Old value ="X(I,J);TAB(28)"New value";:INPUT Z$:FOR K=1 TO LEN(Z$):IF INSTR("-.0123456789",MID$(Z$,K,1))THEN NEXT K:X(I,J)=VAL(Z$) ELSE PLAY"L16O3CEL4>B":PRINT"That contains a `non-numeric' entry.  Please re-do.":GOTO 464
  166. 465  PRINT "Revised Row"STR$(I)": ";:FOR J=1 TO L:PRINT X(I,J);:NEXT J:PRINT:IF M=1 THEN 434 ELSE DO$="change that row again":GOSUB 20:IF Z$="Y" THEN 463 ELSE 434
  167. 466  '   Insert a Row
  168. 467  IF UT>0 THEN 43 ELSE KR=CSRLIN:PRINT "Working";:LOCATE KR,1,0
  169. 468  II=VAL(MID$(OP$,2)):IF II<1 OR II>N OR N=MXR THEN 42 ELSE QR=1:N=N+1:FOR I=N TO II+1 STEP -1:FOR J=1 TO M:X(I,J)=X(I-1,J):NEXT:NEXT
  170. 469  I=II:PRINT "Row"STR$(I);:INPUT X$:GOSUB 50:GOTO 434
  171. 470  '   Delete Rows
  172. 471  IF UT>0 THEN 44 ELSE KR=CSRLIN:COLOR 23,0:PRINT "Working";:LOCATE KR,1,0:COLOR 7,0
  173. 472  J=INSTR(OP$,"-"):IF J=0 THEN I=VAL(MID$(OP$,2)):Q=1 ELSE I=VAL(MID$(OP$,2,J-1)):II=VAL(MID$(OP$,J+1)):Q=ABS(I-II)+1
  174. 473  IF I<1 OR I>N THEN 42 ELSE IF Q>1 THEN IF II<1 OR II>N THEN 42 ELSE IF I>II THEN SWAP I,II
  175. 474  QR=1:N=N-Q:FOR K=I TO N:FOR J=1 TO M:X(K,J)=X(K+Q,J):NEXT:NEXT:PRINT "OK, done.":GOTO 434
  176. 475  '   Extra Rows
  177. 476  IF UT>0 THEN 43 ELSE R$=CHR$(ASC(RIGHT$(OP$,1)) AND 95):IF R$="C" THEN 480 ELSE IF R$<>"R" OR N=MXR THEN 42
  178. 477  PRINT"You can append up to"MXR-N"extra rows (each with"M"variables).":N1=N+1:I=N1:N=0:QR=1:Q=1
  179. 478  GOSUB 70:DO$="view those extra rows":GOSUB 20:IF Z$="Y" THEN 450 ELSE 429
  180. 479  '   Extra Cols
  181. 480  OP$="XC":IF M=MXC THEN PRINT"This file already has the maximum number of variables,"MXC:GOTO 42 ELSE PRINT"No. of extra variables per row (max"STR$(MXC-M)")";:INPUT MM:IF MM<1 OR M+MM>MXC THEN 42
  182. 481  IF VN$="N" THEN 485 ELSE PRINT "Names of extra variables (1-10 letters each), 1 per line --":FOR J=M+1 TO M+MM
  183. 482  PRINT"Var"J"? ";:LINE INPUT VN$(J)
  184. 483  IF INSTR(VN$(J),Q$) THEN GOSUB 41:GOTO 482 ELSE VN$(J)=LEFT$(VN$(J),10)
  185. 484  NEXT J
  186. 485  PRINT"Enter extra variables in Free Format --":FOR I=1 TO N:PRINT"Row"STR$(I)":";:FOR J=1 TO M:PRINT X(I,J);:NEXT J
  187. 486  INPUT"  ";X$:M=M+MM:GOSUB 50:M=M-MM:NEXT I:M=M+MM:GOTO 434
  188. 487  '   Saving Data on Disk
  189. 488  GOSUB 140:GOTO 434
  190. 489  '   Printout
  191. 490  IF FL$="" THEN PRINT "Please file this data first.";:PLAY"L8O1CO3CO5C":GOSUB 5:GOTO 429
  192. 491  QB=4:CLS:LOCATE 8,1,0:K=12
  193. 492  PRINT TAB(K)"KEYTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENCLOSE"
  194. 493  PRINT TAB(K)"OPEN                TURN PRINTER ON.                       OPEN"
  195. 494  PRINT TAB(K)"OPEN                                                       OPEN"
  196. 495  PRINT TAB(K)"OPEN    Then PRESS <ENTER> to start printing ..... or ..   OPEN"
  197. 496  PRINT TAB(K)"OPEN                                                       OPEN"
  198. 497  PRINT TAB(K)"OPEN    To send Printer Codes in Basic before printing,    OPEN"
  199. 498  PRINT TAB(K)"OPEN    press <Ctrl-Break>, & start printing by GOTO 9.    OPEN"
  200. 499  PRINT TAB(K)"OPEN                                                       OPEN"
  201. 500  PRINT TAB(K)"OPEN If this is showing, you can press / to stop printing. OPEN"
  202. 501  PRINT TAB(K)"SCREENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENLOAD":LOCATE,,1:IN$=INKEY$:IF IN$="/" THEN 429
  203. 502  IN$=INKEY$:IF IN$="/" THEN 429 ELSE IF IN$<>CHR$(13) THEN 502
  204. 503  QB=2:LPRINT CHR$(10)STRING$(79,61)CHR$(10):LPRINT CHR$(14)"FILENAME: "FL$;SPACE$(10)VER$
  205. 504  LPRINT CHR$(10)"Problem ID: "ID$;CHR$(10):LPRINT "Made: "DAT$,"ROWS ="N,"COLUMNS ="M;CHR$(10)
  206. 505  IF VN$="N"THEN LPRINT"Variables not named."CHR$(10) ELSE FOR J=1 TO M:LPRINT"Var"STR$(J)"="VN$(J),:NEXT J:LPRINT CHR$(10)
  207. 506  FOR I=1 TO N:IN$=INKEY$:IF IN$="/" THEN I=N:GOTO 509
  208. 507  IF UT<=0 THEN L=M ELSE L=M-I+1
  209. 508  FOR J=1 TO L:LPRINT X(I,J);:NEXT J:LPRINT
  210. 509  NEXT I:IF IN$="/" THEN PRINT "Printing aborted as requested.";:GOSUB 5:GOTO 429
  211. 510  LPRINT CHR$(10)STRING$(80,61)STRING$(4,10):GOTO 429
  212. 511  'end
  213.