home *** CD-ROM | disk | FTP | other *** search
Wrap
' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ' Wilfried Cordes, Kennedystraße 20, 2900 Oldenburg, Tel.: 0441-53088 ' Accessory zur Bestimmung von Molmassen ' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ' 1000 Bytes Speicher reichen $m1000 ' ' Anwendung beim AES anmelden ap_id&=APPL_INIT() programm!=ap_id&=0 ' * ' * Ressourcebaumadressen holen ' * ' ## INLINE: ' $0000: 00 00 03 ba 03 2e 03 2e 03 20 00 00 00 24 02 a8 ' $0010: 00 00 07 02 00 23 00 02 00 05 00 00 00 01 00 00 ' $0020: 00 00 07 0a 4d 6f 6c 6d 61 73 73 65 6e 62 65 73 ' $0030: 74 69 6d 6d 75 6e 67 00 53 75 6d 6d 65 6e 66 6f ' $0040: 72 6d 65 6c 3a 00 61 62 63 64 65 66 67 68 69 6a ' $0050: 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a ' $0060: 84 94 00 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f ' $0070: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 00 ' $0080: 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 ' $0090: 58 58 58 58 58 58 58 58 58 58 58 58 00 4d 6f 6c ' $00a0: 6d 61 73 73 65 3a 00 31 32 33 34 35 36 37 38 39 ' $00b0: 30 00 47 72 61 6d 6d 00 52 65 63 68 6e 65 00 53 ' $00c0: 63 68 6c 75 9e 00 47 65 77 69 63 68 74 73 70 72 ' $00d0: 6f 7a 65 6e 74 65 3a 00 41 42 43 44 45 46 47 48 ' $00e0: 49 4a 4b 00 41 42 43 44 45 46 47 48 49 4a 4b 00 ' $00f0: 41 42 43 44 45 46 47 48 49 4a 4b 00 41 42 43 44 ' $0100: 45 46 47 48 49 4a 4b 00 41 42 43 44 45 46 47 48 ' $0110: 49 4a 4b 00 41 42 43 44 45 46 47 48 49 4a 4b 00 ' $0120: 41 42 43 44 45 46 47 48 49 4a 4b 00 41 42 43 44 ' $0130: 45 46 47 48 49 4a 4b 00 41 42 43 44 45 46 47 48 ' $0140: 49 4a 4b 00 41 42 43 44 45 46 47 48 49 4a 4b 00 ' $0150: 41 42 43 44 45 46 47 48 49 4a 4b 00 41 42 43 44 ' $0160: 45 46 47 48 49 4a 4b 00 57 69 6c 66 72 69 65 64 ' $0170: 20 43 6f 72 64 65 73 00 00 43 20 48 20 45 20 4d ' $0180: 20 50 20 4c 20 4f 20 54 20 20 20 53 20 54 00 00 ' $0190: 4b 65 6e 6e 65 64 79 73 74 72 61 e1 65 20 32 30 ' $01a0: 00 32 39 30 30 20 4f 6c 64 65 6e 62 75 72 67 00 ' $01b0: 27 4d 4f 4c 4d 41 53 53 45 27 20 77 75 72 64 65 ' $01c0: 20 6d 69 74 20 47 46 41 2d 42 61 73 69 63 20 33 ' $01d0: 2e 35 20 65 72 73 74 65 6c 6c 74 2e 00 53 79 6d ' $01e0: 62 6f 6c 65 20 62 69 74 74 65 20 6b 6f 72 72 65 ' $01f0: 6b 74 20 67 72 6f 9e 2f 6b 6c 65 69 6e 20 73 63 ' $0200: 68 72 65 69 62 65 6e 3a 00 00 00 53 62 2c 20 42 ' $0210: 72 20 73 74 61 74 74 20 53 42 2c 20 42 52 20 6f ' $0220: 64 65 72 20 67 61 72 20 73 42 20 6f 64 65 72 20 ' $0230: 73 62 2e 00 00 00 4a 6f 64 20 69 73 74 20 61 6c ' $0240: 73 20 27 49 27 20 65 69 6e 7a 75 67 65 62 65 6e ' $0250: 2e 00 00 00 27 4d 4f 4c 4d 41 53 53 45 27 20 69 ' $0260: 73 74 20 50 75 62 6c 69 63 20 44 6f 6d 61 69 6e ' $0270: 2e 20 45 73 20 64 61 72 66 20 73 6f 6d 69 74 00 ' $0280: 61 6e 20 6a 65 64 65 20 75 6e 64 20 6a 65 64 65 ' $0290: 6e 20 77 65 69 74 65 72 67 65 67 65 62 65 6e 20 ' $02a0: 77 65 72 64 65 6e 2e 00 00 00 00 00 00 00 00 08 ' $02b0: 00 00 00 08 00 40 00 04 10 42 00 04 08 44 00 0c ' $02c0: 04 08 00 08 00 c0 00 08 01 e0 00 0c 03 f3 80 00 ' $02d0: 3b f0 00 0c 01 e0 00 0c 00 c8 00 0c 02 04 00 0c ' $02e0: 04 42 00 0c 08 40 00 0c 00 40 00 0c 00 43 ff cc ' $02f0: 00 02 00 4c 00 02 db 4c 00 02 db 4c 00 02 db 4c ' $0300: 00 fe 00 4c 1e 80 00 4c 12 b6 db 4c 12 b6 db 4c ' $0310: 1e b6 db 7c 1e 80 00 4c 12 ff ff cc 00 00 00 00 ' $0320: 00 00 02 a8 00 04 00 1e 00 00 00 00 00 01 00 00 ' $0330: 00 46 00 00 00 63 00 00 00 80 00 03 00 06 00 00 ' $0340: 11 80 00 00 ff ff 00 1d 00 1d 00 00 01 78 00 00 ' $0350: 01 79 00 00 01 8f 00 03 00 06 00 02 11 01 00 00 ' $0360: ff fd 00 01 00 16 00 00 01 dd 00 00 02 09 00 00 ' $0370: 02 0a 00 03 00 06 00 00 11 00 00 00 ff ff 00 2c ' $0380: 00 01 00 00 02 0b 00 00 02 34 00 00 02 35 00 03 ' $0390: 00 06 00 00 11 00 00 00 ff ff 00 29 00 01 00 00 ' $03a0: 02 36 00 00 02 52 00 00 02 53 00 03 00 06 00 00 ' $03b0: 11 00 00 00 ff ff 00 1c 00 01 ff ff 00 01 00 0a ' $03c0: 00 14 00 00 00 10 00 02 11 00 00 00 00 00 00 2e ' $03d0: 00 11 00 02 ff ff ff ff 00 1c 00 00 00 00 00 00 ' $03e0: 00 24 00 02 00 01 00 13 00 01 00 03 ff ff ff ff ' $03f0: 00 17 00 40 00 00 00 00 03 20 00 28 00 01 00 04 ' $0400: 0e 01 00 04 ff ff ff ff 00 1c 00 00 00 00 00 00 ' $0410: 00 38 00 02 00 03 00 0d 00 01 00 05 ff ff ff ff ' $0420: 00 1d 00 08 00 00 00 00 03 2e 00 10 00 03 00 1c ' $0430: 00 01 00 06 ff ff ff ff 00 1c 00 00 00 00 00 00 ' $0440: 00 9d 00 02 00 05 00 09 00 01 00 07 ff ff ff ff ' $0450: 00 1c 00 00 00 00 00 00 00 a7 00 0c 00 05 00 0a ' $0460: 00 01 00 08 ff ff ff ff 00 1c 00 00 00 00 00 00 ' $0470: 00 b2 00 17 00 05 00 06 00 01 00 09 ff ff ff ff ' $0480: 00 1a 00 07 00 00 00 00 00 b8 00 02 00 07 00 0d ' $0490: 00 01 00 0a ff ff ff ff 00 1a 00 05 00 00 00 00 ' $04a0: 00 bf 00 1e 00 07 00 0e 00 01 00 00 00 0b 00 17 ' $04b0: 00 19 00 00 00 10 00 00 11 00 00 02 00 09 00 2a ' $04c0: 00 07 00 0c ff ff ff ff 00 1c 00 00 00 00 00 00 ' $04d0: 00 c6 00 00 00 00 00 11 00 01 00 0d ff ff ff ff ' $04e0: 00 1c 00 00 00 00 00 00 00 d8 00 00 00 02 00 0b ' $04f0: 00 01 00 0e ff ff ff ff 00 1c 00 00 00 00 00 00 ' $0500: 00 e4 00 0f 00 02 00 0b 00 01 00 0f ff ff ff ff ' $0510: 00 1c 00 00 00 00 00 00 00 f0 00 1e 00 02 00 0b ' $0520: 00 01 00 10 ff ff ff ff 00 1c 00 00 00 00 00 00 ' $0530: 00 fc 00 00 00 03 00 0b 00 01 00 11 ff ff ff ff ' $0540: 00 1c 00 00 00 00 00 00 01 08 00 0f 00 03 00 0b ' $0550: 00 01 00 12 ff ff ff ff 00 1c 00 00 00 00 00 00 ' $0560: 01 14 00 1e 00 03 00 0b 00 01 00 13 ff ff ff ff ' $0570: 00 1c 00 00 00 00 00 00 01 20 00 00 00 04 00 0b ' $0580: 00 01 00 14 ff ff ff ff 00 1c 00 00 00 00 00 00 ' $0590: 01 2c 00 0f 00 04 00 0b 00 01 00 15 ff ff ff ff ' $05a0: 00 1c 00 00 00 00 00 00 01 38 00 1e 00 04 00 0b ' $05b0: 00 01 00 16 ff ff ff ff 00 1c 00 00 00 00 00 00 ' $05c0: 01 44 00 00 00 05 00 0b 00 01 00 17 ff ff ff ff ' $05d0: 00 1c 00 00 00 00 00 00 01 50 00 0f 00 05 00 0b ' $05e0: 00 01 00 0a ff ff ff ff 00 1c 00 20 00 00 00 00 ' $05f0: 01 5c 00 1e 00 05 00 0b 00 01 ff ff 00 01 00 0a ' $0600: 00 14 00 00 00 10 00 02 11 00 00 00 00 00 00 2e ' $0610: 00 0e 00 02 ff ff ff ff 00 1a 00 00 00 00 00 00 ' $0620: 01 68 00 01 00 01 00 11 00 01 00 03 ff ff ff ff ' $0630: 00 1e 00 40 00 00 00 00 03 4a 00 13 00 01 00 19 ' $0640: 00 03 00 04 ff ff ff ff 00 1a 00 00 00 00 00 00 ' $0650: 01 90 00 01 00 02 00 11 00 01 00 05 ff ff ff ff ' $0660: 00 1a 00 00 00 00 00 00 01 a1 00 01 00 03 00 11 ' $0670: 00 01 00 06 ff ff ff ff 00 1c 00 00 00 00 00 00 ' $0680: 01 b0 00 01 00 05 00 2c 00 01 00 07 ff ff ff ff ' $0690: 00 15 00 00 00 00 00 00 03 66 00 01 00 07 00 2b ' $06a0: 00 01 00 08 ff ff ff ff 00 15 00 00 00 00 00 00 ' $06b0: 03 82 00 01 00 08 00 28 00 01 00 09 ff ff ff ff ' $06c0: 00 15 00 00 00 00 00 00 03 9e 00 01 00 09 00 1b ' $06d0: 00 01 00 0a ff ff ff ff 00 1c 00 00 00 00 00 00 ' $06e0: 02 54 00 01 00 0b 00 2b 00 01 00 00 ff ff ff ff ' $06f0: 00 1c 00 20 00 00 00 00 02 80 00 01 00 0c 00 29 ' $0700: 00 01 00 00 03 ba 00 00 05 fa 00 2b 00 01 00 00 ' $0710: ff ff ff ff 00 1c 00 20 00 00 00 00 02 8c 00 01 ' $0720: 00 0c 00 29 00 01 00 00 03 c6 00 00 06 1e ' 1838 Bytes. INLINE rsc%,1838 setze_koordinaten(0,eingabe_adr%,rsc%) rechte&=2 wert&=4 ergebnis&=6 rechne&=8 schluss&=9 prozent1&=12 setze_koordinaten(1,rechte_adr%,rsc%) ' atomliste$=" HHeLiBe B C N O FNeNaMgAlSi P SClAr KCaScTi VCrMnFeCoNiCuZnGaGeAsSeBrKrRbSr YZrNbMoTcRuRhPdAgCdInSnSbTe IXeCsBaHfTa WReOsIrPtAuHgTlPbBiPo" OPTION BASE 1 DIM atomgewicht#(69) DIM gewicht#(12) !Gewicht pro Atom in der Formel DIM atomsymbol$(12) FOR m&=1 TO 69 READ atomgewicht#(m&) NEXT m& DATA 1.0079,4.00260,6.941,9.01218,10.81 DATA 12.011,14.0067,15.9994,18.99840,20.179 DATA 22.98977,24.305,26.98154,28.086 DATA 30.97376,32.06,35.453,39.948 DATA 39.098,40.08,44.9559,47.90,50.9414 DATA 51.996,54.9380,55.847,58.9332,58.70,63.546,65.38 DATA 69.72,72.59,74.9216,78.96,79.904,83.80 DATA 85.4678,87.62,88.9059,91.22,92.9064,95.94 DATA 97,101.07,102.9055,106.4,107.868,112.40 DATA 114.82,118.69,121.75,127.60,126.9045,131.30 DATA 132.9055,137.34,178.49,180.9479,183.85 DATA 186.207,190.2,192.22,195.09,196.9665,200.59 DATA 204.37,207.19,208.9806,210 ' IF NOT programm! ' Accessorynamen ins Deskmenü eintragen IF MENU_REGISTER(ap_id&," Molmasse...")=-1 ' Kein Platz im Deskmenü DO ~EVNT_TIMER(-1) LOOP ENDIF ENDIF ' DO IF NOT programm! ~EVNT_MESAG(0) !Auf's angeklickt werden warten ENDIF IF MENU(1)=40 OR programm! !'AC_OPEN' DEFMOUSE 0 ' Menüleiste sperren ~WIND_UPDATE(1) ' Dialogboxkoordinaten auf Bildschirm zentrieren ~FORM_CENTER(eingabe_adr%,x&,y&,b&,h&) ' Bildschirmplatz reservieren ~FORM_DIAL(0,0,0,0,0,x&,y&,b&,h&) ' Eingabezeile leeren BYTE{{OB_SPEC(eingabe_adr%,wert&)}}=0 ' ' Molmasse zu Anfang 0 Gramm CHAR{OB_SPEC(eingabe_adr%,ergebnis&)}="0" FOR m&=prozent1& TO prozent1&+12 CHAR{OB_SPEC(eingabe_adr%,m&)}="" NEXT m& ' REPEAT abbruch!=FALSE ' ' Ausgangsknöpfe entfärben undo(eingabe_adr%,rechne&) undo(eingabe_adr%,schluss&) ' ' Dialogbox zeichnen ~OBJC_DRAW(eingabe_adr%,0,3,x&,y&,b&,h&) ' ' Dialog durchführen r_obj%=FORM_DO(eingabe_adr%,0) ' SELECT r_obj% CASE rechne& ' ' Text aus Dialogbox holen text$=CHAR{{OB_SPEC(eingabe_adr%,wert&)}} ' CLR summe# atomanzahl&=1 FOR m&=prozent1& TO prozent1&+12 CHAR{OB_SPEC(eingabe_adr%,m&)}="" NEXT m& IF text$<>"" FOR ort&=1 TO LEN(text$) ' Alle eingegebenen Zeichen überprüfen buchstabe$=MID$(text$,ort&,1) IF buchstabe$>="A" AND buchstabe$<="Z" ' ' Eingelesenes Zeichen ist großer Buchstabe a$=MID$(text$,ort&+1,1) ' IF a$>="a" AND a$<="z" ' Großer Buchstabe hat kleinen Buchstaben als Nachbarn ' Ist Kombination in Atomliste? stelle&=INSTR(atomliste$,buchstabe$+a$) IF stelle&>0 ' Kombination gefunden atomsymbol$(atomanzahl&)=buchstabe$+a$ INC ort& hole_haeufigkeit(stelle&,ort&,summe#) ELSE ' Kombination nicht gefunden, nach einzelnem Buchstaben suchen atomsymbol$(atomanzahl&)=" "+buchstabe$ stelle&=INSTR(atomliste$," "+buchstabe$) hole_haeufigkeit(stelle&,ort&,summe#) ENDIF ELSE ' Buchstabe hat Zahl oder nichts als Nachbarn atomsymbol$(atomanzahl&)=" "+buchstabe$ stelle&=INSTR(atomliste$," "+buchstabe$) hole_haeufigkeit(stelle&,ort&,summe#) ENDIF ' ELSE abbruch!=TRUE ENDIF EXIT IF abbruch! NEXT ort& ENDIF ' IF NOT abbruch! IF atomanzahl&>1 ' Molekülgewicht in Dialogbox schreiben CHAR{OB_SPEC(eingabe_adr%,ergebnis&)}=STR$(summe#) FOR atom&=1 TO MIN(atomanzahl&-1,12) anteil#=100*gewicht#(atom&)/summe# CHAR{OB_SPEC(eingabe_adr%,prozent1&+atom&-1)}=atomsymbol$(atom&)+": "+STR$(ROUND(anteil#,2),5,2)+" %" NEXT atom& ENDIF ELSE ' Fehlerhafte Eingabe ~FORM_ALERT(1,"[3][Eingabe kann nicht|ausgewertet werden.][Weiter]") CHAR{OB_SPEC(eingabe_adr%,ergebnis&)}="0" ENDIF ' CASE rechte& ~FORM_CENTER(rechte_adr%,xx&,yy&,bb&,hh&) ~OBJC_DRAW(rechte_adr%,0,3,xx&,yy&,bb&,hh&) ~FORM_DO(rechte_adr%,0) ENDSELECT UNTIL r_obj%=schluss& ' ' Botschaft an Hauptprogramm zur Bildschirmrestaurierung schicken ~FORM_DIAL(3,0,0,0,0,x&,y&,b&,h&) ' Menüs dürfen wieder klappen ~WIND_UPDATE(0) ENDIF EXIT IF programm! LOOP ' ' Programmende ~RSRC_FREE() END ' PROCEDURE hole_haeufigkeit(stelle&,VAR ort&,summe#) ' Element ist in Liste, nun zugehörigen Zahlenwert bestimmen LOCAL menge& ' IF stelle&>0 AND ODD(stelle&) ' Umrechnung von Position in String ' auf atomgewicht()-Feldindex DIV stelle&,2 INC stelle& ' ' ort& zeigt auf erstes Zeichen nach dem Elementsymbol INC ort& ' ' Zahlenwert der Zeichen nach dem Elementsymbol bestimmen menge&=VAL(MID$(text$,ort&)) ' ' Wenn Zahl gefunden (menge&>0), Textzeiger neu stellen IF menge&>0 ' Korrektur wegen interner Zahlendarstellung ADD ort&,LOG10(menge&)+0.001 ELSE menge&=1 DEC ort& !wegen NEXT ort& in Haupschleife ENDIF ' ' Molekülgewicht aufaddieren ADD summe#,atomgewicht#(stelle&)*menge& gewicht#(atomanzahl&)=atomgewicht#(stelle&)*menge& INC atomanzahl& ELSE abbruch!=TRUE ENDIF RETURN ' ' Objekt desaktivieren PROCEDURE disable(baum_adr%,objekt&) OB_STATE(baum_adr%,objekt&)=BSET(OB_STATE(baum_adr%,objekt&),3) RETURN ' Objekt aktivieren PROCEDURE enable(baum_adr%,objekt&) OB_STATE(baum_adr%,objekt&)=BCLR(OB_STATE(baum_adr%,objekt&),3) RETURN ' Knopf entfärben PROCEDURE undo(baum_adr%,objekt&) OB_STATE(baum_adr%,objekt&)=BCLR(OB_STATE(baum_adr%,objekt&),0) RETURN ' * ' Koordinaten in INLINE-Ressource berechnen ' * PROCEDURE setze_koordinaten(baum&,VAR adr%,rsc%) LOCAL nummer&,adresse%,tabelle& ' tabelle&=CARD{rsc%+18} adr%={tabelle&+rsc%+baum&*4}+rsc% nummer&=0 REPEAT ~RSRC_OBFIX(adr%,nummer&) SELECT OB_TYPE(adr%,nummer&) CASE 21,22,29,30,31 OB_SPEC(adr%,nummer&)=OB_SPEC(adr%,nummer&)+rsc% adresse%=OB_SPEC(adr%,nummer&) {adresse%}={adresse%}+rsc% {adresse%+4}={adresse%+4}+rsc% {adresse%+8}={adresse%+8}+rsc% CASE 23,24 !BITBLK,USERDEF OB_SPEC(adr%,nummer&)=OB_SPEC(adr%,nummer&)+rsc% adresse%=OB_SPEC(adr%,nummer&) {adresse%}={adresse%}+rsc% CASE 26,28,32 OB_SPEC(adr%,nummer&)=OB_SPEC(adr%,nummer&)+rsc% ENDSELECT ' INC nummer& UNTIL BTST(OB_FLAGS(adr%,nummer&-1),5) RETURN