500 DIM SEQ(2,MAXL)
510 NSEQ=2
515 FOR I=1 TO 2
520 PRINT :PRINT USING "Enter sequence number##:";I;
525 INPUT " ",A$
530 FLAG=INSTR("~",LEFT$(A$,1))
535 IF FLAG=3 THEN FILES DISK$+"*":GOTO 520
540 IF FLAG THEN A$=RIGHT$(A$,LEN(A$)-1)
550 IF LEFT$(A$,1)="#" THEN A$=RIGHT(A$,LEN(A$)-1):GOTO
555 P1=INSTR(A$," ")
560 IF P1=0 THEN FILE$=DISK$+A$:FIRST=1:LAST=3000:GOTO 585
565 FILE$=DISK$+LEFT$(A$,P1-1)
570 P2=INSTR(P1+1,A$," ")
575 FIRST=VAL(MID$(A$,P1+1,P2-P1-1))
580 LAST=VAL(MID$(A$,P2+1,LEN(A$)-P2))
585 OPEN FILE$ FOR INPUT AS 1
590 FLG=0:LGTH(I)=0:K=0
595 IF EOF(1) THEN PRINT "ABNORMAL END OF FILE, EXECUTION CONTINUING":LGTH(I)=LGTH:GOTO 665
600 INPUT#1,A$
605 B$=LEFT$(A$,1):IF B$=";" THEN 600
610 IF FLG GOTO 635
615 FLG=1:PRINT:PRINT:PRINT A$:PRINT
625 IF PRTFLG THEN LPRINT A$
630 GOTO 595
635 L=LEN(A$)
640 FOR J=1 TO L
645 K=K+1:IF K>=FIRST AND K<=LAST THEN LGTH(I)=LGTH(I)+1:SEQ(I,LGTH(I))=INSTR("ACGT",MID$(A$,J,1))-1
650 NEXT J
655 IF K>LAST GOTO 665
660 IF SEQ(I,LGTH(I))>-1 GOTO 595 ELSE LGTH(I)=LGTH(I)-1
665 PRINT:PRINT USING "#### bases read.";LGTH(I):PRINT
670 CLOSE 1
675 ON FLAG GOSUB 690,710
680 NEXT I
685 GOTO 730
690 PRINT:PRINT "Generating the compliment.":FOR J=1 TO LGTH(I)
695 SEQ(I,J)=3-SEQ(I,J)
700 IF SEQ(I,J)=4 THEN SEQ(I,J)=-1
705 NEXT
710 PRINT "Generating the inverse.":FOR J=1 TO LGTH(I)/2
715 SWAP SEQ(I,LGTH(I)-J+1),SEQ(I,J)
720 NEXT
725 RETURN
730 PRINT:PRINT "Strike any key to enter editor. Use escape (Esc) to exit."
735 A$=INKEY$:IF A$="" GOTO 735
740 FIRST=0:BASE=1:FIRST2=1:PGE=0
743 CLS:FIRST1=PGE*560+1:ROW=3:COL=1
745 LAST1=FIRST1+559:IF LAST1>LGTH(1) THEN LAST1=LGTH(1)
747 LOCATE ROW,COL:FOR I=FIRST1 TO LAST1
750 PRINT MID$("NACGT",SEQ(1,I)+2,1);
755 IF I MOD 80 =0 THEN PRINT:PRINT
760 NEXT:PRINT " ";
765 FOR I=4 TO 24 STEP 3:LOCATE I,1:PRINT STRING$(80," "):NEXT
766 IF FIRST>FIRST1+559 THEN 800
767 IF FIRSTLGTH(2) THEN LAST2=LGTH(2)
769 LOCATE 4+(J\80)*3,J MOD 80+1
770 FOR I=FIRST2 TO LAST2
775 IF FIRST+I<=LGTH(1) AND SEQ(2,I)=SEQ(1,FIRST+I) THEN PRINT "-"; ELSE PRINT MID$("NACGT",SEQ(2,I)+2,1);
780 J=J+1:IF J MOD 80=0 THEN LOCATE CSRLIN+2,1
785 NEXT
800 BASE=((ROW-3)\3)*80+COL+PGE*560:S=(ROW-3) MOD 3+1:IF S=2 THEN BASE=BASE-FIRST
805 LOCATE 1,1:PRINT USING "####";BASE:LOCATE ROW,COL:COLOR 0,7:PRINT CHR$(SCREEN(ROW,COL)):COLOR 2
810 A$=INKEY$:IF A$="" GOTO 810
815 IF A$="+" THEN LOCATE 1,1:INPUT "Enter the number of bases the second sequence is to be shifted: ",SHIFT:FIRST=FIRST+SHIFT:LOCATE 1,1:PRINT STRING$(79," "):GOTO 765
820 LOCATE ROW,COL:PRINT CHR$(SCREEN(ROW,COL))
825 IF A$=CHR$(0)+CHR$(80) THEN ROW=ROW+S:IF ROW>22 THEN ROW=22:BEEP:GOTO 800:ELSE GOTO 800
830 IF A$=CHR$(0)+CHR$(75) THEN COL=COL-1:IF COL<1 THEN COL=1:BEEP:GOTO 800:ELSE GOTO 800
835 IF A$=CHR$(0)+CHR$(77) THEN COL=COL+1:IF COL>80 THEN COL=80:BEEP:GOTO 800:ELSE GOTO 800
840 IF A$=CHR$(0)+CHR$(72) THEN ROW=ROW-3+S:IF ROW<3 THEN ROW=3:BEEP:GOTO 800:ELSE GOTO 800
845 IF A$=CHR$(0)+CHR$(82) THEN FOR I=LGTH(S) TO BASE STEP -1:SEQ(S,I+1)=SEQ(S,I):NEXT:SEQ(S,BASE)=-1:LGTH(S)=LGTH(S)+1:ON S GOTO 743,765
850 IF A$=CHR$(0)+CHR$(83) THEN FOR I=BASE TO LGTH(S):SEQ(S,I)=SEQ(S,I+1):NEXT:LGTH(S)=LGTH(S)-1:ON S GOTO 743,765
855 IF A$=CHR$(9) OR A$=CHR$(0)+CHR$(15) THEN SHIFT=BASE-FIRST+1:FIRST=BASE-1:GOTO 765
860 IF A$=CHR$(27) GOTO 905
865 IF A$="A" OR A$="a" OR A$="1" THEN SEQ(S,BASE)=0:LOCATE ROW,COL:PRINT "A":GOTO 800
870 IF A$="C" OR A$="c" OR A$="2" THEN SEQ(S,BASE)=1:LOCATE ROW,COL:PRINT "C":GOTO 800
875 IF A$="G" OR A$="g" OR A$="3" THEN SEQ(S,BASE)=2:LOCATE ROW,COL:PRINT "G":GOTO 800
880 IF A$="T" OR A$="t" OR A$="4" THEN SEQ(S,BASE)=3:LOCATE ROW,COL:PRINT "T":GOTO 800
885 IF A$="N" OR A$="n" OR A$="5" THEN SEQ(S,BASE)=-1:LOCATE ROW,COL:PRINT "N":GOTO 800
886 IF A$=CHR$(0)+CHR$(73) THEN PGE=PGE-1:IF PGE<0 THEN PGE=0:BEEP:GOTO 800:ELSE GOTO 743
887 IF A$=CHR$(0)+CHR$(81) THEN PGE=PGE+1:GOTO 743
890 BEEP
895 GOTO 800
900 END
905 CLS:INPUT "Do you want to save the changes you have made (Y/N)? ",A$
910 IF LEFT$(A$,1)="N" OR LEFT$(A$,1)="n" GOTO 980
915 PRINT:INPUT "Enter the file into which the corrected sequence is to be saved: ",FILE$
920 PRINT:PRINT "Enter the title for the corrected sequence: ":INPUT "",TITLE$
925 FILE$=DISK$+FILE$
930 PRINT:INPUT "Enter the number of the sequence to be saved (1, 2 or 3 to meld): ",S
935 OPEN FILE$ FOR OUTPUT AS #1
938 PRINT #1,";@@ saved "+DATE$+" "+TIME$+" edited 00-00-0000 00:00:00"
940 PRINT #1,TITLE$
945 F=0:IF S=3 GOTO 985
950 FOR I=1 TO LGTH(S)
955 PRINT #1,MID$("NACGT",SEQ(S,I)+2,1);
960 IF I MOD 60 = 0 THEN PRINT #1,""
965 NEXT
970 PRINT #1,"1"
975 PRINT:PRINT LGTH(S)+FIRST*F;" bases saved."
980 ERASE SEQ:CLOSE 1:RETURN
985 FOR I=1 TO FIRST
990 PRINT #1,MID$("NACGT",SEQ(1,I)+2,1);
995 IF I MOD 60 =0 THEN PRINT #1,""
996 NEXT
997 F=1:S=2:GOTO 950
1000 END