4600 REM DATAFILE UTILITY PROGRAM DFRESTRUCTURE (C)1985 BY MIKE KONSHAK 4602 POKE53280,7:POKE53281,0:PRINT"[158]":GOTO4620 4604 REM--GET 4606 GETA$:IFA$=""THEN4606 4608 RETURN 4610 REM--DISK ERROR 4612 INPUT#15,EN,EM$,ET,ES:IF(EN<20)OR(EN=62)THENET=0:RETURN 4614 PRINT" [150]DISK ERROR[146]"EN"[157], "EM$","ET"[157],"ES"[158]":ET=8 4616 PRINT" PRESS ANY KEY[146] TO RETURN TO MENU":GOSUB4606:CLOSE5:CLOSE15:RETURN 4618 REM----START MENU 4620 CLR:PRINT"[147]  DATAFILE RESTRUCTURE PROGRAM " 4622 PRINT" THIS PROGRAM WILL ALTER THE STRUCTURE" 4624 PRINT" OF A SEQUENTIAL RECORD FILE CREATED BY" 4626 PRINT" THE DATAFILE[146] DATABASE MANAGEMENT" 4628 PRINT" SYSTEM, WRITTEN BY MIKE KONSHAK." 4630 PRINT" THE FOLLOWING OPTIONS ARE POSSIBLE:" 4632 PRINT" * CHANGE THE NAME OF A FIELD" 4634 PRINT" * CHANGE THE LENGTH OF A FIELD" 4636 PRINT" * ADD A FIELD " 4638 PRINT" * DELETE A FIELD " 4640 PRINT" OPTION 2 WILL INCREASE OR DECREASE" 4642 PRINT" THE TOTAL NUMBER OF RECORDS IN A FILE." 4644 PRINT" OPTION 3 WILL DECREASE THE NUMBER OF" 4646 PRINT" RECORDS AND SOME EXISTING RECORDS MAY" 4648 PRINT" BE LOST. OPTION 4 WILL INCREASE THE" 4650 PRINT" TOTAL NUMBER OF RECORDS, ELIMINATING" 4652 PRINT" THE DATA FOUND IN THE CHOSEN FIELD." 4654 PRINT" PRESS C[146]ONTINUE, $[146] DIRECTORY OR Q[146]UIT" 4656 GOSUB4606:IFA$="Q"THENEND 4658 IFA$="$"THENGOSUB4896:GOTO4620 4660 IFA$<>"C"THEN4656 4662 REM----OPEN FILE - READ STRUCTURE 4664 PRINT"[147]  CHANGE DATAFILE STRUCTURE [146]" 4666 PRINT" INSERT A DISK CONTAINING THE DATAFILE" 4668 PRINT" FILE TO BE RESTRUCTURED. PRESS RETURN[146]" 4670 PRINT" WITHOUT AN ENTRY TO EXIT." 4672 INPUT" NAME OF DATAFILE ";NF$:IFNF$=""THEN4654 4674 OPEN15,8,15:OPEN5,8,5,"0:DF] "+NF$+",S,R":GOSUB4612:IFET=8THEN4654 4676 IFEN=62THENGOSUB4614:GOTO4654 4678 INPUT#5,R,F,X:GOSUB4612:IFET=8THEN4654 4680 DIM F$(F+2),L%(F+2),REC$(X+1,F+2),K%(X+1) 4682 FORN=1TOF:INPUT#5,F$(N),L%(N):NEXTN:GOSUB4612:IFET=8THEN4654 4684 CLOSE5:CLOSE15:GOTO4710 4686 REM----PRINT FIELD INFO FOR REFERENCE 4688 PRINT"[147] FIELD NAME(LENGTH) FOR "+NF$+"[158]" 4690 OE=1:IF(F/2)=INT(F/2)THENOE=0 4692 OF=INT(F/2):FORI=1TOOF+OE 4694 PRINT" "I"[146]"F$(I)L%(I); 4696 IFOE=1THEN4700 4698 PRINTTAB(19)""I+OF"[146]"F$(I+OF)L%(I+OF):GOTO4702 4700 IFI+OFFTHENPRINT"[145]":GOTO4742 4746 PRINT" ENTER NEW FIELD NAME:":PRINT" ? ";F$(CF) 4748 INPUT"[145]";F$:IFF$=F$(CF)THEN4710 4750 FT=F:GOTO4784 4752 REM----CHANGE FIELD LENGTH 4754 GOSUB4688:INPUT" CHANGE LENGTH OF FIELD # ? 0[157][157][157]";CF:IFCF=<0THEN4710 4756 IFCF>FTHENPRINT"[145]":GOTO4754 4758 PRINT" ENTER NEW FIELD LENGTH:":PRINT" ?";L%(CF) 4760 INPUT"[145]";L%:IFL%=L%(CF)THEN4710 4762 L%(CF)=L%:FT=F:GOTO4784 4764 REM----ADD NEW FIELD 4766 GOSUB4688:PRINT" ADD NEW FIELD #";F+1 4768 PRINT" TITLE OF NEW FIELD":PRINT" ? >":INPUT"[145]";F$ 4770 PRINT" LENGTH OF NEW FIELD":PRINT" ? 0":INPUT"[145]";L% 4772 IFL%=0THEN4710 4774 FT=F+1:CF=F+1:GOTO4784 4776 REM----DELETE EXISTING FIELD 4778 GOSUB4688:INPUT" DELETE WHICH FIELD? 0[157][157][157]";CF:IFCF=0THEN4710 4780 FT=F-1 4782 REM----CALCULATE # RECORDS 4784 MEM=29293:RL=0 4786 FORJ=0TOF:IFK=4ANDJ=CFTHEN4790 4788 RL=RL+L%(J) 4790 NEXTJ:IFK=3THENRL=RL+L% 4792 RL=RL+3*(FT+1)+5 4794 NR=INT((MEM-12*(FT+1)-2100)/RL) 4796 PRINT" YOUR SELECTIONS WILL ALLOW APPROX" 4798 PRINTNR;"RECORDS. A[146]CCEPT OR R[146]EJECT?" 4800 GOSUB4606:IFA$="R"THEN4710 4802 IFA$<>"A"THEN4800 4804 REM----LOAD FILE 4806 OPEN15,8,15:OPEN5,8,5,"0:DF] "+NF$+",S,R":GOSUB4612:IFET=8THEN4710 4808 IFEN=62THENGOSUB4614:GOTO4710 4810 INPUT#5,R,F,X:GOSUB4612:IFET=8THEN4710 4812 FORN=1TOF:INPUT#5,F$(N),L%(N):NEXTN:GOSUB4612:IFET=8THEN4710 4814 FORI=1TOX:PRINT" READING RECORD #";I;"[145][145]" 4816 FORN=1TOF:INPUT#5,REC$(I,N):NEXTN:NEXTI:PRINT:GOSUB4612:IFET=8THEN4710 4818 FORI=1TOX:PRINT" READING POINTERS";I;"[145][145]":INPUT#5,K%(I):NEXTI 4820 S=ST:IFS<>0THEN4824 4822 INPUT#5,E$:GOSUB4612 4824 CLOSE5:CLOSE15 4826 REM----SAVE RESTRUCTURED FILE 4828 IFK=1THENF$(CF)=F$ 4830 IFK=2THENL%(CF)=L% 4832 CR$=CHR$(13):PRINT"[147] INSERT THE DISK TO RECEIVE THE FILE." 4834 PRINT" ENTER NAME OF RESTRUCTURED FILE TO BE" 4836 PRINT" SAVED (12 CHARACTERS MAX). IF THE OLD" 4838 PRINT" FILE NAME IS CHOSEN, THE OLD FILE" 4840 PRINT" WILL BE RENAMED WITH !OLD." 4842 PRINT" ";NF$:INPUT"[145]";NF$:IFNF$=""THEN4710 4844 OPEN15,8,15:PRINT#15,"S0:DF] "+LEFT$(NF$,8)+"!OLD" 4846 GOSUB4612:IFET=8THEN4710 4848 PRINT#15,"R0:DF] "+LEFT$(NF$,8)+"!OLD=DF] "+NF$:GOSUB4612:IFET=8THEN4710 4850 OPEN5,8,5,"0:DF] "+NF$+",S,W":GOSUB4612:IFET=8THEN4710 4852 IFX>NRTHENX=NR 4854 PRINT#5,NR;CR$;FT;CR$;X 4856 FORN=1TOF:IFK=4ANDN=CFTHEN4860 4858 PRINT#5,F$(N);CR$;L%(N) 4860 NEXTN:IFK=3THENPRINT#5,F$;CR$;L% 4862 GOSUB4612:IFET=8THEN4710 4864 FORI=1TOX:PRINT" SAVING RECORD #";I;"[145][145]" 4866 FORN=1TOF:IFK=4ANDN=CFTHEN4870 4868 PRINT#5,REC$(K%(I),N) 4870 NEXTN:IFK=3THENPRINT#5,">" 4872 NEXTI:PRINT:GOSUB4612:IFET=8THEN4710 4874 FORI=1TOX:PRINT" SAVING POINTERS";I;"[145][145]":PRINT#5,I:NEXTI 4876 PRINT#5,"EOF":GOSUB4612:IFET=8THEN4710 4878 CLOSE5:CLOSE15 4880 IFX>NRTHENPRINT"THE LAST"X-NR"RECORDS WERE DELETED" 4882 REM--REREAD NEW STRUCTURE 4884 OPEN15,8,15:OPEN5,8,5,"0:DF] "+NF$+",S,R":GOSUB4612:IFET=8THEN4710 4886 IFEN=62THENGOSUB4614:GOTO4710 4888 INPUT#5,R,F,X:GOSUB4612:IFET=8THEN4710 4890 FORN=1TOF:INPUT#5,F$(N),L%(N):NEXTN:GOSUB4612:IFET=8THEN4710 4892 CLOSE5:CLOSE15:GOTO4710 4894 REM--DIRECTORY 4896 OPEN15,8,15:OPEN5,8,0,"$0":PRINT"[147]":GOSUB4612:IFET=8THENRETURN 4898 GET#5,A1$,A2$ 4900 GET#5,A1$,A2$ 4902 GET#5,A1$,A2$ 4904 IFA1$<>""THENA0=ASC(A1$) 4906 IFA2$<>""THENA0=A0+ASC(A2$)*256 4908 PRINTMID$(STR$(A0),2);TAB(3); 4910 GET#5,A2$:IFST<>0THEN4928 4912 IFA2$<>CHR$(34)THEN4910 4914 GET#5,A2$:IFA2$<>CHR$(34)THENPRINT""A2$"[146]";:GOTO4914 4916 GET#5,A2$:IFA2$=CHR$(32)THEN4916 4918 PRINTTAB(20);:A3$="" 4920 A3$=A3$+A2$:GET#5,A2$:IFA2$<>""THEN4920 4922 PRINTLEFT$(A3$,3) 4924 GETA$:IFA$<>""THENGOSUB4932 4926 IFST=0THEN4900 4928 PRINT" BLOCKS FREE";:A0=0 4930 CLOSE5:CLOSE15:PRINTTAB(25)"PRESS ANY KEY[146]":GOSUB4606:RETURN 4932 GOSUB4606:RETURN