character line*120,coded*120,key*40 character text(20000)*1,code(20000)*1 integer nkey(40) do 49 i=1,120 coded(i:i)=' ' line(i:i)=' ' 49 continue 46 write (*,*)'What is the key word?' read(*,*)key do 55 i=1,40 nkey(i)=ichar(key(i:i)) if(nkey(i).ge.97.and.nkey(i).le.122)nkey(i)=nkey(i)-32 if(nkey(i).ge.65.and.nkey(i).le.90)then nkey(i)=nkey(i)-65 nk=i else go to 47 end if write(*,*)i,key(i:i),nkey(i) 55 continue 47 write(*,*)'Do you want to (1) encode or (2) decode?' read(*,*)icode if(icode.ne.1.and.icode.ne.2)go to 47 45 write(*,*)'Do you want (1) UPPER CASE or (2) lower case' read(*,*)icase if(icase.ne.1.and.icase.ne.2)go to 45 n=0 open(8,file="Vigenere.txt",form="formatted") 1 read(8,1000,end=2)line write(*,1000)line c do 47 i=1,120 c 47 write(*,*)line(i:i),ichar(line(i:i)) 1000 format(a120) do 15 i=1,120 nl=ichar(line(i:i)) if(nl.ge.97.and.nl.le.122)then nl=nl-32 end if if(nl.ge.65.and.nl.le.90)then n=n+1 text(n)=char(nl) end if c write(*,*)line(i:i),i,n,text(n),nl 15 continue go to 1 2 close(8) write(*,2000)(text(i),i=1,n) do 56 i=1,n nl = ichar(text(i)) ik = mod(i-1,nk)+1 ishift = nkey(ik) if(icode.eq.1)then nl = nl + ishift else nl = nl - ishift end if if(nl.gt.90)nl=nl-26 if(nl.lt.65)nl=nl+26 c write(*,*)i,ik,ishift,nl,text(i)//' '//char(nl) if(icase.eq.2)nl=nl+32 code(i)=char(nl) 56 continue write(*,*) write(*,2000)(code(i),i=1,n) 2000 format(60a1) stop end