Home
MathServer - Thomas Weise
Contents
1. Http Befehl Typ Ziffer Ziffer m Leerzeile XML Daten gt Ziffer Ziffer Anfrage gt ei Antwort 19 Mai 2003 Seite 18 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 1 2 2 6 Beziehungen zwischen den Speichern ERD Da wir keine persistenten Speicher verwenden macht die Angabe eines ERD eigentlich auch keinen Sinn Um jedoch wenigstens etwas hnliches anzufertigen um diese Art des Softwareengineering zu ben wurde das folgende Diagramm eingebracht Wie bereits das Ereignisdiagramm 1 2 1 1 als auch als auch das Kontextmodell 1 2 1 2 wird auch das Entity Relationship Diagramm in Klienten und Serverteil untergliedert wobei beide die Datenstrukturen der XML Baum verwenden Wieder wird das Netzwerk als Pseudo Speicher dargestellt Eingabestring Eingabetext Ausgabestring Ausgabetext Tata XML Baum rent 1 Diagramm 1 7 cz wird geparst zu Math Server n Zwischen ergebnisse 19 Mai 2003 Seite 19 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 1 2 2 7 Prozessspezifikation 1 2 2 7 1 Eingabeschnittstelle Prozess eingabeschnittstelle Datum 04 05 2003 Bearbeiter Rico Ro berg Voraussetzungen der Nutzer hat einen lt ausdruck gt A eingegeben
2. GetRegValue HKEY_CURRENT USER Control Panel International sDecimal Komma Me Label7 Caption Dezimaltrennzeichen Combo3 AddItem Combo3 AddItem If Not Komma And Not Komma Then Combo3 AddItem Komma Combo3 Text Komma Daten im Debug Tab Text2_Change Text9 Text lt xml version 1 0 encoding iso 8859 1 gt lt math gt Text10 Text lt math gt Text8 Text tt willk rlich ausgew hlte MathML Daten die nichts mit dem Ausdruck oben zu tun haben Text7 Text lt apply id 0 gt lt plus gt lt cn gt 7 4 lt cn gt lt apply id 1 gt lt times gt lt cn gt 5 amp 44 9 lt cn gt lt apply id 2 gt lt plus gt lt pi gt lt cen gt 4 lt cn gt lt apply gt lt apply gt lt amp _ apply gt mm Text4 Text Text6 Text Textl2 Text 9 Juli 2003 Seite 90 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 Label5 Caption End Sub Ikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Komma ndern Tab Formeleingabe Private Sub Combo3_ Click Komma Combo3 Text End Sub Ikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Formel drucken Tab Formeleingabe Private Sub Commandl Click PrintText Textl Text End Sub Ikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
3. neues Socket erstellen CSocket x new CSocket if x dword 1 sizeof x gt m address Verbindung akzeptieren E x gt m socket accept m socket x gt m_address 1 if x gt m_socket INVALID SOCKET Die Event Konfiguration dieses Sockets wurde vom Serversocket mit m_event bernommen und muss r ckgesetzt werden if WSAEventSelect x gt m_socket 0 0 0 9 Juli 2003 Seite 29 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 dword z 0 Socket in den Blocking Mode schalten if ioctlsocket x gt m socket FIONBIO amp z 0 x gt SetState CSOCKET_CLIENT true anewsock x goto end retval wsaerror x gt Release else retval E_OUTOFMEMORY S lse retval wsaerror lse retval wsaerror else retval E FAIL else retval E FAIL end return retval T Baut eine Klienten Verbindung zu der Adresse aconnectaddress auf C_hresult SC CSocket Client p_CString aconnectaddress hresult retval Close if succeeded retval Socket Handle erzeugen m socket socket AF INET SOCK_ STREAM IPPROTO TCP if m socket INVALID_SOCKET Netzwerkadresse aufl sen if aconnectaddress aconnectaddress gt ToIPAddress m address else m address in addr dwords 0 LOCAL ADDRESS
4. Ausdruck Objet Ltb Objekt I op2 Ausdruck Ausdruck Objekt Ltb Ausdruck Log Objekt Log Objekt gt Ausdruck Ausdruck Sl Ai 19 Mai 2003 Seite 15 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 Diagramm 1 6 3 Fak Zfolge ED O u iii Ausdruck Zfolge SE Ausdruck KS a Objekt TH m Powu E il Trig gt Betrag 19 Mai 2003 Seite 16 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 1 2 2 5 2 Struktur des Netzwerktraffics Um die bersicht zu verbessern wurden einzuf gende Leerzeichen durch den Unterstrich _ ersetzt Http Befehl Gi D Q g 3 3 Sa N ch Typ XML Daten Leerzeile Ergebnis Nr 19 Mai 2003 GET gt Solution gt gt XVL Text p LFLF gt 200 OK r Ziffer gt Ziffer Seite 17 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 Diagramm 1 7 2 D
5. Erstellen der Variablen text_between und insert_string text between new CString false insert string new CString false Einf gen von lt und m_name zu astring Erstellung von ffnendem Tag astring gt AddUnichar _S lt astring gt AddStr m name Einf gen der verschiedenen Attribute for i 1 i lt m attributes gt Length i Erstellen der Variablen att name und att_value att Dame new CString false att_value new CString false Attribut Name und Wert von m_attributes nach att_name und att_value kopieren m attributes gt GetAt i 1 att_name att_ value astring gt AddUnichar S Einf gen von att_name Attributname zu astring astring gt AddStr att_name astring gt AddUnichar S H Solange cnt lt L nge von att_value und x aktuelles Zeichen ungleich und ungleich while cent lt att_value gt Length amp amp z att value gt GetAt cnt S e amp x S cnt 8 u u Zenn x gleich setze x auf if x _S x _S5 Sonst setze x auf else x S Einf gen von att_value Attributwert zu astring astring gt AddUnichar x astring gt AddStr att_value astring gt AddUnichar x Kopieren von m_string nach text_between text_between gt AddStr m string Zenn kein Text vorhanden und keine Unterknoten vorhanden Einf gen von zu astring Damit wird ein evil leerer Tag erstellt
6. S FilterString S math2xmath S End Function Die Routine f hrt die Umwandlung des Infixausdrucks ber die xmath Zwischenstufe nach XML aus Function math2xml ByVal S As String ByRef IDS As String As String On Error GoTo ErrorHandler Dim I As Long I 1 ReDim IDS 0 math2xml xmath2xml math2xmath S IDS Exit Function ErrorHandler SyntaxError ShowRunTimeError xmath2xml 5 Resume Next End Function 9 Juli 2003 Seite 104 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 3 Testplan Zuerst wird der Server einzeln getestet Mit Hilfe von Pythonscript werden die Testdaten Rechenaufgaben zum Server geschickt Die Matheaufgaben werden wie spezifiziert in MathML Syntax zu bertragen So werden zuerst alle implementierten Mathefunktionen einzeln getestet Danach wird dazu bergegangen mehrere Funktionen in Kombination zu testen welche Funktionen zusammen getestet werden geschieht nachdem Zufallsprinzip Die berpr fung der Ergebnisse erfolgt mittels Taschenrechner Der letzte Test zielt auf die Multithreadfunktionalit t ab Z B Pyhton wird 3x gestartet und jeweils ein Rechenscript ge ffnet die Berechnung von Sin 0 56 bei 500 Vorkommastellen und 500 Nachkommastellen damit die Berechnung lang genug dauert Die 3 Scripte werden so schnell wie m glich hintereinander ausgef hrt Erfolgen diese Tests erfolgreich erfolgt g
7. If Len OutString gt MSE Then abrunden abschneiden If CLng Mid OutString MSE 1 1 lt 5 Then OutString Left OutString MSE Else oder kompliziertes Aufrunden ggf bis hin zur ersten Stelle OutString Left OutString MSE Op Right OutString 1 Increase Op Ift Op gt 9 Then CO True OutString 0 amp OutString Increase KP Do While CO Op Right OutString 1 Increase Op CO Op gt 9 If CO Then OutString Left OutString Len OutString 1 Else OutString Left OutString Len OutString 1 amp CStr Op End If Loop If Left OutString 1 0 Then OutString Mid OutString 2 Decrease KP End If If KP gt Len OutString 1 Then OutString OutString amp String KP Len OutString 1 0 End TE Else OutString Left OutString MSE 1 amp CStr Op End If End IE End If Komma wieder einf gen If Not KP 0 And Not KP gt Len OutString Then OutString Left OutString KP 1 amp amp Mid OutString KP RoundedSolution OutString End Function 9 Juli 2003 Seite 97 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 2 2 3 Modul XML Verarbeitung Ikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Rest vom Modul XML Vearbeitung Ikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
8. ea Se return retval 9 Juli 2003 Seite 77 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 2 1 5 3 Kode CXMLPI cpp include XML h Konstruktor CXMLPI CXMLPI c_boolean athreadsecured CXMLBase athreadsecured Destruktor CXMLPI CXMLPI void c_hresult SC CXMLPI FromString cp CString astring Indexvariable dword i 0 Variable f r aktuelles Zeichen character x Aufrufen der FromString Funktion vom CXMLBase Objekt hresult retval CXMLBase FromString astring Wenn o g Aufruf erfolgreich if succeeded retval Zenn 1 Zeichen gleich lt und 2 Zeichen gleich ist Also Anfang einer Prozessanweisung if astring gt GetAt 0 lt amp amp astring gt GetAt 1 L schen der beiden Zeichen astring gt Delete 0 2 Solange i tes Zeichhen nicht und i 1 tes Zeichen nicht gt ist Also Ende der Prozessanweisung while x astring gt GetAt i S amp amp astring gt GetAt i 1 _S gt Zenn i tes Zeichen oder ist berspringen dieses Teils bis zum zugeh rigen oder Zeichen Bestimmung des zugeh rigen schlie enden Zeichens mittels QuoteEnd iE x SUR H ees SU vr i astring gt QuoteEnd i 1 Sonst i inkrementieren um n chstes Zeichen zu pr fen else it Zenn i gt 0 also wenn zwischen Anfang und End
9. _ forcsinline boolear FG _SHL_N MOD32 c_dword alength c_dword adigits c pointer aindata c_pointer aoutdata Linksschieben von aindata um adigits Stellen lt 32 Speicherung in aotdata ALength L nge der Zahl __forceinline c_boolean EC _SHL_N 32 ce_dword alength c_dword adigits c pointer aindata c pointer aoutdata Linksschieben von aindata um adigits 32Bit Bl cke Speicherung in aoutdata Alength L nge der Zahl API c_boolean FC _ SHL N c_dword alength c_dword adigits c pointer aindata c_pointer aoutdata Schiebt aindata um adigits Stellen nach links Ergebnis aoutdata wird gebildet Alength L nge r Zahl API c boolean FC _SHR_1 c_dword alength c_pointer aindata c pointer aoutdata Rechtsschieben von aindata um 1 Stelle Speicherung in aoutdata Alength L nge der Zahl _ forceinline c boolean FC _SHR_N MOD32 c_dword alength c_dword adigits c pointer aindata c_pointer aoutdata Rechtsschieben von aindata um adigits Stellen lt 32 Speicherung in aotdata ALength L nge der Zahl __forceinline c boolean FG _SHR_N_32 c_dword alength c_dword adigits c pointer aindata c_pointer aoutdata Rechtsschieben von aindata um adigits 32Bit Bl cke Speicherung in aoutdata Alength L nge der Zahl API c boolear FC _SHR_N c_dword alength c_dword adigits c_pointer aindata c_pointer aoutdata Schiebt aindata um adigits Stellen nach rechts Ergebnis aoutdata wird gebildet Aleng
10. aread recv m socket adata asize 0 return retval Die Adresse des Sockets in einen String schreiben c_hresult se CSocket Address p_CString aaddress hresult retval S_OK if aaddress if IsOpen retval aaddress gt FromIPAddress m address else aaddress gt Clear retval E FAIL else retval E INVALIDARG return retval 9 Juli 2003 Seite 31 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 2 1 3 Kode CThread cpp include BASIC_Classes h Hier ist die einzige Stelle im Code wo tats chlich der Sperrparameter athreadsecured sowie Enter und Leave ins Spiel kommen Konstruktor erzeugt die n tigen Events and Handles CThread CThread p_CThread aowner CObjectList true S m owner 0 Wenn es einen bergeordneten Thread gibt dann f ge dich in die Liste seiner Subthreads ein if aowner PURE SET m_owner aowner if m_owner aowner gt Add this Jeder Thread in Windows folgt der Aufrufkonvention _stdcall Er erh lt stets einen 32 Bit Parameter IJede Methode einer Klasse in VC erh lt als ersten Parameter einen 32 Bit Wert this den Zeiger auf das Objekt Diesen Mechanismus nutzen wir um eine virtuelle berschreibbare Klassenmethode in als Thread Routine nutzen zu k nnen Dazu m ssen wir ihren Index in der VTBL der virtuellen Methodentab
11. astring gt AddStr m name astring gt AddUnichar S gt L schen von insert_string und text_between SET _NULL insert sting SET_NULL text_between return retval c_hresult sc CXMLNode Clear void Aufrufen der Clear Funktion vom CXMLBase Objekt hresult retval CXMLBase Clear Zenn o g Aufruf erfolgreich if succeeded retval L schen von m_name retval m name gt Clear Wenn o g Anweisung erfolgreich if succeeded retval L schen von m_string retval m string gt Clear Wenn o g Anweisung erfolgreich if succeeded retval L schen von m_attributes retval m attributes gt Clear Zenn o g Anweisung erfolgreich if succeeded retval Offset auf 0 setzen 9 Juli 2003 Seite 84 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 m _offset 0 Zenn o g Anweisung erfolgreich if succeeded retval L schen von m_subnodes retval m subnodes gt Clear return retval c_dword SC CXMLNode Type void R ckgabe des Code Wertes f r ein XML Knotenobjekt return XML NODE c_hresult SC CXMLNode Ger Name cp C tring astring Setze Wert von astring auf Wert von m_name return astring gt FromStr m name c_hresult SC CXMLNode Set_Name cp _CString astring Setze Wert von m_name auf Wert von astring return m name gt FromStr a
12. endif 1 1 1 5 3 Header CXMLPI h CXMLNode ist die grundlegende Klasse f r XML Prozessanweisungsobjekte ifndef CXMLPI USED define CXMLPI USED include BASICS h CLASSAPI CXMLPI DEFINE TYPES CXMLPT CLASSAPI CXMLPI public CXMLBase poblic Konstruktor athreadsecured hat in dieser Anwendung keine Bedeutung CXMLPI c_boolean athreadsecured false Destruktor VIR CXMLPI void A FromString erstellt ein XML Objekt abgeleitet von CXMLBase aus einem String astring Dabei werden die zu dem Objekt geh renden Daten aus dem String gel scht VIR c_hresult SC FromString ep _CString astring A ToString veranlasst ein XML Objekt sich in einen String astring zu schreiben VIR c_hresult sc ToString ep _CString astring Type liefert den genauen Typ eines XML Objekts als ganzzahligen Code zur ck VIR c_dword Se Type void 7 endif 9 Juli 2003 Seite 19 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 1 1 5 4 Header CXMLNode h CXMLNode ist die grundlegende Klasse f r normale XML Knotenobjekte ifndef CXMLNODE USED define CXMLNODE USED include BASICS h CLASSAPI CXMLNode DEFINE TYPES CXMLNode CLASSAPI CXMLNode public CXMLBase public Konstruktor athreadsecured hat in dieser Anwendung keine Bedeutung CXMLNode c_boolean athrea
13. gibt wieder ob von einem Socket gelesen werden kann gelesen kann nur von Klienten werden VIR c_boolean sc CanRead void gibt wieder ob in ein Socket geschrieben werden kann gelesen kann nur von Klienten werden VIR c_boolean SC CanWrite void beendet eine Internetverbindung VIR c_hresult sc Close void teilt dem Socket mit dass es als Server an ein bestimmte Adresse Port gebunden werden soll VIR c_hresult Se Server p_CString abindaddress Akzeptiert eine einkommende Verbindung schafft sie auf ein neues Klientensocket geht nur bei Server Sockets aterminateproc wird als Callback Routine regelm ig mit aparam aufgerufen wenn es gesetzt ist um festzustellen ob der Server beendet werden soll VIR c_hresult sc Accept rp_CSocket anewsock CG pointer aterminateproc 0 c_dword aparam 0 verbindet sich als Klient mit dem Server welcher an einer spezifischen Adresse wartet VIR c_hresult se Client p_CString aconnectaddress schreibt einen Buffer ber die Netzwerkverbindung kann nur von Klientensockets durchgef hrt werden VIR c_hresult sc Write c_pointer adata c_dword asize r dword awritten 9 Juli 2003 Seite 4 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 Nie t einen Buffer aus dem Netzwerk kann evtl weniger lesen als angefordert geht nur bei Klientensockets VIR c_hresult sc Read c_pointer adata c_dword asize r dwo
14. if m id 0 GetCurrentThreadId m id amp amp m handle if SuspendThread m handle MAX DWORD retval error else SetState CTHREAD SUSPENDED true retval S OR return retval c_hresult sc CThread Execute void Execute wird von abgeleiteten Klassen berschrieben um den sinnvollen Code zu implementieren return S OK Therminate setzt das Terminate Flag f r Execute und terminiert auch alle Sub Threads c_hresult SC CThread Terminat void hresult retval S_OK SetState CTHREAD TERMINATED true if GetState CTHREAD_FIRST amp amp m _handle if CloseHandle m handle m handle 0 else retval error retval worst retval TerminateSubThreads return retval TherminateSubThreads terminiert alle Sub Threads c_hresult sc CThread TerminateSubThreads void hresult retval S OK Enter u dword 1 Length Sei pp _CThread d pp CThread DataPtr if d for dword i 0 i lt l i t if d 0 retval worst retval d 0 gt Terminate dtte Leave return retval 9 Juli 2003 Seite 34 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 Wartet auf alle Sub Threads c_hresult sc CThread WaitForSubThreads c_dword atime return wait m subthreadsevent atime
15. atwo NEW alength _INS_BIT alength adotpos t1l true atwo temp NEW alength al COPY alength op a2 NEW alength _MUL alength adotpos al al a2 aunderflow b1 COPY alength aone b2 COPY alength aone c1l COPY alength atwo c2 NEW alength _INS_BIT alength adotpos true c2 _INS_BIT alength adotpos 1 true c2 div1 _NEW alength div2 NEW alength move aout op alength 4 Berechnung nach Formel do toob MUL alength adotpos cl c2 div2 aunderflow if toob toob MUL alength adotpos bl b2 bl aunderflow if toob toob MUL alength adotpos al a2 al aunderflow if toob toob MUL alength adotpos al bl divl aunderflow if toob toob DIV alength adotpos divl div2 temp aunderflow divO toob IzZ alength temp toob if toob S overflow ADD alength aout temp aout if overflow toob ADD alength b2 atwo b2 toob ADD alength c2 aone c2 toob i f toob toob MUL alength adotpos cl c2 cl aunderflow toob ADD alength c2 aone C2 Schleife l uft bis sich Ergebnis nicht mehr ndert while toob amp amp overflow 9 Juli 2003 Seite 69 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 if o FR FR return T F T API c_boo boolean FREE FREE FREE FREE FR
16. kann An dieser Stelle wollen wir einige Begriffe definieren die im Nachfolgenden h ufiger verwendet werden Tabelle 1 1 Begriffe Bedeutung Math Server Der Serverteil des Programms Math Client Der Kliententeil des Programms Matheaufgabe Mathematische Formel mit Zahlenwerten die genau zu einem Ergebnis f hrt Matheaufgabe_oZ Matheaufgabe_mZ Ergebnis Ergebnis_oZ Ergebnis_mZ ung ltige Daten Error hnlich Taschenrechner Matheaufgabe ohne Zwischenergebnisanforderung Matheaufgabe mit Forderung ausgew hlter Zwischenergebnisse Ergebnis der Matheaufgabe Endergebnis ohne Zwischenergebnisausgabe Endergebnis mit Ausgabe der ausgew hlten Zwischenergebnisse Nicht korrekt formulierte Matheaufgabe nicht I sbare Matheaufgabe allgemein und f r unsere Applikation Fehlerr ckmeldung 19 Mai 2003 Seite 2 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 1 2 1 1 Ereignistabelle Bei unserem Projekt handelt es sich gem der der Produktbeschreibung um eine verteilte Anwendung Der Serverteil Math Server ist nicht gezwungenerma en an den Kliententeil Math Client gebunden Er kann theoretisch auch mit anderen Klienten betrieben werden Daher stellen wir an dieser Stelle die Ereignistabellen von sowohl dem Math Server als auch des Math Clients dar F r den normalen Betrieb mit dem mitgelieferten Klienten kann die Ereignistabelle des Math Clients als
17. 9 Juli 2003 Seite 52 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 opl COPY alength aindatal op2 COPY alength aindata2 zero aoutdata alength 4 if _NEGATIVE alength opl Zahlen positiv machen feststellen welches NOT2 alength opl opl Vorzeichen Ergebnis bekommt kompl true if _NEGATIVE alength op2 _NOT2 alength op2 op2 kompl kompl Lab opl LSB alength opl lsb_op2 LSB alength op2 if 1sb_op1 NOT_FOUND amp amp 1sb_op2 NOT FOUND if lsb_opl lt lsb_op2 Exactlyshift Rechtsverschiebung ermitteln exactlyshift 1sb_opl else exactlyshift 1sb_op2 _SHR_N alength exactlyshift opl opl Rechtsschieben _SHR_N alength exactlyshift op2 op2 lsb_op2 exactlyshift msb_op2 MSB alength op2 i msb_op2 Berechnung mittels SHIFT amp ADD while i gt 0 amp amp boolette if _SHR_l alength op2 op2 boolette ADD alength opl aoutdata aoutdata boolette SHL_1 alength opl opl boolette isej integer s 2 exactlyshift adot if s lt 0 if s lt 32 integer alength Unterlauf pr fen und Ergebnis zuweisen nach Korrekturschiebung aunderflow true zero aoutdata alength 4 lse aunderflow SHR N alength s aoutdata aocutdata else if s gt 32 integer al
18. Als Betriebssystem wird sowohl f r den Client als auch f r den Server Windows NT 4 0 Windows 2000 oder Windows XP vorausgesetzt Als sonstige Basissoftware ist Visual Basic Runtime Libraries f r den Client notwendig Diese werden mit dem Installer mitgeliefert 2 1 MathServer Mindestanforderung e 400 MHz CPU e 64 MB RAM e 30 MB freier Festplattenspeicher e CD ROM Laufwerk e Netzwerkzugang LAN min 10 MBit s bzw Internetzugang Modem 56 KBit s 2 2 Mathserver Empfohlen e 1 GHz CPU e 256 MB RAM e 100 MB freier Festplattenspeicher e CD ROM Laufwerk e Netzwerkzugang LAN 100 MBit s bzw Internetzugang DSL 2 3 MathClient Mindestanforderungen 400 MHz CPU 64 MB RAM 10 MB freier Festplattenspeicher e CD ROM Laufwerk e Netzwerkzugang LAN min 10 MBit s bzw Internetzugang Modem 56 KBit s e Monitor 15 70 Hz und Grafikkarte 256 Farben bei einer Aufl sung von 800x600 e Tastatur Maus 3 Installation Die Installation l uft in 3 einfachen schritten ab 1 CD einlegen und die dort befindliche Math Server amp Client_v1 0 exe starten 2 Einstellungen wie bei den Bildern beschrieben t tigen 3 Fertig ge MathServer amp Client gt Informationen Dieses Programm ist Freeware Es entstand bei dem Softwarepraktikum w hrend des Studiums an der TU Chemnitz Das Programm darf frei kopiert und vervielf ltigt werden Allerdings ohne komerziellen Nutzen Also ohne daf r G
19. Die Serverapplikation an sich bleibt jedoch in stabilem Zustand angenommene Auftr ge werden korrekt abgearbeitet und lediglich mit Verz gerung zugestellt Brechen Verbindungen unvermittelt ab so werden sie der TCP IP Spezifikation und deren Implementierung in WINSOCK gem als nicht definiert offen gehalten und erst bei Neustart des Servers bzw der Applikation geschlossen 2 3 Operationelle Anforderungen an die Prozesse Antwortzeiten von einer Minute werden als Maximum f r umfangreiche Berechnungen bzw bei hoher Serverbelastung akzeptiert bei Standardberechnungen und normaler Netzlast werden jedoch 5 bis 10 Sekunden angestrebt Wird das Netzwerk bzw der Server berlastet bzw verf gt der Klient nur ber eine zu leistungsschwache Netzanbindung kann es zu Abbr chen oder unerwartet langen Verz gerungszeiten kommen 19 Mai 2003 Seite 31 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 3 Spezifikation wichtiger Qualit tsanforderungen 3 1 Benutzbarkeit Die Nutzer des Systems geh ren entweder der Nutzergruppe Administrator oder der Nutzergruppe Benutzer an F r den Administrator werden umfassende Kenntnisse im Umgang mit Computern und deren Software sowie Kenntnisse im Bereich Netzwerke vorausgesetzt Hingegen werden f r den Benutzer keine solch umfassenden Kenntnisse vorausgesetzt Diese Nutzergruppe sollte lediglich im Umgang mit dem Betriebssystem Windows vertraut sein un
20. Ein sprint Pendant VIR c_hresult SC FormatTYP c_DAT aformat c _pointer aparans F gt einen sprintf hnlich formatierten String an VIR c_hresult SC AddFormatTYP c_DAT aformat c pointer aparanms berpr ft ob ein String mit astart beginnt indem maximal amaxlen Zeichen unter Ber cksichtigung von acasesensitive s o berpr ft werden VIR c boolean SC StartsWithTYP c_DAT astart c_boolean acasesensitive false c_dword amaxlen MAX DWORD berpr ft ob ein String mit aend endet indem maximal amaxlen Zeichen unter Ber cksichtigung von acasesensitive s o berpr ft werden VIR c_ boolean SC EndsWithTYP c_DAT aend CG boolean acasesensitive false c_dword amaxlen MAX DWORD Wendet die Windows Stringtypinformationssuche auf die Zeichen zwischen astart und aend an gibt das Ergebnis in aresult zur ck VIR c_hresult SC StringType r_stringtype aresult c_dword astart 0 c_dword aend MAX_ DWORD 23 Juni 2003 Seite 10 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 Erstellt schreibt den String aus in einen Puffer wobei die Kodierung ermittelt gesetzt wird VIR c_hresult SC FromBuffer e_pointer abuffer c_dword asize r dword aencoding VIR c_hresult SC ToBuffer r_pointer abuffer r dword asize c_dword aencoding c_boolean aputtrailingzero false Formatiert einen String mit der Windows FormatMessage Routine
21. UBound IDS S addid UBound IDS End Function 9 Juli 2003 Seite 100 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 wandelt einen xmath Ausdruck in einen MathML xml Text um xmath ist ein v llig fiktives Zwischenprodukt des Parsevorgangs der z b f hrt 3 5 7 log 3 zu add mul 3 5 log 7 3 was dann viel leichter in XML zerlegt werden kann wir gehen also vom Infix erst zum vollst ndig geklammerten dyadischen Ausdruck und dann zum MathML Public Function xmath2xml ByVal S As String ByRef IDS As String As String Dim x As String Dim Y As String Dim ID As Long x y While Left S 1 S Mid S 2 Len S 2 Wend If S pi Then x lt pi gt Else If isnumber S Then x lt cn gt g S amp lt cn gt Else If Left S 1 Then S Right S Len S 1 ID addid IDS reparse minus 0 amp S amp x lt apply id amp ID amp gt lt minus gt lt cn gt 0 lt cn gt Y _ 2 apply gt End If ID addid IDS reparse S x x amp lt apply id mm amp ID amp mm ar Se Dim I As Long Dim j As Long Dim k As Long I InStr S a se SE Ben ES Defti s IT 1 8 jo S Mid S I 1 k 0 I 1 While k gt 0 Or Mid S I 1 lt gt And I lt Len S If Mid S I 1 Then Increase k If Mid S I 1 Then Decrease k Increase I
22. Wend x x amp xmath2xml Left S I 1 IDS S Mid S I 1 ir 2 lt gt Then S Left S Len S 1 x x amp xmath2xml S IDS End IT x x amp lt apply gt End If End I xmath2xml x Y End Function 9 Juli 2003 Seite 101 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 es wird nach links und rechts sondiert um das Ende eines Operanden im Infix auf zusp ren Function leftsond ByVal S As String ByVal I As Long Dim k As Long If I lt 0 Then Tsg GoTo ok End I k 0 Do If Mid S I 1 Or Mid S I 1 Then Increase k I Mid S I 1 Or Mid S I 1 Then Decrease k Decrease I If I 0 Then GoTo ok Loop While I gt 0 And k lt gt 0 Or InStr allowed Mid S I 1 lt gt 0 ok leftsond I End Function Function rightsond ByVal S As String ByVal I As Long Dim k As Long k 0 If Mid S I 1 Then GoTo ok Do If Mid S I 1 Or Mid S I 1 Then Increase k If Mid S I 1 Or Mid S I 1 Then Decrease k Increase I Loop While I lt Len S And k gt 0 Or InStr allowed amp Mid S I 1 lt gt Di ok rightsond I End Function explode ersetzt im String S einen Operator an Stelle i durch den Ausdruck plc wobei nach links L und oder rechts R nach Operanden sondiert werden kann dadurc
23. alength min mov i liegenden Bits move amp p_dword aoutdata min amp p_dword aoriginal min mov 4 Bitcopy p_dword aoutdata min amp Oxffffffff lt lt aright 32 restliche Bits p_dword aoutdata min mov 1 amp Oxffffffff gt gt 32 aleft 1 32 l schen API void FC FREE r_pointer anum gibt Pointer Speicher frei free anum 9 Juli 2003 Seite 43 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 API void FC _NOT c_dword length c_pointer aindata c pointer aoutdata Bildet Ter Kompl _ asm test ecx ecx L nge der Zahl 0 JZ ende mov esi aindata mov edi aoutdata cid looper lodsd 32 Bit Block nach eax lesen LesePos 32 not eax 32 Bit Block negieren stosd schreiben auf aoutdata SchreibePos 32 loop looper ende API void FC _NOT2 c_dword alength c_pointer adata c_pointer aoutdata _ asm test ecx ecx jz ende mov esi edx mov edi aoutdata cld looper lodsd suchen bis erstes Mal eine 1 in einem 32Bit Block kommt dann Sprung zu found test eax eax jnz found stosd sonst Nullbl cke speichern loop looper jmp ende found neg eax 2er Kompl bilden stosd speichern dec ecx jz ende looper2 lodsd alle weiteren Bl cke einfach negieren und speichern not eax stosd loop looper2 ende API c_boolean FE _POSITIVE c_dword alength
24. amp m_id return m_id return 0 untergeordnete Bedeutung haben c_hresult se CThread SetPriority c_dword apriority c_dword sc CThread GetPriority void c_boolean sc CThread Started void c_boolean sc CThread Running void c_boolean sc CThread Suspended void c_boolean sc CThread Terminated void void sc CThread SwitchToOther void Mit den folgenden Methoden wird gew hrleistet dass neue Sub Threads stets in einer Liste des Hauptthreads gesichert werden Dadurch ist es m glich dass der Hauptthread auf sie wartet wenn er das Terminate Signal erh lt Nur so kann z B sp ter im Server bei dessen Beendigung auch die korrekte Abfertigung aller gerade laufender Auftr ge garantiert werden Neue werden dann nat rlich nicht mehr angenommen c_hresult sc CThread SetLength c_dword alength hresult retval CObjectList SetLength alength if succeeded retval boolean x else return retval c_hresul hresul Enter if alength gt 0 x ResetEvent m subthreadsevent gt SetEvent m subthreadsevent if x retval error Lt sc CThread Delete c_dword aindex Lt retval CObjectList Delete aindex retval Leave return retval c_hresul hresul Enter retval Leave Lt se CThread Remove c_pointer aitem Lt retval CObjectList Remove aitem return retv
25. aresult gt AddUnicode _S lt en id aresult gt AddStr ID aresult gt AddUnicode _S gt aresult gt AddStr b aresult gt AddUnicode _S lt cn gt SET_NULL s Pointer aufl sen SET_NULL ops 0 SET_NULL ops 1 SET_NULL b SET NULL op T_NULL a T NULL 12D 5 9 Juli 2003 Seite 42 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 2 1 4 Modul Math 1 2 1 4 1 Kode RealFunctions cpp Ki z API pointer FC N c_dword alength erstellt Pointer auf Zahl nimmt Specher ER retval 0 if alength TET allocate 4 alength Speicher holen a retval API c_pointer PC _COPY c_dword alength c_pointer aoriginal kopiert Pointer zu Pointer pointer retval NEW alength if retval if retval move retval aoriginal alength 4 kopieren return retval API void FC _COPYBITS c_dword alength c_pointer aoriginal c_dword aleft c_dword aright c_pointer aoutdata kopiert bitweise Pointer zu Pointer if aleft gt aright amp amp aleft lt alength 32 amp amp aright gt 0 Start und Ende pr fen dword min aright 32 Startblock ermitteln dword mov aleft aright 32 1 Anzahl der Bl cke ermitteln zero aoutdata min 4 L schen der au erhalb der Bl cke zero amp p_dword aoutdata min tmov
26. c pointer aindata u Niefert true wenn MSB 0 return p_dword aindata alength 1 amp DWORD_MSB 0 API c_boolean FE _NEGATIVE c_dword alength c pointer aindata u Niefert true wenn MSB 1 return p_dword aindata alength 1 amp DWORD_MSB 0 9 Juli 2003 Seite 44 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 API c_boolean FC _TEST_BIT c_dword alength c_dword abit c_pointer adata gibt zur ck ob Bit gesetzt return p_dword adata abit 32 amp 1 lt lt abit 32 0 API void FC _INS_BIT c_dword alength c_dword abitnum c_boolean aooz c_pointer adata setzt oder l scht Bit an angebener Position if aooz p_dword adata abitnum 32 1 lt lt abitnum 32 setzen else p_dword adata abitnum 32 amp 1 lt lt abitnum 32 l schen API c_dword EC _MSB c_dword alength c_pointer adata _ asm mov ebx Oxffffffff Webx 1 test ecx ecx wenn L nge der Zahl 0 jz ende sprung zu ende mov esi edx esi auf LSB zeigen lassen mov edx ecx Offset bestimmen 32 Bit Bl ckeanzahl nach edx Addressierung in 32Bit Bl cken dec edx edx um eins verringern shl edx 2 edx mal vier Addressierung in Bytes add esi edx LSB Offset MSB std f r esi 1 bei lodsd looper Suche des 32Bit Blockes welcher das MSB tr gt lodsd 32Bit Block in eax laden erst
27. lt arccot gt lt arccoth gt lt arctan gt lt false gt lt arccsc gt lt arccsch gt lt arcsec gt lt cn gt lt cn gt lt floor gt lt arcsech gt lt arcsinh gt lt arctanh gt lt cos gt lt gcd gt lt bvar gt lt bvar gt lt divide gt lt imaginary gt lt card gt lt exp gt lt imaginaryi gt lt cartesianproduct gt lt exponentiale gt lt implies gt lt ci gt lt ci gt lt factorial gt lt inverse gt lt codomain gt lt infinity gt lt Icm gt lt complexes gt lt In gt lt not gt lt compose gt lt log gt lt or gt lt condition gt lt condition gt lt minus gt lt real gt lt csymbol gt lt csymbol gt lt pi gt lt true gt lt curl gt lt plus gt lt xor gt lt declare gt lt declare gt lt power gt lt and gt lt degree gt lt degree gt lt quotient gt lt arg gt lt determinant gt lt rem gt lt diff gt lt root gt lt divergence gt lt sep gt lt domain gt lt sin gt lt domainofapplication gt lt tan gt lt emptyset gt lt times gt lt eq gt 19 Mai 2003 Seite 11 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 Tabelle 1 5 2 noch nicht unterst tzt noch nicht unterst tzt noch nicht unterst tzt lt equivalent gt lt eulergamma gt lt exists gt lt factorof gt lt fn gt lt fn gt lt forall gt lt geq gt lt gr
28. vorhanden ist wird das Attribut Name und Wert zu den bisherigen hinzugef gt VIR c_hresult SC Set AC Val ep _CString aattr Cp CString aval Get_Sub_Count liefert die Anzahl der Kindknoten eines Knotenobjekts zur ck VIR c_dword sc Get Sub Count void Get_Sub liefert einen Zeiger auf den Unterknoten mit dem bergebenen Index aindex in axml 23 Juni 2003 Seite 24 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 zur ck VIR c_hresult ZC Get Sub c_dword aindex Cp CXMLBase axml Add_New_Sub_Node erstellt einen neuen Unterknoten und liefert einen Zeiger auf das Objekt axml zur ck VIR c_hresult sc Add New Sub Node rp_CXMLNode axml 1 2 5 5 CXMLPI Klasse abgeleitet von CXMLBase CXMLPI repr sentiert eine XML Prozessanweisungsobjekt welches lediglich ber einen Text verf gt Sie treten in der Form lt text gt auf Methoden Die Funktion Fromstring berschreibt die bereits existierende Funktion Fromstring aus der Klasse CXMLBase wenn es sich um ein XML Prozessanweisungsobjekt handelt Fromstring erstellt ein Prozessanweisungsobjekt aus einem String astring Dabei werden die zu dem Objekt geh renden Daten aus dem String gel scht VIR c_hresult sc FromString ep _CString astring Die Funktion Tostring berschreibt die bereits existierende Funktion Tostring aus der Klasse CXMLBase wenn es sich um ein XML Prozessanweisungsobjekt handelt
29. 1 1 2 2 Verhaltensmodell Die Applikation MathServer verwendet keine permanenten Speicher S mtliche Daten sind nur tempor rer Natur und f r die aktuellen Operationen notwendig Aus diesem Grund stellen wir im Folgenden diese tempor ren Zwischenspeicher als Speicher dar Ihre Strukturierung ist nicht durch harte L ngen und Gr enangaben definierbar sie ist dynamisch 1 2 2 1 Grobes Verhaltensmodell vergr bertes prim res Verhaltensmodell F r das Verhaltensmodell verwenden wir die Ereignisnummern aus 1 2 1 1 Ereignistabelle und die farblichen Hervorhebungen des Kontextdiagramms 1 2 1 2 Die Datenstr me bernehmen ebenfalls die Bezeichnungen aus der Ereignistabelle 1 2 1 1 Das Netzwerk indem die Applikation betrieben wird fungiert hier als Zwischenspeicher Wurden zum Beispiel die Eingabedaten des Math Clients abgeschickt werden sie im Speicher freigegeben sie entstehen erst auf der Serverseite durch den Empfang der Daten neu Diagramm 1 2 Matheaufgabe_mZ Dateneingabe 1C 1S d Benutzer Ergebnis_oZ Rechen datenneingabe SR aufgabe o Z Matheaufgabe_oZ ae ey Netzwerk gabe_ ee Matheaufgabe_mZ Ergebnis_oZ 2C Server ergebnis Ergebnis_mZ Ergebnis_mZ 2S Bildschirmausgabe Rechen aufgabe m Z 19 Mai 2003 Seite 4 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 1 2 2 2 Prim res Verhaltensmodell Be
30. 28 05 2003 Kurzbeschreibung Das Modul ist das Top Level Modul des MathServer Es importiert s mtliche Routinen von allen untergeordneten Modulen siehe Diagramm 1 1 Export CServer Import alle untergeordnete Module 1 2 2 1 CServer Klasse abgeleitet von CThread Die Klasse CServer leitet sich direkt von CThread ab und verwendet ein CSocket Jede Instanz von CServer arbeitet an einem Port siehe Kommentar zu 1 2 1 5 CThread und erm glicht so einen sehr variablen Einsatz des MathServer Das Hauptprogramm importiert lediglich die zugeh rige DLL und erzeugt eine Instanz von CServer Dann startet es einen Messageloop von 1 2 1 Basics importiert und terminiert die Serverinstanz nach Ende des MessageLoops Members m_socket p_CSocket Instanz eines Server Sockets Methoden Die berschriebene Execute Routine von CThread akzeptiert st ndig neue Klienten Sockets VIR c_hresult SC Execute void 23 Juni 2003 Seite 15 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 1 2 3 Modul Formelparser Modul Formelparser Bearbeiter Rico Ro berg Bezeichner Formelparser nderungsstand 05 06 2003 Kurzbeschreibung Wandelt die Eingabedaten vom MathServer XML String mit Hilfe der untergeordneten Module in die Ausgabedaten neuer XML String um Export Formula_Parse Import Alle Leistungen der Module Basics Math und XML Parser 1 2 3 1 Formula_Parse Funktion Der Formelp
31. 3 2 4 5 2 4 6 7 arcsin x X arcsin 0 0 arcsin 1 SS arcsin 1 gt ArcSin x f r x gt 1 ist nicht definiert Alength L nge der Zahl adotpos Kommaposition in der Zahl ain Zahl von dem Arcussinus gebildet werden soll aout Ergebnis pi_2 Zahl Pi 2 API c_boolean FC _ARCCOS c_dword alength CG _dword adotpos c_pointer pi c_pointer pi 2 c pointer ain c_pointer aout Berechnet Arcuskosinus einer Zahl nach folgenden Formeln T 1 3 1 3 5 1 3 5 7 S arccosx Wi x x x SE f r O lt x lt 1 2 2 3 2 4 5 2 4 6 7 T 1 3 1 3 5 1 3 5 7 E arccosx G D x x f r 1 lt x lt 0 2 2 3 2 4 5 2 4 6 7 arccos 0 arccos 1 0 arccos 1 mt Nja ArcCos x f r x gt 1 ist nicht definiert Alength L nge der Zahl adotpos Kommaposition in der Zahl ain Zahl von dem Arcuskosinus gebildet werden soll aout Ergebnis pi Pi pi_2 Pi 2 API c_boolean FC _ARCTAN c_dword alength c_dword adotpos c pointer pi 2 c pointer pi_4 c pointer ain c pointer aout Berechnet den Arcustangens einer Zahl nach folgenden Formeln 1 3 5 7 9 11 X X X X X X arctan x f r x lt 1 1 3 5 7 9 Ill m 1 1 1 1 arctan x iz gr SSC f rx gt 1 2 x 3x 5x 7x arctanx l f r x lt 1 2 k ki skf arctan 0 0 arctan 1 u arctan 1 T Alength L nge der Zahl adotpos Kommaposition in der Zahl ain Zahl von dem Arcustangens gebildet wer
32. 32 c_dword alength c_dword adigits c_pointer aindata c pointer aoutdata Rechtsschieben von 32Bit Bl cken boolean retval _asm Pr fen auf Unterlauf mov retval 0 test ecx ecx alength 0 Jz ende Aa sprung ende cmp edx ecx jae ende cld directionflag 0 incdec 2 mov edi aindata mov ebx ecx mov ecx edx shl ecx l ecx 2 xor eax ax eax 0 rep scasw rep wiederholt solang zf lt gt 0 und cx gt 0 scasw vergleich eax mit edi jz ende nein gt ende not retval ende Rechtsschieben der Bl cke move aoutdata amp p_dword aindata adigits alength adigits 4 zero amp p_dword aoutdata alength adigits adigits 4 return retval API c boolean FG _SHR_N c_dword alength c_dword adigits c_pointer aindata c_ pointer aoutdata dword d adigits 32 boolean retval false if d retval SHR N 32 alength d aindata aoutdata Bl ckeschieben else move aoutdata aindata alength 4 Bits schieben retval SHR_N MOD32 alength adigits 32 aoutdata aoutdata retval return retval API c boolean FC ADD c _dword alength 8 u c pointer aindatal c pointer aindata2 c pointer aoutdata _ asm xor eax eax eax auf 0 setzen test ecx ecx alength 0 jz ende Aa sprung ende mov esi aindatal esi aindata1 mov ebx aindata2 ebx aindata2 mov edi aoutdata edi aoutdata cld directionflag 0 incdec 4 9 Juli 2003 Seite 51 v
33. D eax ebx FC _IZ c_dword alength c_pointer aindata ecx cCx alength 0 ende Za sprung ende directionflag 0 incdec 2 edi edx edi edx ecx l ecx 2 eax eax eax 0 scasw rep wiederholt solang zf lt gt 0 und cx gt 0 scasw vergleich eax mit edi ende nein gt ende eax true FC _SHL 1 c_dword alength c pointer aindata c pointer aoutdata eax eax eax auf 0 setzen ecx e Cx alength 0 ende Aa sprung ende esi aindata esi aindata edi aoutdata edi aoutdata directionflag 0 incdec 4 c flag 0 eax esi esi 4 eax 1 temp MSb linksschieben Isb cf cf temp edi eax edi 4 looper 4byte bl cke ecx um 1 verringern sprung zu looper carry spring wenn cf 1 eax eax eax 0 ende sprung ende eax Oxffffffff eax true 9 Juli 2003 Seite 47 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 __forceinline ce Boolean S byte byte dword dword aam xor test jz pushf mov mov mov mov mov shr not mov sub mov xor cld looper lodsd mov mov and shr mov shl or einbringen mov stosd dec jnz test jnz xor jmp carry mov ende2 popf ende rdigits ldigits mask counter eax eax ecx ecx ende counter ecx esi aindata edi aoutdata cl dl mask Oxfffffff mask cl mask rdigits 32 rdigits dl ldigits dl ebx ebx cl rdigits edx eax edx mask edx
34. FE _ INC c_dword alength c_pointer ain c pointer aout Addiert auf ain mit L nge alength ohne Kommastellen LSB 0 eine 1 Ergebnis aout __forceinline boolean FC _ DEC c_dword alength c_pointer ain c_pointer aout r boolean aiszero Subtrahiert von ain mit L nge alength ohne Kommastellen LSB 0 eine 1 Ergebnis aout Aiszero wird true wenn Ergebnis 0 wird API c_boolean FC _FACTORIAL c_dword alength CG _dword adotpos c_pointer ain c_pointer aout bildet Fakult t einer Zahl 9 Juli 2003 Seite 14 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 API c_boolean FC EX c_dword c _dword c_pointer c_pointer alength adotpos ax aout Liefert e x durch die Formel e izo 1 Alength L nge der Zahl adotpos Kommaposition in der Zahl ax Exponent von e aout Ergebnis API c_boolean FC _SIN c_dword alength c _dword adotpos c_pointer ain c_pointer aout Berechnet Sinus einer Zahl mit folgender Formel 2i l sinx 1 i 0 2i 1 Alength L nge der Zahl adotpos Kommaposition in der Zahl ain Zahl von dem Sinus gebildet werden soll aout Ergebnis API boolean FC _ COS c_dword alength CG _dword adotpos e pointer ain c_pointer aout Liefert Kosinus einer Zahl mit folgender Formel SX x i cosx 1 ai NW Alength L nge der Zahl adotpos Kommaposition in der Zahl ain Zahl von de
35. Printer a As Long PD As String CPD As String RE As Boolean b _ As Long c As Long d As Long CPD2 As String e As Long PD PrintData Set SD Printer Standarddrucker ausw hlen folgende Schleife f gt nur zus tzliche Zeilenumbr che ein b 1 Do a InStr b PD vbCrLf If a 0 Then CPD Mid PD b a Len CPD Else CPD Mid PD b a b End If c SD TextWidth CPD If c gt SD ScaleWidth Then CPD2 CPD e SD ScaleWidth c Len CPD 5 For d 1 To Int c SD ScaleWidth CPD Left CPD d e d 1 2 amp vbCrLf amp Mid CPD d e d 1 u SS ZZ E Next d PD FilterString PD CPD2 CPD Increase a Len CPD Len CPD2 End If 9 Juli 2003 Seite 96 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 RE b gt Len PD Loop Until RE SD Print PD zu druckende Daten SD EndDoc zum Drucken freigegeben End Sab tkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Rundet ein Teilergebnis auf die gew nschte Stellenzahl Function RoundedSolution FullLengthSolution As String MaxExactness As Long As String Dim OutString As String KP As Long MSE As Long Op As Long CO As Boolean OutString FullLengthSolution MSE MaxExactness KP InStr OutString Kommaposition amp Komma rausnehmen If Not KP 0 Then OutString FilterString OutString
36. Wartet auf Hauptthread c_hresult set CThread WaitForMainThread c_dword atime if GetState CTHREAD_FIRST return S_OK if m id 0 GetCurrentThreadId mid return wait m handle atime return E UNEXPECTED Wartet eine festgelegte Zeit auf den Haupt und seine Sub Threads c_hresult sc CThread WaitFor c_dword atime if GetState CTHREAD_FIRST return S_OK if m id 0 GetCurrentThreadId m id dword handles 2 m handle m subthreadsevent dword I while i WaitForMultipleObjectsEx 2 p_dword shandles true atime true WAIT_IO COMPLETION switch i case MAX DWORD return error case WAIT TIMEOUT return S_FALSE default return S_OK return E UNEXPECTED Beendet den Thread durch das Terminate Signal und wartet auf sein tats chliches sicheres Ende c_hresult SC CThread TerminateAndWait void S hresult retval E UNEXPECTED if m id 0 GetCurrentThreadId l mid retval Terminate if succeeded retval retval WaitFor return retval 9 Juli 2003 Seite 35 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 c_hresult se CThread ExitCode void return m exitcode c_dword sc CThread Id void if m_handle amp
37. alength b12 b12 kompl true aone NEW alength _INS_BIT alength adotpos 1 aone b21 _COPY alength aone b22 COPY alength aone temp NEW alength _ADD alength aout b11 aout do Berechnung nach Formel overflow ADD alength aout temp aout if overflow _ADD alength b22 aone b22 toob MUL alength adotpos b11 b12 b11 aunderflow if f toob toob MUL alength adotpos b21 b22 b21 aunderflow if toob zero temp alength 4 _DIV alength adotpos b11 b21 temp aunderflow divO Formelbnerechnung wird fortgesetzt bis sich das Ergebnis beim aufaddieren nicht mehr ndert so wird i gt unendlich simuliert while toob false amp amp _IZ alength temp amp amp overflow if kompl Vorzeichen op einbringen 9 Juli 2003 Seite 62 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 DIV alength adotpos aone aout aout aunderflow divO _FREE _FREE _FREE temp _FREE _FREE b11 _FREE b12 return overflow T T T T T T API c_boolean FC _SIN c_dword alength c_dword adotpos c_pointer ain c_pointer aout Berechbet Sin x x b11 b12 boolean overflow false boolean kompl false boolean aunderflow false boolean div0 false boolean toob false boolean toggle false pointer b11 COPY alen
38. c_dword afractals endif 9 Juli 2003 Seite 10 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 1 1 4 Modul Math 1 1 1 4 1 Header RealFunctions h Zust ndiger Thomas Ziegs Hier werden die mathematischen Routinen definiert die vom Wrapper CReal dann umschlossen werden Alength L nge aller Pointerzahlen API c_pointer EG NEW c_dword alength Gibt Pointer zur ck der auf den neuen Speicher f r eine Zahl zeigt die die L nge alength hat API c_pointer FC _COPY c_dword c pointer alength aoriginal Kopiert Pointer aoriginal mit L nge alength auf den R ckgabewert API void FG _COPYBITS c_dword c pointer c_dword c_dword c pointer alength aoriginal aleft aright aoutdata Kopiert bitweise aoriginal zu aoutdata von Position aleft bis arigth Alength L nge der Zahl API void FC FREE r pointer Gibt den Speicher des Pointers anum frei API void FC _NOT ce_dword c_pointer c pointer anum length aindata aoutdata Bildet das 1er Komplement von aindata und schreibt in aoutdata Alength L nge der Zahl API void FG _NOT2 c_dword c_pointer c pointer alength adata aoutdata Bildet das 2er Komplement von adata und schreibt in aoutdata Alength L nge der Zahl API c_boolean Be _POSITIVE c_dword c_pointer alength aindata Gibt true zur ck
39. dann n mlich bereits freigegeben neue Referenzen w ren iinkonsistent ok mov eax lock xadd ecx 8 eax dec eax res mov retval eax test eax eax jnz ende An dieser Stelle ist klar dass das Objekt freigegeben werden muss es muss nur noch abgekl rt werden ob wir uns bereits innerhalb des Destruktors befinden Es ist n mlich durchaus m glich dass es in einem Destruktor n tig ist das Objekt noch einmal als Parameter an eine Funktion zu bergeben Diese k nnte AddRef und Release ausl sen Dieses w rde zu einem Destruktorlauf f hren da diese im Release innerhalb der Funktion wieder aufgerufen werden w rde und die Funktion und somit das Release und somit sich selbst und so weiter und so fort aufrufen w rde Hier kommt der DEATH_STATE ins Spiel Wir sichern uns gegen andere Threads und Fibers ab indem wir xchg verwenden und den State erstmal generel auf DEATH_STATE setzen Dann kopieren wir den alten Zustand wieder dazu Jeder parallele Handlungsstrang hat dadurch entweder vor uns DETH_STATE gesetzt oder erh lt unseren DEATH_STATE als State Variable Der Destruktor wird dann nur aufgerufen wenn DEATH_STATE noch nicht gesetzt war mov eax DEATH_STATE lock xchg eax ecx 4 or ecxt4 eax test eax DEATH STATE jnz ende mov destruct OxXffFEFFFEE ende if destruct delete this return retval 9 Juli 2003 Seite 25 von 111 Softwarepraktiku
40. den Text eines XML Objekts in einem String astring zur ck VIR c hresult sc Get Text cp CString astring A Set_Text setzt den Text eines XML bjekts auf den Wert eines Strings astring VIR c_hresult SC Set Test cp_CString astring protected Multifunktionsstring p_CString m string public Offset eines XML Objekts in seinen bergeordneten Knoten in Zeichen dword m _ offset i Ganzzahliger Code f r die Funktion Type define XML BASE 0 define XML DOCU ENT T define XML _ NODE 2 define XML PROCESSING INSTRUCTION 4 define XML COMMENT 8 endif 9 Juli 2003 Seite 18 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 1 1 5 3 Header XMLFunction h XMLFunction enth lt die Funktion xml_type Diese ist Teil der rekursiven XML Objekterkennung Sie testet einen String auf die verschiedenen implementierten XML Objektarten indem sie die FromString Routinen der ensprechenden Klassen aufruft Der zweite Teil der Rekursion findet in den jeweiligen Routinen statt sofern die entsprechenden Klassen Unterknoten unterst tzen Siehe FromString von der CXMLNode Klasse ifndef XMLFUNCTION USED define XMLFUNCTION USED include BASICS h include CXML h include CXMLBase h include CXMLNode h include CXMLPI h Funktionalit t siehe einleitende Erkl rung API c_hresult SC xml_type p CString astr rp_CXMLBase abase
41. genau f r den unter Form_Load vorgebenen Ausdruck aber sonst Private Sub Timerl_ Timer Dim T As Single SI As Single TR As Long RT As String Static Initialized As Boolean StartTimer As Single ElapsedTime As Single CalcSpeed As Double If Not AnswerReceived And Not ConnectionFailed Then warten und anzeigen T Timer If Not Initialized Then CalcSpeed CDbl GetSettingEx CalcSpeed 0 StartTimer T Initialized True End If If T lt StartTimer Then Increase T 86400 ElapsedTime T StartTimer RT RoundedTime CDbl CalcSpeed UBound TAF CLng Text2 Text 3 ElapsedTime 2 If Not RT Then Text6 Text Warte auf Antwort von MathServer amp vbCrLf amp Noch ca amp RT Else fertig und Mittelwert sch tzen Initialized False Timerl Enabled False If Not UBound TAF 0 Then SI ElapsedTime UBound TAF CLng Text2 Text 3 TR CLng GetSettingEx TimesRun 0 CalcSpeed TR CalcSpeed SI TR 1 Increase TR SaveSettingEx CalcSpeed CalcSpeed SaveSettingEx TimesRun TR End If End Sub 9 Juli 2003 Seite 94 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 2 2 2 2 221212 2121212 2121212121212 2121212121212 2121212721212 2122 2121212 212121212212 2122 27222127212 27221272022 2722272212 2722220212 272 272 Empfang der Serverantwort in Bl
42. if text_between gt Length 0 amp amp m _subnodes gt Length 0 astring gt AddUnicode S gt else i 0 9 Juli 2003 Seite 83 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 Sonst Einf gen von gt als Schlusszeichen vom ffnenden Tag zu astring retval astring gt AddUnichar _S gt Solange L nge von m_subnodes gt i und retvalgleich S_OK while m_subnodes gt Length gt i amp amp retval S_OK Kopieren von Unterknoten in m_subnodes an Position i nach abase retval m subnodes gt GetAt i CAST r pointer abase Wenn o g Anweisung erfolgreich u if succeeded retval abase wird mittels ToString in insert_string umgewandelt retval abase gt ToString insert string Wenn o g Anweisung erfolgreich u if succeeded retval Hinzuf gen von insert_string an korrektem Offeset Offset von abase aktueller Offest zu text_between retval text between gt InsertStr insert string abase gt m offset toffset u Offset um L nge von insert_string erh hen offset insert _string gt Length L schen von abase SET_NULL abase Inkrementieren von I um auf n chsten Unterknoten zuzugreifen RT Hinzuf gen von text_between zu astring astring gt AddStr text between Hinzuf gen vom Schlie enden Tag zu astring astring gt AddUnichar S lt astring gt AddUnichar S
43. nur f r x gt 0 definiert adiv0 false 9 Juli 2003 Seite 65 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 one NEW alength _INS_BIT alength adot true one xml COPY alength in overflow SUB alength xml one xml div NEW alength _INS_BIT alength adot true div two _NEW alength xpl NEW alength H if _MSB alength in gt adot 1 lop gt 2 Berechnung nach Formel move xpl in alength 4 overflow ADD alength xpl one xpl if overflow _DIV alength adot xml pl xpl uf adivO _MUL alength adot xpl xpl xml uf _INS_BIT alength adot 1l true two _INS_BIT alength adot false one move one xpl alength 4 do overflow ADD alength aout one aout if overflow toob MUL alength adot xpl xml xpl uf if toob toob ADD alength div two div if toob toob DIV alength adot xpl div one uf adiv0 Schleife l uft bis sich Ergebnis nicht mehr ndert while toob amp amp overflow amp amp _IZ alength one overflow ADD alength aout aout aout Schleife l uft bis sich Ergebnis nicht mehr ndert while overflow amp amp toob amp amp _IZ alength xpl else adiv0 true _FREE in return overflow 9 Juli 2003 Seite 66 von 111 Softwarepraktikum SS 2003 Gruppe 1
44. 1 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 if _TEST_BIT anumlength anumdotpos ti op2 temp 1 lt lt i astring gt AddUnichar character temp 0 _FRAC anumlength anumdotpos op2 op2 while astring gt GetAt astring gt Length 1 _S 0 astring gt Delete astring gt Length 1 1 if astring gt GetAt astring gt Length 1 astringdot Komma l schen wenn keine Kommastellen in String schreiben Vorkommastellen weg l scht Nachkommanullen astring gt Delete astring gt Length 1 1 if astring gt Length lt 0 astring gt AddUnichar S 0 else retval E INVALIDARG return retval Null erzeugen API c_boolean FC _IS_MAX NEG c_dword c_pointer alength aoriginal liefert true wenn min neg Zahl boolean boolette false if _LSB alength aoriginal alength 32 1 boolette true return boolette wenn Isbpos msbpos 2er Komp API c boolean FC _ABS c_dword alength c_pointer aoriginal c_pointer aabs Bildet Betrag einer Zahl boolean boolette false if _NEGATIVE alength aoriginal if _IS_MAX NEG alength aoriginal boolette true move aabs aoriginal alength 4 else NOT2 alength aoriginal aabs return boolette Betrag der maximalen neg Zahl nicht m glich Betrag der min neg Zahl min neg Zahl Betrag bilden __forceinline boolean St
45. 1 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 boolean FC PI c_dword c_dword c_pointer alength adotpos aout liiefert Pi in Abh ngigkeit von der vom Benutzer angegebenen Genauigkeit boolean boolean boolean boolean aunderflow false div0 false overflow false toob false pointer aout_h NEW alength pointer aone NEW alength _INS_BIT alength adotpos pointer atwo NEW alength INS _BIT alength adotpos 1 inter afour NEW alength I z adotpost2 O _NEW alength INS _BIT alength adotpos INS _BIT alength adotpos t2 o I I NS_BIT alength inter afive inter asix NEW alength NS _BIT alength adotpostl NS_BIT alength adotpost2 inter a NEW alength _INS_BIT alength adotpost2 pointer a_h NEW alength pointer b NEW alength pointer b_h NEW alength pointer c NEW alength pointer c_h NEW alength pointer d NEW alength pointer d h NEW alength pointer temp1 NEW alength pointer temp2 NEW alength pointer ml NEW alength pointer ml L NEW alength _INS_BIT alength adotpost t4 pointer ml_16i NEW alength _INS_BIT alength adotpos pointer m2 NEW alength pointer m2_8 NEW alength _INS_BIT alength adotpost3 pointer mi 8i NEW alength zero aout alength 4 _DIV alength adotpos _DIV alength adotpos aone _DIV alength adotpos aone _sUB alength a b templ _ADD alength c d temp2 _sSUB alength tem
46. 1000 1 4703241557 1 4703241557 1 470324156 times DP 25 25 25 0 2 6 1 1999999999 1 2 1 2 1000 0 0003 0 2999999999 0 3 0 3 5000 1 5000 5000 5000 log sin 24 135 1 1122141905 1 1122141905 1 112214191 arctan abs 3 3 4870139644 3 4870139644 3 487013964 1n 8 22 7 10 3 4824701017 3 4824701017 3 482470102 ogao 1 9999999999 1 9999999999 2 1 5 Abschlusseinsch tzung Nach Beendigung der Systemtests stellt sich eine vollst ndige Funktionalit t des Projekts gem Spezifikation Teilbeleg 1 dar Auf Grund der pl tzlichen schwerwiegenden Erkrankung des Teammitglieds Rico Ro berg wurden einige Funktionen des Klienten spartanischer realisiert als anf nglich erhofft Sie behalten zwar ihre volle teilbeleggem e Funktionalit t fallen jedoch etwas gr ber aus Gegen ber Teilbeleg 2 mussten beim Klienten in der Strukturierung auf Grund obiger Erkrankung gr ere Abweichungen hingenommen werden da der Teamleiter kurzzeitig einspringen musste siehe Module Beim Server wurden nur minimale Abstriche gemacht Die Fehlerbehandlung ist z B noch zu erweitern Die Hauptfunktion des Programms die Berechnung auf beliebiger Breite mit voller Unicode XML MathML HTTP TCP IP und ANSI Kompatibilit t der Datenstr me konnte jedoch voll erf llt werden Auch wurde das Kriterium der Rechenzeit von bis zu einer Minute f r Rechnungen hoher Genauigkeit lt 1000 Stellen durch hohe Optimierung erf llt Es
47. 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 ops i 1 PI aconsts Kein weiteres ELSE da der MathClient sonst nichts weiter erzeugt und wir von dessen Fehlerfreiheit ausgehen Select Case bzw dessen quivalent in dieser furchitbaren PS hier f r den Operator Ung ltige Zwischenergebnisse Fehler untergeordneter Teilausdr cke brauchen nicht beachtet werden da die mathematischen Funktionen die Fehlermeldung durchreichen Betrag if a gt CompareUnicode S abs amp CMP_MATCH 0 aretval Abs ops 0 else Arkuskosinus if a gt CompareUnicode _S arccos amp CMP_MATCH 0 aretval ArcCos ops 0 aconsts else Arkussinus if a gt CompareUnicode _S arcsin amp CMP_MATCH 0 aretval ArcSin ops 0 aconsts else Arkustangens if a gt CompareUnicode S arctan amp CMP_MATCH 0 aretval ArcTan ops 0 aconsts else Kosinus if a gt CompareUnicode _S cos amp CMP_MATCH 0 aretval Cos ops 0 aconsts else Division if a gt CompareUnicode S divide amp CMP_ MATCH 0 aretval Div ops 0 ops 1 else e if a gt CompareUnicode _S exp amp CMP_MATCH 0 aretval E X ops 0 else Fakult t if a gt CompareUnicode S factorial amp CMP_MATCH 0 aretval Factorial ops 0 else Nat rlicher Logarithmus if a gt CompareUnico
48. 73477683956345645697845687456458967458967345233344345556 lt cn gt lt cn id 3 gt 4 45723498623478263487233094782394672183210742893864923674923364 lt cn gt lt cn id 4 gt 234572374 349263472364623296397239729378923749237492734982734973464 lt cn gt lt math gt 1 2 3 4 5 Struktur der Zwischenergebnisse Die Teilergebnisse werden in der Form lt xml cn gt bergeben die 1 2 3 4 4 definiert wurde und im Speicher Zwischenergebnisse als Feld solcher Daten gespeichert 19 Mai 2003 Seite 13 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 1 2 2 5 Struktur der Speicher grafische Erg nzung zu Inhalten des Datenkatalogs 1 2 2 5 1 Struktur der Eingabeschnittstelledaten des Klienten Diagramm 1 6 1 Gei O Zt sii GE EE ste p H See KS eier 19 Mai 2003 Seite 14 von 37 g SOOOOOOOOOO Sin Cos Tan Sin Cos Tan 000 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 Diagramm 1 6 2 Zfolge TI Ziffer Leg rer Zahl CC gt Konst Vzeich gt Zfolge ki Dztrenn gt Zfolge gt Objekt gt Objekt Pb Op Ausdruck
49. Aufl sung von 800x600 Tastatur Maus F r den Math Server wird folgendes System vorausgesetzt 400 MHz CPU 64 MB RAM 30 MB freier Festplattenspeicher CD ROM Laufwerk Netzwerkzugang LAN min 10 MBit s bzw Internetzugang Modem 56 KBit s F r den Math Server wird folgendes System empfohlen 1 GHz CPU 256 MB RAM 100 MB freier Festplattenspeicher CD ROM Laufwerk Netzwerkzugang LAN 100 MBit s bzw Internetzugang DSL Mit den Systemsanforderungen f r Server und Client lassen sich alle Anforderungen an die zu entwickelnde Software komplett erf llen Die Daten f r die vorausgesetzten Systeme sind f r den Betrieb des Systems sowohl Client als auch Server mindestens notwendig damit das System einwandfrei funktioniert Bei Nichteinhalten der Systemanforderungen kann der fehlerfreie Betrieb des Systems nicht garantiert werden Die Voraussetzungen f r den Client und den Server sind nahezu deckungsgleich da die Systemanforderungen des Gesamtsystems gro teils durch die Systemanforderungen des geforderten Betriebssystems bestimmt werden G nstigere Bedingungen f r den Betrieb des Servers lassen sich durch Nutzung des empfohlenen Systems erreichen F r den Client gibt es keine Systemempfehlung da der Client bereits mit den Mindestvoraussetzungen optimal betrieben werden kann Mit einem schnelleren System k nnten keine g nstigeren Bedingungen f r den Betrieb geschaffen werden 19 Mai 2003 Seite 34 von 37 Softwarepr
50. Begin Erzeuge Wurzelknoten R NeuenKnotenAnf gen A R End Unterprozess NeuenKnotenAnf gen Eingabeausdruck Vaterknoten Begin Erzeuge neuen XML Knoten k If Eingabeausdruck enth lt lt op gt oder lt op2 gt then Begin k daten gefundener lt op gt oder lt op2 gt For each brige Teilausdr cke NeuenKnotenAnf gen Teilausdruck k end Else k daten eingabeausdruck End Knoten k an Vaterknoten anf gen end 1 2 2 7 2 XML Erzeugung Prozess xml_erzeugung Datum 02 05 2003 Bearbeiter Rene Kreiner Roland Fischer Voraussetzungen B ist ein g ltiger XML Baum begin ausgabetext x anfangstag x daten x schlusstag end objektorientierter unterprozess x daten begin zeichenkette s gespeicherte datenzeichenkette for each a in unterknoten do begin zeichenkette a anfangstag a daten a schlussdaten f ge in s an gespeicherter position ein end gib s zur ck end 19 Mai 2003 Seite 20 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 1 2 2 7 3 XML Zerlegung Prozess xml_zerlegung Datum 02 05 2003 Bearbeiter Rene Kreiner Roland Fischer Voraussetzungen Zu untersuchende Zeichenkette Z ist nicht leer begin erstelle dokumentknoten knotenerkennung dokumentknoten Z if Fehler then l sche dokumentknoten end unterprozess knotenerkennung vaterknoten zeichenkette Z begin while Z nicht leer und kein Fehler do for each x in bekannte Knotenarte
51. E Wartet auf die Beendigung des Mainthreads VIR c_hresult SC WaitForMainThread c_dword atime INFINITE Wartet bis sowohl alle Subthreads als auch der Mainthread ihre Ausf hrung beendet haben VIR c_hresult SC WaitFor c_dword atime INFINITE r _ Sendet das Terminate Signal an den Thread und wartet auf Beendigung VIR c_hresult SC TerminateAndWait void Gibt den R ckgabewert der Threadroutine Execute wieder steht erst nach Terminate und Beendigung des Threads zur Verf gung VIR c_hresult SC ExitCode void Gibt die eindeutige ID des Threads wieder VIR c_dword SC Id void 23 Juni 2003 Seite 13 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 Gibt die Priorit t des Threads wieder bzw setzt sie VIR c_hresult SC SetPriority e_dword apriority VIR c_dword SC GetPriority void Gibt wieder ob der Thread gestartet wurde gerade l uft unterbrochen ist oder bereits beendet wurde VIR c_boolean SC Started VIR c boolean SC Running VIR c boolean SC Suspended void VIR c _ boolean SC Terminated void bergibt die Kontrolle an einen anderen Thread VIR void SC SwitchToOther void 23 Juni 2003 Seite 14 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 1 2 2 Modul Engine Modul Engine Bearbeiter Thomas Weise Bezeichner Engine nderungsstand
52. EE T T FREE FREE FREE FR T T verflow amp amp kompl _NOT2 alength aout aout aone E op overflow lean FG _ARCCOS c_dword c_dword c_pointer c_pointer c_pointer c_pointer overflow false boolean boolean boolean boolean pointer pointer pointer pointer pointer pointer pointer pointer pointer pointer pointer pointer zero ao ZEt Ze move else if N _NO aunderflow false toob false div0 false kompl false al a2 bl b2 GL 2 aone atwo temp divl div2 op COPY alength ut alength 4 alength op ain aout Di Ze alength 4 EGATIVE alength op T2 alength op op kompl true aone NEW alength _INS_BIT alength adotpos 1 aone if _CMP alength op aone CMP EQUAL if kompl move aout pi alength 4 else if _CMP alength op aone CMP BIGGER overflow true els 9 Juli 2003 Vorzeichen op einbringen alength adotpos pi pi_2 ain aout berechnen arccos x x 0p arccos 0 Betrag op bilden arccos 1 arccos x mit x gt 1 n d Seite 70 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 atwo NEW alength _INS_BIT alength adotpos 1 true atwo temp NEW alength al COP
53. ERVER USED include Engine Processor h CLASSAPI CServer DEFINE TYPES CServer CLASSAPI CServer public CThread public CServer p_CString aport VIR CServer void die berschriebene Execute Methode enth lt den eigentlichen Kode VIR c_hresult sc Execute void private p_CSocket m socket serversocket 7 endif 9 Juli 2003 Seite 9 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 1 1 3 Modul Formelparser Zust ndiger Rico Ro berg 1 1 1 3 1 Header Formel h Im Formelparser der nur den Header Formel hat werden die mathematischen Routinen und der XML Parser verwendet um die empfangenen Eingangsdaten MathML in Ausgangsdaten wieder MathML umzurechnen ifndef FORMEL USED define FORMEL USED include t a BASICS n include Math Math h include XML_Parser XML h ifdef FORMEL PARSER DLL_EXPORTS undef API undef CLASSAPI define API EXP define CLASSAPI CLASSEXP else undef API undef CLASSAPI define API IMP define CLASSAPI CLASSIMP endif Diese Funktione parst einen Formel der Daten sich in XML Format in astring befinden und schreibt das Ergebnis in aresult Die zu verwendente Anzahl von Vorkomma und Nachkommastellen steht jeweils in adecimals und afractals API c_hresult SC Formula _ Parse p_CString astring D CString aresult c_dword adecimals
54. Eingangsstream und einen Ausgangsstream erh lt Im Projekt wird das je ein und das selbe Socket f r die Netzwerkverbindung sein Man k nnte jedoch auch ohne eine einzige Zeile Kode ndern zu m ssen die Anfrage aus einer Datei lesen und die Antwort an einen Netzwerkklienten schicken lassen ifndef ENGINE PROCESSOR USED define ENGINE PROCESSOR USED CLASSAPI CProcessor DEFINE TYPES CProcessor CLASSAPI CProcessor public CThread public CProcessor p_CStream aindata p_CStream aoutdata p_CThread aowner 0 VIR CProcessor void die berschriebene Execute Methode enth lt den eigentlichen Kode VIR c_hresult sc Execute void private p CHTTPStream m indata Eingangsdaten p_CHTTPStream m _outdata Ausgangsdaten endif 9 Juli 2003 Seite 8 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 1 1 2 2 Header Engine_Server h Die Klasse CServer stellt je eine Instanz des Servers dar Sie bekommt einen Port mitgeteilt an dem sie auf eingehende Verbindungen warten soll Die Routinen f r Verbindungsannahme laufen wieder in einem Thread so dass es auch ohne weiteres m glich ist dass das Hauptprogramm selbst gleichzeitig als Server mit eventuell verschiedenen Konfigurationen an mehreren Ports listened here come the server routines ifndef ENGINE SERVER USED define ENGINE S
55. Ereignistabelle des Gesamtsystems betrachtet werden Es treten keine Ereignisse auf die durch den Administrator ausgel st werden da dieser nur bei Installation und Wartung der Applikation in Erscheinung tritt Tabelle 1 2 Ereignistabelle des Math Servers Nr Ereignis Ausl ser Antwort 1S Math Client bermittelt Rechenaufgabe Matheaufgabe_oZ Ergebnis_oZ ohne Zwischenergebnisse anzufordern 2S Math Client bermittelt Rechenaufgabe Matheaufgabe_mZ Ergebnis_mZ ausgew hlte Zwischenergebnisse gefordert Tabelle 1 3 Ereignistabelle des Math Clients Nr Ereignis Ausl ser Antwort 1C Benutzer gibt Daten ein Dateneingabe Matheaufgabe_mZ Matheaufgabe_oZ 2C Ergebnis des Servers trifft ein Ergebnis_oZ Bildschirmausgabe Ergebnis_mZ oder Error 1 2 1 2 Kontextdiagramm Wie beim Punkt 1 2 1 1 Ereignistabelle gilt auch hier wieder dass das Kontextdiagramm des Gesamtsystems bei normalem Betrieb dem des Math Clients entspricht Im Falle der Verwendung mit einem anderen Klienten muss jedoch auch das Kontextdiagramm des Math Servers ber cksichtigt werden Hier w rde der andere Klient an Stelle des Math Client treten Diagramm 1 1 d Matheaufgabe_oZ Dateneingabe Matheaufgabe_mZ Bildschirmausgabe i Ergebnis mu Ergebnis_oZ V Gesamtsystem 19 Mai 2003 Seite 3 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg
56. GATIVE alength opl _NOT2 alength opl opl Betr ge bilden kompl true 9 Juli 2003 Seite 57 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 if _NEGATIVE alength op2 NOT2 alength op2 op2 kompl kompl msb opl MSB alength opl msb op2 MSB alength op2 dief msb_op2 NOT FOUND if msb_opl MOT FOUND amp amp div0 if _CMP alength opl op2 amp CMP_MATCH _INS_BIT alength adot 1 adiv else s msb opl msb op2 outpos adot S u exactlyshift alength 32 2 O exactlyshift if msb_opl gt msb_op2 exactlyshift else if outpos gt integer o aoverflow true else dword sl exactlyshift dword s2 exactlyshift if s lt 0 sl s else s2 Si SHL_N alength sl opl opl _SHL_N alength s2 op2 op2 Zz true temp _NEW alength while z amp amp outpos gt integer adot S _SUB alength opl op2 temp if _POSITIVE alength temp move opl temp 4 alength _INS_BIT alength outpos true adiv _SHR_1 alength op2 op2 l 0 msb_opl exactlyshift msb_op2 x 0 abfangen x x abfangen Ausgabeposition berechnen Exactlyshift ermitteln Operanden schieben um genau zu rechnen keine Nachkommastellen bilden Shift amp Sub anwenden z IZ alength op2 amp amp _I
57. I Routinen aus CBase kernel32 dll CDoubleStringList user32 dll CDWordlList comdig32 dll CFile advapi32 dll CHTTPStream shell32 dll CList ole32 dil CObjectList oleaut32 dll CSocket mpr dll CStream ws2_32 dll CString CThread gemeinsame Routinen f r COM Fehlercode Verarbeitung Auf dies wird hier nicht n her grundlegende mathematische Routinen 5 eingegangen Flie komma Speicherzugriffsroutinen 23 Juni 2003 Seite 3 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 1 2 1 1 Klassenvererbungsdiagramm V AN V N AADMD A A W CObjectList CHTTPSocket CStringList CDoubleString List Diagramm 1 1 CDWordList CString In diesem Diagramm stellen wir die Vererbung der Klassen des Moduls Basics dar 1 2 1 2 Grundlegende Datentypen und Abk rzungen Tabelle 1 1 Typ Schema Bedeutung C_XXX Konstante des Typs xxx D xx Zeiger auf Variable des Typs xxx r_XXX Call By Reference Parameter des Typs xxx DC OH Zeiger auf Variable des Typs c_xxx CD AN Konstantes des Typs p_xxx DD ON Zeiger auf Variable des Typs p_xxx Datentype Bedeutung dword 32 Bit Zahl vorzeichenlos integer 32 Bit Zahl mit vorzeichen pointer Zeiger character Unicode Zeichen asciichar Ascii Zeichen string Unicode String Daten asciistring Ascii String Daten double Flie kommazahl 23 Juni 2003 Seite 4 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server B
58. Seite 11 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 1 2 1 6 CStream Klasse und abgeleitete abgeleitet von CBase Neben CArray Deszendent von CBase und ihren Nachfahren spielen die Streams CStream eine gro e Rolle Um m glichst variablen Umgang mit Eingangs und Ausgangsdaten realisieren zu k nnen wird ein Grundobjekt mit den minimalen Methoden um Daten zu lesen und zu schreiben zur Verf gung gestellt Es wird bereits hier das Verhalten zum Lesen und Schreiben von CString Objekten festgelegt Abgeleitet von CStream wird einerseits CFile als Repr sentant einer normalen Datei auf der Festplatte andererseits CSocket was ein Windows Berkley Befehlssatz Socket kapselt Sp tere Routinen zum Daten empfangen und versenden werden lediglich CStream verwenden so das darunter liegende Logik das verwendete Medium gar nicht ber cksichtigen muss Von CSocket wird auch CHTTPSocket abgeleitet so dass ebenfalls die Verwendung des HTTP Protokolls erm glicht wird Members Members sind entsprechende Windows bzw Socket Handles bzw Adress und Steuerinformationsdaten ohne n heres Interesse f r den Nutzer Methoden Alle der genannten Klassen implementieren berschreiben die folgenden Routinen teilweise werden neue als Supersets hinzugef gt dem jeweiligen Anwendungsgebiet entsprechend Dazu geh rt eine Open Routine f r CFiles bzw Client Server Festlegungen f r CSockets Diese s
59. Softwarepraktikum 2003 MathServer Projektdokumentation Teilbeleg 1 Teamleiter Thomas Weise Mitglieder des Projektteams Roland Fischer Ren Kreiner Rico Ro berg Thomas Ziegs Praktikumsbetreuer Dipl Inf Lutz Neugebauer Chemnitz den 19 05 2003 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 1 Spezifikation der funktionellen Anforderungen 1 1 Produktbeschreibung Das Mathematikprogramm MathServer f r den Einsatz in Hochschulrechenzentren unterst tzt bei der Bew ltigung von Rechenaufgaben Dazu geh ren einfache Grundrechenoperationen bis hin zu komplizierteren mathematischen Berechnungen Das System muss leicht erweiterbar sein um es sp ter auch zusammen mit anderen Betriebssystemen betreiben zu k nnen Nutzungsumgebung F r die eigentlichen Berechnungen wird ein leistungsstarker Gro rechner verwendet Die Benutzer arbeiten jedoch an leistungsschw cheren Workstations Diese sind ber ein lokales Netzwerk mit dem Gro rechner verbunden Nutzergruppen Das System wird von Studenten und dem wissenschaftlichen Personal Benutzer verwendet Die Serverkomponente wird von einem Administrator am Gro rechner gewartet 1 2 Funktionelle Anforderungen 1 2 1 Umgebungsmodell Auf Grund der Projektbeschreibung muss die Applikation in einen Klienten und einen Serverteil untergliedert werden damit sie die gestellten Anforderungen im Bezug auf Netzwerkf higkeit erf llen
60. Systemkomma wieder einsetzen Text6 Text FilterString RoundedSolution FindSpecificSolution ServerAnswer CStr ATA Text2 Text Komma ElseIf ConnectionFailed Then Text6 Text Es konnte keine Verbindung zum MathServer hergestellt werden amp vbCrLf amp Text8 Text u End If Exit Sub ErrorHandler Invalid ShowRunTimeError Hauptfenster Command4 Click 13 Resume Next End Sub tkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Beenden Private Sub Command5_ Click ein paar Einstellungen speichern SaveSettingEx ServerName Text3 Text SaveSettingEx ServerPort Text5 Text SaveSettingEx Exactness Text2 Text Unload Me End Sub Ikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk N chstes Vorheriges Teilergebnis Tab Ergebnisse Private Sub Command6_Click Index As Integer If Index 0 Then N chstes Increase ATA If ATA gt UBound TAF Then ATA 1 Else Vorheriges Decrease ATA If ATA lt 1 Then ATA UBound TAF End If Text12 Text TAF ATA Teilausdruck anzeigen Text6 Text FilterString RoundedSolution FindSpecificSolution ServerAnswer CStr ATA Text2 Text Komma Teilergebnis anzeigen End Sub Ikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Schaltfl chen gt Tab Formeleingabe Private Sub Command8_Cl
61. Teilbeleg 1 2 1 1 Speicher Angaben zum Speicherbedarf in Byte Aufgrund unserer Erfahrung mit der Programmierung wird es uns m glich den zu erwartenden Umfang an Speichern abzuleiten Wir beziehen unsere Absch tzungen auf die in Tabelle 2 1 entwickelten Formeln und Absch tzungen des Traffics der Multi Thread Client Server Applikation Dabei gehen wir von normaler Benutzung bis kritischer Belastung aus 2 1 1 C Speicher des MathClient Tabelle 2 2 Eingabetext lt ausdruck gt Zeichenkette CString L nge 2 30 30 2 kB 4 GB Ausgabetext lt zahl gt Zeichenkette CString L nge 2 30 30 4 kB 4GB Sa Knotenobjekt mit Anzahl Knoten 70 XML Baum Implementationsabh ngig Unterknoten CObjectList Anzahl Knoten 1 4 70 50 kB 4 GB Der Gesamtbedarf kann auf Grund der gew hlten Betriebssysteme niemals 4 GB berschreiten 500 kB gt MB 4GB Bei den Werten handelt es sich wegen Beliebigkeit um Sch tzungen 19 Mai 2003 Seite 28 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 2 1 1 5 Speicher des MathClient Tabelle 2 3 Knotenobjekt mit Anzahl Knoten 70 XML Baum Implementationsabh ngig Unterknoten CObjectList Anzahl Knoten 1 4 70 50 kB 4 GB 1 1 oStellenzahl 1 k Reele_Zahl lt zahl gt CReell 282 t x4 50 k 51 k 500 Byte k 850 MB Der Gesamtbedarf kann auf Grund der gew hlten Bet
62. Tostring veranlasst ein Prozessanweisungsobjekt sich in einen String astring zu schreiben VIR c_hresult sc ToString ep _CString astring Die Funktion Type berschreibt die bereits existierende Funktion Type aus der Klasse CXMLBase wenn es sich um ein XML Prozessanweisungsobjekt handelt Type liefert den Code Vert f r ein Prozessanweisungsobjekt zur ck VIR c_dword sc Type void 1 2 5 5 xml_parse Funktion API c hresult SC XML Parse p CString astring rp CXML axml_ tree xmi_parse liefert ein XML Objekt axml_tree welches aus einem String astring erstellt wurde 23 Juni 2003 Seite 25 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 1 2 6 Modul MathServer Modul MathServer Bearbeiter Thomas Weise Bezeichner MathServer nderungsstand 12 06 2003 Kurzbeschreibung Das Modul MathServer bindet das Modul Engine ein welches genutzt wird um den Server Thread zu starten Es exportiert die gesamte Serverfunktionalit t ber die TCP IP Schnittstelle Export Server Funktionalit t Import Engine 1 2 7 Modul MathClient Modul MathClient Bearbeiter Rico Ro berg Bezeichner MathClient nderungsstand 16 06 2003 Kurzbeschreibung Das Modul MathClient enth lt das Anwenderinterface des Systems und zerf llt in Untermodule die jeweils Teilfunktionen des MathClient realisieren Export Import MathServer 23 Juni 2003 Seite 26 von 29 Softwarepr
63. VIR c_hresult SC FormatMessageTYP c_dword aflags c_DAT asource c_dword amessageid c_pointer aarguements 0 c_dword alanguageid DEFAULT LANGUAGE Wandelt einen String von zu einer Windows Berkeley Netzwerkadressenstruktur ainternetaddress um wobei Namensaufl sung betrieben wird FormLocallP verwendet die lokale IP Adresse VIR c_hresult SC TolIPAddress r_sockaddr in ainternetaddress VIR c_hresult SC FromIPAddress e_sockaddr in ainternetaddress VIR c_hresult SC FromLocallP IC word aport 0 Wandelt eine 8 Byte Zahl in einen String um der hinzugef gt wird bzw erstellt eine neue Nummer aus dem String bzw einem Teil des Strings von astart bis aend VIR c_hresult SC AddNum c_qword x VIR c_hresult SC FromNum c_qword x VIR c_hresult SC ExtractNum r_qword x CG dword astart 0 c_dword aend MAX_ DWORD Spiegelt den String bzw alle Zeichen zwischen astart und aend VIR void SC Rotate c_dword astart 0 c_dword aend MAX DWORD Sucht das Ende eines gequoteten Textes entweder mit oder wobei beliebige Schatelungen der Quotes beachtet werden beginnen bei astart VIR c_dword SC QuoteEnd c_dword astart Untersucht ob astring an der Stelle apos steht maximal amaxle Zeichen bzw Gro Kleinschreibung gem acasesensitive VIR c_ boolean SC ISAtTYP c_DAT astring c_dword apos c_boolean acasesensitive false c_dword amaxlen MAX DWORD 23 Juni 2003
64. Y alength op a2 NEW alength _MUL alength adotpos al al a2 aunderflow b1 _ COPY alength aone b2 COPY alength aone cl COPY alength atwo c2 NEW alength _INS_BIT alength adotpos true c2 _INS_BIT alength adotpos 1 true c2 div1 _NEW alength div2 NEW alength move aout op alength 4 Berechnung nach Formel do toob _MUL alength adotpos cl c2 div2 aunderflow if toob toob MUL alength adotpos bl b2 bl aunderflow if toob toob MUL alength adotpos al a2 al aunderflow if toob toob MUL alength adotpos al bl divl aunderflow if toob toob DIV alength adotpos divl div2 temp aunderflow divO toob IzZ alength temp toob i f toob overflow ADD alength aout temp aout if f overflow toob ADD alength b2 atwo b2 toob ADD alength c2 aone c2 toob if toob toob MUL alength adotpos cl c2 cl aunderflow toob ADD alength c2 aone C2 Schleife l uft bis sich Ergebnis nicht mehr ndert while toob amp amp overflow if overflow Rest rechnung und Vorzeichen einbringen overflow SUB alength pi_2 aout aout if kompl _NOT2 alength aout aout _ADD alength aout pi aout PEN FREE FREE FREE FREE d FREF FREF FREF _ FREE 9 Juli 2003 Seite 71 von 111 Softwareprakti
65. _ INC c_dword alength c pointer ain c pointer aout addiert auf eine Zahl 1 aam xor eax eax eax auf 0 setzen test ecx ecx alength 0 jz ende Aa sprung ende mov esi ain esi ain mov edi aout edi aout cld directionflag 0 incdec 4 ste c flag 1 looper lodsd eax esi esi 4 adc eax 0 eax eax cf stosd edi eax edi 4 loop loop anzahl der 4byte bl cke ecx um 1 verringern mov eax 0 eax 0 jno ende 9 Juli 2003 Seite 60 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 not eax ende __forceinline boolean SC _DEC c_dword alength c_pointer ain c_pointer aout r boolean aiszero subtrahiert von einer Zahl 1 aam xor eax eax eax auf 0 setzen mov ebx 0Oxffffffff test ecx ecx alength 0 Jz ende Aa sprung ende mov esi ain lesi ain mov edi aout edi aout cld directionflag 0 incdec 4 ste c flag 1 looper lodsd eax esi esi 4 sbb eax 0 eax eax cf jz goon pushf xor ebx ebx pr fen ob Zahl 0 popf jmp looper2e goon stosd edi eax edi 4 loop looper anzahl der 4byte bl cke ecx um 1 verringern jmp ok looper2 effektivere Schleife wenn bekannt das Zahl lt gt 0 lodsd eax esi esi 4 sbb eax 0 eax eax cf looper2e stosd edi eax edi 4 loop looper2 anzahl der 4byte bl cke ecx um 1 verringern ok mov eax 0 eax 0 jno ende not eax ende mo
66. ad gt lt gt gt lt ident gt lt image gt lt in gt lt int gt lt integers gt lt intersect gt lt interval gt lt interval gt lt lambda gt lt lambda gt lt laplacian gt lt leq gt lt limit gt lt list gt lt list gt lt lowlimit gt lt lowlimit gt lt it gt lt matrix gt lt matrix gt lt matrixrow gt lt matrixrow gt lt max gt lt min gt lt mean gt lt median gt lt mode gt lt moment gt lt momentabout gt lt naturalnumbers gt lt neq gt lt notanumber gt lt notin gt lt notprsubset gt lt notsubset gt lt otherwise gt lt otherwise gt lt outerproduct gt lt partialdiff gt lt piece gt lt piece gt lt piecewise gt lt piecewise gt lt primes gt lt product gt lt prsubset gt lt rationals gt lt reals gt lt reln gt lt reln gt lt scalarproduct gt lt sdev gt lt sec gt lt csc gt lt cot gt lt sech gt lt csch gt lt coth gt lt selector gt lt semantics gt lt semantics gt lt set gt lt set gt lt setdiff gt lt sinh gt lt cosh gt lt tanh gt lt subset gt lt sum gt lt tendsto gt lt transpose gt lt union gt lt uplimit gt lt uplimit gt lt variance gt lt vector gt lt vector gt lt vectorproduct gt 1 2 2 4 3 Grammatik f r die Datenstr me zwischen Math Client und Math Server Wie bereits erw hnt wird ein HTTP kompatib
67. aktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 4 1 2 Betriebssystem Als Betriebssystem wird sowohl f r den Client als auch f r den Server Windows 2000 oder Windows XP vorausgesetzt Die Betriebssystemvoraussetzungen begr nden sich durch die Notwendigkeit der Unicode Unterst tzung f r die zu entwickelnde Software Theoretisch kann das System auch mit der Microsoft Layer for Unicode auf niedrigeren Windowsversionen betrieben werden einwandfreie Funktion kann jedoch nicht garantiert werden Ohne systeminterne Unicodeunterst tzung ist die Applikation nicht lauff hig 4 1 3 Sonstige Basissoftware Als sonstige Basissoftware ist Visual Basic Runtime Libraries f r den Client notwendig 4 2 Entwicklungsumgebung Als Entwicklungsumgebung ist das Microsoft Visual Studio 6 0 mit Servicepack 5 0 und das Microsoft Developer Network vorgesehen Als Rechner f r Testung und Kompilierung werden Microsoft Windows 2000 bzw XP auf Intel Pentium Maschinen 1 GHz aufw rts verwendet 19 Mai 2003 Seite 35 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 5 Planung Die Entwicklung des Systems Math Server erfolgt entsprechend des nachstehenden Plans Diagram 5 1 Gantt Diagramm Termin Person 13 04 24 04 05 05 12 05 17 05 19 05 06 06 09 06 27 06 11 07 Gruppe R Fischer T Ziegs R Kreiner Gruppe R Ro berg T Wei
68. aktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 MathClient Kern XML Kommunikation Verarbeitung MathParser Grundlagen 1 2 7 1 Untermodul Grundlagen Das Untermodul Grundlagen enth lt Grundfunktionen die den anderen MathClient Modulen zur Verf gung stehen Export MTreeNode PrintText DrawTree Weitere allgemeine Grundfunktionen auf die hier nicht weiter eingegangen wird Import 1 2 7 1 1 MTreeNode Klasse Diese Klasse repr sentiert einen Knoten des Baumes Eingabetext Eigenschaften Data String Die Daten des Knotens ID Long Die ID des Knotens Children Variant Dynamisches Feld aus MTreeNode NumberOfChildren Long Anzahl der Elemente von Children 1 2 7 1 2 PrintText Prozedur Diese Prozedur dient zum Drucken ausgew hlter Daten Sub PrintText PrintData as String 1 2 7 1 3 DrawTree Prozedur Diese Prozedur stellt einen mathematischen Ausdruck grafisch dar Sub DrawTree MTree as MTreeNode DrawBox as PictureBox Optional MarkedPartID as Long 23 Juni 2003 Seite 27 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 1 2 7 2 Untermodul Kommunikation Dieses Modul realisiert die Kommunikation des MathClient mit dem MathServer unter Verwendung der TCP IP Schnittstelle Export TalkToServer Import Grundlagen 1 2 7 2 1 TalkToServer Funktion Sendet die Anfrage vom MathClient an den MathServer und empf ngt dessen An
69. al 9 Juli 2003 Seite 36 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 2 1 2 Modul Engine 1 2 1 2 1 Kode Engine_Processor cpp include Engine h CProcessor CProcessor p_CStream aindata p_CStream aoutdata p_CThread aowner CThread aowner m indata new CHTTPStream aindata Wwir erstellen HTTPStreams um die m outdata new CHTTPStream aoutdata Eingangsstreams herum CProcessor CProcessor void ET NULL m indata und geben sie hier wieder frei ET NULL m outdata e S c_hresult se CProcessor Execute void dword retval S_OK if m_indata amp amp m _outdata p_CString ais new CString if ais dword encoding retval m indata gt ReadStr ais encoding if succeeded retval p CString aos new CString if aos p_CString x new CString p_CString y new CString m indata gt GetHeader x dword s dword fractals 100 dword decimals 100 f succeeded x gt ExtractNum z eil e 1 decimals dword z qword z s x gt FindUnicode _S decimals herausfinden wieviele Dezimal if s NOT_FOUND stellen gew nscht s x gt FindUnicode _S s if s NOT_FOUND e x gt QuoteEnd s i Ae x gt FindUnicode _S fractals und wieviele Nachkommastellen if s NOT_FOUND 9 Juli 2003 S
70. al Seite 20 von 29 al consts al a2 al a2 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 1 2 5 Modul XML Parser Modul XML Parser Bearbeiter Roland Fischer Rene Kreiner Bezeichner XML_Parser nderungsstand 28 05 2003 Kurzbeschreibung Das Modul XML Parser dient der Umwandlung eines Strings mit XML Daten in eine Baumstruktur zum gezielten Zugriff auf die einzelnen Knoten und ihrer Attribute Ebenso wird das Aufbauen eines XML Baumes unterst tzt und das Generieren eines Strings aus diesem Export CXML Import CBase CXMLBase Basics Routinen CXMLNode CXMLPI xmi_parse 1 2 5 1 Klassenvererbungsdiagramm CXML CXMLBase CXMLNode CXMLPI Diagramm 1 2 23 Juni 2003 Seite 21 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 1 2 5 2 CXML Klasse abgeleitet von CXML CXML repr sentiert ein komplettes XML Dokument Es ist der Einstiegspunkt f r das Modul Formelparser Die FromString ToString Clean und Type Funktionen werden entsprechen berschrieben Members m_items p_CObjectList Liste von XML Objekten Methoden FromString erstellt ein XML Objekt aus einem String astring Dabei werden die zu dem Objekt geh renden Daten aus dem String gel scht VIR c_hresult sc FromString ep _CString astring ToString veranlasst ein XML Objekt sich in einen String astring zu schreiben VIR c_hresul
71. alength c_dword adotpos c_ pointer aoriginal c_pointer anachkomma Liefert die Nachkommastellen einer Zahl Nachkommastellen aoriginal werden nach anachkomma kopiert A_length L nge der Zahlen adotpos Kommaposition in Zahl aoriginal Originalzahl avorkomma Nachkommastellenzahl API c_boolean FC _I_DIV_MOD c_dword alength c_dword adot c_pointer aindatal c_pointer aindata2 c_ pointer adiv CG pointer amod r boolean div0 Funktioniert nach dem gleichem Prinzip wie Division Allerdings werden keine Nachkommastellen gebildet und ein Rest wird zur ckgegeben A_length L nge der Zahl adot Kommaposition der Zahl aindata1 aindata2 Zahlen Operanden adiv ganzahliges Divisionsergebnis amod Rest divO bei durch Null API c_hresult EC _NUM2STR c_pointer anum c_dword anumlength CG _dword anumdotpos CG character astringdot p_CString astring c_dword astringkommastellen Wandelt eine Zahl zum String Anum die Zahl anumlength L nge der Zahl anumdotpos Kommaposition in Zahl astringdot Kommazeichen des Strings astring zu bildender String astringkommastellen Nachkommastellenanz des Strings API c_boolean FC _IS_MAX_NEG c_dword alength c_pointer aoriginal Gibt true zur ck wenn Zahl min neg Zahl API c boolean FC _ABS c_dword alength c_pointer aoriginal pointer aabs Bildet den Betrag einer Zahl Betrag der kleinsten neg Zahl nicht m glich da 2er Komplement __forceinline boolean
72. alle Zeichen zwischen astart und aend mit Hilfe von acodepage transformiert werden VIR c_hresult SC AsAscii asciistring amp astring c_dword acodepage CP _ THREAD _ACP CG dword astart 0 c_dword aend MAX DWORD Transformiert den String zu Gro buchstaben VIR void SC Upper void Transformiert den String zu Kleinbuchstaben VIR void SC Lower void 23 Juni 2003 Seite 9 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 Erstellt den String aus den Daten eines Global Unique Idendifiers aguid VIR c_hresult SC FromGuid c_guid aguid Schreibt die Stringdaten in einen GUID aguid wenn der String bereits wie ein GUID formatiert ist VIR c_hresult SC AsGuid r_guid aguid L st einen lokalen Pfad ber das Netzwerk zu einem Universellen Pfad auf VIR c_hresult SC MakePathUniversal void Erstellen einen Systemeindeutigen Namen f r eine tempor re Datei und l scht diese wenn adeleteprobfile wahr ist VIR c_hresult SC GetTempFileNam c_boolean adeleteprobefile false amaxlendel Zeichen von adelete werden maximal atimes durch maximal amaxlenins Zeichen von ainsert unter acasesensitive Beachtung der Gro und Kleinschreibung ersetzt VIR c_hresult SC ReplaceTYPFFF c_DAT adelete c_DAT ainsert c_dword atimes MAX DWORD c_dword astart 0 CG boolean acasesensitive false c_dword amaxlendel MAX DWORD c_dword amaxlenins MAX DWORD
73. an SC Negative cp_CReal al Gibt wieder ob die Zahl positiv ist FRA c boolean SC Positive ep _ CReal al Gibt wieder ob die Zahl 0 ist FRA c boolean SC IsZero cp _CReal al Addiert zwei reell Zahlen und speichert das Ergebnis in einer neuen FRA cp _CReal SC Add cp _CReal al cp _ CReal a2 Subtrahiert zwei reell Zahlen und speichert das Ergebnis in einer neuen FRA cp _CReal SC Sub cp_CReal al cp_CReal a2 Multipliziert zwei reell Zahlen und speichert das Ergebnis in einer neuen FRA cp CReal SC Mul cp_CReal cp_CReal al a2 Dividiert zwei reell Zahlen und speichert das Ergebnis in einer neuen 23 Juni 2003 Seite 18 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 FRA cp CReal SC Div cp _CReal al cp _CReal a2 Erstellt eine neue Zahl aus einem String astring Dabei besteht die Zahl aus alength Verarbeitungseinheiten mit dem Komma an Stelle adotpos Der Benutzer fordert auserintbits Vorkomma und auserfracbits Nachkommastellen FRA cp _CReal SC FromString c_dword alength c dword adotpos c_dword auserintbits c dword auserfrackbits cp CString astring Schreibt die Zahl anum in den String astr FRA CG hresult sc ToString cp CReal anum cp _CString astr Liefert den Vorkommateil der Zahl zur ck FRA cp _CReal sc Int cp_CReal al Liefert die Nachkommastelle der Zahl FRA cp _CReal SC Frac cp_CReal al Eine Gan
74. apply gt lt a el AML k math gt 44148203103076291 761975273728751 4387998086491 778761016876592850567718730170424942 a 358019344998534950240751527201389515822712391 153424646845931079028923155579833435 650650780928449361861764425463243062474885771091671021428430300734123603857179274 370778285348388268601132427235079294008103792374613286130010427922332607291994469 721854632959001556941232340785413150502974293520015932401 710974486391 453205225363 184406568699276280586610201225456138501134705637868136402478690544837520091849341 842253628996823645303814984706902378274118644985906464261 168740407684541 414506058 025717398289932290895390420165350681083828601 485251 724874349233532359187391838994 216780204247616274886491 7915397781 77589101310904199599465833415690399865449699070 92197130429275001 487623999241 44331 2639561584421 2672302993642528754883535543901179 012558150602655689200232378071680532351 73984080521991599874928002661 7102064833853 42826068841 496045473274208824289847121352126627029575387675316607 7492502804713171 4010815077305353157941966204295655972025861493012343805448505986451 77563186192565 126382357004769681529874038482509825308799308190378666051395348508076567195348029 966049164493167 79478543697 3252078048870382605791636888808419541190853015746770480 705860080507941616835836852775172432011571688128158801959737434545918678085078717 Formeleingabe Ergebnisse Optionen Debug Serverantwort E Nur erfahrene Nutzer s
75. ariablen das Systemkomma Verbindungsfehler Serverantwort empfangen ausgew hlter Teilausdruck Feld aller Teilausdr cke Antwort des MathServer Dim Komma As String ConnectionFailed As Boolean AnswerReceived As Boolean ATA As Long TAF As Variant ServerAnswer As String u Ikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Hauptfenster wird geladen Steuerelemente werden beschriftet bzw Vorgabewerte eingestellt Private Sub Form Load Const C1 As String Konstante einf gen C2 As String Operator einf gen SSTabl Tab 0 Me Caption App Title Me Command5 Caption Beenden Me Commandl Caption Formel drucken Me Command4 Caption Berechnen willk rlich ausgew hlte Formel als Vorgabeausdruck Me Text1 Text 3 sin 3 4 Pi 7 3 3 log 5 3 4 43 454 3 root 7 e 2 amp 1 4 7 4 Pi 8 gew nschte Stellenzahl vom letzten Ausf hren des Programms wurde gespeichert 9 Juli 2003 Seite 89 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 Me Text2 Text GetSettingEx Exactness 100 Me Command 8 0 Caption gt Me Command 8 1 Caption gt Combobox f r Konstanten Me Combol 0 AddItem EULERsche Zahl e Me Combol 0 AddItem LUDOLFsche Zahl Pi diese beiden Konstanten aus TB1 entfallen Me Combo1 0 Addltem BOLTZMANN Konstante k Me Combo1 0 Addlte
76. arser erh lt eine Zeichenfolge astring die den im Nutzerinterface eingegebenen mathematischen Ausdruck enth lt Mit Hilfe des Moduls XML Parser wird diese Zeichenfolge in einen XML Baum umgewandelt und mit Hilfe des Math Moduls werden die End und Zwischenergebnisse des mathematischen Ausdrucks berechnet Diese werden zu einem neuen XML Baum zusammengef gt der vom XML Parser zur Zeichenfolge aresult umgewandelt wird API c_hresult SC Formula Parse p CString astring p CString aresult 23 Juni 2003 Seite 16 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 1 2 4 Modul Math Modul Math Bearbeiter Thomas Ziegs Bezeichner Math nderungsstand 28 05 2003 Kurzbeschreibung Das Modul Math stellt s mtliche mathematischen Routinen des Projekts zur Verf gung Es erm glicht die Berechnung mit beliebiger Stellenanzahl Export CConstants Import CBase CReal Basics Routinen 1 2 4 1 CConstants Klasse abgeleitet von CBase Die Objekte der Klasse CConstants halten ein Set von Konstanten f r je eine Rechenanfrage Da Zahlen wie n f r Arcus Sinus ben tigt werden werden sie nur einmal berechnet und dann gespeichert Ihre Berechnung erfolgt wenn sie das erste Mal ben tigt werden Members m_length dword Anzahl von DWord Einheiten der Zahl m_dotpos dword logische Position des Kommas m_pi pointer Konstante rn m_hpi pointer Konstante m_fpi pointer Konstante 4 m_one pointer Kons
77. ata1 op2 aindata2 x 0 abfangen x x abfangen Outputpos bestimmen Beide Operanden werden in Abh ngigkeit des jeweiligen MSB um genau exactlyshift Stellen nach links geschoben um die Division m glichst alength 32 2 exactlyshift exactlyshift if outpos gt integer o aoverflow else if outpos lt 0 else dword s1 dword s2 if s lt D else true exactlyshift exactlyshift sl s s2 Ss 9 Juli 2003 exactlyshift msb opl aunderflow true Seite 54 von 111 genau durchzuf hren Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 _SHL_N alength sl opl opl Exactlyshift op2 mit seinem msb auf auf _SHL_N alength s2 op2 op2 gleiche Pos wie op schieben temp NEW alength do Op2 wird von op subtrahiert wenn ergebnis pos dann wird ergibt sich op1 aus ergebnis und in aoutdata wird eine 1 geschrieben SUB alength opl op2 temp if _POSITIVE alength temp move opl temp 4 alength _INS_BIT alength outpos true aoutdata Danach Shiftright von op2 und Vorgang SHR 1 alength op2 op2 outpos wiederholen bis op1 0p2 0 oder Unterlauf while IZ alength op2 amp amp IZ alength opl amp amp outpos gt 0 FREE temp u if outpos lt 0 amp amp IZ alength opl aunderflow true erwar
78. auer Teilbeleg 3 Schleife l uft bis sich Ergebnis nicht mehr ndert while toob false amp amp _IZ alength temp amp amp overflow FREF _FREE b22 _FRE F ERE F _FREE b11 _FREE b12 return overflow T T API c boolean FC _TAN c_dword alength c_dword adotpos c_pointer ain c_pointer aout r boolean adivO Berechnet tan x x op boolean overflow false boolean aunderflow false adiv0 false pointer op COPY alength ain pointer e sin NEW alength pointer e cos NEW alength zero aout alength 4 if _IZ alength op tan0 0 overflow SIN alength adotpos op e sin umsetzen der Formel if f overflow overflow COS alength adotpos op e_cos if overflow overflow DIV alength adotpos e sin e_cos aout aunderflow adivO FR FR T E op E e_sin _FREE e_cos return overflow T T API c boolean EG _LN c_dword alength c_dword adot c_pointer ain c_pointer aout r boolean adiv0 berechnet In x x in boolean overflow false boolean uf false pointer xpl 0 pointer xml pointer one pointer two pointer div 0 boolean toob false r f r OOG OG pointer in COPY alength ain zero aout 4 alength if NEGATIVE alength in amp amp IZ alength in In x
79. axlen Zeichen verglichen werden sollen VIR c_dword SC CompareTYP c_DAT astring CG boolean acasesensitive false c_dword amaxlen MAX DWORD Sucht astring beginnend bei astart indem stets maximal amaxlen Zeichen von astring verglichen werden acasesensitive gibt ab ob Gro und Kleinschreibung unterschieden wird VIR c_dword SC FindTYPFFF c_DAT astring c_dword astart 0 CG boolean acasesensitive false c_dword amaxlen MAX DWORD L scht maximal atimes Auftreten von astring beginnend ab astart unter acasesensitive Beachtung der Go R und Kleinschreibung durch Vergleich von je maximal amaxlen Zeichen VIR c hresult SC RemoveTYPFFF c DAT astring g c dword atimes MAX DWORD c_dword astart 0 c_boolean acasesensitive false c_dword amaxlen MAN DWORD L scht alle Zeichen vor anewstart und nach anewend VIR c_hresult SC DeleteFrame c_dword anewstart c_dword anewend L scht alle f hrenden und folgenden Leer und Steuerzeichen VIR c_hresult SC T im void L scht alle Steuerzeichen auch doppelte Leerzeichen bei aallowdoublespaces falsch VIR c_hresult SC Clean void Kopiert alle Zeichen zwischen astart und aend in einen neuen String astring VIR c_hresult SC Extract c_dword astart c_dword aend CString amp astring Vervielfacht den String um atimes durch Anh ngung VIR c_hresult SC Multiply c_dword atimes Erstellt eine ASCII Repr sentationastring des Strings indem
80. be Absch tzung basierend auf angenommen Entwicklungsrichtlinien anzunehmen Die exakten Definitionen sind dann implementationsabh ngig und k nnen hier noch nicht bestimmt werden Daf r wird es m glich weitaus umfangreichere Absch tzungen 2 1 3 Qualit tsanforderungen 3 und Anforderungen an die Umgebung 4 zu stellen F r die Datenkalkulation vereinfachen wir den XML Baum ganz enorm Tabelle 2 1 lt string n gt Zeichenkette der L nge n CString 2 n 30 lt tag n gt lt string n gt 2 n 30 lt xmlknoten gt lt tag a gt lt string b gt lt tag a 1 gt lt tag a gt 2 2 a b 1 90 k min lt tag a gt lt string b gt lt xmiknoten gt lt tag a 1 gt lt xml baum gt lt node gt 2 2 a b 1 90 k min lt reelle_Zahl gt lt CReell gt Stellenzahl l 10 1 ZS j 50 p 32 lt eingabetext gt lt string n gt 2 n 30 lt ausgabetext gt lt string n gt 2 n 30 lt netzwerktraffic gt lt string a gt lt string b gt 2 a b 30 Man erkennt dass die grundlegenden Datentypen stets von Zeichenketten und den bin ren Daten der reellen Zahlen abgeleitet werden Prinzipiell werden diese lediglich um Steuerinformationen erweitert Anders als bei den Tabellen in der Vorlage kann her zwischen minimaler und maximaler Gr e unterschieden werden da sich diese dynamisch errechnen 19 Mai 2003 Seite 27 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer
81. bestimmen kann wird hier auch ein Anteil Rechenzeit ben tigt Wir sch tzen diese auf 3 ms Die r ckw rtige Erstellung des Baums f r den Aufbau Ausgabedaten jedoch erfolgt wesentlich schneller da hier die verschiedenen Konversions Test und Verifikationsalgorithmen entfallen Dies f hrt zu einer Absch tzung der Rechenzeit auf 0 5 ms Der Speicherbedarf ist hierbei gleich wenn nicht sogar gr er wegen der gro e mathematischen Genauigkeit entstehen wieder lange Zeichenketten Zu beachten ist dass beide Abl ufe sowohl im Klienten als auch im Server realisiert werden m ssen 19 Mai 2003 Seite 30 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 e Reelle Zahl Reelle Zahlen werden wie gesagt ebenfalls als Objekte mit Bin rdaten in gro em Umfang dargestellt Hier ist der gr te Speicherbedarf im Server zu suchen nur dort existieren sie und wird auch die meiste Rechenzeit aufgewendet 59 Sekunden einer Rechenaufgabe werden mit der Kodierung Dekodierung und Rechnung mit den Speichern vom Typ Reelle_Zahl verbracht Es liegen noch keine algorithmischen Effizienzbetrachtungen hierzu vor jedoch k nnen wir bereits absch tzen dass Operationen wie mit sehr hoher Performance realisierbar sind bei solchen jedoch die Reihenentwicklungen ben tigen wie Arcsin e oder auch die Konstante r ist mit Abstrichen in der Operationsgeschwindigkeit zu rechnen 2 1 4 Genauigkeit Die Ge
82. c cl ldigits eax c eax ebx ebx edx counter looper ebx ebx carry eax eax ende2 eax 0xffffffff 9 Juli 2003 _SHL_N_MOD32 c_dword alength c_dword adigits c_ pointer aindata CG pointer aoutdata Schieben um n Bits n lt 32 Testen auf Zahl mit L nge 0 Flags sichern Anzahl der 32 Bit Bl cke sichern Linksverschiebung der Sicherung berechnen Rechtsverschiebung sichern Webx 0 directionflag 1 dec 4 eax esi esi 4 In_Rausschiebebits sichern Rechtsschieben a_Rausschiebebits in eax a_Rausschiebebits n_Rausschiebebits fedi eax edi 4 spring wenn cf 1 eax 0 sprung ende eax true Flags wiederherstellen Seite 48 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 __forceinline c_boolean FC _SHL_N_32 c_dword alength c_dword adigits c_ pointer aindata c_pointer aoutdata boolean retval asm berpr fen ob berlauf entsteht mov retval O test ecx ecx alength 0 Jz ende ja sprung ende cmp edx ecx jae ende mov ebx ecx mov eax ecx sub eax edx shl eax 2 cld mov edi aindata add edi eax mov ecx edx shl ecx l xor eax eax rep scasw rep wiederholt solang zf lt gt 0 und cx gt 0 scasw vergleich eax mit edi jz ende not retval ende Schieben der Bl cke move amp p_dword aoutdata adigits aindata alength adigits 4 zero aout
83. c_dword alength c_dword adotpos CG pointer azahl c_pointer aexponent CG pointer aout r boolean adiv0 x y berechnen x 0p1 y op2 boolean overflow false boolean aunderflow false boolean kompl false boolean gotoend false pointer opl COPY alength azahl pointer op2 COPY alength aexponent pointer temp NEW alength pointer atwo NEW alength _INS_BIT alength adotpos 1 true atwo zero aout alength 4 if IZ alength opl wenn x 0 gt Ergebnis 0 _INS_BIT alength adotpos true aout if _ IZ alength op2 wenn y 0 gt Ergebnis 1 if _NEGATIVE alength opl wenn x negativ _FRAC alength adotpos op2 temp if _IZ alength temp A dann mu y ganzzahlig sein 9 Juli 2003 Seite 74 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 _NOT2 alength opl opl _I_DIV_MOD alength adotpos op2 atwo atwo temp adivO if _ IZ alength temp kompl true else gotoend true overflow true if gotoend overflow LN alength adotpos opl opl adiv0 Berechnung nach Formel if overflow amp amp adivO overflow MUL alength adotpos opl op2 op2 aunderflow if overflow overflow E X alength adotpos op2 aout if kompl _NOT2 alength aout aout else 0 x und 0 0 n d if _NEGATIVE alength op2 _IZ alength op2 overf
84. cf temp edi eax edi 4 4byte bl cke ecx um 1 verringern sprung zu looper eax 0xffffffff c_boolean SC rdigits ldigits mask counter eax eax ecx ecx ende counter ecx ebx ecx ebx ebx 2 esi aindata edi aoutdata esi ebx edi ebx cl dl mask 1 mask cl mask ldigits rdigits ebx ebx ldigits 32 al al cl ldigits edx eax edx mask edx cl cl rdigits eax cl eax ebx ebx edx counter looper ebx ebx carry eax eax ende2 9 Juli 2003 spring wenn cf 1 eax 0 sprung ende eax true Flags wiederherstellen SHR_N_MOD32 c_dword alength c_dword adigits CG pointer aindata c pointer aoutdata Rechtsschieben von n Bits n lt 32 Testen auf Zahl mit L nge 0 Flags sichern Anzahl der 32 Bit Bl cke sichern esi aufs MSDW der aindata setzen Sicherungsmaske erstellen Linksverschiebung der Sicherung berechnen Rechtsverschiebung sichern ebx 0 directionflag 1 dec 4 eax esi esi 4 n_Rausschiebebits sichern Rechtsschieben a_Rausschiebebits in eax a_Rausschiebebits n_Rausschiebebits fedi eax edi 4 spring wenn cf 1 eax 0 sprung ende Seite 50 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 carry mov eax Oxfffff fff eax true ende2 popf Flags wiederherstellen ende __forceinline c_boolean FC _SHR_N
85. cken entsprechend der Systemeinstellung Private Sub Winsockl DataArrival ByVal bytesTotal As Long Dim RecData As String Static AllData As String Winsock1 GetData RecData Block empfangen AllData AllData amp RecData zusammenf gen Empfang abgeschlossen g ltige Endemarkierung in Antwort If Not InStr RecData lt math gt 0 Or Not InStr RecData ERROR 0 ServerAnswer AllData Text8 Text AllData Achtung Textboxen fassen nur 32 kB Winsockl Close trennen AllData AnswerReceived True wartende DoEvents Schleifen anderswo freigeben End If End Sub Ikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Verbindungsfehler Then Private Sub Winsockl_Error ByVal Number As Integer Description As String ByVal _ Scode As Long ByVal Source As String ByVal HelpFile As String ByVal HelpContext As Long CancelDisplay As Boolean Text8 Text WinSock Fehler amp Number amp amp Description ConnectionFailed True End Sub 9 Juli 2003 Seite 95 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 2 2 2 Modul Grundlagen Ikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Modul Grundlagen enth lt au er den folgenden Funktionen noch weitere Hilfsfunktionen die aber hier nicht vollst ndig wiedergegeben werden da sie nur allgemeine nicht aber a
86. d Sub 9 Juli 2003 Seite 91 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 Ikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Berechnen Tab Formeleingabe Private Sub Command4_Click Dim XMLString As String FString As String a As Long b As Long c As Long Invalid As Boolean u On Error GoTo ErrorHandler g ltige Stellenzahl berpr fen Invalid wird ggf im ErrorHandler gesetzt a CLng Text2 Text If Invalid Or a lt 10 Or a gt 100000000 Then Label5 Caption Es mu eine Stellenzahl zwischen 10 und 100000000 angegebe amp n werden Exit Sub End If Leerstellen rausnehmen Label5 Caption Eingegebener Ausdruck wird berpr ft FString FilterString Textl1 Text Folgende auskommentierte Zeilen w ren normalerweise hier gekommen wenn ich nicht krank geworden w re Dim MTR As MTreeNode Set MTR MathStringToTree FilterString FString Komma 1 If Not InStr MTR Data Fehler 0 Then Label5 Caption Syntaxfehler an Position amp Mid MTR Data 8 Text1 SelStart Mid MTR Data 8 Text1 SelLength 1 Else XMLString TreeToXMLString MTR Label5 Caption Ausdruck wird in MathML umgewandelt Statt dessen wird MathStuff bas verwendet Dim IDS As String Feld das die Teilausdr cke enthalten wird SyntaxError False jede Menge potentie
87. d grundlegende mathematische Kenntnisse vorweisen Die Bedienung wird ber eine leicht berschaubare leicht verst ndliche und leicht erkl rbare grafische Oberfl che erfolgen Da die Software MathServer f r den Einsatz an Hochschulen und Universit ten vorgesehen ist sollten diese Voraussetzungen allerdings von nahezu allen Benutzern erf llt werden k nnen 3 2 Zuverl ssigkeit Da die Nutzer sehr hohe Anforderungen an die Zuverl ssigkeit des Systems stellen muss besonderes Augenmerk auf diesen Gesichtspunkt gelegt werden Um Bedienfehler von vornherein zu minimieren wird die Bedienung wie schon bei 3 1 erw hnt ber eine leicht berschaubare leicht verst ndliche und leicht erkl rbare grafische Oberfl che erfolgen Mathematisch falsche Eingaben durch den Nutzer k nnen vom Klienten erkannt werden Diese Daten werden nicht zum Server bertragen Der Nutzer wird durch eine spezifische Fehlermeldung auf den Eingabefehler hingewiesen und kann diesen korrigieren Des Weiteren muss man bertragungsfehler im Netzwerk und andere Fehlfunktionen der Hard bzw Software zwischen Klient und Server in Betracht ziehen Der Server ist in der Lage viele davon zu erkennen allerdings wird es nicht m glich sein alle Fehler festzustellen Wenn ein solcher bertragungsfehler erkannt wurde wird der Benutzer durch eine Fehlermeldung darauf hingewiesen Selbst ndige Fehlerkorrektur des Systems ist nicht m glich Jegliche Speicherdefekte k nnen ve
88. dabs ByVal S As String As String Dim I As Long Dim j As Long Dim k As Long I InStr S While I gt 0 ze e Do I Mid S Jy 1 Or Mid S j 1 Then Increase k I Mid S j 1 Or Mid S Jy 1 Then Decrease k Increase j Loop While j lt Len S And k lt gt 0 Or Mid S j 1 lt gt S Left S I 1 amp abs amp Mid S L 1 j 1 e Mids j 1 I InStr S Wend dabs S End Function plus minus john do unterscheidet un re und von bin ren wobei die un ren Pluse gleich gel scht und die Minuse in umgewandelt werden damit sie sp ter keinen Schaden mehr anrichten Function pmjohndo ByVal S As String Dim I As Long For I 1 To Len S EE Mid S I I T Oe Mid S Le 1 1p Then I I 1 Then GoTo ok IE InStr num Mid S I 1 1 lt gt 0 And InStr num amp Mid S I 1 1 0 Then ok I Mid S I 1 Then S lLeft S I 1 Mid S I Else S Left S I 1 Mid S I 1 nd If End IfEnd If Next 9 Juli 2003 Seite 103 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 pmjohndo S End Function math2xmath wandelt einen Infix Ausdruck in das v llig fiktive Zwischenprodukt xmath um dabei werden zuerst die Betragsklammern abgehandelt dann die Operatoren ihrer Wertigkeit nach Um F
89. data adigits 4 return retval API c_boolean FC _SHL N c_dword alength c_dword adigits c_pointer aindata c_pointer aoutdata boolean retval false dword d adigits 32 if d retval SHL_N 32 alength d aindata aoutdata Bl cke schieben else move aoutdata aindata alength 4 Bits schieben retval SHL_N MOD32 alength adigits 32 aoutdata aoutdata retval return retval API c_boolean FC _SHR_1 c_dword alength c_pointer aindata c_pointer aoutdata Schiebt um 1 bit rechts aam xor eax eax eax auf 0 setzen test ecx ecx alength 0 jz ende Za sprung ende pushf Flags sichern mov esi aindata esi aindata mov edi aoutdata edi aoutdata mov edx ecx ebx ecx dec edx ebx 1 shl edx 2 ebx 4 add esi edx esi ebx add edi edx edi ebx std directionflag 1 dec 4 clc c flag 0 9 Juli 2003 Seite 49 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 looper lodsd Per stosd loop jb xor jmp carry mov ende2 popf ende __forceinline byte byte dword dword aam xor test jz pushf mov mov dec shl mov mov add add mov mov shl dec mov sub mov xor std looper lodsd mov mov and shl mov shr or einbringen mov stosd dec jnz test jnz xor jmp eax 1 looper carry eax eax ende2 eax esi esi 4 temp Isb rechtsschieben msb cf
90. de _S In amp CMP_MATCH 0 aretval Ln ops 0 else Subtraktion if a gt CompareUnicode S minus amp CMP_MATCH 0 aretval Sub ops 0 ops 1 else Addition if a gt CompareUnicode _S plus amp CMP_MATCH 0 aretval Add ops 0 ops 1 else 9 Juli 2003 Seite 41 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 Potenz if a gt CompareUnicode _S power amp CMP_ MATCH 0 aretval Potenz ops 0 ops 1 else quotient if a gt CompareUnicode S quotient amp CMP_MATCH 0 aretval IDiv ops 0 ops 1 else Wurzel if a gt CompareUnicode _S root amp CMP_MATCH 0 aretval Wurzel ops 1 ops 0 else Sinus if a gt CompareUnicode _S sin amp CMP_MATCH 0 aretval Sin ops 0 aconsts else Tangens if a gt CompareUnicode _S tan amp CMP MATCH 0 aretval Tan ops 0 aconsts else Multiplikation if a gt CompareUnicode _S times amp CMP_MATCH 0 aretval Mul ops 0 ops 1 else Multiplikation if a gt CompareUnicode _S log amp CMP_MATCH 0 aretval Log ops 0 ops 1 Fehler else aretval new CReal anumlength adotpos aretval gt Invalidate ToString aretval b Zwischenergebnis in String umwandeln if succeeded retval Ergebnisstring zusammensetzen
91. den der Daten zwischen Klienten und Server Sie ist bidirektional und basiert auf den Microsoft Windows Socket bzw HTTP Spezifikationen Wie bereits in Teilbeleg 1 erw hnt wird ein HTTP kompatibles Protokoll verwendet Da es nur der Daten bertragung dient beschr nken wir uns darauf den Befehl GET zu unterst tzen Anstelle des URL Teils wird das Wort solution eingetragen Hierbei kann die Anzahl der gew nschten Vorkommastellen decimals und Nachkommastellen fractals definiert werden Das Startsymbol f r den gesamten Traffic ist lt traffic gt f r die Daten bertragung Klient Server lt anfrage gt und Server Klient lt antwort gt Tabelle 1 2 8 1 Element lt http befehl gt GET lt typ gt solution decimals lt zfolge gt fractals lt zfolge gt lt LF gt Zeilenumbruch lt leerzeile gt lt LF gt lt LF gt lt xmli daten gt XML Text f r Anfrage und Antwortdaten lt ergebnis nr gt 200 OK 8 lt ziffer gt lt ziffer gt Fehler lt anfrage gt lt http befehl gt lt typ gt HTTP lt zZiffer gt lt ziffer gt lt leerzeile gt lt xml daten gt lt antwort gt HTTP lt ziffer gt lt ziffer gt lt ergebnis nr gt lt LF gt Content Type text mathml xml lt leerzeile gt lt xml answer gt lt traffic gt lt anfrage gt lt antwort gt Die XML Daten der Antwort entspricht dem Symbol lt xml daten gt der lt antwort gt des Servers er
92. den soll aout Ergebnis pi_2 Pi 2 pi_4 Pi 4 9 Juli 2003 Seite 16 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 API c_boolean FC _WURZEL c_dword alength c_dword adotpos c pointer azahl c pointer awurzel c pointer aout r boolean adiv0 Berechnet die Wurzel einer Zahl nach folgender Umformung 1 ax y 1 Inax lny Tsinay x 1 ha_ bw ex e 1 ex Ten Die Wurzelregeln sind am Quellcode deutlich gemacht Alength L nge der Zahl adotpos Kommaposition in der Zahl azahl Zahl aus der die Wurzel berechnet werden soll awurzel die wievielte Wurzel aout Ergebnis divO Division durch 0 API c_boolean EC _ POTENZ c_dword alength CG dword adotpos c_pointer azahl c_pointer aexponent c_pointer aout r boolean adiv0 Berechnet die Potenz einer Zahl nach folgender Umformung a y lna lny x Ina Iny x na_ _hy e E x na e N Die Potenzregeln sind am Quellcode deutlich gemacht Alength L nge der Zahl adotpos Kommaposition in der Zahl azahl Zahl die potenziert werden soll aexponent Erponent aout Ergebnis divO Division durch 0 1 1 1 4 2 Header CReal h CReal h ist Wrapperklassse um einfachere Verwendung der Mathefunktionen aus der RealFunctions cpp zu erm glichen Er wurde in Teilbeleg 2 ausreichend abgehandelt 9 Juli 2003 Seite 17 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebau
93. ds des Owners bergeordneter Thread AddRef SetState CTHREAD_RUNNING true retval Execute m exitcode retval if m_owner retval worst retval m owner gt Remove this SET _NULL m owner Anschlie end l schen wir das Running Flag und heben die Instanzsicherung auf Durch das Instanzsichern wird es m glich die Referenz auf den Thread direkt bei seiner Ausf hrung zu l schen er wird sich zu gegebener Zeit selbst freigeben SetState CTHREAD_ RUNNING false Release return retval Resume startet den Thread c_hresult SC CThread Resume vaid hresult retval EK UNEXPECTED if m id 0 GetCurrentThreadId mid d if m_handle if GetState CTHREAD_TERMINATED CTHREAD_ FIRST if CloseHandle m handle m handle 0 else retval error else SetState CTHREAD_FIRST false dword i ResumeThread m handle if i MAX _DWORD retval error N else if retval lt 1 SetState CTHREAD SUSPENDED false retval 5 OK else retval S FALSI D return retval 9 Juli 2003 Seite 33 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 Suspend stellt ihn auf Pause c_hresult sc CThread Suspend void hresult retval EK UNEXPECTED
94. dsecured false Destruktor VIR CXMLNode void A FromString erstellt ein XML Objekt abgeleitet von CXMLBase aus einem String astring Dabei werden die zu dem Objekt geh renden Daten aus dem String gel scht VIR c hresult sc FromString cp CString astring ToString veranlasst ein XML Objekt sich in einen String astring zu schreiben VIR c hresult SC ToString cp CString astring Clear veranlasst ein XML Objekt seine gesamten Daten inklusive seiner Unterobjekte zu l schen VIR c_hresult SC Clear void Type liefert den genauen Typ eines XML Objekts als ganzzahligen Code zur ck VIR c_dword Se Type void Get_Name liefert den Name eines XML Objekts in einem String astring zur ck VIR c_hresult sc Gert Name ep C tring astring Set_Name setzt den Name eines XML Objekts auf den Wert eines Strings astring VIR c_hresult sc Set_Name ep _CString astring Get_Att_Val liefert das Attribut eines XML Objekts in einem String astring zur ck VIR c hresult sc Get Att Val cp CString aattr cp CString aval Set_Att_Val setzt des Attribut eines XML Objekts auf den Wert eines Strings astring VIR c_hresult SC Gert Att Val cp_CString aattr cp CString aval Get_Sub_Count liefert die Anzahl der Unterobjekte eines XML Objekts zur ck VIR c dword SC Get Sub Count void Get_Sub liefert den Pointer des Unterobjekts mit dem Index aindex zur ck VIR c hresult SC Get_Sub c_dword aindex C
95. e Schlie t das Socket und das dazugeh rige Ereignis c_hresult sc CSocket Close void hresult retval S_OK if m_ socket INVALID SOCKET if closesocket m socket 0 retval wsaerror m socket INVALID SOCKET if m_event WSA_INVALID EVENT if WSACloseEvent m event retval worst retval wsaerror m event WSA_INVALID EVENT zero amp m address sizeof m address SetState CSOCKET_ALL false return retval Setzt das Socket als Server Dazu wird zuerst die Netzwerkadresse aufgel st an die gebunden werden soll dann wird ein Event f r eingehende Verbindungen erstellt zu dem wir sp ter noch kommen und schlie lich an die Adresse gebunden und gelauscht c_hresult se CSocket Server p_CString abindaddress hresult retval Close if succeeded retval m socket socket Ab INET SOCK STREAM IPPROTO_TCP if m socket INVALID_SOCKET if abindaddress abindaddress gt ToIPAddress m address else m address in addr dwords 0 INADDR_ ANY m address family AF_INET m event WSACreateEvent if m event WSA_INVALID EVENT I N m event FD ACCEPT 0 EEN amp m address sizeof m address 0 ec SOMAXCONN 0 stein en true goto end 9 Juli 2003 Seite 28 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betr
96. e Text vorhanden ist kopiere A0 Zeichen also genau der Text nach m_string if i gt 0 m_string gt AddStr astring i L schen des Textes und des Endes der Prozessanweisung astring gt Delete 0 i 2 Setzen von retval auf S_FALSE da in diesem Fall f r das Programm nicht verwertbare Daten vorliegen else retval S FALSE return retval 9 Juli 2003 Seite 78 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 c_dword sc CXMLPI ToString cp CString astring Aufrufen der ToString Funktion vom CXMLBase Objekt hresult retval CXMLBase ToString astring Wenn o g Aufruf erfolgreich if succeeded retval Hinzuf gen der Zeichen lt und also den Anfang der Prozessanweisung zu astring astring gt AddUnichar S lt astring gt AddUnichar S Hinzuf gen von m_string also der Text der Prozessanweisung zu astring astring gt AddStr m string Hinzuf gen der Zeichen 2 und gt also den Anfang der Prozessanweisung zu astring astring gt AddUnichar S astring gt AddUnichar _S gt return retval c_dword SC CXMLPI Type void R ckgabe des Code Wertes f r ein XML Prozessanweisungsobjekt return XML PROCESSING INSTRUCTION 9 Juli 2003 Seite 79 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 2 1 5 4 Kode CXMLNod
97. e cpp include XML h CXMLNode CXMLNode ce_boolean athreadsecured CXMLBase athreadsecured Konstruktor erstellt m_name m_subnodes und m_attributes m name new CString false m subnodes new CObjectList false m attributes new CDoubleStringList false CXMLNode CXMLNode void Destruktor l scht m_name m_subnodes und m_attributes GEI NULL m_ name IT NULL m_subnodes T_NULL m attributes T 7 m nun c_hresult SC CXMLNode FromString cp CString astring Indexvariablen dword i 1 j Variable f r aktuelles Zeichen character x Variable f r Stringl nge dword str _len Variable Zeiger auf Stringobjekt f r Endtag p_CString tag_end Variable f r Offset dword offset 0 Variable Zeiger auf CXMLBase Objekt f r Unterknoten p_CXMLBase abase Variable Zeiger auf Stringobjekt f r Attributname p_CString att_name Variable Zeiger auf Stringobjekt f r Attributwert p_CString att_value Variable Boolean ob Endtag gefunden boolean found false Aufrufen der FromString Funktion vom CXMLBase Objekt hresult retval CXMLBase FromString astring Wenn o g Aufruf erfolgreich if succeeded retval str_len auf L nge von astring gesetzt str_len astring gt Length Zenn 1 Zeichen gleich lt ist if astring gt GetAt 0 lt Solange i Stringl nge und x also i tes Zeichen gt also kein Steue
98. ehler in der exploderepl Routine durch mehrfaches Auftreten von Operatoren wie sin in arcsin und e in Power zu verhindern werden diese zwischenzeitlich in lustige Ausdr cke umgewandelt um falsches Klammern zu verhinden werden zus tzliche Klammerungen durchgef hrt Function math2xmath ByVal S As String S dabs S S exploderepl S pow r True True S exploderepl S e xp False True S exploderepl S divid True True S exploderepl S tim s True True S exploderepl S arcsin arcxin False True S exploderepl S sin xin False True S exploderepl S arccos arcxos False True S exploderepl S cos xos False True S exploderepl S arctan arcxan False True S exploderepl S tan xan False True S exploderepl S ln xn False True S exploderepl S log xog True True S exploderepl S root xoot True True S exploderepl S factorial True False S pmjohndo S S exploderepl S plus True True S exploderepl S minus True True S FilterString S S FilterString S xan tan S FilterString S e S FilterString S xoot root S FilterString S xn nn S FilterString S xog log S FilterString S xan tan S FilterString S xos cos S FilterString S xin sin S FilterString S
99. eite 37 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 s x gt FindUnicode _S s if s NOT FOUND e x gt QuoteEnd s if succeeded x gt ExtractNum z s 1 e 1 fractals dword z x gt Clear Ausgabedaten warden mit Hilfe des Formelparsers berechnet retval Formula Parse ais aos decimals fractals Aus Gr nden der Systemsicherheit und Transparenz wird eine umfassende Fehler behandlung durchgef hrt if succeeded retval x gt AddAscii 200 OK else x gt AddAscii 800 ERROR m_outdata gt SetServerHeader x y retval m outdata gt WriteStr aos encoding SET_NULL x SET_NULL y SET_NULL aos else retval E_OUTOFMEMORY un ET_NULL ais else retval E_INVALIDARG return retval 9 Juli 2003 Seite 38 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 2 1 2 2 Kode Engine_Server cpp include Engine h CServer CServer p_CString aport CThread 0 wir erstellen ein neues Serversocket und lassen es an aPort lauschen wie uns gehei en m socket new CSocket if m_ socket m socket gt Server aport CServer CServer void und geben es hier wieder frei SET _NULL m socket c_hresult se CServer Execute void hresult
100. eiteten Threads berschrieben VIR c_hresult sc Execute void 002 Startet einen Thread auch aus Ruhezustand VIR c_hresult sc Resume void A 003 Versetzt einen Thread in den Ruhezustand VIR c_hresult se Suspend void 004 Teilt dem Thread mit dass er seine Ausf hrung an der n chstm glichen sicheren Stelle beenden soll VIR c_hresult sc Terminate void 005 protected Einige Methoden um Subthreads zu terminieren oder auf sie zu warten VIR c_hresult so TerminateSubThreads void 006 VIR c_hresult sc WaitForSubThreads c_dword atime INFINITE 007 VIR c_hresult SC WaitForMainThread c_dword atime INFINITE 008 public Wartet auf Beedigung des Threads VIR c_hresult SC WaitFor c_dword atime INFINITE 009 Teilt dem Thread mit dass er seine Ausf hrung an der n chst sicheren Stelle beenden soll und wartet darauf VIR c_hresult sc TerminateAndWait void 010 gibt den Exitcode des Threads zur ck VIR c_hresult SC ExitCode void A 011 9 Juli 2003 Seite 6 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 gibt den systemweit eindeutigen Identifier des Threads zur ck VIR c_dword sc Id void 7012 setzt die Priorit t des Threads VIR c_hresult sc SetPriority c_dword apriority 013 und gibt sie zur ck VIR c_dword sc GetPriority void 014 Teilt mit ob der Thread bereits
101. eitung genie t Grammatikalische Datendefinitionen des Katalogs werden in der Backus Naur Form BNF notiert Der Klient besitzt zwei Ein und Ausgabeinterfaces Das Interface zum Netzwerk nutzt ebenfalls XML und MathML f r die Ein und Ausgabedaten Das Interface zum Benutzer verwendet folgende Datendefinitionen f r die Dateneingabe Die Definition der angeforderten Rechengenauigkeit findet sich unter 1 2 2 4 3 Aufgrund der begrenzten vom Kunden zur Verf gung gestellten Zeitressourcen werden die Zahlen als Festkommazahlen implementiert die eine feste Anzahl Vor und Nachkommastellen besitzen 19 Mai 2003 Seite 9 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 1 2 2 4 1 Datendefinition der Eingabe Ausgabeschnittstelle des Klienten Der Benutzer kann in die Eingabeschnittstelle einen Text entsprechend der folgenden Definition eingeben Mit Hilfe dieser Grammatik werden ebenfalls die unterst tzten mathematischen Operation definiert denn nur diese sind g ltige Eingaben Im Grunde definiert die Grammatik einen beliebigen mathematischen Ausdruck der auf den Operationen Addition Subtraktion Multiplikation Division Wurzel Potenz allgemeiner Logarithmus Sinus Kosinus Tangens Arcussinus Arcuscosinus Arcustangenz nat rlicher Logarithmus Betrag und Fakult t basiert und die Konstanten Pi Boltzmann Konstante und Lichtgeschwindigkeit enthalten kann Der Ausdruck kann belieb
102. eld zu verlangen Yer nderungen sind nicht zul ssig Abbruch Nullsoft Install System v2 0b3 ge MathServer amp Client Triff deine wahl Select components to install MathServer MathServer Autostart Mathclient Platz ben tigt 2 2MB Abbruch Hullsoft Install System v2 063 lt Zur ck wete gt Seite 4 von 11 Anzeige der Nutzungsbedingungen unter denen das Programm benutzt werden darf Wollen sie den Server und den Klienten installieren um einen besseren Taschenrechner zu haben oder den Server automatisch beim Computerstart aufrufen Treffen Sie hier ihre Wahl Die erste Checkbox installiert den Mathserver Die Zweite richtet den MathServer Autostart ein Die Dritte Installiert den MathClient ji MathServer amp Client E ll Geben Sie hier den Pfad an in S dem Sie das Programm installieren wollen gt Standardm ig auf C Programme MathServer amp Client eingestellt Bitte das Yerzeichnis w hlen in dem der Mathserver Client installiert werden soll lt Programme Mathserver amp client Durchsuchen Platz ben tigt 2 2MB Platz verf gbar 94 6GB Abbruch Hullsoft Install System v2 063 lt Zur ck Installieren g MathServer amp Client Beendet 2 5 x Diese Anzeige erscheint wenn de x NE Installation abgeschlossen ist Die Fertig Installation wird mit Schlie en gt HHEEEEEEENNEREEEEENNNRRRREERRNNEI beendet Abbruch Nul
103. eleg 3 aoverflow ADD DWORD anumlength anumnew astring i l _S 0 anumnew aoverflow aoverflow STR _MUL 10 anumlength x x aunderflow aoverflow aoverflow DIV anumlength anumdotpos anumnew x anumnew aunderflow divO aoverflow Kommakorrektur if kompl _NOT2 anumlength anumnew anumnew Vorzeichen verarbeiten _FREE x else retval E_INVALIDARG return retval API void FC _ INT c_dword alength c_dword adotpos c_pointer aoriginal c_pointer avorkomma dword d alength 32 if adotpos lt d COPYBITS alength aoriginal d 1 adotpos avorkomma Vorkommastellen kopieren else zero avorkomma d API void FG _FRAC c_dword alength c_dword adotpos c_pointer aoriginal c_pointer anachkomma if adotpos gt 0 _COPYBITS alength aoriginal adotpos 1 0 anachkomma Nachkommast kopieren else zero anachkomma alength 4 API c boolean FC _I_DIV_MOD c_dword alength c_dword adot c_pointer aindatal c_pointer aindata2 c_pointer adiv c_pointer amod r _ boolean div0 ganzzahlige Division mit Restr ckgabe boolean aoverflow boolean kompl int S int outpos int msb_opl int msb op2 dword exactlyshift dword Oj pointer opl pointer op2 pointer temp boolean z aoverflow false kompl false opl _COPY alength aindatal op2 _COPY alength aindata2 zero adiv alength 4 zero amod alength 4 if _NE
104. elle des Objekts von CThread abgeleitet daher immer selber Platz wissen COBJECTLIST_VTBL_LEN Jede Klasse besitzt in ihren Daten an Offset 0 einen unsichtbaren Parameter den VTBL Pointer Ar zeigt auf eine Liste von Methodenadresse Wir dereferenzieren also zweimal und erhalten somit die Einsprungadresse des Threads Als Parameter bergeben wir this So wird beim ersten Resume die Routine MainThread aufgerufen Diese dient als Framework f r Execute was dann beliebig berschrieben werden kann m handle CreateThread 0 0 VTBL ITEM COBJECTLIST VTBL LEN this CREATE_SUSPENDED m id m subthreadsevent CreateEventW 0 true true 0 m exitcode S FALSE SetState CTHREAD SUSPENDED CTHREAD FIRST true CThread CThread void Terminate WaitFor loseHandle m handle C m handle D C m LoseHandle m subthreadsevent subthreadsevent 0 if m_owner m _owner gt Remove this SET_NULL m owner 9 Juli 2003 Seite 32 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 c_hresult se CThread MainThread void hresult retval Im Mainthread sichern wir zuersteinmal mit AddRef die Instanz setzen dann das Running Flag und f hren die Benutzerdefinierte Execute Funktion aus Wenn diese beendet wurde so entfernen wir den Thread aus der Liste der laufenden Threa
105. en return XML BASE 9 Juli 2003 Seite 76 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 c_hresult sc CXMLBase Get Text cp _CString astring R ckgabe des Textes eines XML Objekts return astring gt FromStr m string c_hresult sc CXMLBase Ger Text cp _CString astring Schreiben des Textes eines XML Objekts return m string gt FromStr astring 1 2 1 5 2 Kode XMLFunction cpp include XML h API c_hresult SC xml_type p CString astr rp_CXMLBase abase Variable f r XML Knotenobjekt p_CXMLNode node 0 Variable f r XML Prozessanweisungsobjekt p_CXMLPI pi 0 hresult retval S_OK L schen von abase abase 0 Erstellen der Variable pi pi new CXMLPI false Test mittels FromString ob astr ein Prozessanweisungsobjekt ist Zenn astr Prozessanweisungsobjekt ist Schreiben von pi auf abase if pi gt FromString astr S_OK abase pi Sonst L schen von pi else SET _NULL pi Erstellen der Vaiable node node new CXMLNode false Test mittels FromString ob astr ein Knotenobjekt ist Wenn astr Knotenobjekt ist Schreiben von node auf abase if node gt FromString astr S_OK abase node Sonst L schen von node Setzen von retval auf S_FALSE da in diesem Fall f r das Programm nicht verwertbare Daten vorliegen else SET_NULL node retval S_FALS
106. en exakten inneren berlegungen vertraut weshalb er sich au erstande sah sie 1 1 zu realisieren Das Modul dient der Umwandlung der blichen Infixschreibweise mathematischer Ausdr cke in g ltiges MathML Zu verwenden ist die Routine math2xml welche einen solchen Infixausdruck erh lt und das MathML Pendant ausgibt sowie eine Liste IDS mit allen Unterausdr cken des Infixausdrucks f llt damit diese dann im Teilergebnisfenster angezeigt werden k nnen Function math2xml ByVal S As String ByRef IDS As String As String 9 Juli 2003 Seite 22 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 2 Kommentierte Modulquelltexte 1 2 1 MathServer 1 2 1 1 Modul Basics 1 2 1 1 1 Kode CBasics cpp include BASIC_Classes h Konstruktor athreadsecured erzeugt Sperrmutex wird in dieser Anwendung nicht ben tigt CBase CBase c_boolean athreadsecured m refcount 1 m state 0 if athreadsecured l m mutex CreateMutexW 0 false 0 lse m mutex INVALID HANDLE_ VALUE Destruktor CBase CBase void if m mutex INVALID HANDLE VALUE CloseHandle m mutex m mutex INVALID HANDLE VALUE gibt den aktuellen Wert der Statusvariable zur ck c_dword SC CBase State void return m state pr ft die Statusvariable auf eine bestimmte Bitkombination c_boo
107. enes Ergebnis aus Daten von E und untergeordneten Teilergebnissen von E mit Hilfe mathematischer Funktionen Erzeuge Knoten A und setze Daten von A auf Ergebnis von E End End 1 2 2 7 6 Fehlerbehandlung Prozess fehlerbehandlung Datum 02 05 2003 Bearbeiter Thomas Weise Voraussetzungen Fehler werden mit den COM OLE spezifischen Fehlerkodes idendifiziert begin finde Fehler in Fehlertabelle if Fehler gefunden then begin gib Fehlertext aus end else begin gib Fehlermeldung aus dass unbekannter Fehler aufgetreten ist end end 19 Mai 2003 Seite 22 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 1 3 Definition der Nutzerschnittstelle Das System besitzt nur ein Fenster welches jedoch ber mehrere Registerkarten verf gt Das Fenster die Registerkarten und alle Steuerelemente haben fest vorgegebene nicht vom Benutzer nderbare Gr en Die hier gezeigten Screenshots sind in Originalgr e dargestellt 1 3 1 Ein und Ausgabeger te Vorgesehene Eingabeger te sind Tastatur und Maus die Ausgabe erfolgt ber den Bildschirm wobei bestimmte Daten aber auch gedruckt werden k nnen 1 3 2 Layoutentwurf Alle Bedienelemente verwenden die auf dem jeweiligen PC eingestellten Systemfarben 1 3 2 1 Registerkarte Formeleingabe BER Text Konstante einf gen gt v Sonderzeichen einf gen gt v V Benutzerdefinierte Genauigkeit Text S
108. ength boolette true berlauf pr fen else boolette SHL _ N alength s aoutdata aoutdata Korrekturschiebung if kompl _NOT2 alength aoutdata aoutdata Vorzeichen einarbeiten _FREE opl _FREE op2 return boolette 9 Juli 2003 Seite 53 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 API c_boolean FC boolean aoverflow boolean kompl int Ss int outpos int msb_opl int msb_op2 dword exactlyshift dword ep pointer opl pointer op2 pointer temp aoverflow false kompl false opl _COPY op2 COPY alength aindatal alength aindata2 zero aoutdata alength 4 Bertr ge der Operanden werden gebildet und das zu erwartende Vorzeichen ermittelt if _NEGATIVE alength opl _NOT2 alength opl opl kompl true if _NEGATIVE alength op2 _NOT2 alength op2 op2 kompl kompl msb_opl MSB alength opl msb_op2 MSB alength op2 divO msb_op2 MOT FOUND if msb_opl NOT_FOUND amp amp div0 if _CMP alength opl op2 amp CND MATCH _INS_BIT alength adot 1 aoutdata else s outpos exactlyshift o if msb_opl gt msb_op2 else msb_opl msb_op2 adot S DIV c_dword c_dword c_pointer c_pointer c_pointer r boolean r boolean aunderflow berechnet aindata1 aindata2 op1 aind
109. epr sentiert eine Zeichenkette beliebige L nge Diese wird im Speicher als Unicodestring aufbewahrt CString leitet sich ebenfalls von CArray ab verf gt jedoch ber eine viel weitere Methodenpalette Die Members der Klasse entsprechen der Definition von CArray Methoden Auch die Methoden SetLength Length DataPtr und Clear entsprechen denen von CArray GetAt und SetAt arbeiten mit Unicodezeichen Viele Methoden k nnen entweder mit ASCII oder Unicode Strings bzw CString Objekten als Parameter aufgerufen werden Wir stellen dies durch ein TYP im Namen dar was entsprechen durch Ascii Unicode oder Str ersetzt werden m sste Bei Ascii Funktionen gibt es stets den zus tzlichen Parameter acodepage der den Index einer zur bersetzung zu verwendenden Codepage enth lt hnliches Verhalten gilt f r Zeichenparameter hier ersetzt CHR entweder Unichar oder Asciichar F r die jeweiligen Parameter schreiben wir DAT als Datentyp Dadurch wird es m glich die Funktionen mit beliebiger Zeichenbreite einzusetzen Speziell f r die Dekodierung der empfangenen zu senden Daten wurden From und ToBuffer Routinen entwickelt die sowohl ASCII als auch Unicode mit sowohl Big und LittleEndian einlesen und schreiben kann Nach XML Spezifikation ist dies n mlich zul ssig F r einige Funktionen die Suchoperationen implementieren stet jeweils eine Version zur Verf gung die vom Beginn des Strings sucht und eine die am Ende beginnt Dies k rzen wir mi
110. er Teilbeleg 3 1 1 1 5 Modul XML Parser Zust ndige Ren Kreiner Roland Fischer Das Modul XML Parser dient der Umwandlung eines Strings mit XML Daten in eine Baumstruktur zum gezielten Zugriff auf die einzelnen Knoten und ihrer Attribute Ebenso wird das Aufbauen eines XML Baumes unterst tzt und das Generieren eines Strings aus diesem 1 1 1 5 1 Header CXMLBase h CXMLBase ist die grundlegende Klasse des XMLParsers Hier werden die Prototypen f r das prinzipielle Verhalten gelegt ifndef CXMLBASE USED define CXMLBASE_ USED include BASICS h CLASSAPI CXMLBase DEFINE TYPES CXMLBase CLASSAPI CXMLBase public CBase public Konstruktor athreadsecured hat in dieser Anwendung keine Bedeutung CXMLBase c_boolean athreadsecured false Destruktor VIR CXMLBase void A FromString erstellt ein XML Objekt abgeleitet von CXMLBase aus einem String astring Dabei werden die zu dem Objekt geh renden Daten aus dem String gel scht VIR c hresult SC FromString cp CString astring Ai ToString veranlasst ein XML Objekt sich in einen String astring zu schreiben VIR c hresult SC ToString cp CString astring Clear veranlasst ein XML Objekt seine gesamten Daten inclusive seiner Unterobjekte zu l schen VIR c_hresult sc Clear void Type liefert den genauen Typ eines XML Objekts als ganzzahligen Code zur ck VIR c dword sc Type void Get_Text liefert
111. eren Parametern R ckgabewerten implementiert Die jeweilige Konfiguration ist dem entsprechenden Header File zu entnehmen Das prinzipielle Verhalten ist jedoch stets gleich Gibt einen Zeiger auf den Speicher zur ck in dem die Arrayeintr ge abgelegt sind VIR cp ITEM SC DataPtr void F gt einen Eintrag aitem der Liste hinzu gibt optional dessen Index in aindex zur ck VIR c_hresult sc Add c_ITEM aitem p_dword aindex 0 Setzt den Eintrag mit dem Index aindex auf den Wert aitem vergr ert die Liste wenn notwendig VIR c_hresult sc SetAt e_dword aindex c_ ITEM aitem Liefert den Eintrag mit dem Index aindex in aitem zur ck VIR c_hresult sc GetAt e_dword aindex r_ ITEM aitem L scht den Eintrag mit dem Index aindex VIR c_hresult sc Delete c_dword aindex F gt an der Stelle aindex den Eintrag aitem ein VIR c_hresult sc Insert ce_dword aindex c_ITEM aitem 23 Juni 2003 Seite 6 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 Sucht nach einem Eintrag mit dem Wert von aitem liefert dessen Index bzw NOT FOUND zur ck VIR c_dword sc Find c_ITEM aitem Entfernt alle Eintr ge mit dem Wert aitem VIR c_hresult sc Remove c_ITEM aitem 23 Juni 2003 Seite 7 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 1 2 1 5 CString Klasse abgeleitet von CBase CString r
112. ers in der Woche vor Abgabe von TB3 mussten einige in TB2 geplante Eigenschaften des Programms kurzfristig ge ndert gek rzt werden da wegen des Zeitdrucks Thomas Weise zur Programmierung einiger Funktionen einspringen musste Wegen unterschiedlicher Programmiervorkenntnisse entwickelte er jedoch f r die Module MathParser und XML Verarbeitung zum Teil v llig andere Algorithmen als in TB2 vorgesehen Die konkreten nderungen gegen ber TB2 sind folgende Das Modul MathParser und die Funktion TreeToXMLString aus dem Modul XML Vearbeitung werden durch das Modul MathStuff ersetzt Die Klasse MTreeNode und die Funktion DrawTree entfallen Das Modul Kommunikation wird in den MathClient Kern Formular Hauptfenster integriert da die Funktion mithilfe des ActiveX Steuerelementes mswinsck ocx realisiert wird Folgende VB Options sind in allen Modulen enthalten Option Base 1 Erstes Element in Feldern hat Index 1 statt 0 Option Compare Text VB Funktion Instr vergleicht Text ohne Gro Kleinschreibung zu ber cksichtigen Option Explicit Variablendeklaration ist erforderlich Ikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Formular Hauptfenster Module MathClient Kern amp Kommunikation aus TB2 Das Hauptfenster ist das Startobjekt des Projekts und wird permanent angezeigt behandelt VB blich nur Ereignisse der enthaltenen Steuerelemente Jm ganzen Hauptfenster g ltige V
113. erst tzt Des Weiteren wird der neue und zuk nftige Standard f r Datenversand und Speicherung XML verwendet F r den Umgang mit den mathematischen Formeln wird der Standard f r mathematische Formeln MATH ML verwendet Hierbei handelt es sich um eine spezielle XML Anwendung Die Daten f r das Programm k nnen mit jeder beliebigen XML bzw MATH ML Applikation erstellt und editiert werden Sowohl bei XML als auch bei MATH ML handelt es sich um internationalisierte plattformunabh ngige Standards Der Versand bzw der Empfang der Daten wird http kompatibel organisiert Deshalb k nnen die Daten mit jeder beliebigen HTTP f higen Applikation bertragen werden Es ist auch m glich Daten direkt an einen Webbrowser zu schicken sofern dieser XML bzw MATH ML unterst tzt F r die bertragung der Daten wird das Standardprotokoll zur Daten bertragung TCP IP verwendet Dieses Protokoll wird wie die meisten genutzten Standards von allen blichen Plattformen unterst tzt Diese Tatsachen garantieren ein H chstma an Flexibilit t 3 5 Portabilit t Die Portabilit t des Servers ist ziemlich eingeschr nkt da dieser Teil des Programms f r das Betriebssystem Windows entwickelt wird Der Server verwendet direkt Funktionen der Windows API da durch die Benutzung dieser Funktionen ein H chstma an Leistungsf higkeit erreicht werden kann Und dieses H chstma an Effizienz ist das Ziel des Projekts Deshalb ist eine Konver
114. es Mal MSB Block test eax eax Setzt das zeroflag wenn die Oderverkn pfung der Bits von bitweisen eax amp amp eax 0 jnz found gt sobald die erste 1 in einem 32 Bit Block erscheint sprung zu found loop looper sonst weiter bei looper ecx 1 jmp ende2 wenn Schleife bis zum Ende l uft LSB erreicht liefert die Funktion false found Suche nach der 1 innerhalb des 32Bit Blockes dec ecx Offset ermitteln ecx auf MSB des 32Bit Block zeigen lassen Addressierung in 32Bit Bl cken welcher das MSB der Zahl hat Addressierung in Bytes mov ebx ecx ebx ergibt sich aus ecx shl ebx 5 ebx 32 MSB Position der Zahl Addressierung in Bits bsr ecx eax sucht innerhalb des 32Bit Blockes nach dem MSB f ngt bei Bit 31 an und speichert Index in ecx Bitaddressierung wird kein Bit gefunden ist Zeroflag 1 jz ende2 und Sprung zu ende2 add ebx ecx sonst Bitindex ermitteln ende2 cld wegen std ende mov eax ebx Bitindex wird auf R ckgabewert eax geschafft 9 Juli 2003 Seite 45 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 API c_dword _ asm mov test jz mov mov cld looper lodsd test jnz loop jmp found sub mov shl Dat JZ add ende mov API c_dword _ asm mov cmp jz mov test jz mov mov mov dec shl add add std lodsd mov dec cmp TE jg test jz sub std looper lodsd mov cmp jb ja sub
115. etreuer Lutz Neugebauer Teilbeleg 2 1 2 1 3 CBase Klasse Grundklasse Die Grundklasse von der sich alle anderen Klassen ableiten ist CBase Hier werden Grundfunktionen wie Referenzz hlung implementiert Members m_state dword 32Bit f r Zustand Bit 31 reserviert true wenn im Destruktor m_refcount dword Referenzz hlung m_mutex dword evtl Thread Synchronisation Methoden Die folgenden drei Methoden sind f r den Zugriff auf die Statusvariable des Objekts angelegt hier k nnen sp ter beliebige boolesche Werte gespeichert werden Bit 31 ist reserviert f r die Verwendung ausschlie lich in CBase um Threadsicherheit der Referenzz hlung zu gew hrleisten astate ist stets der zu setzende testende Zustand aset gibt an ob er gesetzt oder gel scht werden soll VIR c_dword sc State void VIR c_ boolean SC GetState c_dword astate VIR c_dword sc SetState c_dword astate c_boolean aset Die folgenden drei Methoden f hren die Referenzz hlung der Objekte durch AddRef signalisiert eine neue Referenc Release eine freigegebene Referenz VIR c_dword sc RefCount void VIR c_dword sc AddRef void VIR c_dword sc Release void Enter und Leave sind Methoden die die Threadsicherheit gew hrleisten Sie finden in der Regel keinen direkten Gebrauch VIR void sc Enter void VIR void sc Leave void 23 Juni 2003 Seite 5 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbele
116. etreuer Lutz Neugebauer Teilbeleg 3 i 0 Solange i 1 str_len und x aktuelles Zeichen lt while i 1l lt str_len amp amp x astring gt GetAt i _S lt A0 inkrementieren also alle Zeichen bis lt berspringen itty Wenn i gt 0 also wenn Text zwischen ffnendem und schlie endem Tag vorhanden ist if i gt 0 Offset um i also um L nge des Textes erh hen offset i A0 Zeichen also genau der Text von astring zu m_string hinzuf gen m string gt AddStr astring i A0 Zeichen also wieder der Text von astring L schen astring gt Delete 0 i Zenn x gleich lt if x lt Zenn tag_end in astring an Position 0 vorhanden ist if astring gt IsAtStr tag_end 0 L schen von L nge von tag_end Zeichen also im Endeffekt genau tag_end astring gt Delete 0 tag end gt Length found wird auf true gesetzt da schlie ender Tag schon gefunden wurde found true else abase 0 Aufrufen der Funktion xml_type mit den Parametern astring also der Reststring und abase XMLBase Objekt f r Unterknoten Die Funktion bestimmt ob Unterknoten vorhanden sind indem sie rekursiv die verschiedenen Em String Routinen der Objekte aufruft und vorhandene Unterknoten in abase zur ckgibt retval xml type astring abase Wenn Aufruf erfolgreich u if retval S_OK m_offset des abase Objekts also des Unterknotens wird auf den Wert von offset geset
117. euer Lutz Neugebauer Teilbeleg 3 retval wsaerror end if failed retval Close return retval Wartet auf eine eingehende Verbindung und akzeptiert sie Als Abbruchbedingung kann die Callback Routine aterminateproc angegeben werden die aller 15ms mit aparam aufgerufen wird Gibt sie true zur ck so wird das Warten auf eingehende Verbindungen abgebrochen c_hresult se CSocket Accept rp_CSocket anewsock c_pointer aterminateproc c_dword aparam hresult retval S OK dword waitres anewsock 0 if m_socket l INVALID SOCKET if GetState CSOCKET_SERVER if aterminateproc so lange Abbruchbedingung nicht erf llt while CAST boolean method aterminateproc aparam maximal 15ms warten auf eingetroffene Verbindung while waitres WSAWaitForMultipleEvents 1 amp m event true 15 true WAIT_IO COMPLETION wenn neue Verbindung gehe zu ok ansonsten erst mal einen anderen Thread ranlassen if waitres NSA WAIT EVENT Di goto ok SwitchToThread retval S FALSE goto end 1 else list terminateproc nicht angegeben so kann ewiglich gewartet werden while waitres WSAWaitForMultipleEvents 1 amp m event true WSA_INFINIT true WAIT_IO COMPLETION FJ x ok if waitres WSA WAIT EVENT 0 neues Warten erm glichen if WSAResetEvent m_event if retval OK
118. euer Lutz Neugebauer Teilbeleg 3 Release verringert den Referenzz hler um eins und gibt das Objekt frei wenn 0 erreicht wird Diese Methode ist neben AddRef einer der Dreh und Angelpunkte unserer Objekthierarchie und deshalb auch threadsicher ausgelegt c_dword dword retval 0 dword destruct 0 _asm Zuerst testen wir ob der Referenzz hler bereits lt 0 ist In diesem Fall wird der Destruktor mit Sicherheit bereits evil in einem anderen Thread oder Fiber bereits ausgef hrt und wir verlassen die Routine sofort SC CBase Release void mov ecx this mov eax ecx 8 cmp eax 0 jg ok xor eax eax jmp res Indem wir 1 auf eax schaffen und mit xadd addieren xadd tauscht vor Addition in eax steht dann der alte Wert der des Referenzz hlers k nnen wir durch nachfolgendes Dekrementieren von eax feststellen ob wir den Destruktor ausl sen m ssen Aus der Gleichlaufsicht betrachtet kann folgendes geschehen ein Release f hrt die xadd Routine die zum Destruktor f hrt genau eine Instruktion vor oder nach unserem xadd aus dann erhalten entweder wir oder er 1 aber nur einer 0 Wird genau eine Instruktion davor das xadd des AddRef ausgef hrt so wird kein Destruktor ausgef hrt und AddRef gibt 2 zur ck was stimmt Das Objekt wird ja nicht freigegeben Erfolgt AddRef s xadd genau eine Instruktion danach so erh lt AddRef beim xadd 0 und wird entsprechend reagieren Das Objekt wird
119. folgt nach der MathML Syntax Die einzelnen Ergebnisse Endergebnis und Zwischenergebnisse werden je in lt cn gt tags lt cn gt lt cn gt geklammert Der lt cn gt tag als einiger zul ssiger Daten bergabe Tag erf hrt eine id Nummer als Attribut lt cn id ganze positive Zahl gt Die id nummer stellt die Verkn pfung zwischen dem jeweiligen Ergebnis und dem zugeh rigen Berechnungsabschnitt dar Tabelle 1 2 8 2 lt xml pi gt XML Processing Instructions lt xml dt gt XML Comment lt xml mathml gt XML Comment lt xml math gt lt math gt lt xml cnc gt lt math gt lt xml cn gt lt en id lt zfolge gt Ta lt zahl gt lt cn gt lt xml cnc gt lt xml cn gt lt xml cn gt lt xml cnc gt lt xml answer gt lt xml pi gt lt xml dt gt lt xml mathml gt 23 Juni 2003 Seite 29 von 29 Softwarepraktikum 2003 MathServer Projektdokumentation Teilbeleg 3 Teamleiter Thomas Weise Mitglieder des Projektteams Roland Fischer Ren Kreiner Rico Ro berg Thomas Ziegs Praktikumsbetreuer Dipl Inf Lutz Neugebauer Chemnitz den 09 07 2003 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 Programmdokumentation 1 1 Definition der Modulinterfaces 1 1 1 MathServer Die Module des MathServers sind in VisualBasic programmiert 1 1 1 1 Modul Basics Zust ndiger Thomas Weise Das Modul Basics stellt als Grund
120. g 2 1 2 1 4 CArray Klasse und abgeleitete au er CString abgeleitet von CBase Eine wichtige Gruppe der Klassen in unserem Projekt ist die derjenigen Klassen mit abz hlbaren Unterelementen Das grundlegende Verhalten von diesen wird in CArray implementiert leitet sich ab von CBase Die Nachkommen von CArray sind CDWordList ein dynamischer Array von DWORDSs 4 Byte CObjectList ein dynamischer Array von Instanzen von CBase abgeleiteter Klassen CStringList und CDoubleStringList Listen von CStrings und CString Paaren CList ist ein Array von Records beliebiger Gr e daher besitzt jedes Objekt noch einen Membereintrag f r den Speicherbedarf der Eintr ge Es wird angenommen dass die Eintr ge in den Arrays vom Typ ITEM sind Members m_length dword L nge des Arrays in Elementen m_memlength dword L nge der reservierten Speicherstelle in Elementen m_data p_ITEM Zeiger auf reservierte Speicherstelle Methoden Die folgenden Methoden wurden direkt in CArray implementiert Setzt die L nge der Liste auf alength wird in der Regel nicht direkt aufgerufen Verwendet einen Wachstumsalgorithmus um die Geschwindigkeit zu optimieren VIR c_hresult sc SetLength c_dword alength Gibt die L nge des Arrays wieder VIR c_dword sc Length void L scht den Inhalt der Liste VIR c_hresult sc Clear void Die folgenden Routinen wurden Klassenabh ngig implementiert d h dass z B eine CStringList die Methoden mit and
121. gezeigt Mit den Schaltfl chen N chstes Teilergebnis und Vorheriges Teilergebnis wird durch alle m glichen Teilergebnisse durchgeschalten Mit Hilfe der Schaltfl chen Aktuelles Teilergebnis drucken und Alle Teilergebnisse drucken k nnen jeweils auch Teilergebnisse ausgedruckt werden 19 Mai 2003 Seite 24 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 1 3 2 3 Registerkarte Optionen BER m Serverinformationen Name Text3 IP Adresse Textd Port Text Formeleingabe Ergebnisse Optionen Beenden In die Textboxen Text3 Text4 und Text5 werden Informationen die zur Kommunikation mit dem Serverteil des Systems notwendig sind eingetragen 1 3 3 Zustandsdiagramm Start Optionen Beenden Beenden Berechnen Formel eingeben Ergebnisse ansehen Formeleingabe Ergebnisse Formeleingabe 19 Mai 2003 Seite 25 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 2 Spezifikation der operationellen Anforderungen 2 1 Operationelle Anforderungen an die Daten und die Datenbasen F r die Absch tzung des Speicherbedarfs der beiden Programme der Applikation MathServer werden folgende vereinfachende Annahmenden getroffen Zeichenketten im MathServer sind dynamisch ihre L nge ist nahezu beliebig Sie werden als Objekte dargestellt Die Objekte beinhal
122. gth ain pointer b12 COPY alength ain pointer b21 pointer b22 pointer temp pointer aone zero aout alength 4 if _IZ alength b11 sinO 0 l if NEGATIVE alength b11 _NOT2 alength b11 b11 Betrag vom op bilden _NOT2 alength b12 b12 kompl true aone NEW alength _INS_BIT alength adotpos 1 aone b21 COPY alength aone b22 COPY alength aone temp NEW alength _ADD alength aout ain aout do Berechnung nach Formel if toggle _NOT2 alength temp temp overflow ADD alength aout temp aout toggle toggle if overflow toob MUL alength adotpos b11 b12 b11 aunderflow if toob toob MUL alength adotpos b11 b12 b11 aunderflow i f toob _ADD alength b22 aone b22 toob MUL alength adotpos b21 b22 b21 aunderflow if toob _ADD alength b22 aone b22 toob MUL alength adotpos b21 b22 b21 aunderflow if toob zero temp alength 4 _DIV alength adotpos b11 b21 temp aunderflow divO 9 Juli 2003 Seite 63 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 Schleife l uft bis sich Ergebnis nicht mehr ndert while toob false amp amp _IZ alength temp amp amp overflow if kompl NOT2 alength aout aout Vorzeichen vom op einbringen FREE b21 _FREE b22 _FREE temp _FREE e FREE b11 _FREE b12 re
123. h aout_h aout_h toggle toggle overflow ADD alength aout aout_h aout if overflow _MUL alength adotpos xpot xpot_h Spot aunderflow toob ADD alength gaza gaza_h gaza 9 Juli 2003 Seite 72 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 irf ltoob _DIV alength adotpos xpot gaza aout_h aunderflow divO toob IZ alength aout_h FREE aout_h else op gt 1 Berechnung nach Formel m erg NEW alength move aout pi_2 alength 4 aout_h _ NEW alength _DIV alength adotpos aone op aout_h aunderflow divO while toob amp amp overflow Schleife l uft bis sich Ergebnis nicht mehr ndert toggle toggle if toggle _NOT2 alength aout_h aout_h overflow _ADD alength aout aout_h aout if overflow toob MUL alength adotpos xpot xpot_h Spot aunderflow if toob _ADD alength gaza gaza_h gaza toob MUL alength adotpos xpot gaza m erg aunderflow if toob _DIV alength adotpos aone m erg aout_h aunderflow divO toob IzZ alength aout_h Wel SE EE A a en if kompl _NOT2 alength aout aout Vorzeichen von op einbringen _FREE aone _ FREE op return overflow T API c boolean FC _WURZEL c_dword alength c_dword adotpos CG pointer azahl c_pointer awurzel c_pointe
124. h werden bin re und rechts sowie lings un re Ausdr cke mit einem gemeinsamen Algorithmus abhandelbar s wird dadurch gr er explodiert Function explode ByVal S As String ByVal plc As String ByVal I As Long ByVal L As Boolean ByVal R As Boolean As String Dim j As Long Dim k As Long Dim x As String Dim Y As String If L Then j leftsond S I 1 Else Tse Le T Eng IE If R Then I InStr allowed amp Mid S I 1 lt gt 0 Then k rightsond S I 1 H un WI rightsond S I A If I om 0 H D sbb CS D Q H Hh If J gt 0 Then x Left S j Else x Im End IE 9 Juli 2003 Seite 102 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 If k lt Len S Then Y Right S Len S k 1 Else Y mm k k 1 End I Se zk g ple s amp Mid S J r ip k gJ 1 amp eX explode S End Function explode replace wandelt alle Operatoren der Art src mit explode um Function exploderepl ByVal S As String ByVal src As String ByVal rpl As String ByVal L As Boolean ByVal R As Boolean As String Dim I As Long Dim x As String I InStr S src while I gt 0 If L And R Then x S explode Left S I 1 amp x amp Mid S I Len src rpl I L R I InStr S src Wend exploderepl S End Function do abs verarbeitet die Betragsklammern Function
125. hnen k nnen VIR void sc Enter void VIR void Se Leave void die operatoren new und delete werden berschrieben um die C Wrapper f r die Windows API zu umgehen und eigene verwenden zu k nnen c pointer operator new unsigned int asize void operator delete void amemory private dword m state 32 Bit Statusvariable dword m _refcount Referenzz hler dword m mutex eine Mutex um das Objekt evtl zu sperren siehe Enter Leave define CBASE_VTBL_LEN 9 endif 9 Juli 2003 Seite 3 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 1 1 1 2 Header CSocket h Im Sockets Modul wird die Netzwerkf higkeit der Applikation implementiert ifndef CSOCKET_USED define CSOCKET_USED include K BASIC_DEFINITIONS h include Bes BASIC_TYPES N include ee BASIC_ROUTINES HN include CSTREAM h include CSTRING h define CSOCKET_SERVER 1 define CSOCKET_CLIENT 2 define CSOCKET_ALL CSOCKET_SERVER CSOCKET_ CLIENT define CSOCKET_MAX CSOCKET_CLIENT CLASSAPI CSocket DEFINE TYPES CSocket CLASSAPI CSocket public CStream l public Konstruktor und Destruktor CSocket ce_boolean athreadsecured false VIR CSocket void gibt wieder ob ein Socket ge ffnet ist VIR c_boolean se IsOpen void
126. i dem Verhaltensmodell ist zu beachten dass sowohl der Klient als auch der Server XML Daten verarbeiten m ssen Dies wird prinzipiell nach dem gleichen Schema ablaufen beide m ssen sowohl XML Daten zerlegen als auch erzeugen Da beide Teile der Applikation denselben Prozess benutzen aber auf verschiedenen Rechnern in verschiedenen Instanzen taucht er sowohl bei den Diagrammen des Math Client als auch des Math Servers auf Im Folgenden werden Teilmodelle des Klienten mit C und des Servers mit S gekennzeichnet 1 2 2 2 1C Teilmodell Benutzerdateneingabe Diagramm 1 3 Dateneingabe Eingabe schnittstelle Eingabetext Matheaufgabe_mZ en XML Matheaufgabe oi 4 _ Erzeugung 1 2 2 2 2C Teilmodell Serverergebnis Diagramm 1 4 Ergebnis_mZ XML d4 Zerlegung Ergebnis_oZ Ausgabetext p Eingabetext A Bildschirmausgabe Darstellungs prozess 19 Mai 2003 Seite 5 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 1 2 2 2 1S 2S 3S Teilmodelle ung ltige_Daten Rechenaufgabe_0Z Rechenaufgabe_mZ Die internen Abl ufe innerhalb der Serveranwendung sind bei den Eingabef llen Rechenaufgaufgabe_oZ und Rechenaufgabe_mZ ann hernd gleich So k nnen sich Eingabedaten sowohl bei der XML Verarbeitung der Formelverarbeitung als auch bei Berechnung der mathematischen Operationen als fehlerhaft heraus
127. ick Index As Integer Dim a As Long SB As String CT As String CT Combol Index Text a InStr CT If Not a 0 Then Konstante oder Operator aus ComboBox ermitteln SB Mid CT a 1 Len CT a 1 9 Juli 2003 Seite 93 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 L und im Eingabefeld einf gen If Text1 SelStart 0 Then Text1 Text Texti Text amp amp SBa TT Else Texti Text Left Text1 Text Textl SelStart amp amp SB amp amp Mid Text1 Text Textl1 SelStart 1 End If End If End Sub Ikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Localhost eintragen Tab Optionen Private Sub Command9 Click Text3 Text Me Winsock1 LocalHostName Text5 Text 20000 End Sub Ikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk nderung an der Stellenzahl in zu sendende Daten einf gen Private Sub Text2_Change Text11 Text GET solution decimals amp Text2 Text amp fractals amp Text2 Text amp BTTP L 1 End Sub tkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk hier wird die Zeit bis zum Eintreffen der Serverantwort abgesch tzt auf Basis vorher gemessener Zeiten der Anzahl der Operatoren im gesendeten Ausdruck und der gew nschten Stellenzahl wunderbar
128. iertes Arbeiten auf einer netzwerkgest tzten Hauptkodebasis Direktzugriff auf das Betriebssystem selbstst ndiges Implementieren weltweit anerkannter Standards und der Entwicklung eines Client Server Systems wurde ein Projekt geschaffen dessen Wertigkeit den Anforderungen des Kunden der Gruppendynamik sowie dem durchaus wissenschaftlichen Rahmen des Softwarepraktikums gen ge tut 9 Juli 2003 Seite 110 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 Roland Fischer Rene Kreiner Rico Ro berg Thomas Weise Thomas Ziegs SWP11 2003 9 Juli 2003 Seite 111 von 111 Handbuch MathServer amp Client Inhaltsverzeichnis Vorwort Systemanforderungen 2 1 MathServer Mindestanforderung 2 2 Mathserver Empfohlen 2 3 MathClient Mindestanforderung Installation MathServer 4 1 Bedienung 4 2 Unterst tze Funktionen MathClient 5 1 Bedienung 5 2 Unterst tze Funktionen Deinstallation 10 11 1 Vorwort Dieses Programm entstand w hrend eines Softwarepraktikums an der Technischen Universit t Chemnitz unter der sachkundigen F hrung des Dipl Inf Neugebauer Wir unterst tzen viele weltweit anerkannte Standards wie MathML XML HTTP und TCP IP um eine allgemeing ltige Plattform f r Berechnungen zu bieten Wir von MathServer Development haben uns zum Ziel gesetzt unseren Nutzern das bestm gliche Rechenerlebnis zu bieten 2 Systemvoraussetzungen
129. ig geklammert werden Das Startsymbol ist lt ausdruck gt Tabelle 1 4 Element Strukturbeschreibung lt konst gt fp P KE p e lt ziffer gt LOPETTI TE LS Le 7 8 9 lt dztrenn gt Benutzereinstellungsabh ngig lt vzeich gt e lt zfolge gt lt ziffer gt lt ziffer gt lt zfolge gt lt zahl gt lt vzeich gt lt zfolge gt lt vzeich gt lt zfolge gt lt dztrenn gt lt zfolge gt lt objekt gt lt zahl gt lt konst gt lt op gt ae a Ra lt re gt lt objekt gt lt op gt lt objekt gt lt ausdruck gt lt op gt lt objekt gt lt objekt gt lt op gt lt ausdruck gt lt ausdruck gt lt op gt lt ausdruck gt lt op2 gt m lt powu gt lt objekt gt lt op2 gt lt objekt gt lt objekt gt lt op2 gt lt ausdruck gt lt ausdruck gt lt op2 gt lt objekt gt lt ausdruck gt lt op2 gt lt ausdruck gt lt op3 gt sin cos an arcsin arccos arctan In lt trig gt lt op3 gt lt objekt gt lt op3 gt lt ausdruck gt lt log gt lt objekt gt log lt objekt gt lt objekt gt log lt ausdruck gt lt ausdruck gt log lt objekt gt lt ausdruck gt log lt ausdruck gt lt fak gt lt zfolge gt lt ausdruck gt lt betrag gt lt objekt gt lt ausdruck gt lt ausdruck gt lt objekt gt lt re g
130. igken seine nativen Module tangierend priorisiert bearbeiten muss Attribute VB Name MathStuff Option Base 1 Erstes Element in Feldern hat Index 1 statt 0 Option Compare Text Funktion Instr vergleicht Text ohne Gro Kleinschreibung zu ber cksichtigen Option Explicit Variablendeklaration ist erforderlich einige Konstanten ben tigt zur Verarbeitung Private Const num 0123456789 allowed abcdefghijklmnopqrstuvwxyz num Public SyntaxError As Boolean Pr ft ob ein angegebener Ausdruck eine g ltige Zahl darstellt Function isnumber ByVal S As String As Boolean Dim b As Boolean Dim I As Long b False I 1 I Left S 1 Or Left S 1 Then Increase I For I I To Len S If InStr num Mid S I 1 0 Then GoTo ende Next b True ende isnumber P End Function parst einen xmath Ausdruck siehe unten zu einer Formel zur ck damit dese dann im Teilergebnisse Fenster dargestellt werden kann Function reparse ByVal S As String As String Dim Dim Dim Dim Dim As Long As String As Long As Long As Long IO ei H While Left S 1 S Mid S 2 Len S 2 Wend I Instr S ZO I gt 0 Then heftis ZE e 1 Mid S I UK rn Il H While Left S 1 S Mid S 2 Len S 2 Wend k 0 p 0 j 1 Do If Mid S j 1 Or Mid S j 1 Then Increase k 9 Juli 2003 Seite 99 von 111 Softwarepraktikum SS 2003 Gruppe 11 Ma
131. ind jedoch beim generischen Verhalten der Streams prinzipiell zu ignorieren berpr ft ob der Stream f r Datentransaktionen ge ffnet ist VIR c boolean SC IsOpen void berpr ft ob der Stream f r Leseoperationen ge ffnet ist VIR c boolean SC CanRead void berpr ft ob der Stream f r Schreiboperationen ge ffnet ist VIR c boolean SC CanWrite void Schlie t den Stream f r alle Operationen VIR c_hresult SC Close void Schreibt asize Bytes von adata in den Stream und gibt in awritten die tats chlich geschriebene Anzahl zur ck VIR c_hresult SC Write c_pointer adata c_dword asize r dword awritten Liest asize Bytes aus dem Stream in adata und speichert die tats chlich gelesene Anzahl Bytes in aread VIR c_hresult SC Read ce_pointer adata c_dword asize r dword aread Schreibt den String astring unter Ber cksichtigung von aencoding in den Stream VIR c_hresult SC WriteStr p_CString astring c_dword aencoding Liest astring aus dem Stream und speichert das angewandte Enkodierungsverfahren in aencodind VIR c hresult SC ReadStr p_CString astring r dword aencoding 23 Juni 2003 Seite 12 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 1 2 1 7 CThread Klasse abgeleitet von CBase Die letzte vom Basics Modul zur Verf gung gestellte Klasse ist CThread was einen Windows Thread kapselt Hier wurde jedoch erm glicht virtuelle Rou
132. ist m glich mit beliebig vielen Klienten sofern das die physikalischen Parameter des Servers zulassen auf den Server verbinden Dazu ist die minimale Gr e des Servers und aller seiner Module lt 300 Kilobytes zu beachten sowie eine enorme Wiederverwert und Erweiterbarkeit des Quellkodes f r sp tere Versionen Alle Anforderungen wurden in vollem Umfang erf llt 9 Juli 2003 Seite 108 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 2 Systemhandbuch Das Systemhandbuch wurde als Anhang separat mitgeliefert 9 Juli 2003 Seite 109 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 3 bersicht ber die Arbeitsaufgaben aller Teammitglieder bei der Projektbearbeitung Roland Fischer Roland Fischer stellte der XML Arbeitsgruppe seine algorithmentechnischen F higkeiten zur Verf gung Unter seiner Mitwirkung entstanden die Eingangs und Ausgangsmodule des Projekts die XML Generation und Zerlegung Er war zudem verantwortlich f r die Zeitplanung und Systemanalyse im Rahmen des ersten Teilbelegs sowie das Benutzerhandbuch Ebenso wirkte er an der Installationssoftware mit Rene Kreiner Mit seiner Erfahrung in der C Programmierung brachte Rene Kreiner das n tige Know How zur Umsetzung des XML Parsers in das Team ein und entwickelte ma geblich dessen Klassenhierarchie und das Konzept der gegenseitigen Rekursion des xml_
133. jemals gestartet wurde VIR c boolean sc Started void 015 Teilt mit ob er gerade ausgef hrt wird VIR c_boolean Sc Running void 016 oder ob er sich im Ruhezustand befindet VIR c boolean sc Suspended void 017 Teilt mit ob er beendet wurde VIR c boolean sc Terminated void 018 bergibt die Programmkontrolle an einen anderen Thread VIR void sc SwitchToOther void 4019 protected interne Routinen zum Subthread management VIR c_hresult sc SetLength c_dword alength VIR c_hresult sc Delete c_dword aindex VIR c_hresult sc Remove ce_pointer aitem private dword m handle handle des Threads dword m _ id iddes Threads dword m _subthreadsevent Event f r die Subthreads p _ CThread m owner bergeordneter Thread hresult m _exitcode R ckgabewert IJ define CTHREAD VTBL_ LEN COBJECTLIST_VTBL_ LEN Si define CTHREAD TERMINATED INDEX COBJECTLIST_VTBL_ LEN 17 endif 9 Juli 2003 Seite 7 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 1 1 2 Modul Engine Zust ndiger Thomas Weise 1 1 1 2 1 Header Engine_Processor h Der Engine Prozessor bearbeitet je eine Serveranfrage Er stellt einen Thread einen einzelnen Programmstrang dar welcher gleichl ufig mit allen anderen Str ngen ausgef hrt wird Siehe auch CThread Zu beachten ist dass er je einen
134. kkkkkkkkkkkkkk Daten an Server senden Tab Debug Private Sub Command10_ Click Dim SendData As String On Error GoTo ErrorHandler ConnectionFailed False offene Verbindungen schliessen verbinden If Not Winsockl1 State sckClosed Then Winsockl1 Close Winsock1 Connect Text3 Text Text5 Text auf Verbindungsbest tigung warten Do While Not Winsockl1 State sckConnected And Not ConnectionFailed DoEvents Loop Daten senden If Not ConnectionFailed Then SendData Text11 Text amp vbLf amp vbLf amp Text9 Text amp Text7 Text amp Text10 Text Winsock1 SendData SendData End If Exit Sub ErrorHandler ShowRunTimeError Command10 Click Resume Next End Sub Ikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Aktuelles Teilergebnis drucken Tab Ergebnisse Private Sub Command2_ Click PrintText Text6 Text End Sab Ikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Alle Teilergebnisse drucken Tab Ergebnisse Private Sub Command3_Click Dim a As Long PrintData As String Alle Teilausdr cke und ergebnisse zu einer langen Zeichenfolge zusammenf gen For a 1 To UBound TAF PrintData PrintData amp amp a amp amp TAF a amp amp _ FilterString RoundedSolution FindSpecificSolution ServerAnswer CStr a Text2 Text Komma amp vbCrLf amp vbCrLf Next a PrintText PrintData En
135. kkkkkkkkkkkkkkkkkkkkkkkk Findet das Teilergebnis mit der ID ID Function FindSpecificSolution SearchString As String ID As String As String Dim a As Long b As Long c As Long IDS As String OutString As String IDS lt cn id amp ID amp z cn auf c Len IDS a InStr SearchString IDS If a 0 Then OutString Fehler Eingabefehler oder nicht definierte L sung Else b InStr a SearchString lt cn gt cn zu If b 0 Then OutString Fehler Fehlerhafte Serverantwort Else OutString Mid SearchString a c b a c If OutString Fehler Then OutString _ Fehler Eingabefehler oder nicht definierte L sung End LE End If FindSpecificSolution OutString End Function 9 Juli 2003 Seite 98 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 2 2 4 Modul MathStuff Aus bereits erw hnter schwerer Erkrankung von Rico Ro berg fiel dem Teamleiter die Aufgabe zu prim res Funktionieren des Klienten zu erm glichen Die Umwandlung der Infix Eingabe in MathML war die einzige noch zu erg nzende Implementation Da der Teamleiter sich leider nicht in bereits konkrete und fortgeschrittene Planung von Herrn Ro berg hineinfinden konnte wurde behelfsm ig das Modul MathStuff erstellt Es wird hier nicht tiefergehend kommentiert da es das Produkt einer einzigen Nacht ist und der Teamleiter andere Partikul rt t
136. kum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 _FR _FR T E div1 E div2 T FREE aone _FREE op return overflow API c_boolean FC _ARCTAN c_dword alength c_dword adotpos c_pointer pi_2 c_pointer pi_4 c_pointer ain c_pointer aout berechnen arctan x x op boolean overflow false boolean kompl false boolean aunderflow false boolean toggle false boolean toob false boolean div0 false pointer op COPY alength ain pointer aout_h pointer aone pointer atwo pointer xpot pointer xpot_h pointer gaza pointer gaza_h pointer m erg zero aout alength 4 if IZ alength op arctan 0 0 if _NEGATIVE alength op _NOT2 alength op op Betrag von op bilden kompl true aone NEW alength _INS_BIT alength adotpos true aone if _CMP alength op aone CMP EQUAL arctan 1 move aout pi_4 alength 4 else atwo NEW alength _INS_BIT alength adotpos 1 true atwo xpot COPY alength op xpot_h NEW alength _MUL alength adotpos xpot xpot xpot_h aunderflow gaza COPY alength aone gaza bh COPY alength atwo if _CMP alength op aone CMP SMALLER op lt 1 Berechnung nach Formel aout bh COPY alength op while toob amp amp overflow Schleife l uft bis sich Ergebnis nicht mehr ndert if toggle _NOT2 alengt
137. lage aller anderen Module atomare Funktionen und Klassen zu Verf gung Es importiert alle Windows Routinen die im gesamten MathServer verwendet werden Es werden keinerlei C native Routinen angewandt um maximale Performance zu gew hrleisten basiert s mtliche Programmierarbeit auf der Windows API Application Programming Interface und selbst entwickeltem Code vorzugsweise Assembler In der Modulbeschreibung zum Modul Basics soll nur n her auf die funktions oder technikintegralen Bestandteile n her eingegangen werden Weniger bestimmende Faktoren wie z B Listen wurden bereits in Teilbeleg 2 ausreichend abgehandelt sie sind unter ihrer Definition auch eher trivial ausgelegt es sind eben Listen und daher hier nicht von Interesse Auch w rde z B der Quelltext von CString cpp ohne Kommentare alleine bereits ca 50 Seiten f llen 1 1 1 1 1 Header CBase h CBase ist die wichtigste Klasse des rojekts alle anderen leiten sich von ihr ab Ihre Schnittstelle wird im Header CBase h definiert ifndef CBASE USED define CBASE USED include BASIC_DEFINITIONS h include BASIC_TYPES h include BASIC ROUTINES h define DEATH STATE DWORD MSB define FORBIDDEN STATE DEATH STATE CLASSAPI CBase see basic_macros for that DEFINE TYPES CBase CLASSAPI CBase public Konstruktor athreadsecured hat in dieser Anwendung keine Bedeutung CBase c_bo
138. lean SC CBase GetState c_dword astate return m state amp astate astate 9 Juli 2003 Seite 23 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 setzt l scht eine Bitkombination als Status verhindert dass der DEATH_STATE berschrieben werden kann pragma warning push pragma warning disable 4035 c_dword SC CBase SetState c _dword astate c boolean aset _ asm and astate FORBIDDEN STATE mov ecx this mov eax ecx 4 mov edx aset test edx edx jz del or eax astate jmp ok del not astate and eax astate ok mov ecx 4 eax pragma warning pop gibt den aktuellen Wert des Referenzz hlers wieder c_dword SC CBase RefCount void return m refcount erh ht den Referenzz hler um eins diese Methode ist absolut threadsicher sie gibt einen Wert gt 0 wieder wenn das Objekt noch existiert und 0 wenn es sich bereits im Zustand der Destruktion befindet Die Threadsicherheit wird erzeugt durch die Variable m_State an this 04h siehe release pragma warning push pragma warning disable 4035 c_dword SC CBase AddRef void _asm mov eax Ei mov ecx ERIS lock xadd ecx 8 eax inc eax test ecx 4 DEATH_STATE SES ende xor eax eax ende pragma warning pop 9 Juli 2003 Seite 24 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betr
139. leiche Vorgehensweise bei dem Klient Unter dem Punkt 1 4 Systemtest ist eine Tabelle aufgef hrt welche nur einige repr sentative Ergebnisse enth lt Die Tests f hrte Thomas Ziegs durch Test dauerten ca 2 Tage Die Ergebnisse wie z B 1 9999999999 welche der Server liefert die eigentlich eine 2 darstellen kommen durch die irrationalen bzw periodischen Bin rzahlen zustande 1 3 1 Testf lle Die Testf lle MathServer und MathClient werden kombiniert betrachtet und gemeinsam dargestellt Da die Applikation nur einer Aufgabe der Berechnung von Ausdr cken dient gibt es im Prinzip nur diese beiden Mit der Testung der einzelnen Module Klient und Server wird gleichzeitig die Richtigkeit der Gesamtapplikation untermauert Wir testen sowohl Klient und Server welche gleichzeitig auf dem selben Rechner laufen und ber eine TCT IP Verbindung 127 0 0 1 auf Localhost verbinden als auch den Betrieb im Netzwerk Windows XP Windows 2000 und erhalten exakt die gleichen Ergebnisse unter beiden Betriebssystemen Die Verz gerungszeit durch das Netzwerk 10 MBit Ethernet LAN stellt sich als vernachl ssigbar heraus Daher soll nachfolgend weder Netzwerk Lokalbetrieb noch Betriebssystem unterschieden werden 1 3 3 Zeitplan und Verantwortlichkeiten Der Verantwortliche f r die Tests war Thomas Ziegs ihm oblag die zeitliche Planung und Durchf hrung der Tests Zuerst werden die Tests des Servers separat dann in Kombination mit dem Kliente
140. les Protokoll verwendet Da es nur der Daten bertragung dient beschr nken wir uns darauf den Befehl GET zu unterst tzen Anstelle des URL Teils wird das Wort solution eingetragen Die Antwort des Servers wird entweder den Kode 200 OK oder einen von definierten Fehlerkode 8xx Fehler enthalten Hierbei kann die Anzahl der gew nschten Vorkommastellen decimals und Nachkommastellen fractals definiert werden Das Startsymbol f r den gesamten Traffic ist lt traffic gt f r die Daten bertragung Klient Server lt anfrage gt und Server Klient lt antwort gt Tabelle 1 6 Element Strukturbeschreibung lt http befehl gt GET lt typ gt solution decimals lt zfolge gt fractals lt zfolge gt lt LF gt Zeilenumbruch lt leerzeile gt lt LF gt lt LF gt lt xmi daten gt XML Text f r Anfrage und Antwortdaten lt ergebnis nr gt 200 OK 8 lt ziffer gt lt ziffer gt Fehler lt anfrage gt lt http befehl gt lt typ gt HTTP lt Ziffer gt lt ziffer gt lt leerzeile gt lt xmi daten gt lt antwort gt HTTP lt ziffer gt lt ziffer gt lt ergebnis nr gt lt LF gt Content Type text mathml xml lt leerzeile gt lt xml answer gt lt traffic gt lt anfrage gt lt antwort gt 19 Mai 2003 Seite 12 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 1 2 3 4 4 Struk
141. likationen 200 Klienteninstallationen sind derzeit vorgesehen e Netzwerk Es wird erwartet dass der Serverrechner bei Leerlauf mit weniger als 70 ms Verz gerung von jedem Klientenrechner aus erreicht werden kann Dann gelten die im Punkt Benutzer getroffenen Absch tzungen e Eingabetext Ein Standardbenutzer wird einen Eingabetext von nicht mehr als 1024 Zeichen eingeben Wird dieser in XML zur Daten bertragung umgewandelt so sollte er nicht mehr als 5120 Zeichen 10 kB enthalten Diese werden im lokalen Netzwerk mit mindestens 10 MBit s bzw im Internet mit mindestens 56 kBit s bertragen Die Antwort des Servers sollte ebenfalls nicht mehr als den dreifachen Umfang der Anfrage haben auf Grund der hohen Pr zision der numerischen Daten Dadurch entsteht ein gesch tzter Gesamtumfang der Daten bertragung von 40 kB Im Netzwerk w rde die gesamte Daten bertragung weniger als 1s und im Internet etwa 6 Sekunden dauern Nach dem Punkt Serveranfragen bersteigt die reine Rechenzeit die bertragungszeit also um das Zehn bis Sechzigfache Dazu kommen Zeiten f r Kodieren und Dekodieren in und von XML e _Ausgabetext Aus dem Punkt Eingabetext folgt bereits dass der Ausgabetext selten mehr als 3072 Zeichen umfassen wird e ML Baum Der XML Baum wird wie gesagt durch Objekte dargestellt Er wird im Normalfall nicht mehr als 100 Knoten umfassen und somit in dekodierter Form ca 50 kB einnehmen Da man ihn nur rekursiv aus den Eingabedaten
142. lle Fehlerquellen werden hier aus den Ein und Ausgabezeichenfolgen zu math2xml ausgefiltert wie Systemkomma durch ersetzen eNx durch ex ersetzen wie von math2xmil verlangt fehlerhafte Ausgabe eines berz hligen XML Tags wird durch 0 ersetzt f hrende Null bei 0 xxxx wird erg nzt XMLString FilterString FilterString math2xml FilterString FilterString FString Komma Tam ei Me IDS lt gt lt plus gt lt cn gt 0 lt cen gt M gt Tp Set 2 If SyntaxError Then Label5 Caption Der eingegebene Ausdruck enth lt einen Syntaxfehler Exit Sub End If bier ist der Unterschied zwischen geplantem MathParser und MathStuff zu Ende Text4 Text FString Text12 Text FString Text6 Text Die Daten werden an MathServer gesendet SSTabl Tab 1 zum Tab Ergebnisse wechseln Label5 Caption Ver Tab Debug wird der Einfachheit halber hier zum Senden verwendet Text7 Text XMLString Command10 Value True Text6 Text Warte auf Antwort von MathServer TAF IDS 9 Juli 2003 Seite 92 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 auf Serverantwort warten Ereignis Winsock1_DataArrival amp Zeit daf r messen AnswerReceived Fals Timerl Enabled True Do While Not AnswerReceived And Not ConnectionFailed DoEvents Loop If AnswerReceived Then ATA i Gesamtergebnis anzeigen amp
143. loop jmp FG LSB c_dword c_pointer alength adata funktioniert nach dem Prinzip von MSp ebx Oxfffff f ff ecx ecx ende esi edx edx ecx Testen von rechts nach links der 32 Bit Bl cke wenn gefunden weiter mit found eax eaxX found looper ende Suche innerhalb des 32Bit Blockes und ermitteln der Position edx ecx ebx edx ebx 5 ecxX eaX ende ebx ecx eax ebx FC CMP c_dword c_pointer c_pointer alength aindatal aindata2 ebx CMP_ SAME bei gleichen Pointern edx aindata2 ende ebx CMP EQUAL ecx ecx ende esi aindatal edi aindata2 edx ecx edx edx 2 esi edx edi edx wenn L nge der Zahlen Null obersten 32Bit Block vorzeichenbehaftet pr fen wenn gleich weiter bei looper edx dword ptr edi ecx eax edx smaller bigger OCX OCX ende2 edi 4 weitere Bl cke vorzeichenlos pr fen edx dword ptr edi eax edx smaller bigger edi A looper ende2 9 Juli 2003 Seite 46 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 smaller mov jmp bigger mov ende2 cid ende mov API c boolean aam test jz cld mov shl xor rep jnz not ende API c boolean _ asm looper carry ende xor test jz mov mov cld Ge lodsd rcl stosd loop jb xor jmp mov zuweisen der R ckgabedaten ebx CMP SMALLER ende2 ebx CMP_BIGGI Di
144. low true _FREE atwo _FREE temp _FREE op1 FREE op2 return overflow 1 2 1 4 2 Kode CReal cpp Der Kode von CReal ist lediglich ein Wrapper f r den von RealFunctions und daher hier nicht von interesse 9 Juli 2003 Seite 75 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 2 1 5 Modul XML Parser 1 2 1 5 1 Kode CXMLBase cpp include XML h Konstruktor erstellt m_string CXMLBase CXMLBase ce_boolean athreadsecured CBase athreadsecured m string new CString false Destruktor l scht m_string CXMLBase CXMLBase void SET NOLL Dm string c_hresult SC CXMLBase FromString cp _CString astring hresult retval S_OK if astring Bei eventuell g ltiger Eingabe L schen vorheriger Daten retval Clear Sonst Fehler else retval E INVALIDARG return retval c_dword sc CXMLBase ToString cp _CString astring hresult retval S_OK if astring L schen vorheriger Daten in astring retval astring gt Clear Sonst Fehler else retval E INVALIDARG return retval c_hresult SC CXMLBase Clear void L schen des Offsets m offset 0 L schen der String Daten return m string gt Clear c_dword SC CXMLBase Type void R ckgabe des Code Wertes f r ein XML Grundobjekt sollte es im Projekt eigentlich nicht geb
145. lsoft Install System v2 063 Zurich Schlie en Seite 5 von 11 4 MathServer 4 1 Bedienung MathServer wird durch MathServer exe oder den Link im Startmen Programme MathServer amp Client gestartet wenn bei der Installation kein Autostart gew hlt wurde und erwartet Eingabedaten in Form eines HTTP Streams der in XML Form speziell MathML gestaltet ist Extensible Markup Language XML 1 0 Second Edition http www w3 org TR REC xml Mathematical Markup Language MathML Version 2 0 http www w3 org TR MathML2 Der MathServer kann nur ber den Taskmanager Strg Shift Esc unter Prozesse beendet werden 4 2 Unterst tzte Funktionen Siehe MathClient und oder MathML Dokumentation Seite 6 von 11 5 MathClient 5 1 Bedienung Der Klient ist aus 4 Seiten aufgebaut welche sich durch die 4 Schaltfl chen unterhalb der Operationsfl che umschalten lassen amp Mathtlient Konstante einf gen T gt Operator einf gen z gt Gew nschte Genauigkeit 100 Stellen Dezimaltrennzeichen RW Formel drucken Berechnen Formeleingabe Optionen Debug Beenden Diese Seite dient zum eingeben der Formel mit den beiden Comboboxen f r Konstanten und Operatoren und einer Eingabe f r die gew nschte Genauigkeit mit der gerechnet werden soll Sie ist gleichzeitig Vor und Nachkommastellenanzahl mit einem Maximum von 100 Mio Alle unterst tzten Funktionen und Konstanten sind in den Co
146. lt einen String zu einer Zahl Indem der String von links nach rechts ausgelesen wird Jede Ziffernstelle der Strings wird auf die Zahl addiert Zahl 10 bis Stringende erreicht wird Zum Schlu Zahl 10 Strignachkommastellen und evtl Zer Kompl Bilden hresult retval S_OK boolean kompl boolean div aoverflow false aunderflow false if astring amp amp anumnew if anumlength gt 0 dword dotposinstring for dotposinstring 0 dotposinstring lt astringlength amp amp astring dotposinstring astringdot dotposinstring t Kommapos in String ermitteln dword i i l if astring 0 _S Vorzeichen merken kompl true Startpkt in String festlegen else kompl false if astring 0 S i 0 Vorkommastellen berechnen aoverflow ADD DWORD anumlength anumnew astring i l _S 0 anumnew itp for i i lt dotposinstring i aoverflow STR _MUL 10 anumlength anumnew anumnew aunderflow aoverflow aoverflow ADD DWORD anumlength anumnew astring i S 0 anumnew aover flow u pointer x Nachkommastellen berechnen x NEW anumlength _INS_BIT anumlength 0 1 x for i dotposinstring 1l i lt astringlength i aoverflow STR _MUL 10 anumlength anumnew anumnew aunderflow aoverflow 9 Juli 2003 Seite 56 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilb
147. m Lichtgeschwindigkeit c e Combol 0 AddItem C1 0 e Combol 0 Text C1 Combobox f r Operatoren e Combol 1 AddItem Addition e Combol 1 AddItem Subtraktion e Combol 1 AddItem Multiplikation e Combol 1 AddItem Division e Combol 1 AddItem Potenz e Combol 1 AddItem Wurzel root e Combol 1 AddItem Sinus sin e Combol 1 AddItem Kosinus cos e Combol 1 AddItem Tangens tan e Combol 1 AddItem Arkussinus arcsin e Combol 1 AddItem Arkuskosinus arccos e Combol 1 AddItem Arkustangens arctan e Combol 1 AddItem Nat rlicher Logarithmus 1n e Combol 1 AddItem Allgemeiner Logarithmus log e Combol 1 AddItem Fakult t e Combol 1 AddItem Betrag e Combol 1 AddItem C2 0 e Combol 1 Text C2 Text6 Text Ergebnis e Command6 0 Caption N chstes Teilergebnis e Command6 1 Caption Vorheriges Teilergebnis e Command2 Caption Aktuelles Teilergebnis drucken e Command3 Caption Alle Teilergebnisse drucken e Framel Caption Serverinformationen e Label2 Caption Name e Label6 Caption Port e Command9 Caption Localhost eintragen Serverinformation wurden beim letzten Ausf hren gespeichert Text3 Text GetSettingEx ServerName Me Winsock1 LocalHostName Text5 Text GetSettingEx ServerPort 20000 Systemkomma ermitteln
148. m Kosinus gebildet werden soll aout Ergebnis API c_boolean FC _TAN c_dword alength c_dword adotpos c pointer ain c_pointer aout r _ boolean adiv0 Liefert Tangens einer Zahl mit folgender Berechnung Alength L nge der Zahl adotpos Kommaposition in der Zahl ain Zahl von dem Tangens gebildet werden soll aout Ergebnis divO Division durch Null Tangens von Pi 2 und vielfachen nicht definiert API c_boolean FC _LN c_dword alength c_dword adot c_pointer ain c_ pointer aout r boolean adiv0 Liefert den nat rlichen Logarithmus einer Zahl mit Hilfe folgender Formeln Inx gk 1 Il 1 Logarithmusregeln im Quellcode mit erw hnt Alength L nge der Zahl adot Kommaposition in der Zahl ain Zahl von dem Logarithmus gebildet werden soll aout Ergebnis divO Division durch Null f r 0 lt x lt 2 9 Juli 2003 Seite 15 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 boolean FC PI c_dword alength c_dword adotpos CG pointer aout Berechnet Pi f r die vom Benutzer angegebene Genauigkeit nach folgender Formel a gt 1 4 2 l l iw 16 8i 1 8i 4 8 5 8i 6 Alength L nge der Zahl adotpos Kommaposition in der Zahl aout Pi API ce boolean PG _ARCSIN c_dword alength c_dword adotpos c pointer pi 2 c_pointer ain CG pointer aout Berechnet Arcussinus einer Zahl nach folgenden Formeln 1 sp 1 3 sp EE f r x2 lt 1 2
149. m SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 Wie gesagt Enter und Release waren f r eine Cooperation zwischen verschiedenen Rechnern bzw Anwendungen am selben Problem gedacht und dienen prinzipiell dazu dass ein Objekt threadsensitiven Kode wegsperren kann Bei der aktuellen Projektkonfiguration spielen sie keine Rolle void set CBase Enter void AddRef if m mutex INVALID HANDLE VALUE wait m mutex void SE CBase Leave void if m mutex INVALID HANDLE VALUE ReleaseMutex m mutex Release Mit den Operatoren new und delete binden wir unsere Wrapper f r die Windows API ein c_pointer CBase operator new unsigned int asize pointer x allocate asize if x 0 throw else return x void CBase operator delete void amemory free amemory 9 Juli 2003 Seite 26 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 2 1 2 Kode CSocket cpp include BASIC_Classes h wsadata _wsadata dword wsalock 0 Diese Routine sollte bei Programmstart aufgerufen werden sie initialisiert die Windows Netzwerkumgebung c_hresult FG StartWSA void hresult retval S_OK dword 1 InterlockedIncrement wsalock if l1 1 zero amp wsadata sizeof wsadata if WSAStartup MAKEWORD 2 2 _wsadata 0 else retval wsaerro
150. m String gelesen und anschlie end aus dem String gel scht VIR c_hresult sc FromString ep _CString astring Die Funktion Tostring berschreibt die bereits existierende Funktion Tostring aus der Klasse CXMLBase Tostring veranlasst ein Knotenobjekt sich in einen String astring zu schreiben VIR c_hresult sc ToString ep _CString astring Die Funktion Clear berschreibt die bereits existierende Funktion Clear aus der Klasse CXMLBase Clear veranlasst ein Knotenobjekt seine gesamten Daten inclusive seiner Unterobjekte zu l schen VIR c_hresult sc Clear void Die Funktion Type berschreibt die bereits existierende Funktion Type aus der Klasse CXMLBase Type liefert den Code Wert f r ein Knotenobjekt zur ck hier 2 VIR c_dword sc Type void Get_Name liefert den Namen eines XML Knotenobjekts in einem String astring zur ck VIR c_hresult sc Get Name ep _CString astring Set_Name setzt den Namen eines XML Knotenobjekts auf den Wert eines Strings astring VIR c_hresult sc Set Name ep _CString astring Get_Att_Val liefert den zu einem in einem String aattr bergebenen Namen eines Attributs zugeh rigen Wert des Attributs in einem String aval zur ck VIR c_hresult sc Get ACL Val ep _CString aattr cp CString aval Get AU Val setzt den zu einem in einem String aattr bergebenen Namen eines Attributs zugeh rigen Wert des Attributs auf den Wert eines Strings aval Falls der Attributname noch nicht
151. m address family AF_INET Verbindung aufbauen if connect m socket amp m_address sizeof m address 0 seen true S retval wsaerror D retval wsaerror if failed retval Close return retval 9 Juli 2003 Seite 30 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 asize Bytes von adata auf das Socket schreiben geschrieben wurden awritten geht nur bei Klienten c_hresult Se CSocket Write c_pointer adata c_dword asize r dword awritten hresult retval CStream Write adata asize awritten if retval E_NOTIMPL retval 9 0K dword s asize dword 1 p_byte x p byte adata Es ist m glich dass nicht alle Daten auf einmal versendet werden k nnen warum auch immer Deshalb wird ein einer Schleife so lange gesendet bis entweder das Ende des Sendebuffers erreicht wurde oder ein Fehler auftrat do l send m socket c pointer x s 0 if l SOCKET _ERROR retval wsaerror else sS l X 1 awritten l while succeeded retval amp s gt 0 amp 1 gt 0 return retval vom Socket asize Bytes in adata lesen aread Anzahl gelesener Bytes c_hresult se CSocket Read ce_pointer adata c_dword asize r dword aread hresult retval CStream Read adata asize aread if retval E_NOTIMPL retval S OR
152. mboboxen enthalten Desweiteren kann man w hlen welches Dezimaltrennzeichen man verwenden m chte Mit Formel drucken kann man die eingegebene Formel ausdrucken lassen und Berechnen schickt die Aufgabe zum Server um sie berechnen zu lassen Seite 7 von 11 Mathtlient Gesamtausdruck Fsinl 3 4 Pi 7 31n5 1374 43 454 166 8 NAHL7 Pi Aktueller Teilausdruck 3 sin 324 P F 3 5 324 43 454 66 8 529 4 1 724 Pi Aktuelles Teilergebnis 325 694102109427631976758297744373272810400109966543553080520237111149 a 013433663925787 18390468300997 1156810739722319769180310054697264939913 151196651056103607140103111715870928447264437026264071643664038244840 7690343536821946021 7234465781 3339792154894068204401984607 765022887488 416335770484035323599709719569944907327036495409789479599790396297691 229189505346678955954697956630846289190810554884859065921504036492905 7370774600941 1175599644805690661903405439833946077539745351 3565957265 439314734310097211421216773509795286161833033746110779476446792118792 124079448163951 4160351 40899393889778756444163771468245035274439832046 xl Formeleingabe Ergebnisse Debug N chstes Teilergebnis Vorheriges Teilergebnis Aktuelles Teilergebnis drucken Ale Teilergebnisse drucken Beenden Seite 8 von 11 Im obersten Fenster erschein nochmals Ihre gestellte Aufgabe darunter der Teilausdruck wessen Ergebnis im letz
153. n do begin ifx erkennt Z then begin erstelle einen neuen Knoten k vom typ x finde Ende vonxinZ teile diesen ganzen Teil ab und speichere ihn in k h nge ihn an vaterknoten an if x kann Unterknoten enthalten then begin knotenerkennung k Z end end end if keine Knotenart passt auf z then Fehler end end 1 2 2 7 4 Darstellungsprozess Prozess darstellungsprozess Datum 18 05 2003 Bearbeiter Rico Ro berg Voraussetzungen Antwort vom Server wurde erhalten in Ausgabefenster wurde Eingabetext grafisch dargestellt Nutzer hat mit Schaltfl chen N chstes Vorheriges Teilergebnis einen Formelteil ausgew hlt Begin If Serverantwort enth lt Fehlermeldung then Zeige Fehlermeldung an Else Begin Durchsuche Eingabetext nach dem vom Nutzer ausgew hlten Formelteil Ermittle ID Attribut des gefundenen Formelteils Durchsuche Ausgabetext nach dieser ID Zeige dieser ID zugeordnete Daten als Ergebnis an End end end 19 Mai 2003 Seite 21 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 1 2 2 7 5 Formelverarbeitung Prozess formel_verarbeitung Datum 18 05 2003 Bearbeiter Rico Ro berg Thomas Ziegs Voraussetzungen Prozess erh lt Eingabe XML Knoten E und gibt Ausgabe XML Knoten A zur ck Begin F r alle Unterknoten x des XML Baums E Begin Berechne Teilergebnisse von x durch Selbstaufruf mit Hilfe mathematischer Funktionen und merke diese Berechne eig
154. n durchgef hrt 9 Juli 2003 Seite 105 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 3 4 Beispieltestskript in Python Mit solchen Skripts kann der Server separat getestet warden with this python script the server can be tested server should run at port 20000 from socket import s socket AF_INET SOCK STREAM s connect 127 0 0 1 20000 formel GET solution decimals 50 fractals 500 HTTP 1 0 n n formel formel lt xml version 1 0 encoding UTF 8 gt formel formel lt math gt lt apply id 1 gt formel formel lt plus gt formel formel lt cn gt 0 lt cn gt lt pi gt formel formel lt apply gt lt math gt print formel s send formel answer s recv 999999 print answer 9 Juli 2003 Seite 106 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 4 Systemtest Hier werden die Testresultate des Servers alleine des Servers angesteuert mit dem mitgelieferten Klienten und die eines handels blichen Taschenrechners gegen bergestellt Tabelle 1 4 1 Funktion Parameter Ergebnis Server Ergebnis Klient Ergebnis TR abs 5 5 5 5 5 5 5 5 arccos 0 33 1 2344927516 1 2344927516 1 234492751 0 43 2 0152891037 2 0152891037 2 015289104 arcsin 0 2 0 2013579207 0 2013579207 0 201357921 0 66 0 720818760 0 7208187608 0 72081876 a
155. nauigkeit ist der springende Punkt des Projekts Es soll erm glicht werden mathematische Operationen mit nahezu beliebiger Genauigkeit durchzuf hren siehe Punkt 2 1 Nat rlich ist es weiterhin m glich dass eine Operation den eingestellten Wertebereich berl uft jedoch kann der Benutzer die Aufgabe dann einfach mit einem erweiterten Wertebereich noch einmal rechnen Auch Rundungs und Genauigkeitsfehler k nnen weiterhin auftreten jedoch werden sowohl mathematische und statistisch stochastische Betrachtungen als auch interne Wertebereichsverbreiterungen durchgef hrt um dies zu umgehen Das Projekt konzentriert sich in seiner Entwicklungsarbeit zu einem gro en Teil auf die mathematische Genauigkeit 2 2 Operationelle Anforderungen an die Datenstr me Im System treten physische Datenstr me in teilweise mittlerem bis gro en Umfang zwischen der Klienten und der Serverapplikation auf Sie k nnen Spitzen von mehreren Megabytes erreichen werden sich im Mittel gem 2 1 3 Absch tzungen im Kilobyte Bereich bewegen Im Vollbetrieb der Applikation k nnen die Datenstr me bei Mehrklientenbenutzung auch kritischen und berkritischen Umfang annehmen den der Server physisch nicht mehr bew ltigen kann Aus diesem Grund wird ein sehr leistungsstarker Rechner mit ebenso leistungsstarker Netzwerkanbindung empfohlen Bei Eintritt in den berkritischen Bereich der Netzwerkauslastung wird das Verhalten bei der Anfrageannahme stochastisch bzw instabil
156. nd ist es nicht m glich Zahlen mit mehr als Es ca 2 Milliarden Stellen darzustellen Dies entspricht einem Speicherbedarf etwa 851 MB Auch Baumstrukturen werden durch Objekte dargestellt Knotenobjekt wobei jeder Knoten bzw Blatt einer Instanz entspricht Solche Objekte besitzen im Durchschnitt 30 bis 70 Bytes an Steuerinformation Knoten die Unterknoten enthalten k nnen erfordern dass die ihnen zugeordneten Objekte eine Liste mit den ihnen untergeordneten Knoten und zugeordneten Objekten besitzen Eine solche Liste ben tigt f r n Unterobjekte 4 n Bytes Speicher Unterknoten k nnen gegebenenfalls wieder Unterknoten enthalten S mtliche numerischen Standardzahlen also solche die nicht in den Kalkulationen verwendet werden sondern zum Beispiel die L nge einer Zeichenkette speichern sind auf 4 Bytes Speicherbedarf normiert Die Struktur der Elemente entspricht der Struktur in 1 2 2 4 Datenkatalog 19 Mai 2003 Seite 26 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 Wie bereits in Punkt 1 2 2 erkl rt werden keinerlei permanente Speicher verwendet S mtliche Daten und Datengr en sind dynamisch und besitzen keine festen Gr en bis auf die auf der vorigen Seite erw hnten Steuerinformationen In diesem Sinne ist es nicht m glich eine dem normalen Standard entsprechende Anforderungstabelle aufzustellen Wir beschr nken uns also an dieser Stelle darauf eine gro
157. new CString Pufferstring CString ID new CString Enth lt die ID des Knotens retval a gt AddUnicode _S ID retval node gt Get_Att_Val a ID Alert des ID Attributes ermitteln dword CC node gt Get_Sub_Count Anzahl der S hne des Knotens CXMLNode op 0 Erster Sohn Operator retval node gt Get _ Sub 0 CAST rp_CXMLBase op if succeeded retval op gt Get_Name a Operatorname ermitteln CReal ops 2 Feld f r Operanden ops 0 0 ops 1 0 CXMLNode s 0 Sohnknoten f r Operanden CString b new CString Pufferstring Operanden suchen 1 oder 2 St ck Typ und Werte ermitteln Zwischenergebnisse for dword i 1 i lt CC amp amp i lt 3 amp amp i lt node gt Get Sub _Count i if succeeded node gt Get_ Sub i CAST rp_CXMLBase s s gt Get_Name b Typ des Operanden untergeordneter Klammerausdruck Apply if b gt CompareUnicode S Apply amp CMP_MATCH 0 Selbstaufruf f r untergeordneten Ausdruck retval Recursive Parsing s aresult ops i 1 aconsts anumlength adotpos else Zahl if b gt CompareUnicode _S en amp CMP_MATCH 0 s gt Get Text b Zahl ermitteln ops i 1 FromString anumlength adotpos b else WKonstante nur noch Pi s gt Get Text b if b gt CompareUnicode _S PI amp CMP_MATCH 0 9 Juli 2003 Seite 40 von 111 Softwarepraktikum SS
158. ngth anum op2 NEW anumlength ol0 NEW anumlength eine 10 _INS_BIT anumlength anumdotpos 1 1 010 _INS_BIT anumlength anumdotpos 3 1 010 if _NEGATIVE anumlength opl _NOT2 anumlength opl opl Betrag bilden kompl true _FRAC anumlength anumdotpos opl op2 Nach und _INT anumlength anumdotpos opl opl Vorkommastellen trennen amod NEW anumlength while _IZ anumlength opl Vorkommastellen 10 bis Vorkommast 0 _I_DIV _MOD anumlength anumdotpos opl 010 opl amod divO temp 0 for i 0 i lt 3 i Umwandeln der Restes in brauchbares Format S if _TEST_BIT anumlength anumdotpos ti amod temp t 1 lt lt i astring gt AddUnichar character temp 0 Ziffer in String schreiben if astring gt Length lt 0 astring gt AddUnichar _S 0 Amis im String 0 schreiben if kompl astring gt AddUnichar Sinz wenn neg Zahl dann schreib astring gt Rotate String drehen astring gt AddUnichar astringdot Komma schreiben for j 1 j lt astringkommastellen amp amp IZ anumlength op2 j Nachkommastellen 10 bis Nachkommastellen 0 Stringkommastellen einhalten _STR_MUL 10 anumlength op2 op2 underflow temp 0 for i 0 i lt 3 i Vorkommastellen testen und ermittelte Ziffer in brauchbares Format bringen 9 Juli 2003 Seite 59 von 111 Softwarepraktikum SS 2003 Gruppe 1
159. olean athreadsecured false Destruktor VIR CBase vaid jede abgeleitete Klasse kann die 32 Bit Variable f r den Status verwenden und mitState GetState und SetState manipulieren Reserviert ist der DEATH_STATE das Bit 31 Es wird verwendet um einen Destruktorlauf zu verhindern VIR c_dword SC State void Gibt wieder ob eine bestimmte Statusbitkombination gesetzt ist VIR c boolean SC GetState c_dword astate 9 Juli 2003 Seite 2 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 protected SetState soll nur von Methode der Klasse selbst aufgerufen werden VIR c_dword se SetState c_dword astate c_boolean aset publie gibt die aktuelle Zahl von Referenzen auf das Objekt zur ck VIR c_dword sc RefCount void erh ht die Zahl der Referenzen um 1 muss aufgerufen werden wann immer ein neuer Zeiger auf das Objektt zeigen soll VIR c_dword SC AddRef void erniedrigt den Referenzz hler um 1 gibt das Objekt frei wenn er 0 erreicht muss immer dann aufgerufen werden wenn ein Zeiger vom Objekt weggeboge wird VIR c_dword sc Release void die Methoden Enter und Leave haben in dieser Anwendung keine direkte Bedeutung sie wurden vorsorglich entwickelt als die genauen Rahmenbedingungen der Anwendungen noch nicht voll spezifiziert waren erm glichen jedoch evtl sp teres Erweitern so dass mehrere MathServer gleichzeitig an einer Aufgabe rec
160. ollten diese Seite verwenden Hier ist es m glich MathML Strings per Hand einzugeben und zu verschicken Sie dient haupts chlich zu Debugzwecken Fehlersuche 5 2 Unterst tze Funktionen Addition 5 10 Allgemeiner Logarithmus log 5log10 EULERsche Zahl e Arkussinus arcsin arcsin 0 5 Arkustangens arctan arctan 5 LUDOLFSsche Zahl oder Betrag l Kreiskonstante pi Division 10 5 Fakult t 5 Kosinus cos cos 0 5 Multiplikation 5 10 Nat rlicher Logarithmus In In5 Potenz N 510 Sinus sin sin 0 5 Subtraktion 10 5 Tangens tan tan 5 Wurzel root root 5 Seite 10 von 11 6 Deinstallation Falls Sie sich wirklich dazu entschlie en sollten dieses wundervolle Programm zu deinstallieren dann tun Sie das ber den entsprechenden Startmen eintrag Die Deinstallation l uft dann wie auf den Bildern ab In diesem Bild wird IHR Installationspfad angegeben D MathServer amp Client Uninstall Best tigung Deinstalliert MathSeryer MathdClient insofern installiert Deinstalliere lt Programme MathServer amp Client Abbruch Nullsoft Install System vz Ob Deinstallieren Das Installationsverzeichnis des Programms muss von Hand gel scht werden Wenn der MathServer nicht l uft erfolgt kein Neustart Y MathServer amp Client Uninstall Deins lEixl Io o o Zeige Details D Mathserver amp Client Uninstall xl Wollen Sie wirklich deinstallieren Wenn ja und
161. on 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 ele c flag 0 looper lodsd eax esi esi 4 mov edx ebx edx ebx adc eax dx eax eax edx cf stosd edi eax edi 4 pushf flags cf in ah sichern add ebx 4 ebx 4 popf fflags aus ah wiederherstellen loop looper anzahl der 4byte bl cke ecx um 1 verringern mov eax O eax 0 jno ende not eax ende API c boolean Ire SUB c dword alength 8 u c pointer aindatal c pointer aindata2 c pointer aoutdata _ asm xor eax eax eax auf 0 setzen test ecx ecx alength 0 jz ende Aa sprung ende mov esi aindatal esi aindata1 mov ebx aindata2 ebx aindata2 mov edi aoutdata edi aoutdata cld directionflag 0 incdec 4 elc c flag 0 looper lodsd eax esi esi 4 mov edx ebx edx ebx sbb eax edx eax eax edx cf stosd edi eax edi 4 pushf flags cf in ah sichern add ebx 4 ebx 4 popf flags aus ah wiederherstellen loop looper 4byte bl cke ecx um 1 verringern sprung zu looper mov eax O eax 0 jno ende not eax ende API c boolean FC MUL c _ dword alength 8 u c dword adot c pointer aindatal c pointer aindata2 c pointer aoutdata r boolean aunderflow boolean boolette boolean kompl int i int msb_op2 int 1sb_opl int 1sb_op2 dword exactlyshift pointer opl pointer op2 boolette false kompl false aunderflow false
162. outdata r boolean aunderflow Multipliziert Zahl mit 10 vorzeichenlos Rechnet nach gleichem Prinzip wie _MUL Shift amp Add wobei Shift amp Add direkt mit seperaten Befehlen realisiert wird __forceinline c boolean FC _ADD_DWORD c_dword alength c_pointer aindatal c_dword aindata2 c_pointer aoutdata Addiert dword Zahl aindata2 zu Pointer Zahl aindata1 indem dword wie ein Pointer gebraucht wird unter Beachtung der dwordgrenzen Stellenweise Addition mit bertrag Alength L nge unserer Zahlen aoutdata Ergebnis API c_hresult FC _STR2NUM IC String astring CG _dword astringlength CG character astringdot c_dword anumlength c_dword anumdotpos c_pointer anumnew r boolean aoverflow r boolean aunderflow Wandelt String zur Zahl A_string der String astringlength Stringl nge astringdot oder anumlengt die L nge der Zahl anumdotpos Kommaposition in Zahl anumnew die Zahl die wir erstellen wollen aoverflow berlauf aunderflow Unterlauf 9 Juli 2003 Seite 13 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 API void FC _INT c_dword alength c_dword adotpos c pointer aoriginal c_pointer avorkomma Liefert die Vorkommastellen einer Zahl Vorkommastellen aoriginal werden nach avorkomma kopiert A_length L nge der Zahlen adotpos Kommaposition in Zahl aoriginal Originalzahl avorkomma Vorkommastellenzahl API void EC _FRAC c_dword
163. p CXMLBase axml Add_New_Sub_Node erstellt einen neuen Knoten und gibt ihn in axml zur ck VIR c_hresult SC Add New _Sub_Node rp_CXMLNode axml private Name eines XML Objektes p_CString m name Unterobjekjte eines XML Objektes p_CObjectList m_subnodes Attribute und Attributwerte eines XML Objektes p_CDoubleStringList m attributes hi endif 9 Juli 2003 Seite 20 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 1 1 5 5 Header CXML h CXML repr sentiert ein komplettes XML Dokument Es ist der Einstiegspunkt f r das Modul Formelparser ifndef CXML_ USED define CXML_ USED include BASICS h include CXMLBase h include CXMLPT h CLASSAPI CXML DEFINE_TYPES CXML CLASSAPI CXML public CXMLBase public Konstruktor athreadsecured hat in dieser Anwendung keine Bedeutung CXML c_boolean athreadsecured false Destruktor VIR CXML void A FromString erstellt ein XML Objekt abgeleitet von CXMLBase aus einem String astring Dabei werden die zu dem Objekt geh renden Daten aus dem String gel scht VIR c_hresult sc FromString ep CString astring A ToString veranlasst ein XML Objekt sich in einen String astring zu schreiben VIR c_hresult SC ToString cp _CString astring Type liefert den genauen Typ eines XML Objekts als ganzzahligen Code zur ck VIR c_dword se Ty
164. pe void Get_Sub_Countliefert die Anzahl der Unterobjekte eines XML Objekts zur ck VIR c dword SC Get Sub Count void Get_Sub liefert den Pointer des Unterobjekts mit dem Index aindex zur ck VIR c hresult SC Get Sub c dword aindex rp CXMLBase axml u S u Add_New_Sub_Node erstellt einen neuen Knoten und gibt ihn in axml zur ck VIR c hresult sc Add New Sub Node rp CXMLNode axml Z New Sub Node erstellt einen neuen Knoten und gibt ihn in axml zur ck VIR c_hresult sc Add New PI rp_CXMLPI axml private gesamten Knoten Objekte des Baumes p_CObjectList m items l endif 9 Juli 2003 Seite 21 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 1 2 MathClient Die Module des MathClients exportieren keine Routinen Sie werden nur intern benutzt 1 1 2 4 Modul MathStuff Zust ndiger Thomas Weise Aufgrund einer schweren Erkrankung von Rico Ro berg musste der Teamleiter einspringen um die Arbeit am MathClient fortzusetzen Da er jedoch mit der Planung und der Struktur des Kodes des Rico Ro berg sowie der Programmiersprache Visual Basic nicht famili r war konnte nur eine eine provisorische L sung zur Umwandlung von der Infixschreibweise mathematischer Ausdr cke zu g ltigem MathML Text entwickelt werden Diese weicht von der Planung in Teilbeleg 2 stark ab Der betreffende Teil des Beleg wurde von Herrn Ro berg erstellt Der Teamleiter war nicht n her mit d
165. pl temp2 do til t til aone overflow _ADD alength aout if toob true aone true atwo true afour afive afive true true asix asix true true true true ml_16 true ml_16i true m2_8 atwo umsetzen der Formel afive asix b C d aunderflow aunderflow aunderflow div0 diti divO aout_h aout_h aout toob _MUL alength adotpos ml_16i ml_16 ml_16i aunderflow if toob _DIV alength adotpos toob Iz alength ml aone ml _16i ml aunderflow divO if toob _ADD alength m2_8i m2_8 m 81 _ADD alength m2_8i aone ah _ADD alength m2_8i afour b_h _ADD alength m2_8i afive ch _ADD alength m2_8i asix d h _DIV alength adotpos afour a_h a aunderflow divO _DIV alength adotpos atwo b_h b aunderflow divO _DIV alength adotpos aone c_h c aunderflow divO 9 Juli 2003 Seite 67 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 while _FR ERE F ERE F _FREE _FREE _FRE F _FRE F _FRE F _FRE F _FRE F _FRE F _FRE F _FRE F _FRE F _FR _FR _FR _FR _FR _FRE F _FR FR T T T T T T T T T T z T T T _DIV aleng
166. r wsalock 0 return retval Diese Routine sollte bei Programmende aufgerufen werden sie deinitialisiert die Windows Netzwerkumgebung c_hresult FG CloseWSA void hresult retval S_OK dword 1 InterlockedDecrement wsalock if l1 0 if f WSACleanup 0 retval wsaerror zero amp wsadata sizeof wsadata return retval Im Konstruktor werden die Variablen initialisiert CSocket Cocker ce_boolean athreadsecured CStream athreadsecured m event WSA_INVALID EVENT m socket INVALID SOCKET zero amp m address sizeof m address und im Destruktor deinitialisiert CSocket CSocket void m_socket INVALID SOCKET zero amp m address sizeof m address Gibt wieder ob das Socket ge ffnet ist c_boolean SE CSocket IsOpen void if m_ socket INVALID HANDLE VALUE return true else return false 9 Juli 2003 Seite 27 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 Gibt wieder ob vom Socket gelesen werden kann c_boolean sc CSocket CanRead void if IsOpen amp amp GetState CSOCKET_CLIENT return true else return false Gibt wieder ob auf das Socket geschrieben werden kann c_boolean sc CSocket CanWrite void if IsOpen amp amp GetState CSOCKET_CLIENT return true else return fals
167. r aout r boolean adiv0 xte Wurzel aus y berechnen y 0p1 x 0p2 boolean overflow false boolean aunderflow false boolean kompl false pointer opl _COPY alength azahl pointer op2 _COPY alength awurzel pointer aone _NEW alength _INS_BIT alength adotpos true aone zero aout alength 4 if _IZ alength op2 die O te Wurzel ist nicht definiert S 9 Juli 2003 Seite 73 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 if _IZ alength opl Wurzel aus Null if NEGATIVE alength opl Wurzel aus neg Zahl n d if NEGATIVE alength op2 _NOT2 alength op2 op2 kompl true overflow LN alength adotpos opl opl adiv0 Berechnung nch Formel if overflow amp amp adivO overflow DIV alength adotpos aone op2 op2 aunderflow adivO if overflow overflow MUL alength adotpos opl op2 op2 aunderflow if f overflow overflow E X alength adotpos op2 aout if overflow amp amp kompl Korrektur bei neg Wurzel mit 1 Erg _DIV alength adotpos aone aout aout aunderflow adivO lse overflow true else if _NEGATIVE alength op2 overflow true negative Wurzel aus Null n d lse overflow true _FREE aone _FREE opl FREE 0p2 return overflow T T T API c boolean EG _POTENZ
168. rctan 0 3 0 2914567944 0 2914567944 0 2914567945 0 87 0 7159911144 0 7159911144 0 7159911144 cos 0 2 0 9800665778 0 9800665778 0 9800665778 4 47 0 2400224532 0 2400224532 0 2400224533 1000 0 5623790762 0 5623790762 0 5623790763 divide 5 2 2 5 2 5 2 5 10 0 Fehler Fehler ERROR exp 0 1 1 1 5 148 4131591025 148 4131591025 148 4131591 factorial 5 120 120 120 5 Fehler Fehler ERROR In 1 Fehler Fehler ERROR 0 Fehler Fehler ERROR 2 0 6931471805 0 6931471805 0 6931471806 log 10 1 Fehler Fehler ERROR 10 0 Fehler Fehler ERROR 10 2 0 3010299956 0 3010299956 0 3010299957 2 2 1 1 1 minus 5 5 0 0 0 4 6 10 10 10 0 3 3 3 3 pi 3 1415926535 3 1415926535 3 141592654 plus 5 5 10 10 10 1000 10000 9000 9000 9000 D 9 2 9 1999999999 9 2 9 2 power 0 0 Fehler Fehler ERROR 0 1 0 0 0 5 2 24 9999999999 24 9999999999 25 quotient 6 3 2 0 5 2 0 Fehler 5 273 1 2 2 root 2 5 0 4472135954 0 4472135954 0 4472135955 0 5 Fehler Fehler ERROR 1 5 4 9999999999 5 5 2 5 Fehler Fehler ERROR 2 9 2 9999999999 3 3 2 5 9 2 4082246852 2 4082246852 2 408224685 9 Juli 2003 Seite 107 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 sin 0 0 0 0 2 0 9092974268 0 9092974268 0 9092974268 2 0 9092974268 0 9092974268 0 9092974268 1000 0 82687954053 0 82687954053 0 8268795405 tan 0 0 0 0 1 1 5574077246 1 5574077246 1 557407725 1 7 7 6966021394 7 6966021394 7 696602139
169. rd aread gibt die aktuelle Adresse des Sockets aus VIR c_hresult sc Address p_CString aaddress private dword m socket das Sockethandle sockaddr in m address die Socketadresse dword m _ event ein Event zu Synchronisation H c_hresult FC StartWSA void c_hresult FC CloseWSA void endif 9 Juli 2003 Seite 5 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 1 1 1 3 Header CThread h Die Klasse CThread aus diesem Modul bildet sozusagen das R ckgrat der Engine ifndef CTHREAD USED define CTHREAD USED include BASIC_DEFINITIONS h include BASIC_TYPES h include BASIC_ROUTINES h include CcobjectList h CLASSAPI CThread DEFINE TYPES CThread define CTHREAD RUNNING 1 define CTHREAD TERMINATED CTHREAD_ RUNNING 2 define CTHREAD SUSPENDED CTHREAD_ RUNNING 4 define CTHREAD FIRST CTHREAD_ RUNNING 8 CLASSAPI CThread public CObjectList poblic Als owner muss der aufrufende Thread angegeben werden Wird ein Thread im Hauptprogramm gestartet so wird aowner auf 0 gesetzt CThread p CThread aowner 0 VIR CThread void protected Mainthread dient als Framwork f r Execute und wird als Threadroutine gestartet VIR c_hresult SC MainThread void Ai 001 public Execute wird f r die spezifischen Aufgaben der abgel
170. retval S_OK amp amp astring gt Length gt 0 Aufruf der xml_type Funktion Umwandeln von astring in zugeh riges Objekt retval xml_type astring x Wenn o g Aufruf erfolgreich if retval S_OK Hinzuf gen von x zu m_items m items gt Add x L schen von x SET NOLL x return retval c_hresult sc CXML ToString cp _CString astring Aufrufen der ToString Funktion vom CXMLBase Objekt hresult retval CXMLBase ToString astring Wenn o g Aufruf erfolgreich if succeeded retval Variable Zeiger auf CXMLBase Objekt f r aktuelles Objekt p CXMLBase x 0 Variable Zeiger auf Stringobjekt f r aktuellen String p_CString s new CString Indexvariable dword i Solange i lt L nge von m_items for i 0 succeeded retval amp amp i lt m_items gt Length i Kopieren von XML Objekt von m_items an Position i nach x retval m items gt GetAt i CAST r_pointer x Zenn o g Aufruf erfolgreich if succeeded retval Umwandeln von x mittels ToString in s retval x gt ToString s Wenn o g Aufruf erfolgreich if succeeded retval 9 Juli 2003 Seite 87 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 Kopieren von s nach astring retval astring gt AddStr s L schen von s SET_NULL s l return retval c_dword se CXML Type
171. retval S_OK if m_socket S p_CSocket data 0 p_CProcessor p 0 als Terminated Callback geben wir dem Socket unsere Terminated Routine mit beendet der Nutzer das Programm so erh lt der MainThread ein WM_QUIT dann wird unser Thread hier mit Terminate zur Beendigung aufgefordert dadurch werden keine Verbindungen mehr angenommen die bestehenden einzelne Processors aber noch abgearbeitet while retval m socket gt Accept data VTBL_ITEM CTHREAD TERMINAT D INDEX dword this S_OK i f Terminated amp amp data p 0 f r jede Eingangsverbindung wird ein Processor gestartet p new CProcessor data data CAST p_ CThread this p gt Resune il ET_NULL p un un ET_NULL data return retval 9 Juli 2003 Seite 39 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 2 1 3 Modul Formelparser 1 2 1 3 1 Kode Formel cpp include Formel bi Die eigentliche Arbeitsfunktion des Formelparsers Der bergebene Knoten node mu ein Apply Knoten sein Die Ergebnisse werden _unsortiert_ zum String aresult zusammengef gt c_hresult FC Recursive Parsing p_CXMLNode node p_ CString aresult rp_CReal aretval p_CConstants aconsts c_dword anumlength c_dword adotpos hresult retval S_OK R ckgabewert der Funktion aretval 0 if node amp amp aresult CString a
172. riebssysteme niemals 4 GB berschreiten 500 kB 3 MB 4GB Bei den Werten handelt es sich wegen Beliebigkeit um Sch tzungen 2 1 2 Weitere Datenfl sse Es treten keine weiteren Datenfl sse auf 19 Mai 2003 Seite 29 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 2 1 3 Absch tzungen e Gesamtsystem Es wird von einer erwarteten Nutzungsdauer von 3 Jahren und einer maximalen Nutzungsdauer von 10 Jahren ausgegangen e Benutzer Es wird von mindestens einem und maximal 1000 gleichzeitigen Anfragen durch Benutzer und auch durch automatisierte Applikationen am Server ausgegangen Je schneller die Netzwerkverbindung und der Prozessor des Servers sind und je mehr Arbeitsspeicher zur Verf gung steht desto mehr Benutzer k nnen gleichzeitig bei akzeptablen Verz gerungs und Rechenzeiten vom Server bedient werden Am Klienten arbeitet stets genau ein Benutzer e _Serveranfragen Der Server wird 24 Stunden am Tag betrieben und steht deshalb immer zur Verf gung Wenn ein Auftrag die Bearbeitungsdauer von einer Minute nicht berschreitet bei durchschnittlich 10 Auftr gen gleichzeitig k nnen an einem Tag maximal 14400 Rechenanfragen befriedigt werden Im Jahr w ren dies bis zu 5 256 000 Anfragen e Serverapplikationen Gegenw rtig ist vorgesehen die Serverapplikation auf 3 leistungsstarken Gro rechnern mit Windows XP Betriebssystem zu installieren e Klientenapp
173. rnachl ssigt werden da im System keine Datenspeicherung vorgesehen ist 3 3 Integrit t Auf Grund der Funktion und den Einsatzbedingungen sind f r das System Mathserver ist keine besonderen Schutzmechanismen vorgesehen Das Programm empf ngt bearbeitet speichert oder versendet keinerlei Daten die einer Geheimhaltung unterliegen k nnten Es werden nur mathematische Aufgaben empfangen bearbeitet und deren Ergebnis evtl mit Zwischenergebnissen zur ckgesendet Deshalb ist ein besonderer Schutz der Daten hinf llig Des Weiteren soll das System in Hochschulen und Universit ten zum Einsatz kommen Das hei t der Server befindet sich innerhalb eines Netzwerkes dass durch Firewalls gesch tzt ist Dies sollte einen zus tzlichen Schutz vor unberechtigten Zugriffen von au en auf das System gew hrleisten 19 Mai 2003 Seite 32 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 3 4 Flexibilit t Da von Seiten der Benutzer hohe Anforderungen an die Erweiterbarkeit die Flexibilit t und die Zukunftssicherheit des Systems gestellt werden wurde auf diesen Punkt besonderes Augenmerk gelegt Das System Mathserver arbeitet mit dem neuen und zuk nftigen Textstandard Unicode Es unterst tzt allerdings auch ltere Standards wie ASCII und ANSI Die Eingabe und die Bearbeitung der mathematischen Formeln ist daher prinzipiell mit jedem Schreibprogramm m glich dass eine dieser Standards unt
174. rzeichen und x gt also Endezeichen des ffnenden Tags und x also Tag eines leeren Knotens ist while i lt str_len amp amp x astring gt GetAt i gt SI il S x l _S gt amp amp x _S Hinzuf gen von x zum_name m name gt AddUnichar x A0 inkrementieren um n chstes Zeichen zu pr fen i 9 Juli 2003 Seite 80 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 Setzen von retval auf S_FALSE da in diesem Fall f r das Programm nicht verwertbare Daten vorliegen else retval S_FALSE Solange i tes Zeichen gleich ist while astring gt GetAt i BUT Solange i Stringl nge und x also i tes Zeichen gleich ist while i lt str_len amp amp x astring gt GetAt i _S A0 inkrementieren also Leerzeichen berspringen ipi Zenn x 7 und x gt also kein Endezeichen if x astring gt GetAt i _S amp amp x _S gt Erstellen der Variablen att name und att_value att Dame new CString false att_value new CString false Solange i Stringl nge und x ist while i lt str_len amp amp x astring gt GetAt i _S IPF x also aktuelles Zeichen wird att_name zugef gt folglich befindet sich in att name nach der Schleife der Attributname att_name gt AddUnichar x mittels QuoteEnd wird die Position des zum A
175. se R Fischer R Kreiner T Weise R Fischer R Kreiner R Ro berg T Ziegs T Ziegs R Kreiner R Fischer Start 19 Mai 2003 Teilbeleg 1 Seite 36 von 37 Teilbeleg 2 Teilbeleg 3 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 6 Teamplanung Tabelle 6 1 Thomas Weise Thomas Ziegs Rico Ro berg Roland Fischer Rene Kreiner Teamleiter Hauptarchitekt Entwurfsverantwortlicher Programmierer f r Grundobjekte und Operationen und Zusammenf gen der einzelnen Module Sachverst ndiger f r Mathematik Qualit tsicherungsmanagement Programmierer f r s mtlichen mathematischen Operationen Dokumentationsspezialist Eingabespezialist Programmierer des Klienten und des Formelparsers Zeitplanverantwortlicher Systemanalyst Programmierer des XML Parsers und evtl der Installationssoftware in Unterteam Verhaltensanalyst Handbuch und Hilfesystementwicklung Programmierer des XML Parsers und evtl der Installationssoftware in Unterteam 19 Mai 2003 Seite 37 von 37 Softwarepraktikum 2003 MathServer Projektdokumentation Teilbeleg 2 Teamleiter Thomas Weise Mitglieder des Projektteams Roland Fischer Ren Kreiner Rico Ro berg Thomas Ziegs Praktikumsbetreuer Dipl Inf Lutz Neugebauer Chemnitz den 23 06 2003 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betre
176. sive seiner Unterobjekte zu l schen VIR c_hresult SC Clear void Type liefert den genauen Typ eines XML Objekts als ganzzahligen Code zur ck XML_BASE O wird hier zur ckgegeben XML_DOCUMENT 1 XML_NODE 2 XML_PROCESSING_INSTRUCTION 4 VIR c_dword sc Type void Get_Text liefert den Text eines XML Objekts in einem String astring zur ck VIR c_hresult sc Get Text ep _CString astring Set_Text setzt den Text eines XML Objekts auf den Wert eines Strings astring VIR c_hresult sc Set Text ep _CString astring 23 Juni 2003 Seite 23 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 1 2 5 4 CXMLNode Klasse abgeleitet von CXMLBase CXMLNode repr sentiert die normalen XML Knoten Sie treten in der Form lt Name Attribut Wert gt Text lt Name gt bzw lt Name gt auf und k nnen beliebig tief geschachtelt werden Members m_string p_CString Name eines XML Knotenobjekts m_offset dword der Offset eines XML Objekts in seinen bergeordneten Knoten in Zeichen m_subnodes p_CObjectList Liste der Unterknoten eines XML Knotenobjekts m_attributes p_CDoubleStringList Attribute Name und zugeh riger Wert eines XML Knotenobjekts Methoden Die Funktion Fromstring berschreibt die bereits existierende Funktion Fromstring aus der Klasse CXMLBase Fromstring erstellt ein Knotenobjekt aus einem String astring Dabei werden die zu dem Objekt geh renden Daten aus de
177. stellen Diagramm 1 5 Formel XML Zerlegung XML Baum Zi verarbeitung Ein Pi Teilergebnis Matheaufgabe_mZ nischen Matheaufgabe_0Z ergebnisse Ergebnis_mZ Sep Ergebnis oi Tac e Erzeugung 19 Mai 2003 Seite 6 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 1 2 2 3 Verfeinern der Prozesse des prim ren Verhaltensmodells 1 2 2 3 S Verfeinerungen zu den Prozessen des Servers Von jedem einzelnen Prozess k nnen spezifische Fehler der Eingabedaten erkannt werden Die restlichen Prozesse werden dann nicht ausgef hrt Diagramm 1 6 Formel XML Zerlegung XML Baum gt verarbeitung Ein E N Teilergebnis Matheaufgabe_mZ Matheaufgabe_oZ Fehler behandlung Zwischen ergebnisse Ergebnis_mZ XML XML Baum 4 Ergebnis_oZ 4 Aus Erzeugung 19 Mai 2003 Seite 7 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 1 2 2 3 C Verfeinerungen zu den Prozessen des Klienten Eine Fehlererkennung erlaubt das Abfangen von Falscheingaben und somit das Umgehen der Daten bertragung an den Server Diagramm 1 7 Dateneingabe Eingabe FL schnittstelle Eingabetext Matheaufgabe_mZ XML Erzeugung Jk Matheaufgabe_oZ Ergebnis_mZ A XML Ergebnis_oZ Zerlegung Ausgabetext Bildschirmausgabe Darstell
178. string c_hresult sc CXMLNode Gert ACL Val ep _CString aattr cp _CString aval hresult retval S_OK Zenn aval nicht leer L sche aval if aval retval aval gt Clear else retval E INVALIDARG Wenn o g Anweisung erfolgreich if succeeded retval Variable f r Position von Attribut in m_attributes dword d m attributes gt Find aattr Wenn Attribut vorhanden if d NOT_FOUND Variablen Strings f r Attributname und wert p_CString sl 0 p CString s2 0 Kopieren von Attributname und wert von m_attributes an Position d nach s1 und s2 retval m attributes gt GetAt d sl s2 Zenn o g Anweisung erfolgreich if succeeded retval 9 Juli 2003 Seite 85 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 L schen von s1 SET_NULL s1 Setze Wert von aval auf Wert von s2 retval aval gt FromStr s2 L schen von s2 SET_NULL s2 Sonst Fehler else retval E FAIL 7 return retval c_hresult SE CXMLNode Set_Att Val ep _CString aattr cp CString aval hresult retval S_OK Wenn Attribut aattr in m_attributes vorhanden if retval m attributes gt Find aattr NOT_FOUND d Setzen von Attribut aattr auf bergebenen zugeh rigen Wert aval retval m attributes gt SetAt retval aattr aval Sonst Einf gen von Attribut aattr und a
179. t lt powu gt lt trig gt lt log gt lt fak gt lt betrag gt Der Ausgabetext entspricht entweder einer Zeichenkette f r die Fehlermeldung oder einer reellen Zahl in der Form lt zahl gt f r End und Zwischenergebnisse 19 Mai 2003 Seite 10 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 1 2 2 4 2 Liste der unterst tzten MathML Tags f r den Server Das Projekt unterst tzt einen Subset des MathML Standards der f r die bertragung der gew nschten mathematischen Aufgaben ausreichend ist Dabei werden die Tags von MathML in drei Gruppen klassifiziert Die erste Gruppe enth lt Tags die unterst tzt werden dann folgen als Erweiterung geplante Tags und Tags deren Unterst tzung in n chster Zukunft nicht vorgesehen ist Folgende Tags sind f r die Formeldarstellung in den Datenstr men Matheaufgabe o und Matheaufgabe_mZ zul ssig Bei Serveranfrage und antwort werden gew nschte Zwischenergebniss durch eindeutige id Attribute identifiziert z B lt exp id 123 gt oder lt apply id abc gt lt apply gt Tabelle 1 5 1 aktuell unterst tzt als Erweiterung geplant noch nicht unterst tzt lt abs gt lt and gt lt annotation gt lt annotation gt lt apply gt lt apply gt lt arg gt lt annotation xml gt lt annotation xml gt lt arccos gt lt ceiling gt lt approx gt lt arcsin gt lt conjugate gt lt arccosh gt
180. t FFF ab welches dann entweder durch nichts oder FE Erom End ersetzt wird Berechnet die L nge des Strings neu und passt sie an wenn aresizeifpossible wahr ist VIR c_hresult SC RecalculateLength c_boolean aresizeifpossible true Kopiert den Quellstring astring und zwar maximal amaxlen Zeichen in den String VIR c hresult SC FromTYP DAT astring c _dword amaxlen MAX DWORD F gt maximal amaxlen Zeichen von astring an den String an VIR c_ hresult SC AddTYP DAT astring c _dword amaxlen MAX DWORD F gt ein Line Feed XML Definition des Zeilenumbruchs an den String an VIR c_ hresult SC Return void F gt ein Tabulatorzeichen an den String an VIR c hresult SC Tab void F gt ein Leerzeichen an den String an VIR c_hresult SC Space void F gt das Zeichen achar an den String an VIR c_hresult SC AddCHR c_DAT achar F gt maximal amaxlen Zeichen von astring an Stelle aposition ein VIR c_hresult SC InsertTYP c_DAT astring CG dword aposition 0 c dword amaxlen MAX DWORD 23 Juni 2003 Seite 8 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 L scht alength Zeichen aus dem String beginnend bei aindex VIR c_hresult SC Delete e_dword aindex 0 c dword alength 1 Vergleicht den String mit einem anderen astring man kann festlegen ob Gro und Kleinschreibung unterschieden acasesensitive wird und wieviele am
181. t sc ToString ep _CString astring Type liefert den genauen Typ eines XML Objekts als ganzzahligen Code zur ck hier 1 VIR c_dword sc Type void Get_Sub_Count liefert die Anzahl der Kindknoten eines XML Objekts zur ck VIR c_dword sc Get Sub Count void Get_Sub liefert einen Zeiger auf den Unterknoten mit dem bergebenen Index aindex in axml zur ck VIR c_hresult SC Get_Sub c_dword aindex rp CXMLBase axml Add_New_Sub_Node erstellt einen neuen Unterknoten und liefert einen Zeiger auf das Objekt axml zur ck VIR c_hresult sc Add New Sub Node rp_CXMLNode axml 23 Juni 2003 Seite 22 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 1 2 5 3 CXMLBase Klasse abgeleitet von CBase CXMLBase ist die grundlegende Klasse des XMLParsers Hier werden die Prototypen f r das prinzipielle Verhalten gelegt Members m_string p_CString ein General Purpose String m_offset dword der Offset eines XML Objekts in seinen bergeordneten Knoten in Zeichen Methoden FromString erstellt ein XML Objekt abgeleitet von CXMLBase aus einem String astring Dabei werden die zu dem Objekt geh renden Daten aus dem String gel scht VIR c_hresult SC FromString ep _CString astring ToString veranlasst ein XML Objekt sich in einen String astring zu schreiben VIR c_hresult SC ToString ep _CString astring Clear veranlasst ein XML Objekt seine gesamten Daten inclu
182. tante 1 m_two pointer Konstante 2 Methoden Gibt z wieder VIR c pointer PI void Gibt wieder VIR c _ pointer Half_PI void Gibt er wieder VIR c pointer FOURTH PI void Gibt 1 wieder VIR c _ pointer ONE void Gibt 2 wieder VIR c pointer TWO void Gibt 4 wieder VIR c pointer TWO void 23 Juni 2003 Seite 17 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 1 2 4 2 CReal Klasse abgeleitet von CBase CReal kapselt die schnellen bin rbasierten Rechenoperationen in eine Klasse die vom FormelParser effektiv genutzt werden kann Members m_length dword Anzahl von DWord Einheiten der Zahl m_dotpos dword logische Position des Kommas m_userintbits dword Anzahl der Bits im Ganzzahlanteil m_userfracbits dword Anzahl der Bits im Nachkommaanteil m_error boolean Gibt an ob die Zahl g ltig ist m_data p_dword Daten der Zahl Methoden Setzt eine Zahl auf ung ltig VIR void SC Invalidate void Gibt an ob die Zahl ung ltig ist VIR boolean SG Error void L scht die reelle Zahl setzt sie auf undefiniert VIR c_hresult SC Clear void Kopiert die reelle Zahl FRA cp_CReal SC Copy cp _CReal al Bildet das Einerkomplement der reellen Zahl FRA cp _CReal SC Not cp _CReal al Bildet das Zweierkomplement der reellen Zahl FRA cp _CReal SC Not2 cp _ CReal al Gibt wieder ob die Zahl negativ ist FRA c boole
183. tellen Formel drucken Berechnen Beenden Formeleingabe Optionen In der PictureBox Eingabetext wird die bisher eingegebene Formel grafisch dargestellt es kann jedoch nicht direkt Text eingegeben werden ber die Tastatur eingebbare Zeichen werden in die Textbox Text1 eingegeben andere Zeichen und Konstanten ber die Dropdown Listen Konstante einf gen und Sonderzeichen einf gen 19 Mai 2003 Seite 23 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 In der Textbox Text2 kann die gew nschte Rechengenauigkeit angegeben werden falls die Checkbox Benutzerdefinierte Genauigkeit aktiviert wird Mit der Schaltfl che Formel drucken wird die in Eingabetext dargestellte Formel ausgedruckt die Schaltfl che Berechnen l st den Berechnungsvorgang aus und wechselt zur Registerkarte Ergebnisse 1 3 2 2 Registerkarte Ergebnisse GER N chstes Teilergebnis Vorheriges Teilergebnis Aktuelles Teilergebnis drucken Ale Teilergebnisse drucken Ergebnis Formeleingabe Ergebnisse Aussasso Wssnnsnussnssnssusennd Beenden In der PictureBox Ausgabetext wird wiederum die eingegebene Formel dargestellt wobei aber diesmal jeweils die ganze Formel oder nur ein Teil der Formel durch Markierung hervorgehoben wird Das Ergebnis des markierten Teils wird im Textfeld Ergebnis an
184. ten Fenster angezeigt wird Standardm ig die des Gesamtausdrucks Durch N chstes Teilergebnis und Vorheriges Teilergebnis k nnen die Teilergebnisse selektiert werden Diese k nnen auch einzeln oder komplett ausgedruckt werden durch die Buttons Aktuelles Teilergebnis drucken Alle Teilergebnisse drucken Mathtlient m Serverinformationen Name k Seryername gt Port 20000 Localhost eintragen Formeleingabe Ergebnisse Optionen Beenden Diese Seite dient zum einstellen der Netzwerkverbindung Anstatt lt Servername gt muss der Computername oder die IP des Computers angegeben werden auf dem der MathServer gestartet wurde Der Port sollte auf dem Standardwert von 20000 belassen werden um beste Performance zu erzielen Seite 9 von 11 HTTP Header GET solution decimals 1000 fractals 1000 HTTP 1 1 SM Header lt xml version 1 0 encoding iso 8859 1 gt lt math gt lt apply id 1 gt lt minus gt lt apply id 2 gt lt plus gt lt apply id 3 gt lt plus gt lt apply id 4 gt lt minus gt lt cn gt den app id 5 gt lt plus gt lt cn gt De cn gt lt apply MathML Daten ig 6 gt lt times gt lt cn gt 3 lt Zen lt apply id 7 gt lt sin gt lt apply id 8 gt lt times gt lt apply id 9 gt lt divide gt lt cn gt 3 lt cn gt lt cn gt 4 lt cn gt lt apply gt lt pi gt lt apply gt lt apply gt lt apply gt lt apply gt lt
185. ten je ca 30 Bytes an Steuerinformation Sie allokieren den Speicher f r die eigentliche Zeichenkette Eine Zeichenkette im internen Format besteht aus Unicode Zeichen das hei t jedes Zeichen belegt zwei Bytes Eine Zeichenkette mit n Zeichen belegt also 30 2 n Bytes Da sie aus maximal 2 Zeichen bestehen kann w rde dies einen maximalen Speicherbedarf von 2 2 30 Bytes 4294967326 Byte bedeuten Die 32 bit Betriebssysteme siehe 4 1 2 Betriebssysteme beschr nken die Speichervergabe an ein Programm jedoch auf maximal 4 Gigabyte Eine Zeichenkette minimaler L nge 0 w rde 30 Byte Speicher belegen Die XML Daten und Daten der verschiedenen Baumstrukturen der Parser XML Verarbeitung Formelberechnung werden durch Zeichenketten beschrieben Auch die reellen Zahlen CReell in den einzelnen Berechnungen werden durch Objekte ca 50 log 10 1 2 Byte Steuerinformation dargestellt F r n Dezimalstellen werden weitere 4 Bytes ben tigt Man k nnte also maximal Lag 2 1 J Dezimalstellen einer reellen Zahl darstellen was eine zu gro e Zahl ist um sie mit einem Standardtaschenrechner zu berechnen Allgemein kann man von im Durchschnitt von nicht mehr als 1000 Dezimalstellen ausgehen was einem Speicherbedarf von 416 50 466 Bytes entspricht Dadurch jedoch dass die reellen Zahlen mit Zeichenketten vom und zum Klienten bergeben werden die auf Grund der obigen berlegungen auf 2 Zeichen beschr nkt si
186. tetes Vorzeichen einbringen if div0 amp amp kompl _NOT2 alength aoutdata aoutdata _FREE opl FREE op2 return aoverflow __forceinline ce boolean F _STR_MUL 10 c_dword alength c_pointer aindata c_pointer aoutdata r boolean aunderflow multipliziert Zahl mit 10 boolean boolette pointer op boolette false op _COPY alength aindata zero aoutdata alength 4 boolette SHL_l1 alength op op boolette boolette ADD alength op acutdata aoutdata boolette boolette SHL_N alength 2 op op boolette boolette ADD alength op acutdata aoutdata boolette _FREE op return boolette __forceinline c_boolean EQ _ADD_DWORD c_dword c_pointer c_dword c_pointer _ asm S xor eax eax test ecx ecx jz ende mov esi aindatal mov edi aoutdata xor edx edx cld lodsd add eax aindata2 stosd jne ende2 9 Juli 2003 Seite 55 von 111 10 dez 1010 bin alength aindatal aindata2 aoutdata Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 looper lodsd adc eax edx Stellenweises addieren mit bertrag stosd jnc ende2 loop looper ende2 mov eax O jno ende not eax ende API c_hresult FC _STR2NUM IC String astring c_dword astringlength c_ character astringdot c_dword anumlength c_dword anumdotpos CG pointer anumnew r boolean aoverflow r boolean aunderflow Wande
187. th _sUB alength _ADD alength c _SUB alength templ toob IZ alength m2 if toob toob MUL alength adotpos a l overflow 3 La II D return overflow API c boolean boolean FG _ARCSIN overflow false boolean boolean boolean boolean pointer pointer pointer pointer pointer pointer pointer pointer pointer pointer pointer pointer zero aout aunderflow false toob false div0 false kompl false al a2 bl b2 cl eg aone atwo temp divl div2 op COPY alength alength 4 ain if _ IZ alength op aone NEW alength _INS_BIT alength adotpos 1 9 Juli 2003 aone d h d b templ d temp2 temp2 adotpos aunderflow m2 ml m2 aout_h aun div derflow Schleife l uft bis sich Ergebnis nicht mehr ndert c_dword c_dword c_pointer c_pointer c_pointer alengt adotpo pi_2 ain aout aone Seite 68 von 111 h S berechnen arcsin x x op arcsin 0 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 if NEGATIVE alength op _NOT2 alength op op Betrag op bilden kompl true if _CMP alength op aone CMP EQUAL arcsin 1 move aout pi_2 alength 4 else if _CMP alength op aone CMP BIGGER arcsin x mit x gt 1 n d overflow true else
188. th L nge der Zahl 9 Juli 2003 Seite 12 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 API c_boolean FC _ADD c_dword alength c pointer aindatal c_pointer aindata2 c_pointer aoutdata Addiert aindata1 mit aindata2 Alength L nge der Zahl aindata1 Operand 1 aindata2 Operand2 aoutdata Ergebnis API c_boolean FC _SUB c_dword alength c_pointer aindatal c_pointer aindata2 c_pointer aoutdata Subtrahiert aindata2 von aindatal Alength L nge der Zahl adot Kommaposition in der Zahl aindata1 Operand 1 aindata2 Operand2 aoutdata Ergebnis API c_boolean FC _MUL c_dword alength c _dword adot CG pointer aindatal c_pointer aindata2 c_pointer aoutdata r boolean aunderflow Multipliziert aindatal mit aindata2 Alength L nge der Zahl adot Kommaposition in der Zahl aindata1 Operand 1 aindata2 Operand2 aoutdata Ergebnis aunderflow Unterlauf API c_boolean BC _DIV c_dword alength c_dword adot c pointer aindatal c_pointer aindata2 c_pointer aoutdata r boolean aunderflow r boolean divO Dividiert aindata1 durch aindata2 Alength L nge der Zahl adot Kommaposition aindata1 aindata2 sind Operanden aoutdata Ergebnis aunderflow wenn bei Berechnung Unterlauf entsteht divO bei Division durch Null Funktioniert nach dem Shift amp Subverfahren __forceinline c boolean EC _STR_MUL_ 10 c_dword alength c pointer aindata c pointer a
189. the Server Betreuer Lutz Neugebauer Teilbeleg 3 If Mid S j 1 Or Mid S j 1 If k lt 1 And Mid S j 1 Thenp j Increase j Loop While j lt Len S And k lt gt 0 Then Decrease k S Mid S 2 j 2 If x abs Then x reparse S Else If x factorial Then x reparse S amp Else If x plus Then x reparse Mid S 1 p 2 amp amp reparse Mid S p Else If x minus Then x reparse Mid S 1 p 2 amp amp reparse Mid S p Else If x times Then x reparse Mid S 1 p 2 amp amp reparse Mid S p Else If x divide Then x reparse Mid S 1 p 2 amp amp reparse Mid S p Else If x root Then x reparse Mid S 1 p 2 amp root amp reparse Mid S p Else If x log Then x reparse Mid S 1 p Zil amp log amp reparse Mid S p Else If x power Then x reparse Mid S 1 p 2 amp amp reparse Mid S p Else x x amp amp reparse S amp End If End If End If End If End If End If End If End If End If Else x E End IE reparse x End Funstion f gt einen neuen Unterausdruck an den Array ids an dabei ist der Index des Unterausdrucks stets auch seine ID im MathML Text Public Function addid ByRef IDS As String S As String As Long ReDim Preserve IDS UBound IDS 1 IDS
190. tierung des Servers f r andere Betriebssysteme nahezu unm glich Das System sollte auch auf neueren Windows Versionen als die mindestens geforderten Windows 2000 und Windows XP optimal lauff hig sein da auf die Windows Kompatiblit t gro en Wert gelegt wurde Da Gro rechner f r den Internetbetrieb oft mit Microsoft Windows Betriebssystemen genutzt werden ist die Abbildung des Math Server Konzepts auf diese Umgebung nur logisch Hingegen wurde auf die Portabilit t des Klienten gro en Wert gelegt Dieser Teil des Systems ist zwar f r Windows konzipiert worden ist aber ohne gr eren Aufwand f r andere Plattformen z B Linux Unix Mac konvertierbar sofern diese Plattformen die genutzten Standards HTTP XML MATH ML TCP IP unterst tzen 19 Mai 2003 Seite 33 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 4 Basismaschine und Entwicklungsumgebung 4 1 Basismaschine 4 4 1 Hardware Die notwendige Grundausstattung f r die am Math Server beteiligten PCs muss laut Aufgabenspezifikation in 2 Klassen unterteilt werden F r den Server wird ein wesentlich leistungsst rkerer PC vorausgesetzt als f r den Client F r den Math Client wird folgendes System vorausgesetzt 400 MHz CPU 64 MB RAM 20 MB freier Festplattenspeicher CD ROM Laufwerk Netzwerkzugang LAN min 10 MBit s bzw Internetzugang Modem 56 KBit s Monitor 15 70 Hz und Grafikkarte 256 Farben bei einer
191. tinen als Thread Routine zu nutzen Zus tzlich wurde eine erweiterte Synchronisation implementiert die es erm glicht vom Thread beliebige Unterthreads zu starten Wird auf den bergeordneten Thread gewartet so wird automatisch auch die Terminierung aller Unterthreads abgewartet Dies erm glicht es theoretisch den Server in einer Instanz auf beliebig vielen Ports mit je beliebig vielen Verbindungen gleichzeitig ablaufen zu lassen Members m_handle dword Handle zum Thread m_id dword ID des Threads m_owner p_CThread bergeordneter Thread m_subthreadsevent dword Event f r Kompletttermination der Subthreads m_exitcode hresult COM Success Fehlerkode Methoden Die Thread Routine Sie wird in allen abgeleiteten Klassen berschrieben und f hrt die Aufgabe des Threads durch VIR c_hresult SC Execute void Startet den Thread zum ersten Mal oder nachdem er mit Suspend unterbrochen wurden VIR c_hresult SC Resume void Unterbricht die Ausf hrung des Threads VIR c_hresult SC Suspend void Teilt dem Thread mit dass er die Ausf hrung von Schleifen unterbrechen und keine neuen Subthreads mehr starten soll um terminieren zu k nnen Automatisch auch Terminate aller Subthreads VIR c_hresult SC Terminate void Schickt das Terminate Signal an alle Subthreads VIR c_hresult SC TerminateSubThreads void Wartet auf die Beendigung aller Subthreads VIR c hresult SC WaitForSubThreads c_dword atime INFINIT
192. treuer Lutz Neugebauer Teilbeleg 2 1 2 Definition der Modulleistungen Auf Grund des Umfangs und der Komplexit t der Klassenbeziehungen innerhalb des Projekts wird von einer graphischen Darstellung abgesehen stattdessen werden die Zusammenh nge geschildert Prinzipiell werden einige Definitionen zur Abk rzung von Speicherklassen verwendet Dazu z hlen VIR f r virtuelle Methoden SC f r die Aufrufkonvention Standardcall und FC f r die Aufrufkonvention Fastcall Pascal Delphi native FRA steht f r friend Parameter beginnend mit p_ sind Pointer auf den jeweiligen Datentyp c_ Konstanten und r_ Parameter f r das Call By Reference Aufrufschema Oftmals werden c_hresult Werte zur ckgegeben welche den Success bzw Fehlerkode der Operation repr sentieren 1 2 1 Modul Basics Modul Basics Bearbeiter Thomas Weise Bezeichner Basics nderungsstand 28 05 2003 Kurzbeschreibung Das Modul Basics stellt als Grundlage aller anderen Module atomare Funktionen und Klassen zu Verf gung Es importiert alle Windows Routinen die im gesamten MathServer verwendet werden Es werden keinerlei C native Routinen angewandt um maximale Performance zu gew hrleisten basiert s mtliche Programmierarbeit auf der Windows API Application Programming Interface und selbst entwickeltem Code vorzugsweise Assembler Alle Klassen aller anderer Module leiten sich von den im Modul Basics definierten Klassen ab Export CArray Import alle Windows AP
193. ttributwert Anfangszeichen zugeh rige Endzeichen gesucht Dieser Wert wird j zugewiesen j astring gt QuoteEnd it1 1 A0 um 2 erh hen um Leerzeichen und Anfnagszeichen zu berspringen Aktuelles Zeichen wird att_value zugef gt folglich befindet sich in att_value nach der Schleife der Attributwert for jei t2 iSJ iH att_value gt AddUnichar astring gt GetAt i m_attributes wird aktueller Attributname und zugeh riger Attributwert zugef gt m attributes gt Add att_name att value L schen von att_name und att_value GEI NULL att_name SET NULL ett value it 1 Zenn gt im String enthalten ist also leerer Tag if astring gt IsAtUnicode _S gt i L sche Tag und Tagendezeichen retval astring gt Delete 0 it2 Sonst normaler Knoten else Wenn i tes Zeichen gleich gt if astring gt GetAt i gt L sche Tag und Tagendezeichen astring gt Delete 0 i 1 Erstellen der Variable tag_end tag_end new CString false In tag_end wird der schlie ende Tag erstellt tag _end gt AddUnicode _S lt tag _ end gt AddStr m name tag _end gt AddUnicode _S gt Solange str_len Stringl nge 0 also String nicht leer und nicht found while str_len astring gt Length 0 amp amp found 9 Juli 2003 Seite 81 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server B
194. tur der XML Daten der Serverantwort Die XML Daten der Antwort entspricht dem Symbol lt xmi daten gt der lt antwort gt im Punkt 1 2 2 4 3 Tabelle 1 6 des Servers erfolgt nach MathML Syntax Die einzelnen Ergebnisse Endergebnis und Zwischenergebnisse werden je in lt cn gt tags lt cn gt lt cn gt geklammert Der lt cn gt tag als einiger zul ssiger Daten bergabe Tag erf hrt eine id Nummer als Attribut lt cn id ganze positive Zahl gt Die id nummer stellt die Verkn pfung zwischen dem jeweiligen Ergebnis und dem zugeh rigen Berechnungsabschnitt dar Tabelle 1 7 Element Strukturbeschreibung lt xml pi gt XML Processing Instructions lt xml dt gt XML Comment lt xml mathml gt XML Comment lt xml math gt lt math gt lt xml cnc gt lt math gt lt xml cn gt ep id lt zfolge gt gt lt zahl gt lt cn gt lt xml cnc gt lt xml cn gt lt xml cn gt lt xml cnc gt lt xml answer gt lt xml pi gt lt xml dt gt lt xml mathml gt Beispiel 1 1 lt xml version 1 0 encoding UTF 8 gt lt DOCTYPE math PUBLIC W3C DTD MathML 2 0 EN dtd mathmi2 dtd gt lt math xmiIns http www w3 org 1998 Math MathML gt lt math gt lt cn id 0 gt 587459236482364972407239462845185 234236487235648235423453453 lt cn gt lt cn id 1 gt 122344482364972407239462845185 34589647232335648235423453456745563 lt cn gt lt cn id 2 gt 0 4534567345
195. turn overflow T T API c boolean FG _COS c_dword alength c_dword adotpos c_pointer ain c_pointer aout Berechnet Cos x x b12 boolean overflow false boolean kompl false boolean aunderflow false boolean div0 false boolean toob false boolean toggle false pointer b11 pointer b12 COPY alength ain pointer b21 pointer b22 pointer temp pointer aone zero aout alength 4 _INS_BIT alength adotpos true aout if _IZ alength b12 cos0 1 if _NEGATIVE alength b12 _NOT2 alength b12 b12 aone NEW alength _INS_BIT alength adotpos 1 aone b11 _COPY alength aone b21 _COPY alength aone b22 NEW alength temp NEW alength overflow MUL alength adotpos b12 b12 b12 aunderflow if overflow do Berechnung nach Formel if toggle _NOT2 alength temp temp overflow ADD alength aout temp aout toggle toggle if overf flow toob MUL alength adotpos b11 b12 b11 aunderflow if toob l _ADD alength b22 aone b22 toob _MUL alength adotpos b21 b22 b21 aunderflow if toob _ADD alength b22 aone b22 toob MUL alength adotpos b21 b22 b21 aunderflow if toob zero temp alength 4 _DIV alength adotpos b11 b21 temp aunderflow divO 9 Juli 2003 Seite 64 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugeb
196. twort Function TalkToServer SendData as String ServerlP as Long ServerPort as Long as String 1 2 7 3 Untermodul XML Verarbeitung Dieses Modul erzeugt den an den Server zu sendenden XML String und verarbeitet dessen Antwort Export TreeToXMLString FindSpecificSolution Import Grundlagen 1 2 7 3 1 TreeToXMLString Funktion Wandelt den vom MathParser erzeugten Baum in einen XML String um Function TreeToXMLString MTreeRoot as MTreeNode as String 1 2 7 3 2 FindSpecificSolution Funktion Findet in der Serverantwort ein bestimmtes Zwischenergebnis anhand der ID Function FindSpecificSolution SearchString as String ID as Long as String 1 2 7 4 Untermodul MathParser Wandelt den vom Nutzer eingegebenen mathematischen Ausdruck in eine XML Baumstruktur um Export MathStringToTree Import Grundlagen 1 2 7 4 1 MathStringToTree Funktion Wandelt den vom Nutzer eingegebenen mathematischen Ausdruck in eine XML Baumstruktur um Function MathStringToTree MathString as String as MTreeNode 1 2 7 5 Untermodul MathClient Kern Verkn pft die Funktionalit t der untergeordneten Module zur Gesamtfunktion des MathClient und beinhaltet die eigentliche Nutzeroberfl che Export Import Alle untergeordneten Module 23 Juni 2003 Seite 28 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 1 2 8 TCP IP Schnittstelle Kurzbeschreibung Die TCP IP Schnittstelle dient dem Versen
197. type Gef ges Er war federf hrend bei der textuellen Umsetzung der Teilbelegerzeugnisse der XML Arbeitsgruppe Rico Ro berg Rico Ro berg bereicherte das Team durch gro en Sachverstand in der grafischen Programmierung sowie durch die Entwicklung des Formelparsers welche berplanm ig schnell erfolgte hnliches Tempo legte er bei Erstellung der Klientenapplikation an den Tag bis er unerwartet schwer rztlich nachweisbar erkrankte Dennoch beendete er die Arbeit am Klienten erfolgreich Thomas Weise Thomas Weise bernahm die T tigkeit als Teamleiter Hauptarchitekt und Entwurfsverantwortlicher Seine Grundobjekte und die Engine erm glichten die gute modulare Zusammenarbeit des Teams Thomas Ziegs Thomas Ziegs entwickelte mit Hilfe der Assemblersprache und unter Aufwendung umfangreicher Nachforschungen die mathematischen Routinen des Projektes Er f hrte die Systemtests durch wobei er die letzten kleinen Ecken und Kanten des Projektes mit u erster Akribie abschliff Danach unterst tzte er das Installationsteam mit seiner F higkeit auf dem Gebiet der NSIS Skripts Unter Anwendung vieler wichtigen neuzeitlichen Programmiertechniken wie z B Assembler Optimierung Dynamische Link Bibliotheken Objektorientierte Programmierung mit direkter Manipulation der Vererbungsmechanismen Referenzz hlung Netzwerkprogrammierung Multithreading Integration verschiedener Programmiersprachen Phyton C Visual Basic teamorient
198. uer Lutz Neugebauer Teilbeleg 2 1 Entwurfsdokumentation 1 1 Entwurf der Systemarchitektur 1 1 1 Modulhierarchie der Bibliotheken KN MathClient Mathserver tcp ip Engine Schnittstelle Formelparser Basics grundlegende Objekte Wie man sehen kann ist die Systemarchitektur sehr tief angelegt F r die Module werden dynamische Linkbibliotheken DLLs genutzt um bestm gliche Wartung zu gew hrleisten Im Projekt wird der objektorientierte Programmieransatz weitfl chig genutzt die Klassen der Engine Schnittstelle verwenden threadbasierte Techniken Die einzelnen Klassen der Applikation werden von den DLLs welche stets von einer Arbeitsgruppe gem dem Plan entwickelt werden exportiert Aufgrund der Vielzahl der Klassen und deren komplizierter Struktur ist es sinnvoller die Module und Klassensysteme getrennt zu betrachten wobei sich der globale Ausblick des Diagramms auf die DLLs konzentriert Diagramm 1 1 Die Module werden prinzipiell mit Visual C erstellt nur das Nutzerinterface in Visual Basic Es ist nicht m glich normal exportierte Klassen vom C nach VB zu portieren dies geht nur mit einzelnen Routinen oder ActiveX Elementen Da unser Projekt aber gr tenteils auf simplen Klassen beruht k nnen sie nicht in den MathClient exportiert werden Daher werden hier verschiedene Techniken separat implementiert 23 Juni 2003 Seite 2 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Be
199. uf den MathClient spezialisierte Funktionalit t besitzen hnlich Modul Basics im MathServer Schnittstelle und kurze Beschreibung dieser Hilfsfunktionen Sub Decrease Number As Variant Optional DecStep As Variant 1 Erniedrigt Number um DecStep Function FilterString InText As String RemoveStr As String Optional i ReplaceStr As String As String Entfernt RemoveStr aus einer Zeichenfolge oder ersetzt es durch ReplaceStr Function GetSettingEx Key As String Optional Section As String Optional Default As String Optional HKLM As Boolean As Variant Liest einen Wert aus dem Schl ssel der Anwendung in der Registrierung Sub Increase Number As Variant Optional IncStep As Variant 1 Erh ht Number um IncStep Function RoundedTime Seconds As Double Optional MaxLength As Long Optional Exactness As Long As String Rechnet Seconds in andere Zeiteinheiten um Sub SaveSettingEx Key As String Setting As Variant Optional Section As String Optional HKLM As Boolean Speichert einen Wert im Schl ssel der Anwendung in der Registrierung Function ShowRunTimeError ErrorLocation As String Optional Exception As Boolean Zeigt Laufzeitfehler an au er durch Exception ausgeschlossene Ikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Druckt eine Zeichenfolge auf dem Standarddrucker aus Sub PrintText PrintData As String Dim SD As
200. ungs prozess 19 Mai 2003 Seite 8 von 37 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 1 1 2 2 4 Datenkatalog Wie gesagt ist die Struktur der tempor ren Speicher im Weiteren wieder Speicher der Applikation dynamisch und nicht durch feste Gr en oder Sequenzangaben definierbar Sie l sst sich nur n herungsweise durch grammatikalische Konstrukte ann hern was im Folgenden im Datenkatalog und allen darauf beruhenden Betrachtungen versucht werden soll Der Datenkatalog enth lt sowohl die Formate der Eingabedaten des Math Servers und des Math Clients Verwended werden die allgemeinen Standards XML MathML HTTP und TCP IP des W3C f r die Ein und Ausgabedaten Die Definition von XML der Extensible Markup Language XML 1 0 Second Edition befindet sich im Internet unter http www w3 org TR REC xml Die Definition von MathML der Mathematical Markup Language MathML Version 2 0 befindet sich im Internet unter http www w3 org TR MathML2 Die zugeh rige Grammatik kann ber http www w3 org tr 2003 wd mathml2 20030411 appendixp html erreicht werden Zu Daten bertragung verwenden wir ein HTTP kompatibles Protokoll Die Spezifikation zu HTTP HyperText Transfer Protocol befindet sich im Internet unter ftp ftp isi edu in notes rfc26 16 txt Der eigentliche Datentransfer erfolgt ber das Transfer Control Protocol Internet Protocol TCP IP welches ebenfalls weltweite Verbr
201. v ecx aiszero mov ecx ebx PI c boolean FC _FACTORIAL c_dword alength c_dword adotpos c_pointer ain c pointer aout u bildet Fakult t einer Zahl l boolean retval false pointer opl COPY alength ain zero aout alength 4 boolean b if _ POSITIVE alength opl _SHR_N alength adotpos opl opl Rechtsschieben um _INC DEC zu benutzen if _IZ alength op1 _INS_BIT alength 0 true aout aout 1 do Fakult t bilden retval MUL alength 0 opl aout aout b 9 Juli 2003 Seite 61 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 DEC alength opl opl b while b amp amp retval _SHL_N alength adotpos aout aout Korrekturschiebung else _INS_BIT alength adotpos true aout else _INS_BIT alength adotpos true aout _FREE opl return retval T API c_boolean SC EX c_dword alength c_dword adotpos c_pointer ax c_pointer aout Berechnet e x x b11 b12 boolean overflow false boolean kompl false boolean aunderflow false boolean div0 false boolean toob false pointer b11 _COPY alength ax pointer b12 COPY alength ax pointer b21 pointer b22 pointer temp pointer aone zero aout alength 4 _INS_BIT alength adotpos true aout if _IZ alength b11 e 0 1 if _NEGATIVE alength b11 NOT2 alength b11 b11 Betrag op bilden _NOT2
202. val in m_attributes else retval m attributes gt Add aattr aval 0 return retval c_dword sc CXMLNode Get_Sub_ Count void R ckgabe der L nge von m_subnodes return m subnodes gt Length c_hresult sc CXMLNode Get_Sub c_dword aindex rp_CXMLBase axml hresult retval S_OK Zenn aindex lt L nge von m_subnodes if aindex lt m subnodes gt Length Kopieren von Unterknoten von m_subnodes an Position aindex nach axml retval m subnodes gt GetAt aindex r_pointer axml Sonst Fehler else retval E FAIL return retval c_hresult sc CXMLNode Add New Sub Node rp_CXMLNode axml hresult retval S_OK Hinzuf gen von axml zum_subnodes retval m subnodes gt Add r _pointer axml return retval 9 Juli 2003 Seite 86 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 2 1 5 5 Kode CXML cpp Konstruktor erstellt m_items CXML CXML ce_boolean athreadsecured CXMLBase athreadsecured m items new CObjectList false Destruktor l scht m_items CXML CXML void ET _NULL m_ items se ED z n c_hresult sc CXML FromString cp _CString astring Aufrufen der FromString Funktion vom CXMLBase Objekt hresult retval CXMLBase FromString astring Variable Zeiger auf CXMLBase Objekt f r aktuelles Objekt p_CXMLBase x 0 Solange L nge von astring gt 0 while
203. void R ckgabe des Code Wertes f r ein CXML Objekt return XML DOCUMENT c_dword sc CXML Get_Sub_Count void R ckgabe der L nge von m_items return m items gt Length c_hresult SC CXML Get_Sub c_dword aindex rp_CXMLBase axml hresult retval S_OK Zenn aindex lt L nge von m_items if aindex lt m items gt Length Kopieren von XML Objekt von m_items an Position aindex nach axml retval m items gt GetAt aindex r _pointer axml Sonst Fehler else retval E FAIL return retval c_hresult sc CXML Add_ New Sub Node rp_CXMLNode axml hresult retval S_OK Hinzuf gen von axml Knotenobjekt zu m_items retval m items gt Add r pointer axml return retval c_hresult SC CXML Add New PI rp_CXMLPI axml hresult retval S_OK Hinzuf gen von axml Prozessanweisungsobjekt zu m_items retval m items gt Add r pointer axml return retval 9 Juli 2003 Seite 88 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 1 2 2 MathClient 1 2 2 1 Modul Formular Hauptfenster Modul MathClient Kern Teilbeleg 2 Ikkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk MathClient Klient f r MathServer c 2003 Roland Fischer Ren Kreiner Rico Ro berg Thomas Weise Thomas Ziegs Programmierer MathClient Rico Ro berg Aufgrund Krankheit des Prgrammier
204. wenn MathSerwer noch l uft wird der Computer neu gestartet Das Installationsverzeichnis C Programme1MathServer amp Client mu immer von Hand gel scht werden Abbruch Nullsoft Install System v2 0b3 Seite 11 von 11
205. wenn das MSB von aindata mit L nge alength 0 ist API c_boolean FC NEGATIVE c_dword c_pointer alength aindata Gibt true zur ck wenn das MSB von aindata mit L nge alength 1 ist API c_boolean FC TEST_BIT c_dword CG _dword c pointer alength abit adata Testet an Position abit in adata mit L nge alength auf 1 und iefert true wenn 1 API void FC _INS_BIT c_dword c_dword c boolean c_pointer alength abitnum aooz adata Setzt Bitwert aooz an Position abitnum in adata mit L nge alength API c_dword Be _MSB c_dword c_pointer alength adata Gibt als c_dword den Index des MSB von adata zur ck Alength L nge der Zahl API c_dword Pe _LSB c_dword c_pointer alength adata Gibt als c_dword den Index des LSB von adata zur ck Alength L nge der Zahl 9 Juli 2003 Seite 11 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 API c_dword FC _ CMP c_dword alength c pointer aindatal c pointer aindata2 Vergleicht aindata1 mit aindata2 und gibt in als c_dword Ergebnis zur ck Alength L nge der Zahl API c_boolean FC _IZ c_dword alength c_pointer aindata Liefert true wenn aindata 0 Alength L nge der Zahl API c_boolean FC _SHL 1 c_dword alength c_pointer aindata c_pointer aoutdata Linksschieben von aindata um 1 Stelle Speicherung in aoutdata Alength L nge der Zahl
206. zZ alength opl oUtpos _FREE temp _SHR_N alength sl opl amod if div0 amp amp kompl _NOT2 alength amod amod _NOT2 alength adiv adiv T _FREE opl _FREE op2 return aoverflow T T 9 Juli 2003 erwartetes Vorzeichen einbringen Seite 58 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 API c_hresult FC _NUM2STR c_pointer anum c_dword anumlength c_dword anumdotpos CG character astringdot p_CString astring c_dword astringkommastellen wandelt Zahl zum String Betrag der Zahl bilden Vor und Nachkommastellen werden voneinander getrennt Vorkommastellen 10 den Rest in den String schreiben bis Vorkommastellen 0 H chstwertigste Stelle der Zahl steht rechts im String Nachschauen ob Zahl negativ war und evtl Vorzeichen an String anh ngen String drehen Danach Nachkommastellen 10 Vorkommastelle des Ergebnisses wird an String angehangen bis Nachkommastellen 0 Desweitern noch Abfragen um String in brauchbares Format zu wandeln z B Null vor Komma wenn Zahl 0 xxx hresult retval S_OK boolean kompl false boolean div0 false boolean underflow false pointer opl pointer op2 pointer amod pointer 010 dword i dword j dword temp p_CString str new CString if astring astring gt Clear if succeeded retval opl COPY anumle
207. zt abase gt m offset offset m_subnodes wird der Unterknoten abase zugef gt m subnodes gt Add abase L schen von abase un ET_NULL abase else Sonst Ang ngen von x an m_string m string gt AddUnichar x L schen des aktuellen Zeichens astring gt Delete 0 1 Pr fung f r R ckgabewert if succeeded retval amp amp found retval S FALSE i else Setzen von retval auf S_FALSE da in diesem Fall f r das Programm nicht verwertbare Daten vorliegen retval S FALSE return retval Se 9 Juli 2003 Seite 82 von 111 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 3 c_dword sc CXMLNode ToString cp _CString astring Indexvariablen dword i cent 0 Variable f r Offset dword offset 0 Variable f r aktuelles Zeichen character x Variable Zeiger auf Stringoblekt f r Text zwischen ffnendem und schlie endem Tag p_CString text_between Variable Zeiger auf Stringobjekt f r einzuf genden Text p_CString insert string Variable Zeiger auf CXMLBase Objekt f r Unterknoten p_CXMLBase abase 0 Variable Zeiger auf Stringobjekt f r Attributname p_CString att_name Variable Zeiger auf Stringobjekt f r Attributwert p_CString att_value Aufrufen der ToString Funktion vom CXMLBase Objekt hresult retval CXMLBase ToString astring wenn o g Aufruf erfolgreich if succeeded retval
208. zzahldivision von a1 durch a2 durch und speichert das Ergebnis im R ckgabewert FRA cp_CReal SC IDiv cp_CReal al cp_CReal a2 Rest der Division von a1 durch a2 FRA cp_CReal SC Mod cp CReal al cp_CReal a2 Liefert den Betrag von a1 FRA cp_CReal SC Abs cp_CReal al Liefert die Fakult t von a1 FRA cp_CReal SC Factorial cp_CReal al Liefert e hoch a1 FRA cp_CReal SC E X cp_CReal al Sinus von a1 in Bogenma FRA cp CReal SC Sin cp_CReal al Kosinus von a1 in Bogenma FRA cp_CReal SC Cos cp_CReal al Tangenz von a in Bogenma FRA cp_CReal SC Tan cp_CReal al Nat rlicher Logarithmus von a1 FRA cp_CReal SC Ln cp_CReal al Arcussinus von a1 im Bogenma wobei die Konstanten aus dem Set consts verwendet werden FRA cp CReal SC ArcSin cp_CReal al cp_CConstants consts 23 Juni 2003 Seite 19 von 29 Softwarepraktikum SS 2003 Gruppe 11 Mathe Server Betreuer Lutz Neugebauer Teilbeleg 2 Arcuskosinus von a1 im Bogenma wobei die Konstanten aus dem Set consts verwendet werden FRA cp _CReal sc ArcCos cp_CReal cp _CConstants al consts Arcustangens von a1 im Bogenma wobei die Konstanten aus dem Set consts verwendet werden FRA cp _CReal sc Die a2 Wurzel von a1 FRA cp _CReal sc a1 hoch 22 FRA cp _CReal sc ArcTan Wurzel Potenz 23 Juni 2003 cp_CReal cp _CConstants cp_CReal cp _CReal cp_CReal cp _CRe
Download Pdf Manuals
Related Search
Related Contents
The OPEN-ROBOT Controller User Manual Showdesigner 512 - Enlightenment Entertainment Technology KD-R647 / KD-R641 / KD-R547 / KD-R541 / KD-R449 / KD Forte Getting Started Guide Rev3 Samsung RS20BRHS Užívateľská príručka Technisches Handbuch ERDAS IMAGINE Tour Guides ROMÂ ENGLISH DEUTSCH РУССКИЙ BL認定品(BYシリーズ・BPシリーズ)取扱説明書(追補版) Copyright © All rights reserved.
Failed to retrieve file