500 INPUT "Enter the name of the file to be used: ",FILE$
505 IF FILE$="?" THEN FILES DISK$+"*":GOTO 500
510 FILE$=DISK$+FILE$
515 ON ERROR GOTO 855
520 ON ERROR GOTO 0:CLOSE 1
525 FOR I=1 TO 10:CMM$(I)=STRING$(75," "):NEXT
530 DIM SQ$(100):C=0:I=1:LENGTH=0:FLAG=0:OPEN FILE$ FOR INPUT AS #1
535 IF EOF(1) THEN PRINT "ABNORMAL END OF FILE, EXECUTION CONTINUING":GOTO 595
540 INPUT#1,A$
545 IF LEFT$(A$,1)=";" THEN C=C+1:MID$(CMM$(C),1,LEN(A$))=A$:GOTO 535
550 IF FLAG GOTO 560
555 FLAG=1:TITLE$=LEFT$(A$,75):TITLE$=TITLE$+STRING$(75-LEN(TITLE$)," "):PRINT:PRINT:PRINT A$:PRINT:GOTO 535
560 IF RIGHT$(A$,1)="1" THEN A$=LEFT$(A$,LEN(A$)-1):FLAG=0
565 L=LEN(A$)
570 J=50-LEN(SQ$(I))
575 SQ$(I)=SQ$(I)+MID$(A$,1,J)
580 IF LEN(SQ$(I))=50 THEN I=I+1
585 IF J3 THEN N=N+50*(ROW+FIRST-5)
640 LOCATE 1,76:PRINT USING "#####";N;
645 LOCATE ROW,COL:COLOR 0,7:PRINT CHR$(SCREEN(ROW,COL)):COLOR 7,0
650 A$=INKEY$:IF A$="" GOTO 650
655 LOCATE ROW,COL:PRINT CHR$(SCREEN(ROW,COL))
660 IF A$=CHR$(27) THEN GOTO 805
665 IF A$=CHR$(0)+CHR$(72) THEN ROW=ROW-1:IF ROW<2 THEN ROW=2:BEEP:GOTO 635:ELSE GOTO 635
670 IF A$=CHR$(0)+CHR$(75) THEN COL=COL-1:IF COL<1 THEN COL=1:BEEP:GOTO 635:ELSE GOTO 635
675 IF A$=CHR$(0)+CHR$(77) THEN COL=COL+1:IF COL>75 THEN COL=75:BEEP:GOTO 635:ELSE GOTO 635
680 IF A$=CHR$(0)+CHR$(80) THEN ROW=ROW+1:IF ROW>23 THEN ROW=23:BEEP:GOTO 635:ELSE GOTO 635
685 IF ROW>3 GOTO 710
690 IF ASC(A$)<32 OR COL>75 THEN BEEP:GOTO 635
695 IF ROW=3 THEN MID$(TITLE$,COL,1)=A$:LOCATE ROW,COL:PRINT A$:COL=COL+1:GOTO 635
700 IF A$=CHR$(62) THEN CP=CP MOD 10+1:LOCATE 1,1:PRINT USING "comment ## of ##";CP;C:LOCATE 2,1:PRINT CMM$(CP) ELSE MID$(CMM$(CP),COL,1)=A$:LOCATE 2,COL:PRINT A$:COL=COL+1:IF CP>C THEN C=CP
705 GOTO 635
710 IF A$=CHR$(0)+CHR$(83) THEN I=ROW+FIRST-4:IF COL>LEN(SQ$(I)) THEN BEEP:GOTO 635 ELSE SQ$(I)=LEFT$(SQ$(I),COL-1)+RIGHT$(SQ$(I),LEN(SQ$(I))-COL):LOCATE ROW,COL:PRINT RIGHT$(SQ$(I),LEN(SQ$(I))-COL+1)+" ":LOCATE ROW,COL:GOTO 635
715 IF A$=CHR$(0)+CHR$(82) THEN I=ROW+FIRST-4:IF LEN(SQ$(I))=75 THEN BEEP:GOTO 635 ELSE SQ$(I)=LEFT$(SQ$(I),COL-1)+" "+RIGHT$(SQ$(I),LEN(SQ$(I))-COL+1):LOCATE ROW,COL:PRINT RIGHT$(SQ$(I),LEN(SQ$(I))-COL+1):LOCATE ROW,COL:GOTO 635
720 IF A$=CHR$(0)+CHR$(71) THEN ROW=4:COL=1:GOTO 635
725 IF A$=CHR$(0)+CHR$(79) THEN COL=LEN(SQ$(ROW+FIRST-4))+1:GOTO 635
730 IF A$=CHR$(0)+CHR$(81) THEN FIRST=FIRST+20:GOTO 630
735 IF A$=CHR$(0)+CHR$(73) THEN FIRST=FIRST-20:IF FIRST<1 THEN FIRST=1:GOTO 630:ELSE GOTO 630
740 IF A$="1" OR A$="A" OR A$="a" THEN B$="A":GOTO 770
745 IF A$="2" OR A$="C" OR A$="c" THEN B$="C":GOTO 770
750 IF A$="3" OR A$="G" OR A$="g" THEN B$="G":GOTO 770
755 IF A$="4" OR A$="T" OR A$="t" THEN B$="T":GOTO 770
760 IF A$="5" OR A$="N" OR A$="n" THEN B$="N":GOTO 770
765 BEEP:GOTO 635
770 IF COL<76 GOTO 790
775 ROW=ROW+1:FOR I=LAST TO ROW+FIRST-4 STEP -1:SQ$(I+1)=SQ$(I):NEXT:LAST=LAST+1
780 IF ROW>23 THEN ROW=4:FIRST=FIRST+20
785 SQ$(ROW+FIRST-4)=B$:COL=2:GOTO 630
790 LOCATE ROW,COL:COLOR 1:PRINT B$:COLOR 2:I=ROW+FIRST-4:IF COL>LEN(SQ$(I)) THEN SQ$(I)=SQ$(I)+B$ ELSE MID$(SQ$(I),COL,1)=B$
795 IF I>LAST THEN LAST=I
800 COL=COL+1:GOTO 635
805 CLS:PRINT "Do you want to save the changes you've made? (Y/N) ";
810 INPUT "",A$:IF A$<>"Y" AND A$<>"y" THEN PRINT:PRINT "Edit aborted.":GOTO 850
815 CLOSE #1:OPEN FILE$ FOR OUTPUT AS #1
820 FOR I=1 TO C
825 IF LEFT$(CMM$(I),3)=";@@" THEN MID$(CMM$(I),38,19)=DATE$+" "+TIME$
830 IF LEFT$(CMM$(I),1)=";" THEN PRINT #1,CMM$(I)
835 NEXT:PRINT #1,TITLE$
840 N=0:FOR I=1 TO LAST:N=N+LEN(SQ$(I)):PRINT #1,SQ$(I):NEXT:PRINT #1,"1"
845 PRINT:PRINT N;"bases saved."
850 CLOSE:ERASE SQ$:RETURN
855 IF ERR=53 THEN RESUME 860 ELSE PRINT "Unrecoverable error: ";ERR:STOP
860 PRINT:PRINT "File not found.":PRINT:GOTO 500
1000 END