mmb1.bas page 1 - daniloroccatano.files.wordpress.com · mmb1.bas page 2 m1%=menu(1) on m0% gosub...

21
mmb1.bas Page 1 ''''''''''''''''''''''''''''''''''' ' M.M.B.v1.0 ' ' ' ' ' 'by DANILO ROCCATANO 1989/1991 ' ''''''''''''''''''''''''''''''''''' CLEAR,50000&:CLEAR ,200000& SCREEN 1,640,256,4,2 WINDOW 1, "M.M.B.v1.0:COORDINATES EDITOR",(0,0)(631,238),6,1 LIBRARY"DF0:graphics.library" GOSUB INIZIALIZZA:color 15,0 NMAX%=500+8:NLEG%=6:LML%=500 DIM FR(NMAX%,3),IT(NMAX%,3), rim(NMAX%,3),CO%(NMAX%,NLEG%,1),nopo%(lml%) DIM filename$(LML%),COCELLA%(8,5,1) DIM ORD(NMAX%,1),LUN(12,12,3),mtx(35),SIM(9,11) DEF FNARCSIN(ANGR)=ATN(ANGR/SQR(ANGR*ANGR+1)) PI=ATN(1)*4:PATH$="df0:molecules/": F=57.29578:' Fattore radianti X=0:Y=0:z=0:COLR%=1:DEVIC$="SCRN:":CME%=1:NS%=0:ACH%=0:NNM$="" dw%=400:' Distanza Window di%=900:' Distanza Immagine sf=2.5 :' Fattore di scala ax%=0:ay%=0:az%=0 px%=320:py%=90 incX%=40:INCY%=40:INCZ%=40:FLAGS=0:ctr%=0:CELL%=0 LETTURADATI: FOR T%=1 TO 12:FOR K%=1 TO 12 READ LUN(T%,K%,0) NEXT K%,T% FOR T%=0 TO 35 :READ mtx(T%):NEXT FOR TT%=1 TO 3 FOR T%=4 TO 9 FOR K%=1 TO 12 IF LUN(T%,K%,0)<> 1 THEN LUN(T%,K%,TT%)=mtx(p%):p%=p%+1 NEXT K%,T%,TT% ERASE MTX: DIM ATE(9,9) FOR T%=0 TO 7 FOR TT%=0 TO 2 READ COCELLA%(T%,TT%*2,0) READ COCELLA%(T%,TT%*2+1,1) NEXT TT% NEXT T% GOSUB CARICALISTA ON MENU GOSUB menus ON MOUSE GOSUB MOUS MENU ON 'DATI MATRICE LUN DATA 1,1,1,1,1,1,1,1,1,1,1,1 DATA 1,1,1,1,1,1,1,1,1,1,1,1 DATA 1,1,1,1,1,1,1,1,1,1,1,1 DATA 1,1,1,3,3,2,1,2,1,1,1,1 DATA 1,1,1,3,2,1,1,1,1,1,1,1 DATA 1,1,1,2,1,1,1,2,2,1,1,1 DATA 1,1,1,1,1,1,1,1,1,1,1,1 DATA 1,1,1,2,1,2,1,1,1,1,1,1 DATA 1,1,1,1,1,2,1,1,1,1,1,1 DATA 1,1,1,1,1,1,1,1,1,1,1,1 DATA 1,1,1,1,1,1,1,1,1,1,1,1 DATA 1,1,1,1,1,1,1,1,1,1,1,1 'DATI PER MATRICE MTX DATA 2.372,2.161,2.016,3.312,2.161,2.19,2.016,2.372,2.56,3.312,2.378,2.56 DATA 1.769,1.44,1.488,2.89,1.44,1.44,1.488,1.99,2.25,2.89,1.99,2.25 DATA 1.44,1.346,1,1,1.346,1,1,1,1,1,1,1 'DATI PER MATRICE COCELLA DATA 0,2,0,4,0,5,1,1,0,3,0,6,1,2,1,4,0,7,0,1,1,3,0,8,0,1,0,6,1,8,1,2,0,5,1,7 DATA 1,3,1,6,1,8,0,4,1,5,1,7 main: SLEEP GOTO main menus: M0%=MENU(0)

Upload: others

Post on 15-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 1

'''''''''''''''''''''''''''''''''''' M.M.B.v1.0 '' ' ' ''by DANILO ROCCATANO 1989/1991 '''''''''''''''''''''''''''''''''''' CLEAR,50000&:CLEAR ,200000&SCREEN 1,640,256,4,2WINDOW 1, "M.M.B.v1.0:COORDINATES EDITOR",(0,0)−(631,238),6,1LIBRARY"DF0:graphics.library"GOSUB INIZIALIZZA:color 15,0NMAX%=500+8:NLEG%=6:LML%=500DIM FR(NMAX%,3),IT(NMAX%,3), rim(NMAX%,3),CO%(NMAX%,NLEG%,1),nopo%(lml%)DIM filename$(LML%),COCELLA%(8,5,1)DIM ORD(NMAX%,1),LUN(12,12,3),mtx(35),SIM(9,11) DEF FNARCSIN(ANGR)=ATN(ANGR/SQR(−ANGR*ANGR+1))PI=ATN(1)*4:PATH$="df0:molecules/": F=57.29578:' Fattore radiantiX=0:Y=0:z=0:COLR%=1:DEVIC$="SCRN:":CME%=1:NS%=0:ACH%=0:NNM$="" dw%=400:' Distanza Windowdi%=900:' Distanza Immaginesf=2.5 :' Fattore di scalaax%=0:ay%=0:az%=0px%=320:py%=90 incX%=40:INCY%=40:INCZ%=40:FLAGS=0:ctr%=0:CELL%=0LETTURADATI:FOR T%=1 TO 12:FOR K%=1 TO 12 READ LUN(T%,K%,0)NEXT K%,T%FOR T%=0 TO 35 :READ mtx(T%):NEXT FOR TT%=1 TO 3 FOR T%=4 TO 9 FOR K%=1 TO 12 IF LUN(T%,K%,0)<> 1 THEN LUN(T%,K%,TT%)=mtx(p%):p%=p%+1 NEXT K%,T%,TT% ERASE MTX: DIM ATE(9,9)FOR T%=0 TO 7 FOR TT%=0 TO 2 READ COCELLA%(T%,TT%*2,0) READ COCELLA%(T%,TT%*2+1,1) NEXT TT%NEXT T%GOSUB CARICALISTAON MENU GOSUB menusON MOUSE GOSUB MOUSMENU ON

'DATI MATRICE LUNDATA 1,1,1,1,1,1,1,1,1,1,1,1DATA 1,1,1,1,1,1,1,1,1,1,1,1DATA 1,1,1,1,1,1,1,1,1,1,1,1DATA 1,1,1,3,3,2,1,2,1,1,1,1DATA 1,1,1,3,2,1,1,1,1,1,1,1DATA 1,1,1,2,1,1,1,2,2,1,1,1DATA 1,1,1,1,1,1,1,1,1,1,1,1DATA 1,1,1,2,1,2,1,1,1,1,1,1DATA 1,1,1,1,1,2,1,1,1,1,1,1DATA 1,1,1,1,1,1,1,1,1,1,1,1DATA 1,1,1,1,1,1,1,1,1,1,1,1DATA 1,1,1,1,1,1,1,1,1,1,1,1

'DATI PER MATRICE MTXDATA 2.372,2.161,2.016,3.312,2.161,2.19,2.016,2.372,2.56,3.312,2.378,2.56DATA 1.769,1.44,1.488,2.89,1.44,1.44,1.488,1.99,2.25,2.89,1.99,2.25DATA 1.44,1.346,1,1,1.346,1,1,1,1,1,1,1

'DATI PER MATRICE COCELLADATA 0,2,0,4,0,5,1,1,0,3,0,6,1,2,1,4,0,7,0,1,1,3,0,8,0,1,0,6,1,8,1,2,0,5,1,7DATA 1,3,1,6,1,8,0,4,1,5,1,7

main: SLEEP GOTO mainmenus: M0%=MENU(0)

Page 2: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 2

m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1menus1: RETURNPROJ: MOUSE OFF ON m1% GOSUB CARICALISTA, LOA,SAV,FINE MOUSE ON RETURNLEG: IF M1%=3 THEN ERASE CO%:DIM CO%(NMAX%,NLEG%,1) MENU 2,6,0:MENU 2,8,0:MENU 3,2,0 END IF FOR t%=1 TO 5:MENU t%,0,0:NEXT t% WINDOW 3,"",(0,0)−(631,58),6,1:WINDOW OUTPUT 3 ON m1% GOSUB GENERA,COR WINDOW CLOSE 3:WINDOW OUTPUT 1 FOR t%=1 TO 5:MENU t%,0,1:NEXT t% RETURN ATOM: IF M1%=8 THEN IF FLA%=1 THEN FLA%=0:MENU 2,8,1:NMOL%=N%:MENU 2,9,0 IF CELL%=1 THEN CELL%=0:MENU 4,8,1 GOSUB baricentro:GOSUB rotate1:GOSUB autodim:GOSUB disegna:RETURN ELSE MENU 2,8,2:FLA%=1:MENU 2,9,1:MOUSE OFF GOSUB AUTOPACKING:GOSUB disegna:MOUSE ON:RETURN END IF END IF IF M1%=9 THEN SOUND 440,10,100:FLA%=0:N%=NMOL%:NP=N%:MENU 2,8,1:MENU 2,9,0:RETURN IF M1%=7 THEN CLS:GOSUB CONF IF CONF%=1 THEN GOSUB DISEGNA:RETURN ELSE GOSUB ASIM6:RETURN END IF END IF IF CELL%=1 THEN CELL%=0:NMOL%=NMOL%−8 FOR t%=1 TO 5:MENU t%,0,0:NEXT t%:MENU OFF WINDOW 3,"",(0,0)−(631,58),6,1:WINDOW OUTPUT 3 ON m1% GOSUB INSERISCI,MODIFICA,AGGIUNGI,CELLA,NOTE,SIM WINDOW CLOSE 3:WINDOW OUTPUT 1 FOR t%=1 TO 5:MENU t%,0,1:NEXT t%:MENU ON RETURNRAPP: m1%=MENU(1) IF M1%>=3 AND M1%<=5 THEN ROTA IF m1%=2 THEN IF FLAGS=1 THEN MENU 4,2,1:MENU 4,1,1:flags=0 ELSE MENU 4,2,2:MENU 4,1,1:flags=1 IF M1%=1 THEN IF FLAGS=2 THEN MENU 4,1,1:MENU 4,2,1:flags=0 ELSE MENU 4,1,2:MENU 4,2,1:flags=2 IF m1%=6 THEN GOSUB AUTODIM IF M1%=7 THEN GOSUB PARAMETRI:GOSUB CENTRA IF m1%=8 THEN IF CELL%=1 THEN CELL%=0:NMOL%=NMOL%−8:MENU 4,8,1 GOSUB AUTODIM ELSE MENU 4,8,2:GOSUB DEFCELLA END IF END IF IF M1%=9 THEN IF TEST%=1 THEN TEST%=0:MENU 4,9,1 ELSE TEST%=1:MENU 4,9,2 END IF GOSUB DISEGNA RETURNOUP: MOUSE OFF IF M1%=1 THEN

Page 3: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 3

MENU 5,2,1:MENU 5,3,1:MENU 5,1,2:DEVIC$="SCRN:":CME%=1 END IF IF M1%=2 THEN IF CME%=2 THEN MENU 5,2,1 :MENU 5,1,1:DEVIC$="SCRN:" ELSE MENU 5,1,1:MENU 5,3,1:MENU 5,2,2:DEVIC$="LPT1:":CME%=2 END IF IF M1%=3 THEN IF CME%=3 THEN MENU 5,3,1 :MENU 5,1,1:DEVIC$="SCRN:" ELSE MENU 5,1,1:MENU 5,3,1:MENU 5,3,2:DEVIC$="DF0:"+CDE$+".LIST":PRINT "NOME FILE:";CDE$+".LIST":CME%=3 END IF IF M1%=5 THEN IF CME1%(0)=1 THEN MENU 5,5,1:CME1%(0)=0 ELSE MENU 5,5,2:CME1%(0)=1 IF M1%=6 THEN IF CME1%(1)=1 THEN MENU 5,6,1:CME1%(1)=0 ELSE MENU 5,6,2:CME1%(1)=1 IF M1%=7 THEN IF CME1%(2)=1 THEN MENU 5,7,1:CME1%(2)=0 ELSE MENU 5,7,2:CME1%(2)=1 IF M1%=8 THEN IF CME1%(3)=1 THEN MENU 5,8,1:CME1%(3)=0 ELSE MENU 5,8,2:CME1%(3)=1 IF M1%=10 THEN GOSUB STAMPA MOUSE ON RETURNMous: IF ROT%<=−1 THEN STATUS$="ROTAZIONE":GOSUB ROTA1:GOSUB DISEGNA ELSE STATUS$=" " RETURNROTA: IF m1%=3 THEN ROTX%=NOT ROTX%:MENU 4,3,1−ROTX% IF m1%=4 THEN ROTY%=NOT ROTY%:MENU 4,4,1−ROTY% IF m1%=5 THEN ROTZ%=NOT ROTZ%:MENU 4,5,1−ROTZ% ROT%=ROTX%+ROTY%+ROTZ% IF ROT%=0 THEN RETURNROTA1: IF ROTX%=−1 THEN ax%=ax%+incx%:AX%=AX% MOD 360 IF ROTY%=−1 THEN ay%=ay%+incy%:AY%=AY% MOD 360 IF ROTZ%=−1 THEN az%=az%+incz%:AZ%=AZ% MOD 360 RETURN

INSERISCI: MOUSE OFF CLS:IF FILE%=LML% THEN PRINT "LISTA MOLECOLE COMPLETA":BEEP:RETURN MENU 2,4,1:MENU 1,3,1:MENU 5,0,1:MENU 2,5,1:MENU 2,6,1 MENU 2,2,1:MENU 2,3,1 :MENU 3,0,1:N%=0:ctt%=0:INSE%=0 GOSUB cellain1: LOCATE 1,1:PRINT "NOME DELLA MOLECOLA:" LOCATE 2,1:LINE INPUT NM$ GOSUB conf IF conf%=1 THEN in1 NN%=1:CLS:LOCATE 1,1:PRINT"MOLECOLA N.:";FILE%+1 CDX%=VAL(LEFT$(filename$(file%),5)) CDX%=CDX%+1:CDE$=MID$(STR$(CDX%),2):CDE$=STRING$(5−LEN(CDE$),"0")+CDE$ NNM$=CDE$+NM$:inse%=1:ERASE CO%:DIM CO%(NMAX%,NLEG%,1) LOCATE 2,1:PRINT NM$ inser1: LOCATE 3,1:PRINT"ATOMO N.";NN% INSER2: LOCATE 5,1:PRINT SPACE$(35):LOCATE 5,1:INPUT"TIPO DI ATOMO([−1]−−>ESCI):",TA$ IF TA$="" AND NN%<>1 THEN IF ta1$="" THEN inser2 ELSE TA$=TA1$ 'ASSEGNA LO STESSO SIMBOLO DELL'ATOMO PRECEDENTE SE SI PREME "" IF TA$="−1" THEN N%=NN%−1:CLS:INSE%=0:NMOL%=n%:RETURN 'ESCE SE SI DIGITA −1 GOSUB tipo IF TTA%=−1 THEN BEEP:GOTO INSER2 TA1$=TA$:FR(NN%,0)=TA:TA=0 LOCATE 3,40:PRINT"X:";:SR%=3:SC%=43:SP%=20:GOSUB INPVAL:FR(NN%,1)=DATO LOCATE 4,40:PRINT"Y:";:SR%=4:SC%=43:SP%=20:GOSUB INPVAL:FR(NN%,2)=DATO LOCATE 5,40:PRINT"Z:";:SR%=5:SC%=43:SP%=20:GOSUB INPVAL:FR(NN%,3)=DATO NN%=NN%+1:IF nn%>nmax% THEN PRINT "MATRICE ATOMI PIENA":BEEP:PRINT "PREMI UN TASTO":GOSUB CONTR:CLS:N%=NN%−1:RETURN GOTO inser1

'CODIFICA I NOMI A DUE LETTERE DI ALCUNI ATOMItipo:

Page 4: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 4

TA$=UCASE$(TA$):la%=LEN(TA$) IF TA$="MG" THEN TA=181:RETURN IF ta$="FE" THEN TA=200:RETURN IF TA$="NA" THEN TA=201:RETURN IF TA$="LI" THEN TA=202:RETURN IF TA$="CU" THEN TA=203:RETURN IF TA$="AL" THEN TA=204:RETURN IF TA$="CO" THEN TA=205:RETURN IF TA$="MO" THEN TA=206:RETURN IF TA$="NI" THEN TA=207:RETURN IF TA$="CR" THEN TA=208:RETURN IF TA$="MN" THEN TA=209:RETURN IF TA$="PT" THEN TA=210:RETURN IF TA$="CD" THEN TA=211:RETURN T%=1 tipo1: TTA%=ASC(MID$(TA$,T%,1)) IF TTA%<65 OR TTA%>90 THEN TTA%=−1:RETURN IF T%=2 THEN TA=TA+TTA%+32:RETURN TA=TTA% t%=t%+1:IF t%>la% THEN RETURN GOTO tipo1MODIFICA: GOSUB men A%=0:K%=N%:h%=1 :CTR2%=1 GOTO m1bm1: GOSUB CONTRM1B: IF a%=28 THEN K%=K%+1 IF a%=29 THEN K%=K%−1 'CONTROLLA TASTI CURSORE IF a%=31 THEN h%=h%−1 IF a%=30 THEN h%=h%+1 IF K%<1 THEN K%=N% IF K%>N% THEN K%=1 'CONTROLLA LIMITI IF h%<0 THEN h%=3 IF h%>3 THEN h%=0 LOCATE 1,1:PRINT "ATOMO N.";K% LOCATE 2,1 :PRINT SPACE$(20):LOCATE 2,1 IF h%=0 THEN PRINT"TIPO DI ATOMO:"; IF h%=1 THEN PRINT"X: "; IF h%=2 THEN PRINT"Y: "; IF h%=3 THEN PRINT"Z: "; IF h%= 0 THEN kk%=k%:GOSUB ANALISI:PRINT TA$:ELSE PRINT FR(K%,h%) IF a%=32 THEN GOSUB INP 'TASTO {SPACE} IF a%=27 THEN CLS:GOSUB ELABORAZIONE:GOSUB autodim:GOSUB disegna:CTR2%=0:RETURN IF a%=67 THEN GOSUB CANCELLA ' TASTO {C} IF a%=76 THEN GOSUB COORDTAB 'TASTO {L} GOTO m1INP: LOCATE 3,1 IF h%=0 THEN INPUT TA$:GOSUB tipo:ELSE INPUT TA FR(K%,h%)=TA:TA=0 LOCATE 3,1:PRINT SPACE$(10):ctr1%=1 RETURNCANCELLA: GOSUB conf IF conf%=1 THEN RETURN FOR T%=K% TO N%−1 FR(T%,0)=FR(T%+1,0) FR(T%,1)=FR(T%+1,1) FR(T%,2)=FR(T%+1,2) FR(T%,3)=FR(T%+1,3) FOR TT%=0 TO 5 CO%(T%,TT%,0)=CO%(T%+1,TT%,0) CO%(T%,TT%,1)=CO%(T%+1,TT%,1) NEXT tt%,t% FOR T%=1 TO N%−1 FOR TT%=1 TO CO%(T%,0,0) IF CO%(T%,TT%,0)=K% THEN GOSUB cancleg NEXT TT% NEXT T%

Page 5: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 5

N%=N%−1:NMOL%=NMOL%−1:ctr1%=1 RETURNaggiungi: MOUSE OFF:CLS NN%=N%+1:NMOL%=NMOL%+1 GOSUB inser1:CLS GOSUB ELABORAZIONE:RETURNfine: GOSUB conf IF conf%=1 THEN RETURN MENU OFF:SCREEN CLOSE 1 ENDcella: MOUSE OFF MENU 1,2,1:CLS IF ctt%=0 THEN ce PRINT "PARAMETRI DELLA CELLA UNITARIA:" LOCATE 2,1:PRINT"a:";aa:LOCATE 2,15:PRINT"alpha:";al*f LOCATE 3,1:PRINT"b:";bb:LOCATE 3,15:PRINT"beta :";be*f LOCATE 4,1:PRINT"c:";cc:LOCATE 4,15:PRINT"gamma:";ga*f PRINT"VUOI MODIFICARE (S/N)" GOSUB CONTR IF a%=83 THEN ce ELSE CLS:RETURNce: CLS:PRINT "PARAMETRI DELLA CELLA UNITARIA:"C1: LOCATE 2,1:PRINT"a:";:SR%=2:SC%=4:SP%=8:GOSUB INPVAL:AA=DATO LOCATE 2,15:PRINT"alpha:";:SR%=2:SC%=22:SP%=8:gosub inpval:al=DATO LOCATE 3,1:PRINT"b:";:SR%=3:SC%=4:SP%=8:GOSUB INPVAL:BB=DATO LOCATE 3,15:PRINT"beta :";:SR%=3:SC%=22:SP%=8:gosub inpval:BE=DATO LOCATE 4,1:PRINT"c:";:SR%=4:SC%=4:SP%=8:GOSUB INPVAL:CC=DATO LOCATE 4,15:PRINT"gamma:";:SR%=4:SC%=22:SP%=8:gosub inpval:GA=DATO ga=ga*PI/180:be=be*PI/180:al=al*PI/180 GOSUB conf IF conf%=1 THEN C1 CLS:MENU 4,8,1:RETURN

' RIEMPIE MATRICE DEI LEGAMIGENERA: CLS:PRINT "Generatore Matrice dei legami" IF cell%=1 THEN CELL%=0:NMOL%=NMOL%−8:MENU 4,8,1 GOSUB elaborazione ERASE CO% :DIM CO%(NMAX%,NLEG%,1):DIST=1.7 INPUT"INSERISCI LA DISTANZA DI CUT OFF (DEFAULT=1.7 A):",DIST DISTQ=DIST*DIST PRINT "Automatica=(1) o Assistita=(2) ?"GEN1: A$=UCASE$(INKEY$):IF A$="" THEN GEN1 IF A$="2" THEN CHGE%=1 CLS:PRINT "STO GENERANDO LA MATRICE DEI LEGAMI,ATTENDERE..." LOCATE 2,1:PRINT "ATOMO N.: CON ATOMO N.:" FOR T%=1 TO N% LOCATE 2,10:PRINT T% VA%=T%:GOSUB ASSEGNA:AS1%=VA% FOR TT%=T%+1 TO N% LOCATE 2,27:PRINT TT% DISTZ=(IT(T%,1)−IT(TT%,1))^2+(IT(T%,2)−IT(TT%,2))^2+(IT(T%,3)−IT(TT%,3))^2 IF DISTZ <DISTQ THEN GOSUB RIEMPIMATX:LOCATE 4,1 IF (DISTZ>DISTQ AND DISTZ<(DISTQ+3*DISTQ)) AND CHGE%=1 THEN LOCATE 3,1 :PRINT "DISTANZA:";SQR(DISTZ);" " LOCATE 4,1:INPUT "DEVO CONNETTERE ";A$ IF UCASE$(A$)="Y" THEN GOSUB RIEMPIMATX LOCATE 3,1:PRINT SPACE$(40) LOCATE 4,1:PRINT SPACE$(40) END IF NEXT TT%,T% PRINT "O.K.":SOUND 440,10,100 MENU 2,6,1:MENU 2,8,1:MENU 3,2,1:CHGE%=0 GOSUB AUTODIM:GOSUB DISEGNA:MOUSE ON RETURNCOR:

Page 6: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 6

MENU OFF:ON MENU GOSUB RAPP:MENU ON flag4%=1 :GOSUB men:flag4%=0:CTR2%=1 A%=0:K%=1:h%=1 FOR T%=1 TO 10:A$=INKEY$:NEXT T% GOTO COR1Bcor1: GOSUB CONTRCOR1B: IF a%=28 THEN K%=K%+1 IF a%=29 THEN K%=K%−1 'CONTROLLA TASTI CURSORE IF a%=31 THEN h%=h%−1 IF a%=30 THEN h%=h%+1 IF K%<1 THEN K%=N% IF K%>N% THEN K%=1 'CONTROLLA LIMITI kk%=k%:GOSUB ANALISI:LOCATE 1,1:PRINT USING "_ATOMO N. ### _−−−>(\\_)";K%;TA$ IF CO%(K%,0,0)=0 THEN h%=0 :PRINT"NESSUN LEGAME ":PRINT SPACE$(29):PRINT SPACE$(29):GOTO COR1A IF h%<1 THEN h%=CO%(K%,0,0) IF h%>CO%(K%,0,0) THEN h%=1 PRINT USING "_NUMERO LEGAMI:##";CO%(K%,0,0) Kk%=CO%(K%,h%,0):GOSUB ANALISI PRINT USING"_LEGATO CON ### _−−−>(\\_)";CO%(K%,h%,0);TA$ c%=CO%(K%,h%,1) LOCATE 4,1:PRINT"TIPO DI LEGAME:"; IF c%>=0 AND c%<200 THEN PRINT"SEMPLICE" IF c%>=200 AND c%<300 THEN PRINT"DOPPIO " IF c%>=300 THEN PRINT "TRIPLO " IF a%=32 THEN GOSUB COR2 'TASTO {SPACE} IF a%=67 THEN GOSUB COR3 'TASTO {C} IF A%=76 THEN GOSUB LEGTAB 'TASTO {L}COR1A: IF a%=27 THEN CLS:CTR2%=0:MENU OFF:ON MENU GOSUB menus:MENU ON:RETURN 'TASTO {ESC} IF a%=65 THEN GOSUB COR4 'TASTO {A} GOTO cor1COR2: zx%=K%:vv%=CO%(K%,h%,0):PP%=vv%:COLR%=0:CO%(K%,H%,0)=0 GOSUB g2:IF NA%=−1 THEN CO%(K%,H%,0)=VV%:COLR%=1:RETURN GOSUB disleg CO%(K%,h%,0)=na%:CO%(K%,h%,1)=cn% IF vv%<>na% THEN GOSUB corsub COLR%=1:PP%=na%:ctr1%=1:GOSUB disleg RETURNCOR3: TT%=h%:T%=K%:vv%=CO%(K%,h%,0):PP%=vv%:COLR%=0 GOSUB conf IF conf%=1 THEN RETURN GOSUB cancleg GOSUB corsub GOSUB disleg:COLR%=1:ctr1%=1 RETURN COR4: zx%=K%:h%=CO%(K%,0,0)+1 IF CO%(K%,0,0)=NLEG% THEN LOCATE 6,1:PRINT"LEGAMI COMPLETI";:h%=h%−1:RETURN GOSUB g2:IF NA%=−1 THEN H%=CO%(K%,0,0)−1:RETURN CO%(K%,0,0)=CO%(K%,0,0)+1 CO%(K%,h%,0)=na%:CO%(K%,h%,1)=cn% PP%=na%:GOSUB disleg :ctr1%=1 RETURN

'TRASFORMA LE COORDINATE DA FRAZIONARIE A NORMALIelaborazione: FOR T%=1 TO NMOL% X=FR(T%,1)*AA:Y=FR(T%,2)*BB:z=FR(T%,3)*cc IT(T%,1)=X*SIN(ga)+z*((COS(be)−COS(ga)*COS(al))/SIN(ga)) IT(T%,2)=X*COS(ga)+Y+z*COS(al) IT(T%,3)=(z/SIN(ga))*SQR(1−(COS(ga)^2)−(COS(al)^2)−(COS(be)^2)+2*COS(al)*COS(be)*COS(ga)) IT(T%,0)=FR(T%,0) NEXT T%BARICENTRO: FOR T%=1 TO NMOL%

Page 7: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 7

bx=bx+IT(T%,1) by=by+IT(T%,2) bz=bz+IT(T%,3) NEXT bx=bx/NMOL%:by=by/NMOL%:bz=bz/NMOL% GOSUB rotate RETURNSTAMPA: WINDOW OUTPUT 1:CLS OPEN DEVIC$ FOR OUTPUT AS #1 NNN$=FILENAME$(FILENUM%):NOST$=NNN$ IF CME%=2 THEN FOR T%=1 TO LEN(NNN$) IF ASC(MID$(NNN$,T%,1))>126 THEN MID$(NOST$,T%,1)=" " NEXT T% END IF PRINT #1,NOST$ IF CME1%(0)=1 THEN PRINT #1, "(";NOTE$;")" IF CME%=1 and cme1%(0)=1 THEN LOCATE 15,1:PRINT"PREMI TASTO MOUSE":SLEEP:LOCATE 15,1:PRINT SPACE$(20) COOR: T%=1:IF CME1%(1)=0 THEN SDIST PRINT #1,:PRINT #1, USING "_a=###.### Å _alpha=###.###";AA;al*F PRINT #1, USING "_b=###.### Å _beta =###.###";BB;be*F PRINT #1, USING "_c=###.### Å _gamma=###.###";cc;ga*F:PRINT #1, VOLUM=AA*BB*CC*SQR(1−COS(AL)^2−COS(BE)^2−COS(GA)^2+2*COS(AL)*COS(BE)*COS(GA)) VOLUMR=1/VOLUM aar=bb*cc*SIN(al)/volum:bbr=aa*cc*SIN(be)/volum:ccr=aa*bb*SIN(ga)/volum IF GA= 0 THEN ALR=PI/2:BER=PI/2:GOTO COORD1 ELSE ALR=1/(BB*BBR*SIN(GA)):BER=1/(AA*SIN(GA)*AAR) END IF IF BE=0 THEN GAR=PI/2:GOTO COOR1 ELSE GAR=1/(AAR*AA*SIN(BE)) IF ALR < 1 AND ALR > −1 THEN ALR=FNARCSIN(ALR) IF BER < 1 AND BER > −1 THEN BER=FNARCSIN(BER) IF GAR < 1 AND GAR > −1 THEN GAR=FNARCSIN(GAR)COORD1: DISTM=1/SQR(AAR*AAR+BBR*BBR+CCR*CCR+2*AAR*BBR*COS(GAR)+2*AAR*CCR*COS(BER)+2*BBR*CCR*COS(ALR)) PRINT #1, "VOLUME DELLA CELLA ELEMENTARE:";VOLUM PRINT #1, "DISTANZA INTERPLANARE MINIMA:";DISTM;" Å" PRINT #1, "PARAMETRI RECIPROCI:" PRINT #1, "VOLUME =";VOLUMR PRINT #1,USING "_a*=###.### _alpha*=###.###";aar;alr*F PRINT #1,USING "_b*=###.### _beta* =###.###";bbr;ber*F PRINT #1,USING "_c*=###.### _gamma*=###.###";ccr;gar*FCOORS: PRINT #1, TAB(11)"COORDINATE FRAZIONARIE "TAB(42)"COORDINATE NORMALI (in Å)" PRINT #1, "n. AT.";" x/a ";" y/b ";" z/c ";" X ";" Y ";" Z "COORS1: kK%=T%:GOSUB ANALISI PRINT #1, USING "### \\";T%;TA$; PRINT #1, USING " ###.#### ";FR(T%,1),FR(T%,2),FR(T%,3),IT(T%,1),IT(T%,2),IT(T%,3) T%=T%+1 IF T%>N% THEN IF CME%=1 THEN PRINT:PRINT"PREMI MOUSE":SLEEP:GOTO SDIST ELSE GOTO SDIST IF CME%=1 THEN IF (T% MOD 14)=0 THEN PRINT:PRINT"PREMI MOUSE":SLEEP:CLS:GOTO COORS GOTO COORS1SDIST: IF CME1%(2)=0 THEN SANG CLS:PRINT #1,:PRINT #1,"DISTANZE di LEGAME (in Å)":NUM%=0 FOR T%=1 TO N% FOR TT%=1 TO CO%(T%,0,0) va1%=T%:va2%=CO%(T%,TT%,0) IF va2%<va1% THEN s2 DIST=SQR((IT(va1%,1)−IT(va2%,1))^2+(IT(va1%,2)−IT(va2%,2))^2+(IT(va1%,3)−IT(va2%,3))^2):NUM%=NUM%+1

Page 8: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 8

PRINT #1, USING " _(###_,###_)=";va1%;va2%; IF (NUM% MOD 3)<>0 THEN PRINT #1, USING "##.####";DIST; ELSE PRINT #1, USING "##.####";DIST IF CME%=1 THEN IF (NUM% MOD 42)=0 THEN PRINT:PRINT"PREMI MOUSE":SLEEP:CLS:PRINT s2: NEXT TT% NEXT T% IF CME%=1 THEN PRINT:PRINT"PREMI TASTO MOUSE":SLEEP:CLS:PRINT SANG: IF CME1%(3)=0 THEN CLS:PRINT #1,:PRINT #1,:CLOSE #1:GOSUB DISEGNA:RETURN NUM%=0 CLS:PRINT #1,:PRINT #1, "ANGOLI DI LEGAME (IN GRADI SESSAG.) FOR T%=1 TO N% IF CO%(T%,0,0)=1 THEN SANG1 FOR TT%=1 TO CO%(T%,0,0)−1 A1%=CO%(T%,TT%,0) FOR TK%=TT%+1 TO CO%(T%,0,0) A3%=CO%(T%,TK%,0) l1=IT(t%,1)−IT(A1%,1):K1=IT(t%,2)−IT(A1%,2):n1=IT(t%,3)−IT(A1%,3) l2=IT(t%,1)−IT(a3%,1):m2=IT(t%,2)−IT(a3%,2):n2=IT(t%,3)−IT(a3%,3) cang=(l1*l2+K1*m2+n1*n2)/SQR((l1*l1+K1*K1+n1*n1)*(l2*l2+m2*m2+n2*n2)) IF CANG <> 1 OR CANG <> −1 THEN ANG=(−FNARCSIN(CANG)+1.5708)*F ELSE ANG=90 IF ANG>180 THEN ANG=360−ANG NUM%=NUM%+1 PRINT #1, USING" _(###_ −###_ −###_)=";A1%;T%;A3%; IF (NUM% MOD 3)<>0 THEN PRINT #1, USING "###.###";ANG; ELSE PRINT #1, USING "###.###";ANG IF CME%=1 THEN IF (NUM% MOD 42)=0 THEN PRINT:PRINT"PREMI TASTO MOUSE":SLEEP:CLS:PRINT NEXT TK%,TT%SANG1: NEXT T% IF CME%=1 THEN PRINT:PRINT"PREMI TASTO MOUSE":SLEEP:CLS:PRINT CLS:CLOSE #1:GOSUB DISEGNA RETURN GETMOUSE: ms%=0 WHILE MOUSE(0)<>0:WEND WHILE ms%=0 ms%=MOUSE(0) X=MOUSE(1) Y=MOUSE(2) WEND RETURNCH.FIN.: WINDOW CLOSE 2 WINDOW OUTPUT 1 COLOR 15,0 CLS:RETURNg2: LOCATE 5,1 INPUT "INSERISCI N. ATOMO(−1>ESCI):";na% IF NA%=−1 THEN LOCATE 5,1:PRINT SPACE$(48):RETURN IF na%<1 OR na%>N% THEN g2 IF na%=zx% THEN g2 LOCATE 5,1:PRINT SPACE$(48);g2b: LOCATE 5,1: INPUT "TIPO DI LEGAME";cn% IF cn%=0 OR cn%=1 THEN cn%=1:GOTO g3 IF cn%=2 THEN cn%=200 :GOTO g3 IF cn%=3 THEN cn%=300:GOTO g3 GOTO g2bG3: IF CO%(ZX%,0,0)=0 THEN G3A FOR T%=1 TO CO%(zx%,0,0) IF CO%(zx%,T%,0)=na% AND vv%<> na% THEN g2 NEXT T%G3A: IF CO%(na%,0,0)=NLEG% THEN LOCATE 6,1:PRINT"LEGAMI DELL'ATOMO";na%;"COMPLETI";:GOTO g2 IF CO%(NA%,0,0)=0 THEN G3B FOR T%=1 TO CO%(na%,0,0)

Page 9: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 9

IF CO%(na%,T%,0)=zx% THEN tt%=t%:GOTO g4 NEXT T%G3B: CO%(na%,0,0)=CO%(na%,0,0)+1:tt%=CO%(na%,0,0) CO%(na%,tt%,0)=zx% G4: CO%(na%,tt%,1)=cn% :T%=1:tt%=1 LOCATE 5,1:PRINT SPACE$(48) ; LOCATE 6,1:PRINT SPACE$(48) ; RETURNcorsub: FOR TT%=1 TO CO%(vv%,0,0) IF CO%(vv%,TT%,0)=K% THEN T%=vv% :GOSUB cancleg NEXT TT% RETURNcancleg: IF CO%(T%,0,0)=1 THEN CANCLEG1 FOR TK%=TT% TO CO%(T%,0,0)−1 CO%(T%,TK%,0)=CO%(T%,TK%+1,0) CO%(T%,TK%,1)=CO%(T%,TK%+1,1) NEXTCANCLEG1: CO%(T%,0,0)=CO%(T%,0,0)−1 RETURN analisi: ta$=CHR$(FR(KK%,0)) IF FR(KK%,0)= 32 THEN ta$=" " IF FR(KK%,0)= 157 THEN ta$="Ti" IF FR(KK%,0)= 180 THEN ta$="Br" IF FR(KK%,0)= 175 THEN ta$="Cl" IF FR(KK%,0)= 188 THEN ta$="Si" IF FR(KK%,0)= 181 THEN ta$="Mg" IF FR(KK%,0)= 200 THEN ta$="Fe" IF FR(KK%,0)= 201 THEN ta$="Na" IF FR(KK%,0)= 202 THEN ta$="Li" IF FR(KK%,0)= 203 THEN ta$="Cu" IF FR(KK%,0)= 204 THEN ta$="Al" IF FR(KK%,0)= 205 THEN ta$="Co" IF FR(KK%,0)= 206 THEN ta$="Mo" IF FR(KK%,0)= 207 THEN ta$="Ni" IF FR(KK%,0)= 208 THEN ta$="Cr" IF FR(KK%,0)= 209 THEN ta$="Mn" IF FR(KK%,0)= 210 THEN ta$="Pt" IF FR(KK%,0)= 211 THEN ta$="Cd" IF FR(KK%,0)= 132 THEN ta$="Ca" IF FR(kK%,0)= 111 THEN tA$="o" IF FR(kK%,0)= 97 THEN ta$="a" IF FR(kK%,0)= 98 THEN ta$="b" IF FR(kK%,0)= 99 THEN ta$="c" RETURN LOA: WINDOW 2,"LOAD",( 0, 20)−(607,150),0,1 COLOR 1,3VISFIN: CLS:LINE (3,0)−(600,81),1,BF LINE (3,0)−(600,81),0,B LINE (4,0)−(599,81),0,B LINE (4,0)−(17,81),0,BF LINE (0,1)−(16,71),1,B LINE (0,81)−(16,10),1,B COLOR 1,0 AREA (5,73):AREA (10,73):AREA (10,77):AREA (12,77):AREA (8,81) AREA (3,77):AREA (5,77):AREAFILL AREA (5,8):AREA (10,8):AREA (10,5):AREA (12,5):AREA (8,1):AREA (3,5) AREA (5,5):AREAFILL LINE (0,85)−(607,96),0,BF COLOR 0,1 LINE (6,105)−(58,123),1,BF:LOCATE 15,3:PRINT "LOAD" LINE (526,105)−(594,123),1,BF:LOCATE 15,68:PRINT"CANCEL" LINE (126,105)−(186,123),1,BF:LOCATE 15,18:PRINT "PRINT" LINE (254,105)−(322,123),1,BF:LOCATE 15,34:PRINT"RENAME" LINE (390,105)−(458,123),1,BF:LOCATE 15,51:PRINT"DELETE" LINE (6,105)−(58,123),0,B :LINE (10,106)−(54,122),0,B

Page 10: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 10

LINE (526,105)−(594,123),0,B :LINE (530,106)−(590,122),0,B LINE (126,105)−(186,123),0,B :LINE (130,106)−(182,122),0,B LINE (254,105)−(322,123),0,B :LINE (258,106)−(318,122),0,B LINE (390,105)−(458,123),0,B :LINE (394,106)−(454,122),0,B GOSUB LISTIN WHILE 1 GOSUB GETMOUSE IF x>21 AND x<30 THEN posiz=(y\8)+1:posiz1=(posIZ−1)*8:posiz=filoff%+posiz IF POINT (28,POSIZ1+2)=0 THEN IF NOPO%(POSIZ)=69 THEN AREA (584,POSIZ1):AREA (595,POSIZ1+3):AREA (584,POSIZ1+5):AREAFILL NOPO%(POSIZ)=NOPO%(POSIZ)+1:LOCATE POSIZ−filoff%,73 IF NOPO%(POSIZ)>LEN(FILENAME$(POSIZ))−5 THEN LINE (20,POSIZ1)−(30,POSIZ1+7),1,BF NOPO%(POSIZ)=LEN(filename$(posiz))−5 ELSE SCROLL (31,POSIZ1)−(583,POSIZ1+7),−8,0 PRINT MID$(FILENAME$(POSIZ),5+NOPO%(posiz),1); END IF END IF END IF IF x>584 AND x<595 THEN posiz=(y\8)+1:posiz1=(posIZ−1)*8:posiz=posiz+filoff% IF nopo%(posiz)=69 THEN LINE (584,posiz1)−(598,posiz1+7),1,bf END IF IF POINT (590,POSIZ1+2)=0 AND nopo%(posiz)>69 THEN AREA (20,POSIZ1+3):AREA (30,POSIZ1):AREA (30,POSIZ1+5):AREAFILL SCROLL (31,POSIZ1)−(583,POSIZ1+7),8,0 NOPO%(POSIZ)=NOPO%(POSIZ)−1 LOCATE posiz−filoff%,5:PRINT MID$(FILENAME$(POSIZ),5+NOPO%(POSIZ)−68,1); END IF END IF IF X>0 AND X<20 THEN IF Y>0 AND Y< 9 AND filoff%> 0 THEN filoff%=filoff%−1 COLOR 0,1:SCROLL (20,0)−(598,79),0,8 NOPO%(FIloff%+1)=LEN(FILENAME$(filoff%+1)) IF NOPO%(FILoff%+1)>69 THEN posiz1=8 AREA (20,POSIZ1+3):AREA (30,POSIZ1):AREA (30,POSIZ1+5):AREAFILL NOPO%(FILoff%+1)=69 END IF LOCATE 1,5:PRINT MID$(filename$(filoff%+1),6,69) ELSEIF Y>72 AND Y<81 AND filoff%<(file%−10) THEN filoff%=filoff%+1 COLOR 0,1:SCROLL (20,0)−(598,79),0,−8 NOPO%(FIloff%+10)=LEN(FILENAME$(filoff%+10))−5 IF NOPO%(FILoff%+10)>69 THEN posiz1=73 AREA (20,POSIZ1+3):AREA (30,POSIZ1):AREA (30,POSIZ1+5):AREAFILL NOPO%(FILoff%+10)=69 END IF LOCATE 10,5:PRINT MID$(filename$(filoff%+10),6,69) END IF ELSEIF Y>0 AND Y<80 AND x>31 AND x<584 THEN filenum%=filoff%+(Y \8)+1 IF filenum%<=file% THEN filename$=MID$(filename$(filenum%),6) COLOR 15,0 LOCATE 12,1:IF LEN(filename$)<69 THEN PRINT filename$+SPACE$(74−LEN(filename$)) ELSE PRINT LEFT$(filename$,74) COLOR 0,1 END IF ELSEIF Y>105 AND Y<123 AND filename$<>"" THEN IF X>6 AND X<58 THEN GOSUB CH.FIN.:GOTO CARICA IF X>254 AND X<322 THEN GOSUB rename IF X>390 AND X<458 THEN GOSUB delet

Page 11: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 11

END IF IF Y>105 AND Y<123 AND X>126 AND X<186 THEN GOSUB printlista ELSEIF Y>105 AND Y<123 AND X>526 AND X<594 THEN GOSUB CH.FIN. IF NMOL%<>0 THEN GOSUB DISEGNA:RETURN ELSE RETURN END IF WEND RETURNCARICA: ERASE FR,CO%:DIM FR(NMAX%,3),CO%(NMAX%,NLEG%,1) NNM$=filename$(filenum%) NM$=MID$(NNM$,6):CDE$=LEFT$(NNM$,5) CLS:OPEN "i",#1,PATH$+CDE$ INPUT #1,NNM$,N%,AA,BB,cc,al,be,ga FOR I%=1 TO N% INPUT #1,FR(I%,0),FR(I%,1),FR(I%,2),FR(I%,3) FOR TT%=0 TO NLEG% INPUT #1,CO%(I%,TT%,0),CO%(I%,TT%,1) NEXT TT% NEXT I% INPUT #1,NOTE$ INPUT #1,NS% IF NS%<>0 THEN FOR T%=0 TO NS% FOR TT%=0 TO 11 INPUT #1,SIM(T%,TT%) NEXT TT%:NEXT T% END IF CLOSE #1 NMOL%=N%:NP%=N% MENU 2,2,1:MENU 2,3,1:MENU 1,3,1:MENU 2,4,1:MENU 3,0,1:MENU 5,0,1 CLS:ctt%=1:MENU 2,5,1:MENU 2,6,1:MENU 2,8,1:MENU 3,2,1 IF CELL%=0 THEN MENU 4,8,1 IF FLA%=1 THEN FLA%=0:MENU 2,8,1 IF cell%=1 THEN GOSUB defcella ELSE GOSUB elaborazione GOSUB AUTODIM:GOSUB DISEGNA RETURNprintlista: LPRINT "LISTA MOLECOLE" FOR T%=1 TO file% LPRINT filename$(T%) NEXT T% RETURNCARICALISTA: ON ERROR GOTO ERRORHANDLE CLS :file%=0:CTR%=0 OPEN "i",#1,"df0:molecules/lista" INPUT #1,file% FOR T%=1 TO file% INPUT #1,filename$(T%) IF NNM$<>"" AND FILENAME$(T%)=NNM$ THEN CTR%=2 NEXT T% CLOSE #1CARL1: IF CTR%<>2 AND NNM$<>"" THEN GOSUB COFILIS IF nmol%<>0 THEN GOSUB disegna ON ERROR GOTO 0 RETURNsavelista: OPEN "DF0:MOLECULES/LISTA" FOR OUTPUT AS #1 WRITE #1,file% FOR T%=1 TO file% WRITE #1,filename$(T%) NEXT CLOSE #1 RETURNSAV: IF ctt%=1 THEN sav1COFILIS: file%=file%+1 filename$(file%)=NNM$sav1:

Page 12: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 12

GOSUB savelista OPEN PATH$+CDE$ FOR OUTPUT AS #1 WRITE #1,NNM$,N%,AA,BB,cc,al,be,ga FOR I%=1 TO N% WRITE #1,FR(I%,0),FR(I%,1),FR(I%,2),FR(I%,3) FOR TT%=0 TO NLEG% WRITE #1,CO%(I%,TT%,0),CO%(I%,TT%,1) NEXT TT% NEXT I% WRITE #1,NOTE$ WRITE #1,NS% IF NS%<>0 THEN FOR T%=0 TO NS% FOR TT%=0 TO 11 WRITE #1,SIM(T%,TT%) NEXT TT%:NEXT T% END IF CLOSE #1 CTT%=1 RETURNERRORHANDLE: IF ERR=53 THEN RESUME CARL1 ENDrename: COLOR 15,0 LOCATE 12,1:PRINT SPACE$(72) LOCATE 12,1:LINE INPUT NMO$ filename$(filenum%)=LEFT$(filename$(filenum%),5)+NMO$ GOSUB savelista LOCATE 12,1:PRINT SPACE$(72) COLOR 0,1 LOCATE (filenum%−filoff%),4:PRINT MID$(NMO$,1,72)+SPACE$(74−LEN(NMO$)) RETURNdelet: flag3%=1 GOSUB conf IF conf%=1 THEN RETURN KILL PATH$+LEFT$(filename$(filenum%),5) FOR T%=filenum%+1 TO file% filename$(T%−1)=filename$(T%) NEXT file%=file%−1 GOSUB savelista GOSUB LISTIN RETURNLISTIN: numdisp%=file%:IF numdisp%>10 THEN numdisp%=10 filoff%=0 LOCATE 1,1 :COLOR 0,1 FOR T%=1 TO numdisp% PRINT TAB(4)" "+MID$(filename$(T%),6,72)+SPACE$(74−LEN(FILENAME$(T%))) NOPO%(t%)=LEN(FILENAME$(t%))−5 IF NOPO%(t%)>69 THEN posiz=(y\8)+1:posiz1=(posIZ−1)*8 AREA (20,POSIZ1+3):AREA (30,POSIZ1):AREA (30,POSIZ1+5):AREAFILL NOPO%(t%)=69 END IF NEXT T% RETURNconf: for i%=1 to 10:a$=inkey$:next i% conf%=0:'CONTROLLA TASTI PREMUTI'CONF1: IF flag3%=1 THEN LOCATE 12,1:COLOR 15,0 ELSE LOCATE 6,1 PRINT SPACE$(48); IF flag3%=1 THEN LOCATE 12,1 ELSE LOCATE 6,1 PRINT"CONFERMI (S/N)? "; a$=UCASE$(INKEY$):IF a$="" THEN conf1 IF a$="S" then conf%=0 IF a$="N" THEN conf%=1 IF a$<>"N" AND a$<>"S" then conf1 IF flag3%=1 THEN LOCATE 12,1 ELSE LOCATE 6,1

Page 13: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 13

PRINT SPACE$(48); IF FLAG3%=1 THEN COLOR 0,1 ELSE COLOR 15,0 FLAG3%=0 RETURN men: FOR T%=1 TO 10 :A$=INKEY$:NEXT T% CLS:A$="":LOCATE 1,50:PRINT"TASTI CURSORE > PER RIC."; IF FLA1%=1 THEN PRINT "MATRIX" ELSE PRINT "COORD." LOCATE 2,50:PRINT"{ESC} > PER USCIRE" IF FLA1%=0 THEN LOCATE 3,50:PRINT"{SPACE} > PER MODIFICARE" IF FLA1%=1 THEN LOCATE 3,50:PRINT"{D} > PER AZZER.MATR." LOCATE 4,50:PRINT"{C} > PER CANC."; IF FLA1%=1 THEN PRINT "MATRICE"; ELSE PRINT "ATOMO"; END IF IF flag4%=1 OR FLA1%=1 THEN LOCATE 5,50:PRINT"{A} > PER AGG."; IF FLA1%=1 THEN PRINT "MATRICE"; ELSE PRINT "LEGAME"; END IF IF FLAG4%=0 THEN LOCATE 6,50:PRINT"{L} > PER LISTA COOR"; ELSE IF fla1%=0 THEN LOCATE 6,50:PRINT"{L} > PER LISTA LEG"; END IF RETURN disleg: WINDOW OUTPUT 1 IF (rim(K%,2)+di%)=0 THEN rim(K%,2)=rim(K%,2)+1 lx&=px%+(rim(K%,1)/(rim(K%,2)+di%))*dw%*sf ly&=py%−(rim(K%,3)/(rim(K%,2)+di%))*dw% IF (rim(PP%,2)+di%)=0 THEN rim(PP%,2)=rim(PP%,2)+1 xw&=px%+(rim(PP%,1)/(rim(PP%,2)+di%))*dw%*sf yw&=py%−(rim(PP%,3)/(rim(PP%,2)+di%))*dw% cl%=CO%(K% ,h%,1) IF cl%>=200 AND cl%<300 THEN IF SGN(lx&)=SGN(ly&) THEN LINE(lx&−2,ly&+2)−(xw&−2,yw&+2),COLR% ELSE LINE (lx&+2,ly&+2)−(xw&+2,yw&+2),COLR% IF cl%>=300 THEN IF SGN(lx&)=SGN(ly&) THEN LINE(lx&−2,ly&+2)−(xw&−2,yw&+2),COLR% :LINE (lx&+2,ly&−2)−(xw&+2,yw&−2),COLR% ELSE LINE (lx&+2,ly&+2)−(xw&+2,yw&+2),COLR% : LINE (lx&−2,ly&−2)−(xw&−2,yw&−2),COLR% LINE (lx&,ly&)−(xw&,yw&),COLR% WINDOW OUTPUT 3 RETURN 'RIEMPIE LA MATRICE DELLE CONNESSIONI (CO)RIEMPIMATX: VA%=TT%:GOSUB ASSEGNA:RF%=1 IF LUN(AS1%,VA%,0)=1 THEN RIEM FOR K%=1 TO LUN(AS1%,VA%,0) DIST1=LUN(AS1%,VA%,K%):DIFF=ABS(DIST1−DISTQ) IF K%=1 THEN R1 IF DIFF<DIFF1 THEN RF%=K%R1: DIFF1=DIFF NEXT K% DIST1=LUN(AS1%,VA%,RF%) IF VA%=4 AND RF%=2 THEN IF ABS(1.40−DIST1)<ABS(1.33−DIST1) THEN RF%=1 END IFRIEM: IF CO%(T%,0,0)=1 AND AS1%=1 THEN RETURN IF CO%(TT%,0,0)=1 AND VA%=1 THEN RETURN CO%(T%,0,0)=CO%(T%,0,0)+1 IF CO%(T%,0,0)>NLEG% THEN CO%(T%,0,0)=CO%(T%,0,0)−1:RETURN CO%(T%,CO%(T%,0,0),0)=TT% :CO%(T%,CO%(T%,0,0),1)=RF%*100 CO%(TT%,0,0)=CO%(TT%,0,0)+1 CO%(TT%,CO%(TT%,0,0),0)=T% :CO%(TT%,CO%(TT%,0,0),1)=RF%*100 RETURN PARAMETRI: MENU OFF:MOUSE OFF WINDOW 2,"PARAMETRI",(0,64)−(224,214),0,1 PAINT (10,10),3 COLOR 1,3

Page 14: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 14

LINE (0,0)−(224,7),1,BF LOCATE 1, 2:PRINT"ZOOM" LOCATE 3,3:PRINT"VAL.:" LINE (64,13)−(160,25),0,BF :LINE(63,14)−(161,24),1,B LINE (152,29)−(208,41),1,BF :LINE (153,30)−(207,40),0,B LOCATE 5,21:PRINT"RESET" LINE (0,47)−(224,55),1,BF LOCATE 7,2:PRINT"ROTAZIONE" LOCATE 9,8:PRINT "STEP" LOCATE 9,17:PRINT"ANG.INIZ." LOCATE 11,4:PRINT"X:" LOCATE 13,4:PRINT"Y:" LOCATE 15,4:PRINT"Z:" LINE(48,77)−(112,89),0,BF:LINE(128,77)−(208,89),0,BF:LINE(48,78)−(112,88),1,B:LINE(128,78)−(208,88),1,B LINE(48,93)−(112,105),0,BF:LINE(128,93)−(208,105),0,BF :LINE(48,94)−(112,104),1,B:LINE(128,94)−(208,104),1,B LINE(48,109)−(112,121),0,BF:LINE(128,109)−(208,121),0,BF:LINE(48,110)−(112,120),1,B:LINE(128,110)−(208,120),1,B LINE(152,125)−(208,137),1,BF :LINE(153,126)−(207,136),0,B LINE(32,125)−(88,137),1,BF:LINE(33,126)−(87,136),0,B LOCATE 17,6:PRINT"RESET" LOCATE 17,21:PRINT"RESET" LINE (104,132)−(136,145),1,BF :LINE(105,133)−(135,146),0,B LOCATE 18,15:PRINT "OK";:COLOR 1,0 LOCATE 3,9:PRINT DI% LOCATE 11,7:PRINT incx%:LOCATE 11,17:PRINT ax% LOCATE 13,7:PRINT incy%:LOCATE 13,17:PRINT ay% LOCATE 15,7:PRINT incz%:LOCATE 15,17:PRINT az% WHILE 1 GOSUB getmouse IF y>13 AND y<25 THEN IF X>64 AND X<160 THEN SC%=10:SR%=3:SP%=11:GOSUB INPVAL:DI%=ABS(dato) ELSEIF y>29 AND y<41 THEN IF X>152 AND X<208 THEN GOSUB reset1 ELSEIF X>48 AND X<112 THEN IF y>77 AND y<89 THEN SC%=8:SR%=11:SP%=7:GOSUB INPVAL:incx%=dato IF y>93 AND y<105 THEN SC%=8:SR%=13:SP%=7:GOSUB INPVAL:incy%=dato IF y>109 AND y<121 THEN SC%=8:SR%=15:SP%=7:GOSUB INPVAL:incz%=dato ELSEIF X>128 AND X<208 THEN IF y>77 AND y<89 THEN SC%=18:SR%=11:SP%=9:GOSUB INPVAL:ax%=dato IF y>93 AND y<105 THEN SC%=18:SR%=13:SP%=9:GOSUB INPVAL:ay%=dato IF y>109 AND y<121 THEN SC%=18:SR%=15:SP%=9:GOSUB INPVAL:az%=dato END IF IF y>125 AND y<137 THEN IF X>32 AND X<88 THEN GOSUB RESET2 IF X>152 AND X<208 THEN GOSUB reset3 END IF IF Y>137 AND Y<145 THEN IF X>104 AND X<136 THEN GOSUB ch.fin.:MENU ON:MOUSE ON:IF CTR2%=1 THEN GOSUB MEN:RETURN:ELSE RETURN END IF WEND reset1: LOCATE 3,9:PRINT " 900 ":DI%=900:RETURNreset2: LOCATE 11,7:PRINT " 40 ":incx%=40 LOCATE 13,7:PRINT " 40 ":incy%=40 LOCATE 15,7:PRINT " 40 ":incz%=40 RETURN RESET3: LOCATE 11,17:PRINT " 0 ":ax%=0 LOCATE 13,17:PRINT " 0 ":ay%=0 LOCATE 15,17:PRINT " 0 ":az%=0 RETURN INPVAL: COLOR 1,0 LOCATE SR%,SC%:PRINT SPACE$(SP%):LOCATE SR%,SC% LINE INPUT ;dato$ ZA=LEN(dato$) FOR T%=1 TO ZA ATA%=ASC(LEFT$(dato$,T%)) IF ATA%<43 OR ATA%>57 THEN BEEP:GOTO INPval

Page 15: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 15

NEXT t% dato=VAL(dato$) IF INSE%=1 AND ABS(DATO)>1 THEN BEEP:GOTO INPVAL SOUND 440,5,90,0 RETURN

COORDTAB: WINDOW OUTPUT 1 T%=1COOR1: CLS:LOCATE 1,1 IF ACH%=1 THEN PRINT " N. AT. x/a y/b z/c" ELSE PRINT " N. AT. x*a y*b z*c" END IFCOOR2: Kk%=T%:GOSUB analisi IF ACH%=1 THEN X=FR(T%,1):Y=FR(T%,2):Z=FR(T%,3) ELSE X=FR(T%,1)*AA:Y=FR(T%,2)*BB:Z=FR(T%,3)*CC END IF PRINT USING " ### \\ ##.#### ##.#### ##.####";T%;TA$;x;y;z T%=T%+1 IF T%>N% THEN PRINT:PRINT"PREMI UN TASTO":GOSUB CONTR:GOSUB DISEGNA:WINDOW OUTPUT 3:RETURN IF (T% MOD 15)=0 THEN PRINT:PRINT"PREMI UN TASTO":GOSUB CONTR:GOTO COOR1 GOTO COOR2CONTR: FOR a%=0 TO 10:NEXT A% IF ctr1%=1 THEN ctr1%=0:RETURNCONTR1: A%=0:a$=UCASE$(INKEY$):IF a$="" THEN CONTR1 a%=ASC(a$) RETURNLEGTAB: WINDOW OUTPUT 1 T%=1LEG1: CLS:LOCATE 1,1:PRINT " N. AT. 1 2 3 4 5 6 7 8" PRINTLEG2: Kk%=T%:GOSUB analisi PRINT USING " ### \\";T%;TA$; FOR TT%=1 TO CO%(T%,0,0) PRINT USING " ###";CO%(T%,TT%,0); NEXT TT% T%=T%+1:PRINT IF T%>N% THEN PRINT:PRINT"PREMI UN TASTO":GOSUB CONTR:GOSUB DISEGNA:WINDOW OUTPUT 3:RETURN IF (T% MOD 15)=0 THEN PRINT:PRINT"PREMI UN TASTO":GOSUB CONTR:GOTO LEG1 GOTO LEG2assegna: va%=FR(va%,0) IF va%=72 THEN va%=1 IF va%=66 THEN va%=2 IF va%=67 THEN va%=3 IF va%=78 THEN va%=4 IF va%=79 THEN va%=5 IF va%=70 THEN va%=6 IF va%=83 THEN va%=7 IF va%=80 THEN va%=8 IF va%=175 THEN va%=9 IF va%=180 THEN va%=10 IF va%=73 THEN va%=11 IF va%<0 OR va%>12 THEN va%=12 RETURN NOTE: CLS:IF NOTE$="" THEN NOTE2NOTE1:

Page 16: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 16

PRINT NOTE$ PRINT "VUOI MODIFICARE (S/N)?":GOSUB CONTR IF A%=83 THEN NOTE2 IF A%=78 THEN CLS :RETURN GOTO NOTE1NOTE2: CLS:LINE INPUT "INSERISCI TESTO:";NOTE$ GOSUB SAV RETURN sIM: IF n%*2>nmax%−8 THEN RETURN IF cell%=1 THEN CELL%=0:NMOL%=NMOL%−8:MENU 4,8,1 FLA1%=1:ACH%=1:GOSUB MEN IF NS%=0 THEN k%=0:NP%=N%:A%=0:GOTO SIM1 K%=NS%−1:FLA1%=0:A%=0:GOTO SIM2SIM1: GOSUB CONTRSIM2: IF A%=28 THEN K%=K%+1 IF A%=29 THEN K%=K%−1 IF K%<0 THEN K%=NS%−1 IF K%>NS%−1 THEN K%=0 IF ns%<>0 THEN LOCATE 1,1:PRINT"MATRICE N.";K%;" " FOR T%=0 TO 2 PRINT USING "!_=+##.##_x+##.##_y+##.##_z+##.##";CHR$(88+t%);sim(k%,t%*4);sim(k%,1+t%*4);sim(k%,2+t%*4);sim(k%,3+t%*4) NEXT t% ELSE LOCATE 1,1 FOR T%=0 TO 3:PRINT SPACE$(40):NEXT T% END IFsim3: IF A%=65 THEN K%=Ns%−1:GOSUB INMAT:a%=0:GOTO SIM2 IF A%=67 THEN GOSUB CANMAT:A%=0:GOTO sim2 IF A%=68 THEN ERASE SIM:DIM SIM(9,11):NS%=0:a%=0:GOTO SIM2 IF A%=76 THEN GOSUB COORDTAB 'TASTO {L} IF A%=27 THEN GOSUB ASIM:GOSUB disegna:ACH%=0:RETURN END IF GOTO SIM1INMAT: NS%=NS%+1 IF NS%>10 THEN BEEP:RETURN IF (np%+ns%*np%)>nmax%−8 THEN LOCATE 5,1:PRINT "Memoria INSUFFICIENTE":RETURN HS%=0:LOCATE 1,1:PRINT "MATRICE " PRINT "X=a0x+b0y+c0z+d0 " PRINT "Y=a1x+b1y+c1z+d1 " PRINT "Z=a2x+b2y+c2z+d2 " IF A%<> 65 THEN A%=0:RETURN FOR t%=0 TO 2:FOR tt%=0 TO 3 LOCATE 5,1:PRINT CHR$(97+tt%);t%;":";:INPUT sim(ns%−1,Hs%) LOCATE 5,1:PRINT SPACE$(30) hs%=hs%+1:k%=ns%−1 NEXT TT%:NEXT T% RETURNCANMAT: IF nS%=0 THEN RETURN IF ns%=1 THEN ns%=0:K%=0:ERASE SIM:DIM SIM(9,11):RETURN FOR T%=K% TO NS%−2 FOR TT%=0 TO 11 SIM(T%,TT%)=SIM((T%+1),TT%) NEXT TT%:NEXT T% NS%=NS%−1:K%=K%−1 RETURNASIM: IF NS%=0 THEN N%=NP%:NMOL%=N%:MENU 2,7,0:RETURNASIM1: PNN%=0:CLS:PRINT "ATTENDERE..." par(0)=aa:par(1)=bb:par(2)=cc FOR T%=0 TO NS%−1 TT%=1ASIM3:

Page 17: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 17

Hs%=(t%+1)*NP%+TT%:ok%=0 X(0)=FR(TT%,1)*aa:x(1)=FR(TT%,2)*bb:x(2)=FR(TT%,3)*cc FOR TK%=0 TO 2 FR(Hs%,TK%+1)=(SIM(T%,tk%*4)*X(0)+SIM(T%,TK%*4+1)*x(1)+SIM(T%,TK%*4+2)*x(2)+sim(t%,tk%*4+3))/par(tk%) if abs( FR(Hs%,TK%+1)*par(tk%)−x(tk%))<1e−7 then ok%=ok%+1 NEXT TK% if ok%=3 then FR(HS%,0)=0 ELSE FR(HS%,0)=FR(TT%,0) END IF FOR TK%=1 TO CO%(TT%,0,0) CO%(Hs%,TK%,0)=CO%(TT%,TK%,0)+(Hs%−TT%) CO%(Hs%,TK%,1)=CO%(TT%,TK%,1) NEXT TK% CO%(Hs%,0,0)=CO%(TT%,0,0)ASIM4: TT%=TT%+1:IF TT%>NP% THEN ASIM5 GOTO ASIM3ASIM5: NEXT T% pnn%=ns%*nP%:n%=np%+pnn%:NMOL%=N%:MENU 2,7,1 IF FLA%=1 THEN FLA%=0:MENU 2,8,1 GOSUB elaborazione:GOSUB rotate1:GOSUB autodim SOUND 440,10,100 RETURN ASIM6: PNN%=1:CLS:PRINT "ATTENDERE..." FOR T%=0 TO NS%−1 TT%=1:i%=1ASIM7: Hs%=(t%+1)*NP%+i%:ok%=0 X(0)=FR(TT%,1)*aa:x(1)=FR(TT%,2)*bb:x(2)=FR(TT%,3)*cc FOR TK%=0 TO 2 ta(tk%)=SIM(T%,tk%*4)*X(0)+SIM(T%,TK%*4+1)*x(1)+SIM(T%,TK%*4+2)*x(2)+sim(t%,tk%*4+3) if abs(ta(tk%)−x(tk%))<1e−7 then ok%=ok%+1 NEXT TK% if ok%=3 then goto asim8 FR(hs%,0)=FR(TT%,0) FOR TK%=0 TO 2 FR(Hs%,TK%+1)=ta(tk%)/par(tk%) NEXT TK% pnn%=pnn%+1:i%=i%+1ASIM8: TT%=TT%+1:IF TT%>NP% THEN ASIM9 GOTO ASIM7ASIM9: NEXT T% pnn%=pnn%−1 n%=np%+pnn%:NMOL%=N%:Np%=N% IF FLA%=1 THEN FLA%=0:MENU 2,8,1:MENU 2,7,1 GOSUB genera SOUND 440,10,100 RETURN DEFCELLA: CELL%=1:CLS:PRINT "ATTENDERE..." FOR T%=0 TO 7 simb%=32 IF t%=0 THEN simb%=111 IF t%=1 THEN simb%=97 IF t%=3 THEN simb%=98 IF t%=4 THEN simb%=99 FR(nmol%+T%+1,0)=simb%:co%(nmol%+T%+1,0,0)=3 FR(nmol%+T%+1,1)=COCELLA%(T%,0,0) FR(nmol%+T%+1,2)=COCELLA%(T%,2,0) FR(nmol%+T%+1,3)=COCELLA%(T%,4,0) FOR TT%=0 TO 2 co%(nmol%+T%+1,TT%+1,0)=nmol%+COCELLA%(T%,TT%*2+1,1) co%(nmol%+t%+1,tt%+1,1)=0 NEXT TT% NEXT T%

Page 18: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 18

nmol%=nmol%+8:GOSUB elaborazione GOSUB autodim SOUND 440,10,100 RETURNAUTOPACKING: IF cell%=1 THEN CELL%=0:NMOL%=NMOL%−8:MENU 4,8,1 CLS:LOCATE 1,1:PRINT "NUMERO DI CELLE GENERABILI:";INT((NMAX%−N%)/N%)AUT1: FOR T%=0 TO 2 LOCATE 2,1:PRINT SPACE$(40) LOCATE 2,1:PRINT "LATO N.:";T%+1; LOCATE 3,1:PRINT SPACE$(30) LOCATE 3,1:INPUT "N.CELLE AGGIUNTIVE:";NCC%(T%) NEXT T% NCC%(3)=(NCC%(0)+1)*(NCC%(1)+1)*(NCC%(2)+1) IF NCC%(3)*N%>NMAX%−8 THEN AUT1 CLS:PRINT "CELLE GENERATE:";NCC%(3) PRINT "ATTENDERE...":HS%=1 FOR TZ%=0 TO NCC%(0) FOR TW%=0 TO NCC%(1) FOR TY%=0 TO NCC%(2) IF TZ%=0 AND TW%=0 AND TY%=0 THEN AUTOP1 FOR TTT%=1 TO N% FR(TTT%+HS%*N%,0)=FR(TTT%,0) FR(TTT%+HS%*N%,1)=FR(TTT%,1)+TZ% FR(TTT%+HS%*N%,2)=FR(TTT%,2)+TW% FR(TTT%+HS%*N%,3)=FR(TTT%,3)+TY% CO%(TTT%+HS%*N%,0,0)=CO%(TTT%,0,0) FOR TK%=1 TO CO%(TTT%+HS%*N%,0,0) CO%(TTT%+HS%*N%,TK%,0)=CO%(TTT%,TK%,0)+Hs%*N% CO%(TTT%+HS%*N%,TK%,1)=CO%(TTT%,TK%,1) NEXT TK% NEXT TTT% hs%=HS%+1AUTOP1: NEXT TY% NEXT TW% NEXT TZ% PNN%=(HS%−1)*N% NMOL%=N%+PNN% GOSUB ELABORAZIONE GOSUB ROTATE1 GOSUB autodim SOUND 440,10,100 RETURN INIZIALIZZA:PALETTE 0 ,0,0,0PALETTE 1,.73,.73,.73PALETTE 2,.8,0,.93PALETTE 3,.33,.87,0PALETTE 4,.4,.6,1PALETTE 5,1,.6,.67PALETTE 6,.47,.87,1PALETTE 7,1,1,.13PALETTE 8,1,.73,0PALETTE 9,.73,1,0PALETTE 10,0,.93,.87PALETTE 11,.93,.2,0PALETTE 12,.8,.6,.53PALETTE 13,1,.87,.73PALETTE 14,1,.13,.93PALETTE 15,1,1,1menu1:MENU 1,0,1,"PROJECT "MENU 1,1,1,"L.LISTA "MENU 1,2,1,"LOAD "MENU 1,3,0,"SAVE "MENU 1,4,1,"FINE " MENU 2,0,1,"ATOMI "MENU 2,1,1,"INSER. "MENU 2,2,0,"MOD/CANC "MENU 2,3,0,"AGGIUNGI "MENU 2,4,0,"CELLA "

Page 19: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 19

MENU 2,5,0,"NOTE "MENU 2,6,0,"G.SIMMETR."MENU 2,7,0,"FIX SIM. "MENU 2,8,0," PACKING "MENU 2,9,0,"FIX PACK. "MENU 3,0,0,"LEGAMI "MENU 3,1,1,"GENERA LEG."MENU 3,2,0,"CORREZIONE "MENU 3,3,1,"DISCONNET. "MENU 4,0,0,"OP.GRAFICHE"MENU 4,1,1," ATOMI NUMER. "MENU 4,2,1," NOME ATOMI "MENU 4,3,1," RUOTA X "MENU 4,4,1," RUOTA Y "MENU 4,5,1," RUOTA Z "MENU 4,6,1," AUTODIMENS. "MENU 4,7,1," PARAMETRI "MENU 4,8,0," DISEGNA CELLA" MENU 4,9,1," ELIM.SCRITTE "MENU 5,0,0,"OUTPUT "MENU 5,1,2," VIDEO "MENU 5,2,1," PRINTER "MENU 5,3,1," DISCO "MENU 5,4,0,"−−−−−−−−−−−"MENU 5,5,1," NOTE "MENU 5,6,1," COORDIN."MENU 5,7,1," DISTANZE"MENU 5,8,1," ANGOLI "MENU 5,9,0,"−−−−−−−−−−−"MENU 5,10,1," PROCEDI"MENU 6,0,1,"INFO "MENU 6,1,1," M.M.B.v1.0 "MENU 6,2,1,"by DANILO ROCCATANO"MENU 6,3,1,""MENU 6,4,1," "MENU 6,5,1," FROSINONE "MENU 6,6,1," 1989/91 "RETURNRotate: sx=SIN(ax%/f): cx=COS(ax%/f) sy=SIN(ay%/f): cy=COS(ay%/f) sz=SIN(az%/f): cz=COS(az%/f) xRx=cy*cz yRx=−cy*sz zRx=sy xRy=cx*sz+sx*sy*cz yRy=cx*cz−sx*sy*sz zRy=−sx*cy xRz=sx*sz−cx*sy*cz yRz=sx*cz+cx*sy*cz zRz=cx*cyrotate1: FOR tp%=1 TO NMOL% X=(IT(tp%,1)−bx)*10:Y=(IT(tp%,2)−by)*10:z=(IT(tp%,3)−bz)*10 rim(tp%,1)=X*xRx+Y*yRx+z*zRx rim(tp%,2)=X*xRy+Y*yRy+z*zRy rim(tp%,3)=X*xRz+Y*yRz+z*zRz IF RIM(Tp%,2)<−DI% THEN CHZO%=INT(RIM(Tp%,2)) ELSE CHZO%=0 NEXT tp% RETURNAUTODIM: segnx=1:segny=1 maxx=0:maxy=0:di%=900:dw%=400 IF CHZO%<>0 THEN DI%=CHZO% FOR t0%=1 TO NMOL% IF (rim(t0%,2)+di%)=0 THEN rim(t0%,2)=rim(t0%,2)+1 lx&=(rim(t0%,1)/(rim(t0%,2)+di%))*dw%*sf ly&=(rim(t0%,3)/(rim(t0%,2)+di%))*dw% IF maxx<ABS(lx&) THEN maxx=ABS(lx&):p%=t0%:segnx=SGN(lx&):IF segnx=0 THEN segnx=1 IF maxy<ABS(ly&) THEN maxy=ABS(ly&):PP%=t0%:segny=SGN(ly&):IF segny=0 THEN segny=1 NEXT t0%

Page 20: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 20

scx%=310*segnx:scy%=115*segny d1=RIM(P%,1)*dw%*sf/SCX%−rim(p%,2) d2=RIM(PP%,3)*dw%/scy%−rim(PP%,2) IF d1>d2 THEN di%=d1 ELSE di%=d2CENTRA: maxx=0:minx=0:maxy=0:miny=0 FOR TT%=1 TO NMOL% IF (rim(TT%,2)+di%)=0 THEN rim(TT%,2)=rim(TT%,2)+1 lx&=(rim(TT%,1)/(rim(TT%,2)+di%))*dw%*sf ly&=(rim(TT%,3)/(rim(TT%,2)+di%))*dw% IF TT%=1 THEN minx=lx&:maxx=lx&:miny=ly&:maxy=ly& IF maxx<lx& THEN maxx=lx&:p%=TT% IF maxy<ly& THEN maxy=ly&:PP%=TT% IF minx>lx& THEN minx=lx&:PM%=TT% IF miny>ly& THEN miny=ly&:PN%=TT% NEXT TT% px%=(640−maxx−minx)/2 py%=(256+maxy+miny)/2 RETURN DISEGNA: MENU 4,0,1:GOSUB rotatedrawit: WINDOW OUTPUT 1:CLS IF TEST%=0 THEN LOCATE 1,1:PRINT LEFT$(nm$,79) LOCATE 28,1:PRINT STATUS$ LOCATE 29,1:PRINT USING "_AX=###_ AY=###_ AZ=###_ ZOOM=#####";AX%;AY%;AZ%;DI%; LINE (34,207)−(39,210),15:LINE −(7,210),15 LINE −(7,192),15:LINE −(11,195),15 LOCATE 27,6:PRINT "x":LOCATE 24,1:PRINT"z" END IF FOR tp%=1 TO NMOL% IF (rim(tp%,2)+di%)=0 THEN rim(tp%,2)=rim(tp%,2)+1 lx&=px%+(rim(tp%,1)/(rim(tp%,2)+di%))*dw%*sf ly&=py%−(rim(tp%,3)/(rim(tp%,2)+di%))*dw% IF ABS(LX&)>10000 OR ABS(LY&)>10000 THEN DR3 Kk%=tp%:xS&=lx&:yS&=ly&:IF flags>0 THEN GOSUB PRINTAT IF CELL%=1 AND FLAGS=0 AND KK%>NMOL%−8 THEN GOSUB PRINTAT FOR ts%=1 TO CO%(tp%,0,0) t0%=CO%(tp%,ts%,0) IF T0%<tp% THEN dr2 IF (rim(t0%,2)+di%)=0 THEN rim(t0%,2)=rim(t0%,2)+1 xw&=px%+(rim(t0%,1)/(rim(t0%,2)+di%))*dw%*sf yw&=py%−(rim(t0%,3)/(rim(t0%,2)+di%))*dw% IF ABS(XW&)>20000 OR ABS(YW&)>20000 THEN DR2 XM&=(XW&+LX&)/2:YM&=(YW&+LY&)/2 c%=CO%(TP%,TS%,1) va%=tP%:GOSUB assegna colr1%=va% va%=t0%:GOSUB assegna colr2%=va% IF c%>=200 AND c%<300 THEN IF SGN(lx&)=SGN(ly&) THEN LINE(lx&−2,ly&+2)−(xm&−2,ym&+2),colr1% LINE −(xw&−2,yw&+2),colr2% ELSE LINE (lx&+2,ly&+2)−(xm&+2,ym&+2),colr1% LINE −(xw&+2,yw&+2),colr2% END IF END IF IF c%>=300 THEN IF SGN(lx&)=SGN(ly&) THEN LINE(lx&−2,ly&+2)−(xm&−2,ym&+2),colr1% LINE −(xw&−2,yw&+2),colr2% LINE (lx&+2,ly&−2)−(xm&+2,ym&−2),colr1% LINE −(xw&+2,yw&−2),colr2% ELSE LINE (lx&+2,ly&+2)−(xm&+2,ym&+2),colr1% LINE −(xw&+2,yw&+2),colr2% LINE (lx&−2,ly&−2)−(xm&−2,ym&−2),colr1% LINE −(xw&−2,yw&−2),colr2% END IF

Page 21: mmb1.bas Page 1 - daniloroccatano.files.wordpress.com · mmb1.bas Page 2 m1%=MENU(1) ON M0% GOSUB PROJ,ATOM,LEG,RAPP,OUP,menus1 menus1:

mmb1.bas Page 21

END IF LINE (lx&,ly&)−(xm&,ym&),colr1% LINE −(xw&,yw&),colr2% Kk%=t0%:xS&=xW&:yS&=yw&:IF flags>0 THEN GOSUB PRINTAT IF CELL%=1 AND FLAGS=0 AND KK%>NMOL%−8 THEN GOSUB PRINTATDr2: NEXT ts%DR3: NEXT tp% IF CTR2%=1 THEN WINDOW OUTPUT 3 RETURNPRINTAT: IF CELL%=1 AND KK%>NMOL%−8 THEN GOTO PRIN1 IF FLAGS=2 THEN IF FR(KK%,0)<>0 THEN TA$=STR$(kK%):GOTO PRIN2 ELSE RETURN END IF IF FR(KK%,0)=0 THEN RETURNprin1: GOSUB ANALISI IF TA$=" " THEN RETURNPRIN2: CALL move&(WINDOW(8),xS&,yS&) CALL text&(WINDOW(8),SADD(TA$),LEN(TA$)) RETURN