C SAP (Sequence assembly program) C AUTHOR RODGER STADEN C 9-1-90 sent idev instead of kbout to join and enter C 16-3-90 removed escape after bpause C 2-5-90 Many changes related to introducing graphics C 4-5-90 Allowed escape from getreg C 9-5-90 Introduced a default gel reading C 23-8-90 Added calls to SHOWFU C 28-11-90 See dbsys89 C 22-1-91 Changed use of showfi to include version number C 27-1-91 Changed maxsav from 1000 to maxglm C 13-04-91 removed initial CLEARV C 28-7-91 added extra parameter for quality calc: mxgood, only the parts C of reads upto this length are used C 21-8-91 Added function to find internal joins C 27-8-91 Added buffer flushing for database files SUBROUTINE FMAIN() INTEGER CHRSIZ,ECHRSZ PARAMETER ( + NAMLEN = 40, + MAXDEV = 10, + MAXSEQ=50000, + MAXGLM=4096, + MAXGL2=MAXGLM*2, + MINMEN=-3, + CHRSIZ=4, + ECHRSZ = 6, + IDT1=ECHRSZ*MAXGL2, + IDT2=2*CHRSIZ*MAXGL2, + IDT3=2*MAXGL2, + IDT4=2*ECHRSZ*MAXGL2, + MAXDB=1000) INTEGER BOTOPT,TOPOPT,DEVNOS(MAXDEV) INTEGER RELPG(MAXDB),LREG,RREG,ANS INTEGER TEMP1(IDT1),TEMP2(IDT2),TEMP3(IDT4) INTEGER LNGTHG(MAXDB),LNBR(MAXDB),RNBR(MAXDB) CHARACTER*(NAMLEN) HELPF,POINTF,FILNAM,NAMPRO,FILE,NAMARC,FILMAR CHARACTER*(NAMLEN) SHONAM CHARACTER GEL(MAXGLM) CHARACTER GEL2(MAXGLM),GEL3(MAXGLM),GEL4(MAXGLM) PARAMETER (BOTOPT=0,TOPOPT=35) PARAMETER (HELPF='SAPHELP') PARAMETER (POINTF='SAPHPNT') PARAMETER (FILMAR='SAPMARG') INTEGER HELPS(BOTOPT:TOPOPT),HELPE(BOTOPT:TOPOPT) INTEGER MARGB(TOPOPT),MARGT(TOPOPT) CHARACTER SEQ1(MAXSEQ) C DBAUTO TEMP3A = TEMP1, SEQ3A = GEL3, SEQ2A = GEL2 C MATCHA = GEL, SEQ4A = GEL4 PARAMETER (LENGTH = 6, + MAXCON = 500, + MAXSAV = MAXGLM, + LPOWRC = CHRSIZ**LENGTH) INTEGER CONST(LENGTH) INTEGER POSNS(MAXSEQ),WORDP(LPOWRC),WORDN(LPOWRC),GELN(MAXGLM) INTEGER CENDS(MAXCON),NENDS(MAXCON) CHARACTER SEQC2(MAXGLM,2),SEQG2(MAXGLM,2) CHARACTER SEQ5(MAXGLM),SEQG3(MAXGLM),SEQC3(MAXGLM) INTEGER SAV1(MAXSAV),SAV2(MAXSAV),SAV3(MAXSAV) INTEGER WINDOW C DBAUTO EQUIVALENCE (TEMP2,TEMP1) EQUIVALENCE (TEMP1,TEMP3) IDM = 5 CALL INITS CALL INITLU(IDM) CALL INTHLP('sap', TOPOPT) CALL UNITNO(KBIN,KBOUT,DEVNOS,MAXDEV) CALL OPENGR(DEVNOS(10)) WRITE(KBOUT,1000) 1000 FORMAT( +' SAP (Sequence assembly program) V5.0 Aug 1991',/, +' Author: Rodger Staden') IGORT = 0 IDEV = KBOUT C GET SCREEN AND MARGIN SIZES CALL GETMRG(ISXMAX,ISYMAX,MARGL,MARGR,MARGB,MARGT, +TOPOPT,DEVNOS(5),FILMAR) CALL SETHLP(HELPS,HELPE,BOTOPT,TOPOPT,POINTF,DEVNOS(5),KBOUT) CALL INITGR(KBIN,KBOUT,HELPS(0),HELPE(0),HELPF,IDEVH) IOPEN=1 LINLEN=50 PERCD=0.75 WINDOW = 25 MXGOOD = MAXGLM IGWIND = 1000 FILE = ' ' MAXGEL = MAXGLM SHONAM = ' ' CALL SHOWFI(KBOUT,SHONAM) ANS = 0 CALL YESONO(ANS,'Open existing database','Start new database', + HELPS(3),HELPE(3),HELPF,DEVNOS(5),KBIN,KBOUT) IF(ANS.LT.0)GO TO 10 IF(ANS.GT.1)GO TO 10 MAXGEL = MAXGLM IF(IOPEN.EQ.0)THEN CLOSE(UNIT=DEVNOS(1)) CLOSE(UNIT=DEVNOS(2)) CLOSE(UNIT=DEVNOS(3)) IOPEN=1 END IF IDBSIZ=MAXDB IDBSIS=IDBSIZ IF(ANS.EQ.1)THEN C CALL SHOWFU(KBOUT,'Start new database') CALL DBSTAR(NAMPRO,GEL,IDBSIS,IDBSIZ,KBIN,KBOUT,DEVNOS(1), + DEVNOS(2),DEVNOS(3),IERR,HELPS(NOPT),HELPE(NOPT), + DEVNOS(5),HELPF,MAXGEL,MAXGLM,IDM) NGELS=0 NCONTS=0 LLINO = 0 IF(IERR.EQ.0) THEN IOPEN=0 SHONAM = NAMPRO(1:MAX(1,INDEX(NAMPRO,'.'))+1) CALL SHOWFI(KBOUT,SHONAM) END IF CALL INITLU(IDM) GO TO 10 END IF IF(ANS.EQ.0)THEN C CALL SHOWFU(KBOUT,'Open database') NGELS=0 NCONTS=0 CALL DBOPEN(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,NAMPRO,GEL, + IDBSIS,IDBSIZ,JERR,KBIN,KBOUT,DEVNOS(1),DEVNOS(2),DEVNOS(3), + MAXGEL,MAXGLM,LLINO,IDM, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5)) IF(JERR.EQ.0)IOPEN=0 IF(NGELS.GT.0)CALL DBSTAT(RELPG,LNGTHG,LNBR,RNBR,NGELS, + NCONTS,IDBSIZ,KBOUT) CALL INITLU(IDM) SHONAM = NAMPRO(1:MAX(1,INDEX(NAMPRO,'.'))+1) CALL SHOWFI(KBOUT,SHONAM) GO TO 10 END IF MENUN = 0 10 CONTINUE C C Flush the database buffers, just in case! C CALL FLUSHL(DEVNOS(1)) CALL FLUSHL(DEVNOS(2)) CALL FLUSHL(DEVNOS(3)) CALL BPAUSE(KBIN,KBOUT,IOK) C CALL SHOWFU(KBOUT,' ') C IF(IOK.NE.0) GO TO 9999 C CALL DBMENT(MENU,NOPT,TOPOPT,HELPS(0),HELPE(0),HELPF,DEVNOS(5), C +KBIN,KBOUT) CALL MENU(NOPT, KOPT, MENUN, TOPOPT, MINMEN, KBIN, KBOUT, + HELPS(0), HELPE(0), HELPF, DEVNOS(5)) IF(NOPT.EQ.3)THEN ANS = 0 CALL YESONO(ANS,'Open existing database','Start new database', + HELPS(3),HELPE(3),HELPF,DEVNOS(5),KBIN,KBOUT) IF(ANS.LT.0)GO TO 10 IF(ANS.GT.1)GO TO 10 MAXGEL = MAXGLM IF(IOPEN.EQ.0)THEN CLOSE(UNIT=DEVNOS(1)) CLOSE(UNIT=DEVNOS(2)) CLOSE(UNIT=DEVNOS(3)) IOPEN=1 END IF IDBSIZ=MAXDB IDBSIS=IDBSIZ IF(ANS.EQ.1)THEN C CALL SHOWFU(KBOUT,'Start a database') CALL DBSTAR(NAMPRO,GEL,IDBSIS,IDBSIZ,KBIN,KBOUT,DEVNOS(1), + DEVNOS(2),DEVNOS(3),IERR,HELPS(NOPT),HELPE(NOPT), + DEVNOS(5),HELPF,MAXGEL,MAXGLM,IDM) NGELS=0 NCONTS=0 IF(IERR.EQ.0)IOPEN=0 CALL INITLU(IDM) SHONAM = NAMPRO(1:MAX(1,INDEX(NAMPRO,'.'))+1) CALL SHOWFI(KBOUT,SHONAM) GO TO 10 END IF IF(ANS.EQ.0)THEN C CALL SHOWFU(KBOUT,'Open database') NGELS=0 NCONTS=0 CALL DBOPEN(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,NAMPRO,GEL, + IDBSIS,IDBSIZ,JERR,KBIN,KBOUT,DEVNOS(1),DEVNOS(2),DEVNOS(3), + MAXGEL,MAXGLM,LLINO,IDM, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5)) IF(JERR.EQ.0)IOPEN=0 IF(NGELS.GT.0)CALL DBSTAT(RELPG,LNGTHG,LNBR,RNBR,NGELS, + NCONTS,IDBSIZ,KBOUT) CALL INITLU(IDM) SHONAM = NAMPRO(1:MAX(1,INDEX(NAMPRO,'.'))+1) CALL SHOWFI(KBOUT,SHONAM) GO TO 10 END IF END IF C STOP IF(NOPT.EQ.2)THEN IF(NGELS.GT.0)CALL DBSTAT(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS, + IDBSIZ,KBOUT) GO TO 9999 END IF C clear all C IF(NOPT.EQ.10)THEN C CALL SHOWFU(KBOUT,'Clear graphics') CALL CLEARG GO TO 10 END IF C clear VT100 C IF(NOPT.EQ.11)THEN C CALL SHOWFU(KBOUT,'Clear text') CALL CLEARV GO TO 10 END IF C C xhairs C IF(NOPT.EQ.13) THEN C CALL SHOWFU(KBOUT,'Use xhair') CALL XHSAP(RELPG,LNGTHG,LNBR,RNBR, + IDBSIZ,NCONTS,LLINO,LINCON,LREG,RREG, + WINDOW,IGWIND,LENCON,IDEPTH,JDEPTH, + MARGL,MARGR,MARGB,MARGT,TOPOPT,ISXMAX,ISYMAX,KBIN,IDEV, + KBOUT,GEL,GEL2,DEVNOS(2),DEVNOS(3),LINLEN,PERCD,MAXGEL,IDM, + SEQ1,MAXSEQ,NGELS,TEMP3,ECHRSZ,MAXGL2,GEL3,GEL4,33,34,29, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),MXGOOD) GO TO 10 END IF C C CHANGE MARGINS C IF(NOPT.EQ.14)THEN C CALL SHOWFU(KBOUT,'Change margins') CALL MARGC(ISXMAX,ISYMAX,MARGL,MARGR,MARGB,MARGT, + HELPS(NOPT),HELPE(NOPT),TOPOPT,HELPF,DEVNOS(5),KBIN,KBOUT) GO TO 10 END IF C ruler C IF(NOPT.EQ.12) THEN LENCON = RREG - LREG + 1 IF(LENCON.GT.0) THEN C CALL SHOWFU(KBOUT,'Show ruler') CALL RULER(LREG,RREG,MARGL,MARGR, + MARGB(NOPT),MARGT(NOPT),ISXMAX,ISYMAX,KBIN,KBOUT,1, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5)) GO TO 10 END IF END IF C labler IF(NOPT.EQ.15)THEN C CALL SHOWFU(KBOUT,'Label diagram') CALL LABLER(KBIN,KBOUT,ISXMAX,ISYMAX, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5)) GO TO 10 END IF IF(NOPT.EQ.16) THEN C CALL SHOWFU(KBOUT,'Plot map') C map LENCON = RREG - LREG + 1 IF(LENCON.GT.0) THEN CALL PLTMAP(DEVNOS(4),FILNAM,LENCON,MARGL,MARGR,MARGB(NOPT), + MARGT(NOPT),ISXMAX,ISYMAX,LREG,RREG,KBIN,KBOUT, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5)) END IF GO TO 10 END IF IF((NOPT.EQ.21).AND.(IOPEN.EQ.0))THEN C CALL SHOWFU(KBOUT,'Enter new gel reading') C ENTER CALL ENTER(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS, + GEL,GEL2,IDBSIZ,IDEV,KBIN,KBOUT,DEVNOS(1),DEVNOS(2), + DEVNOS(3),DEVNOS(4),LINLEN,PERCD,FILNAM, + HELPS(NOPT),HELPE(NOPT),HELPS(4),HELPE(4),HELPF,DEVNOS(5), + MAXGEL,IDM,LLINO) GO TO 10 END IF IF((NOPT.EQ.25).AND.(IOPEN.EQ.0))THEN C CALL SHOWFU(KBOUT,'Show relationships') C PRINT DB CALL DBPRNT(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,IDBSIZ,IDEV, + KBIN,KBOUT,DEVNOS(3),LLINO, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5)) GO TO 10 END IF IF((NOPT.EQ.5).AND.(IOPEN.EQ.0))THEN C CALL SHOWFU(KBOUT,'Display contig') C DISPLAY CALL GETLN(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,LINCON, + LLINO,IERR,IDBSIZ,KBIN,KBOUT,DEVNOS(3), + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5)) IF(IERR.EQ.0)THEN CALL GETREG(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS, + 1,RELPG(LINCON),LREG,RREG,LINCON,LLINO,IDBSIZ,KBIN,KBOUT, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),IERR) IF(IERR.EQ.0)THEN CALL DSPLAY(RELPG,LNGTHG,LNBR,RNBR, + GEL,LLINO,LINCON,LREG,RREG,GEL2,I1,I2,0,I,IDBSIZ,IDEV,KBOUT, + DEVNOS(2),DEVNOS(3),LINLEN,PERCD,MAXGEL,IDM) END IF END IF GO TO 10 END IF 200 CONTINUE IF((NOPT.EQ.22).AND.(IOPEN.EQ.0))THEN C CALL SHOWFU(KBOUT,'Join contigs') C JOIN WRITE(KBOUT,1006) 1006 FORMAT(' Which contigs do you want to join ?') WRITE(KBOUT,1017) 1017 FORMAT( ' Left contig') LLINOL = 0 LLINOR = 0 CALL GETLN(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,LNCONL,LLINOL, + IERR,IDBSIZ,KBIN,KBOUT,DEVNOS(3), + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5)) IF(IERR.EQ.0)THEN WRITE(KBOUT,1018) 1018 FORMAT( ' Right contig') CALL GETLN(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS, + LNCONR,LLINOR,IERR,IDBSIZ,KBIN,KBOUT,DEVNOS(3), + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5)) IF(IERR.EQ.0)THEN C CHECK TO SEE IF MAKING A CIRCLE! IF(LLINOL.EQ.LLINOR)THEN WRITE(KBOUT,*)' Making circles is not allowed!' GO TO 200 END IF CALL JOIN(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS, + LNCONL,LLINOL,LNCONR,LLINOR,GEL,GEL2, + IDBSIZ,IDEV,KBIN,KBOUT,DEVNOS(1),DEVNOS(2), + DEVNOS(3),LINLEN,PERCD, + HELPS(NOPT),HELPE(NOPT),HELPS(4),HELPE(4),HELPF,DEVNOS(5), + MAXGEL,IDM) END IF END IF GO TO 10 END IF IF((NOPT.EQ.23).AND.(IOPEN.EQ.0))THEN C CALL SHOWFU(KBOUT,'Complement contig') C COMPLEMENT CALL GETLN(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS, + LINCON,LLINO,IERR,IDBSIZ,KBIN,KBOUT,DEVNOS(3), + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5)) IF(IERR.EQ.0)THEN CALL CMPLMT(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS, + LINCON,LLINO,GEL,IDBSIZ,KBOUT,DEVNOS(1),DEVNOS(2), + MAXGEL) END IF GO TO 10 END IF C EDIT IF((NOPT.EQ.4).AND.(IOPEN.EQ.0))THEN C EDIT DB CALL GETLN(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,LINCON, + LLINO,IERR,IDBSIZ,KBIN,KBOUT,DEVNOS(3), + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5)) IF(IERR.EQ.0)THEN CALL DBEDIT(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS, + GEL,LINCON,0,0,IDBSIZ,KBIN,KBOUT,DEVNOS(1),DEVNOS(2), + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),MAXGEL) END IF GO TO 10 END IF C PLOT SINGLE CONTIG IF((NOPT.EQ.33).AND.(IOPEN.EQ.0))THEN CALL GETLN(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,LINCON, + LLINO,IERR,IDBSIZ,KBIN,KBOUT,DEVNOS(3), + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5)) IF(IERR.EQ.0)THEN CALL GETREG(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS, + 1,RELPG(LINCON),LREG,RREG,LINCON,LLINO,IDBSIZ,KBIN,KBOUT, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),IERR) IF(IERR.EQ.0)THEN LENCON = RREG - LREG + 1 CALL FDEPTH(RELPG,LNGTHG,LNBR,RNBR, + IDBSIZ,LLINO,LREG,RREG,LENCON, + MARGL,MARGR,MARGB(NOPT),MARGT(NOPT),ISXMAX,ISYMAX) END IF END IF GO TO 10 END IF IF((NOPT.EQ.26).AND.(IOPEN.EQ.0))THEN C CALL SHOWFU(KBOUT,'Alter relationships') C FIX CALL DBFIX(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS, + GEL,GEL2,IDBSIZ,KBIN,KBOUT,DEVNOS(1),DEVNOS(2),DEVNOS(3), + HELPS(NOPT),HELPE(NOPT), + HELPS(4),HELPE(4),HELPF,DEVNOS(5),MAXGEL) GO TO 10 END IF IF((NOPT.EQ.24).AND.(IOPEN.EQ.0))THEN C CALL SHOWFU(KBOUT,'Copy database') C COPY CALL DBCOPY(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,GEL, + NAMPRO,DEVNOS(4),IDBSIZ,JERR,KBIN,KBOUT,DEVNOS(1), + DEVNOS(2),DEVNOS(3), + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),MAXGEL,MAXDB,IDM) GO TO 10 END IF IF((NOPT.EQ.19).AND.(IOPEN.EQ.0))THEN C CALL SHOWFU(KBOUT,'Check database for consistency') C CHECK CALL DBCHEK(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,IDBSIZ, + TEMP1,IERR,KBOUT) GO TO 10 END IF IF((NOPT.EQ.29).AND.(IOPEN.EQ.0))THEN C CALL SHOWFU(KBOUT,'Examine quality') C SCAN IDIM1=MAXSEQ CALL DBSCAN(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,SEQ1, + IDIM1,GEL,IDBSIZ,TEMP3,2,ECHRSZ,MAXGL2, + KBIN,KBOUT,DEVNOS(2),IDEV,LINLEN,PERCD, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),MAXGEL,GEL3,GEL4, + MARGL,MARGR,MARGB(NOPT),MARGT(NOPT),ISXMAX,ISYMAX,DEVNOS(3), + LLINO,LINCON,LREG,RREG,MXGOOD) GO TO 10 END IF IF((NOPT.EQ.8).AND.(IOPEN.EQ.0))THEN C CALL SHOWFU(KBOUT,'Make consensus') C CONSENSUS IDIM1=MAXSEQ CALL CONSEN(RELPG,LNGTHG,LNBR,RNBR,NAMPRO,NGELS,NCONTS,SEQ1, + IDIM1,GEL,IDBSIZ,TEMP1,ECHRSZ,MAXGL2, + KBIN,KBOUT,DEVNOS(2),DEVNOS(4),FILNAM, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),MAXGEL,IDM,PERCD, + DEVNOS(3),LLINO) CLOSE(UNIT=DEVNOS(4)) GO TO 10 END IF IF(NOPT.EQ.7)THEN C CALL SHOWFU(KBOUT,'Redirect output') CALL REDIR(IDEV,DEVNOS(6),DEVNOS(10),IGORT,FILNAM,KBIN,KBOUT, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),KOPT) GO TO 10 END IF C HELP IF(NOPT.EQ.1)THEN C CALL SHOWFU(KBOUT,'Help') C HELP CALL HELP(HELPS,HELPE,BOTOPT,TOPOPT, + HELPF,DEVNOS(5),KBIN,KBOUT) GO TO 10 END IF IF(NOPT.EQ.27)THEN C CALL SHOWFU(KBOUT,'Set parameters') C SET DISPLAY PARAMETERS MN = 10 MX = 100 CALL GETINT(MN,MX,LINLEN,'Display line length', + IVAL,KBIN,KBOUT,HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),IOK) IF(IOK.EQ.0) LINLEN = IVAL IPCMIN = 51 IPCMAX = 100 IPCD = INT(PERCD*100.) CALL GETINT(IPCMIN,IPCMAX,IPCD, + 'Percentage score for consensus', + IPVAL,KBIN,KBOUT,HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),IOK) IF(IOK.EQ.0) THEN PERCD = REAL(IPVAL)/100. END IF MN = 1 MX = MAXGLM CALL GETINT(MN,MX,MXGOOD, + 'Maximum read length for quality analysis', + IVAL,KBIN,KBOUT,HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),IOK) IF(IOK.EQ.0) MXGOOD = IVAL MN = 1 MX = MAXSEQ CALL GETINT(MN,MX,WINDOW,'Text window length', + IVAL,KBIN,KBOUT,HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),IOK) IF(IOK.EQ.0) WINDOW = IVAL MN = 1 MX = MAXSEQ CALL GETINT(MN,MX,IGWIND,'Graphics window length', + IVAL,KBIN,KBOUT,HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),IOK) IF(IOK.EQ.0) IGWIND = IVAL GO TO 10 END IF IF(NOPT.EQ.6)THEN C CALL SHOWFU(KBOUT,'Display text file') CALL TTEXT(DEVNOS(4),FILNAM,KBIN,KBOUT, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5)) CLOSE(UNIT=DEVNOS(4)) GO TO 10 END IF IF(NOPT.EQ.28) THEN C CALL SHOWFU(KBOUT,'Highlight disagreements') CALL HIGHLT(SEQ1,SEQ1(6001),SEQ1(10001),KBIN,KBOUT, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),DEVNOS(7), + DEVNOS(8),FILE,IOK) CLOSE(UNIT=DEVNOS(7)) CLOSE(UNIT=DEVNOS(8)) GO TO 10 END IF IF((NOPT.EQ.34).AND.(IOPEN.EQ.0))THEN C CALL SHOWFU(KBOUT,'Plot contigs') C PLOT ALL CONTIGS CALL PLC(RELPG,LNGTHG,LNBR,RNBR,IDBSIZ,0,0, + NCONTS,MARGL,MARGR,MARGB(NOPT),MARGT(NOPT),ISXMAX,ISYMAX) GO TO 10 END IF C AUTO EDIT IF((NOPT.EQ.30).AND.(IOPEN.EQ.0))THEN C CALL SHOWFU(KBOUT,'AutoEdit a contig') WRITE(KBOUT,*)'Make a copy first!' CALL GETLN(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,LINCON, + LLINO,IERR,IDBSIZ,KBIN,KBOUT,DEVNOS(3), + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5)) IF(IERR.EQ.0)THEN CALL GETREG(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS, + 1,RELPG(LINCON),LREG,RREG,LINCON,LLINO,IDBSIZ,KBIN,KBOUT, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),IERR) IF(IERR.EQ.0) THEN IDIM1=MAXSEQ CALL SUMMER(RELPG,LNGTHG,LNBR,RNBR,NGELS,NCONTS,SEQ1,IDIM1, + GEL,LREG,RREG,LLINO,IDBSIZ,TEMP1,ECHRSZ,MAXGL2, + DEVNOS(2),MAXGEL,IDM,PERCD) CALL AEDIT(RELPG,LNGTHG,LNBR,RNBR,IDBSIZ,LLINO,LINCON, + GEL,MAXGEL,SEQ1,IDIM1,DEVNOS(2),DEVNOS(1),LREG,RREG, + KBOUT) END IF END IF GO TO 10 END IF IF((NOPT.EQ.9).AND.(IOPEN.EQ.0)) THEN C CALL SHOWFU(KBOUT,'Screen Edit a contig') CALL CEDT(KBIN,KBOUT, + POSNS(1),POSNS(1001),POSNS(2001), + MAXDB,POSNS(3001),POSNS(3101),50, + RELPG,LNGTHG,LNBR,RNBR, + IDBSIZ,NGELS,NCONTS,GEL,GEL2,MAXGEL,LINCON,PERCD,IDM, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),DEVNOS(4), + DEVNOS(1),DEVNOS(2),DEVNOS(3),LINLEN,FILNAM,LLINO,IOK) GO TO 10 END IF IF(NOPT.EQ.17) THEN C CALL SHOWFU(KBOUT,'Screen for restriction sites') CALL SCRENR(GEL2,MAXGEL,GEL3,NAMARC,FILE, + DEVNOS(4),DEVNOS(7),DEVNOS(8),DEVNOS(9),IDEV,KBIN,KBOUT, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5)) CLOSE(UNIT=DEVNOS(4)) CLOSE(UNIT=DEVNOS(7)) CLOSE(UNIT=DEVNOS(8)) CLOSE(UNIT=DEVNOS(9)) GO TO 10 END IF IF(NOPT.EQ.18) THEN C CALL SHOWFU(KBOUT,'Screen against vector') CALL SCRENV(MAXGEL,WORDP,WORDN,LPOWRC,POSNS,GELN, + SEQ1,MAXSEQ,GEL2,GEL3,GEL4,LENGTH, + SAV1,SAV2,SAV3,MAXSAV,CENDS,NENDS,MAXCON,CONST, + KBIN,KBOUT,DEVNOS(4),DEVNOS(7),DEVNOS(8),DEVNOS(9),IDEV, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),NAMARC,FILE,IOK) CLOSE(UNIT=DEVNOS(4)) CLOSE(UNIT=DEVNOS(7)) CLOSE(UNIT=DEVNOS(8)) CLOSE(UNIT=DEVNOS(9)) GO TO 10 END IF IF((NOPT.EQ.20).AND.(IOPEN.EQ.0)) THEN C CALL SHOWFU(KBOUT,'Auto assemble sequences') CALL DBAUTO(RELPG,LNGTHG,LNBR,RNBR,MAXDB,IDBSIZ, +NGELS,NCONTS,MAXGEL, +TEMP1,WORDP,WORDN,LPOWRC,POSNS,GELN, +SEQ1,MAXSEQ,GEL2,GEL3,GEL4,SEQ5,SEQC2,SEQG2,GEL, +MAXGLM,MAXGL2,CHRSIZ,ECHRSZ,LENGTH, +SAV1,SAV2,SAV3,MAXSAV,CENDS,NENDS,MAXCON,CONST, +KBIN,KBOUT,DEVNOS(1),DEVNOS(2),DEVNOS(3), +DEVNOS(4),DEVNOS(7),DEVNOS(8),IDEV, +HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),NAMARC,NAMPRO,FILE, +PERCD,IOPEN,IDM,SEQG3,SEQC3,IOK) CLOSE(UNIT=DEVNOS(4)) CLOSE(UNIT=DEVNOS(7)) CLOSE(UNIT=DEVNOS(8)) GO TO 10 END IF IF((NOPT.EQ.35).AND.(IOPEN.EQ.0).AND.(IDM.EQ.5)) THEN C CALL SHOWFU(KBOUT,'Find internal joins') CALL AUTOJ(RELPG,LNGTHG,LNBR,RNBR,MAXDB,IDBSIZ, +NGELS,NCONTS,MAXGEL, +TEMP1,WORDP,WORDN,LPOWRC,POSNS,GELN, +SEQ1,MAXSEQ,GEL2,GEL3,GEL4,SEQ5,SEQC2,SEQG2,GEL, +MAXGLM,MAXGL2,CHRSIZ,ECHRSZ,LENGTH, +SAV1,SAV2,SAV3,MAXSAV,CENDS,NENDS,MAXCON,CONST, +KBIN,KBOUT,DEVNOS(1),DEVNOS(2),DEVNOS(3), +DEVNOS(4),DEVNOS(7),DEVNOS(8),IDEV, +HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),NAMARC,NAMPRO,FILE, +PERCD,IOPEN,IDM,SEQG3,SEQC3,IOK) CLOSE(UNIT=DEVNOS(4)) CLOSE(UNIT=DEVNOS(7)) CLOSE(UNIT=DEVNOS(8)) GO TO 10 END IF IF((NOPT.EQ.32).AND.(IOPEN.EQ.0)) THEN C CALL SHOWFU(KBOUT,'Extract gel readings') CALL GELOUT(RELPG,LNGTHG,LNBR,RNBR,MAXDB,IDBSIZ,NGELS, + NCONTS,GEL,MAXGEL,DEVNOS(2),DEVNOS(3),DEVNOS(4),DEVNOS(7), + KBIN,KBOUT, + HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5),FILE) CLOSE(UNIT=DEVNOS(4)) GO TO 10 END IF IF(NOPT.EQ.31) THEN C CALL SHOWFU(KBOUT,'Type in gel readings') CALL BATIN(SEQ1,MAXSEQ,KBIN,KBOUT, + DEVNOS(4),DEVNOS(7),IDEV, + FILNAM,HELPS(NOPT),HELPE(NOPT),HELPF,DEVNOS(5)) GO TO 10 END IF IF((NOPT.GT.3).AND.(IOPEN.NE.0))THEN WRITE(KBOUT,1012) 1012 FORMAT(' You have not opened a database!') GO TO 10 END IF GO TO 10 9999 CONTINUE CALL SHUTD END