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