10  COM X[103,22],M[19,19],U[19,19],Q[20],V[20],P[78]
30  COM M$[60],N$[72]
40  COM N,K,N8,K8,N9,K9,Q9,Q7,Q5,Q4,Q3,Q2,Q1
45  COM I3,I4,U9,X$[20]
50  REM:11APR74
52  REM:>SAVF
100  DIM D$[72],C$[7],A[19]
110  FILES *
1000  IF Q9>1 THEN 1010
1002  PRINT "WANT EXPLANATION ";
1004  INPUT D$
1006  IF D$[1,1]="N" THEN 1010
1008  GOSUB 2000
1010  IF Q[1]#0 THEN 1014
1012  GOTO 9929
1014  PRINT 
1016  GOTO Q9 OF 1018,1022,1022
1018  PRINT "NAME OF OUTPUT FILE TO SAVE DATA MATRIX IS ";
1020  GOTO 1024
1022  PRINT "OUTPUT FILE NAME = ";
1024  INPUT C$
1025  PRINT 
1026  ASSIGN C$,1,Q8
1028  IF Q8 <= 2 THEN 1036
1030  PRINT C$" CANNOT BE FOUND."
1032  PRINT 
1034  GOTO 1070
1036  IF Q8=0 THEN 1042
1038  PRINT "CANNOT WRITE ON "C$
1040  GOTO 1032
1042  READ #1,1
1046  GOTO TYP(1) OF 1048,1050,1100
1048  READ #1;A
1049  GOTO 1058
1050  READ #1;D$
1058  PRINT "WARNING!"'10C$" IS NOT NOW EMPTY."
1059  PRINT "IF YOU SAVE IDA DATA IN "C$" WITH 'SAVF',"
1060  PRINT "THE OLD CONTENT IN THE FILE WILL FIRST BE ERASED !!"
1062  PRINT 
1064  PRINT "DO YOU WANT TO PROCEED WITH 'SAVF' ";
1066  INPUT D$
1068  IF D$[1,1]#"N" THEN 1100
1070  GOSUB 1074
1072  GOTO 1022
1074  PRINT "WANT TO NAME ANOTHER OUTPUT FILE";
1076  INPUT D$
1078  IF D$[1,1]#"N" THEN 1096
1080  PRINT '10'13"IF YOU WISH, YOU MAY"
1082  IF Q9=3 THEN 1088
1084  PRINT "TYPE THE CHARACTER C WITH CONTROL KEY DEPRESSED,"
1086  PRINT "RETURN CARRIAGE,"
1088  PRINT "OPEN A FILE WITH A NEW NAME."
1090  PRINT "DO NOT USE 'KIL' OR YOU WILL LOSE YOUR DATA!"
1092  PRINT "THEN TYPE "'10"RUN-9998 "'10"TO GET BACK TO IDA."
1094  GOTO 9998
1096  RETURN 
1100  N1=0
1102  FOR I=Q4 TO N
1104  IF X[I,K9+2]=0 THEN 1108
1106  N1=N1+1
1108  NEXT I
1110  REM:#ACTIVE ROWS IS N1
1112  PRINT "WANT ENTIRE ACTIVE DATA MATRIX SAVED ";
1114  INPUT D$
1115  PRINT 
1116  IF D$[1,1]="N" THEN 1190
1118  K1=K
1120  GOSUB 2100
1124  IF Z2>0 THEN 1131
1126  PRINT "YOU MUST DECLARE FEWER COL(S). OR USE A LARGER FILE."
1127  PRINT "WANT TO DECLARE FEWER COL(S). ";
1128  INPUT D$
1129  IF D$[1,1]="N" THEN 1070
1130  GOTO 1190
1131  GOSUB 2300
1132  FOR I=1 TO K
1134  A[I]=I
1136  NEXT I
1140  GOTO 1700
1190  PRINT 
1200  PRINT '10"DATA IN COLUMNS 1 THROUGH"K
1201  Z6=0
1202  IF Q[2]=0 THEN 1210
1203  Z6=2
1204  PRINT "FITTED VALUES IN COL."K9
1206  PRINT "RESIDUAL VALUES IN COL."K9+1
1208  PRINT 
1210  PRINT "*  SAVE HOW MANY COLUMNS ? ";
1212  ENTER 60,Q8,K1
1214  PRINT 
1216  IF Q8>0 THEN 1219
1218  GOTO 1190
1219  IF K1=0 THEN 9996
1220  IF K1 <= 19 THEN 1223
1221  PRINT "CAN'T SAVE MORE THAN 19 COL(S)."
1222  GOTO 1200
1223  GOSUB 2100
1224  IF Z2>0 THEN 1234
1228  GOTO 1126
1234  GOSUB 2300
1236  PRINT 
1238  GOTO Q9 OF 1240,1260,1260
1240  PRINT "GIVE"K1"COLUMN NUMBERS, SEPARATED BY COMMAS : "
1242  GOTO 1270
1260  PRINT "WHICH COL(S). ? ";
1270  MAT  INPUT A[K1]
1280  FOR I=1 TO K1
1282  IF A[I]<K+1 AND A[I]=INT(A[I]) THEN 1300
1284  IF Z6#0 THEN 1290
1286  PRINT A[I]"IS AN INVALID COL. NUMBER."'10"TRY AGAIN!"'7
1288  GOTO 1200
1290  IF A[I]=K9 OR A[I]=K9+1 THEN 1294
1292  GOTO 1286
1294  IF Q[4]=0 THEN 1300
1296  PRINT "WARNING!"'10"RESIDUALS AND FITTED VALUES ARE NOT UPDATED VALUES."
1300  NEXT I
1700  READ #1,1
1702  PRINT #1;N1,K1
1710  IF  END #1 THEN 2400
1720  N2=0
1730  FOR I=Q4 TO N
1740  IF X[I,K9+2]=0 THEN 1790
1750  FOR J=1 TO K1
1760  PRINT #1;X[I,A[J]]
1780  NEXT J
1785  N2=N2+1
1790  NEXT I
1800  PRINT "THE FOLLOWING ARE NOW SAVED IN "C$" :"
1805  PRINT N1'10'13K1'10'13"THE"N1"BY"K1"DATA MATRIX"
1810  IF Z3=0 THEN 9998
1815  PRINT #1;"NAMES:"
1820  PRINT "NAMES:"
1822  FOR I=1 TO K1
1824  IF A[I]>10 THEN 1830
1826  D$=M$[6*A[I]-5,6*A[I]]
1828  GOTO 1834
1830  Z=A[I]-10
1832  D$=N$[6*Z-5,6*Z]
1834  FOR J=6 TO 1 STEP -1
1836  IF D$[J,J]#" " THEN 1870
1838  NEXT J
1840  REM:NAME IS ALL BLANKS
1870  PRINT #1;D$[1,J]
1880  PRINT D$[1,J]
1890  NEXT I
1900  IF Q9>1 THEN 1904
1902  PRINT "YOU MAY ADD EXTRA TEXT, ONE LINE AT A TIME, TO DESCRIBE "C$
1904  PRINT 
1932  PRINT "WANT TO ADD SOME TEXT ";
1934  INPUT D$
1936  IF D$[1,1]="N" THEN 9998
1938  PRINT 
1940  PRINT "WHEN YOU ARE DONE, PRESS THE CARRIAGE RETURN ONLY."
1942  IF  END #1 THEN 9998
1944  Z4=Z4 MIN 256
1946  Z4=Z4-1
1948  IF Z4<1 THEN 9998
1950  PRINT #1;"TEXT:"
1952  L=72 MIN (Z4*2)
1954  PRINT 
1956  GOTO Q9 OF 1958,1962,1962
1958  PRINT "INPUT LINE OF LESS THAN"L+1"CHARACTERS."
1960  GOTO 1964
1962  PRINT "*  INPUT < "L+1"CH."
1964  ENTER 250,Q8,D$
1966  PRINT 
1968  IF Q8>0 THEN 1972
1970  GOTO 1958
1972  IF D$="?" THEN 1958
1974  IF D$="" THEN 1992
1976  IF LEN(D$) <= L THEN 1984
1978  PRINT 
1980  PRINT "LAST LINE TOO LONG. RE-ENTER."
1982  GOTO 1962
1984  PRINT #1;D$
1985  Z=1+LEN(D$)
1986  Z4=Z4-1-INT(Z/2)
1988  IF Z4<1 THEN 1992
1990  GOTO 1952
1992  PRINT "DESCRIPTIVE TEXT SAVED AT END OF "C$
1993  PRINT #1; END 
1994  GOTO 9998
2000  PRINT "IF YOU HAVE OPENED A LARGE ENOUGH FILE IN YOUR ACCOUNT, YOU"
2001  PRINT "MAY SAVE FOR FUTURE USE THE VALUES IN ALL THE ACTIVE ROWS"
2002  PRINT "IN ALL THE COLUMNS OF YOUR DATA MATRIX, OR ANY OF THEM PLUS"
2003  PRINT "THE COLUMNS CONTAINING RESIDUALS AND FITTED VALUES,"
2004  PRINT "IF YOU HAVE EXECUTED A REGRESSION."
2006  PRINT 
2008  PRINT "DECLARE THAT FILE AS THE OUTPUT FILE IN 'SAVF'."
2010  PRINT "'SAVF' PRINTS:"
2012  PRINT "THE NUMBER OF ACTIVE ROWS"
2013  PRINT "THE NUMBER OF COLUMNS SAVED"
2014  PRINT "THE VALUES OF THE DATA MATRIX SAVED"
2015  PRINT "AND, IF YOU HAVE DECLARED NAMES FOR YOUR COLUMNS, AND THE"
2016  PRINT "FILE IS BIG ENOUGH,"
2017  PRINT "THE WORD, 'NAMES:', FOLLOWED BY THE NAMES"
2018  PRINT "THE WORD, 'TEXT:', FOLLOWED BY YOUR DESCRIPTIVE TEXT [NO"
2019  PRINT "MORE THAN 512 CHARACTERS]."
2020  PRINT 
2021  PRINT "THE COMMAND 'ENTER' WILL READ THESE NAMES."
2022  PRINT "THE COMMAND 'FILE' WILL PRINT OUT THE NAMES AND TEXT."
2024  PRINT 
2030  RETURN 
2100  Z=2*N1
2102  Z2=Z*K1+4
2110  Z3=4*K1+4
2200  R2=INT(.9999+(Z2/256))
2210  IF  END #1 THEN 2230
2220  FOR I=1 TO R2+1
2222  READ #1,I
2224  NEXT I
2226  R1=R2+1
2228  GOTO 2232
2230  R1=I-1
2232  Z1=R1*256
2234  IF Z1<Z2 THEN 2244
2236  GOTO Q3+1 OF 2268,2240
2240  Z4=Z1-Z2
2242  GOTO 2266
2244  PRINT "FILE WITH"R2"RECORDS NECESSARY FOR"N1"BY"K1"ACTIVE MATRIX"
2246  PRINT C$" HAS ONLY"R1"RECORD(S)."
2250  GOSUB 2350
2260  Z2=0
2262  REM: NO ROOM FOR K1 COL. OF DATA
2264  GOTO 2282
2266  IF Z4 >= Z3 THEN 2274
2268  Z3=0
2270  REM: NOT POSSIBLE TO INCLUDE NAMES
2272  GOTO 2278
2274  Z4=Z4-Z3-4
2276  IF Z4>2 THEN 2282
2278  Z4=0
2280  REM:NOT POSSIBLE TO INCLUDE DESCRIPTION
2282  RETURN 
2300  IF Q3=0 THEN 2345
2301  IF Z3=0 OR Z4=0 THEN 2310
2302  GOTO 2345
2310  PRINT C$" NOT BIG ENOUGH TO HOLD:"
2311  PRINT 
2312  IF Z3#0 THEN 2320
2314  PRINT "NAMES"
2320  IF Z4#0 THEN 2340
2322  PRINT "EXTRA TEXT"
2324  PRINT 
2340  GOSUB 2360
2345  RETURN 
2350  PRINT C$" CAN HOLD:"
2352  K2=INT((Z1-4)/Z)
2354  PRINT K2"COL(S). OF THE"N1"ACTIVE ROWS"
2360  IF Q3=0 THEN 2380
2370  K3=INT((Z1-8)/(4+Z))
2372  PRINT "OR"K3"COL(S). WITH NAMES."
2374  PRINT 
2380  RETURN 
2400  PRINT "DON'T PANIC. IT'S A PROGRAMMING ERROR."
2410  PRINT "AND"'10"DON'T"'10"USE THE 'KIL' COMMAND IF YOU DON'T WANT TO LOSE YOUR DATA."
2420  PRINT C$" NOW CONTAINS THE FIRST"N2"ACTIVE ROWS OF THE "K1"COLS. YOU"
2430  PRINT "DECLARED. NOTIFY THE R.A. OR CALL J.ROBERTS, 798-8803 ABOUT BUG."
2432  PRINT "USE 'FILE' TO LIST CURRENT CONTENTS OF YOUR FILE."
2440  GOTO 9998
9929  CHAIN "$IDA29",210
9996  PRINT "'SAVF' NOT EXECUTED."
9998  CHAIN "$IDA",150
9999  END 
