GrafKern.cpp
gehe zur Dokumentation dieser Datei
00001 
00058 // ------------------------------------------------------------------
00059 // Mutabor 2.win, 1997, R.Krauße
00060 // Ausgabe-Funktionen
00061 // ------------------------------------------------------------------
00062 
00063 #include "Global.h"
00064 #include "Interpre.h"
00065 #include "GrafKern.h"
00066 #include "Interval.h"
00067 //#include "Mutabor.rh"
00068 #include "Execute.h"
00069 #include <setjmp.h>
00070 
00071 // Needed at least for Visual C++ 8
00072 #include "Runtime.h"
00073 
00074 #ifdef MUTWIN
00075 #ifdef WX
00076 #include "wx/msgdlg.h"
00077 wxStaticText* CompDiaLine = NULL;
00078 #else
00079 HWND CompDiaLine;
00080 #endif
00081 #endif
00082 
00083 int protokoll_ausgabezeile = 0;
00084 int aktionen_ausgabezeile = 0;
00085 
00086 extern jmp_buf weiter_gehts_nach_compilerfehler;
00087 
00088 #define PROT_MAXLINES 30
00089 #define PROT_MAXCHARS PROT_MAXLINES*40
00090 #define AKTIONEN_MAX 100
00091 
00092 char protokoll_string[PROT_MAXCHARS];
00093 
00094 char sAktionen[AKTIONEN_MAX*50];
00095 
00096 unsigned char boxAktionen[AKTIONEN_MAX];
00097 
00098 int lAktionen[AKTIONEN_MAX];
00099 
00100 int nAktionen = 0;
00101 
00102 int keys_changed[MAX_BOX];
00103 
00104 int keys_changed_sum;
00105 
00106 #ifdef WX
00107 wxString sd1, sd2, sd3, sd4, sd5, sd6;
00108 
00109 wxString Fmeldung;
00110 
00111 #else
00112 char sd1[100], sd2[100];
00113 
00114 char Fmeldung[255];
00115 
00116 #endif
00117 
00118 
00119 // Aktionen ---------------------------------------------------------
00120 
00121 void AktionenInit()
00122 {
00123         nAktionen = 0;
00124 }
00125 
00126 #ifdef MUTWIN
00127 /*void aktionen_message( char * Meldung )
00128 {
00129   while ( aktionen_ausgabezeile >= PROT_MAXLINES ||
00130          strlen(aktionen_string) + strlen(Meldung) > PROT_MAXCHARS - 2 )
00131   {
00132          char *s1 = strstr(aktionen_string, "\n");
00133          if ( s1 )
00134     {
00135       strcpy(aktionen_string, &(s1[2]));
00136       aktionen_ausgabezeile--;
00137     }
00138   }
00139   if ( aktionen_ausgabezeile ) strcat(aktionen_string, "\n");
00140   strcat(aktionen_string, Meldung);
00141   aktionen_ausgabezeile++;
00142   aktionen_changed = 1;
00143 }*/
00144 
00145 void AktionenMessage(int box, const char* aktionName)
00146 {
00147         if ( nAktionen < AKTIONEN_MAX ) {
00148                 boxAktionen[nAktionen] = ((unsigned char*)&box)[0];
00149                 int l = 0;
00150 
00151                 if ( nAktionen )
00152                         l = lAktionen[nAktionen-1];
00153 
00154                 strcpy(&sAktionen[l], aktionName);
00155 
00156                 lAktionen[nAktionen++] = l + strlen(aktionName);
00157         }
00158 }
00159 
00160 int pascal _export GetActString(unsigned char **box, int **l, char **s)
00161 
00162 {
00163         int n = nAktionen;
00164         *box = boxAktionen;
00165         *l = lAktionen;
00166         *s = sAktionen;
00167         nAktionen = 0;
00168         return n;
00169 }
00170 
00171 // Compiler-Dialog --------------------------------------------------
00172 
00173 #ifdef WX
00174 void InitCompDia(CompDlg *compDia, wxString filename)
00175 {
00176         wxASSERT(compDia);
00177         CompDiaLine = compDia->GetLine();
00178 }
00179 
00180 #else
00181 void InitCompDia(HWND compDiaLine)
00182 {
00183         CompDiaLine = compDiaLine;
00184 }
00185 
00186 #endif
00187 
00188 #else
00189 
00190 #include <iostream.h>
00191 
00192 extern ostream *Echo;
00193 
00194 void aktionen_message( char * Meldung )
00195 {
00196         *Echo << "\n  Action: " << Meldung;
00197 }
00198 
00199 #endif
00200 
00201 void calc_declaration_numbers(char withNames)
00202 {
00203 #ifdef MUTWIN
00204 #ifdef WX
00205         sd1 = wxString::Format(_T("%d"), logik_list_laenge(list_of_logiken));
00206         sd2 = wxString::Format(_T("%d"), ton_list_laenge(list_of_toene));
00207         sd3 = wxString::Format(_T("%d"), umstimmungs_list_laenge(list_of_umstimmungen));
00208         sd4 = wxString::Format(_T("%d"), tonsystem_list_laenge(list_of_tonsysteme));
00209         sd5 = wxString::Format(_T("%d"), intervall_list_laenge(list_of_intervalle));
00210         sd6 = wxString::Format(_T("%ld"), anzahl_eingelesene_zeichen);
00211 #else
00212         sprintf(sd1, "%d\n%d\n%d",
00213                 logik_list_laenge(list_of_logiken),
00214                 ton_list_laenge(list_of_toene),
00215                 umstimmungs_list_laenge(list_of_umstimmungen));
00216         sprintf(sd2, "%d\n%d\n%d",
00217                 tonsystem_list_laenge(list_of_tonsysteme),
00218                 intervall_list_laenge(list_of_intervalle),
00219                 anzahl_eingelesene_zeichen);
00220 #endif
00221 #else
00222 
00223         if ( withNames) {
00224                 sprintf(sd1, "  logics: %d\n  tones: %d\n  tunes: %d",
00225                         logik_list_laenge(list_of_logiken),
00226                         ton_list_laenge(list_of_toene),
00227                         umstimmungs_list_laenge(list_of_umstimmungen));
00228                 sprintf(sd2, "  tone systems: %d\n  intervalls; %d\n  read chars: %d",
00229                         tonsystem_list_laenge(list_of_tonsysteme),
00230                         intervall_list_laenge(list_of_intervalle),
00231                         anzahl_eingelesene_zeichen);
00232         } else {
00233                 sprintf(sd1, "%d\n%d\n%d",
00234                         logik_list_laenge(list_of_logiken),
00235                         ton_list_laenge(list_of_toene),
00236                         umstimmungs_list_laenge(list_of_umstimmungen));
00237                 sprintf(sd2, "%d\n%d\n%d",
00238                         tonsystem_list_laenge(list_of_tonsysteme),
00239                         intervall_list_laenge(list_of_intervalle),
00240                         anzahl_eingelesene_zeichen);
00241         }
00242 
00243 #endif
00244 }
00245 
00246 void show_line_number( int n )
00247 
00248 {
00249 #ifdef WX
00250 #ifdef DEBUG
00251         std::cerr << "show_line_number(" << n << ") in WX mode " << std::endl;
00252 #endif
00253 
00254         if ( !CompDiaLine ) return;
00255 
00256 #ifdef DEBUG
00257         std::cerr << "setting number ";
00258 
00259 #endif
00260         wxString s = _T("");
00261 
00262         if ( n != -1 ) s << n;
00263 
00264         DEBUGLOG2(other,_T("s = %s"), s.c_str());
00265 
00266         CompDiaLine->SetLabel(s);
00267 
00268         CompDiaLine->Refresh();
00269 
00270 #else
00271 #ifdef DEBUG
00272         std::cerr << "show_line_number(" << n << ") in non-WX mode " << std::endl;
00273 
00274 #endif
00275 #ifdef MUTWIN
00276         if ( !CompDiaLine ) return;
00277 
00278         char s[20] = "---      ";
00279 
00280         if ( n != -1 ) sprintf(s, "%d       ", n);
00281 
00282         ::SetWindowText(CompDiaLine, s);
00283 
00284 #endif
00285 #endif
00286 }
00287 
00288 void fatal_error( int nr, ... )
00289 {
00290         va_list arglist;
00291         va_start(arglist,nr);
00292 #if defined(WX)
00293         Fmeldung = wxString::FormatV(wxGetTranslation(Error_text[nr]), arglist);
00294 #else
00295         vsprintf( Fmeldung, Error_text[nr], arglist );
00296 #endif
00297         longjmp( weiter_gehts_nach_compilerfehler , (nr==0)?255:nr );
00298 }
00299 
00300 // Compiler - Warning -----------------------------------------------
00301 
00302 void compiler_warning( int nr, ... )
00303 {
00304         va_list arglist;
00305         va_start(arglist,nr);
00306 #ifdef MUTWIN
00307         DEBUGLOGBASE (other,_T(""), _T("testing %s"), _T("%s"));
00308         DEBUGLOGBASE (other,_T(""),
00309                       _T("Compiler warning %d: %s"),
00310                       nr,
00311                       Warning_text[nr]);
00312 #if defined(WX)
00313         wxMessageBox(wxString::FormatV(wxGetTranslation(Warning_text[nr]),
00314                                        arglist),
00315                      _("Compiler warning"),
00316                      wxOK | wxICON_ASTERISK );
00317 #else
00318         char Fmeldung[255];
00319         vsprintf( Fmeldung, Warning_text[nr], arglist );
00320         MessageBox(0, Fmeldung, "Compiler warning", MB_OK | MB_ICONASTERISK );
00321 #endif
00322 #endif
00323 }
00324 
00325 void laufzeit_message(const char * Meldung )
00326 {
00327         if ( strlen(protokoll_string) + strlen(Meldung) <= PROT_MAXCHARS - 2 ) {
00328                 if ( protokoll_ausgabezeile ) strcat(protokoll_string, "\n");
00329 
00330                 strcat(protokoll_string, Meldung);
00331 
00332                 protokoll_ausgabezeile++;
00333         }
00334 }
00335 
00336 void init_laufzeit_protokoll( void )
00337 
00338 {
00339         protokoll_ausgabezeile = 0;
00340         strcpy(protokoll_string, "");
00341 }
00342 
00343 void exit_laufzeit_protokoll( void )
00344 
00345 {}
00346 
00347 void laufzeit_protokoll(const char * formatstring , ... )
00348 {
00349         char Fmeldung[255];
00350         va_list arglist;
00351 
00352         va_start(arglist, formatstring); /* hier 0 statt nr */
00353         vsprintf(Fmeldung, formatstring, arglist );
00354         laufzeit_message (Fmeldung);
00355 }
00356 
00357 #ifdef MUTWIN
00358 
00359 char* pascal _export GetKeyString(int box, char asTS)
00360 {
00361         init_laufzeit_protokoll();
00362 
00363         if ( asTS )
00364                 protokoll_liegende_frequenzen(box);
00365         else
00366                 protokoll_liegende_relationen(box);
00367 
00368         return protokoll_string;
00369 }
00370 
00371 char* pascal _export GetTSString(int box, char asTS)
00372 
00373 {
00374         init_laufzeit_protokoll();
00375 
00376         if ( asTS )
00377                 protokoll_aktuelles_tonsystem(box);
00378         else
00379                 protokoll_aktuelle_relationen(box);
00380 
00381         return protokoll_string;
00382 }
00383 
00384 int pascal _export GetLineNumbers()
00385 {
00386         return protokoll_ausgabezeile;
00387 }
00388 
00389 #endif
00390 
00391 int pascal _export GetErrorLine()
00392 {
00393 #if defined(WX)
00394         int i = Fmeldung.First(_("line"));
00395         long l;
00396 
00397         if ( i != -1 && Fmeldung.Mid(i+wxString(_("line")).Length()).ToLong(&l) )
00398                 return l;
00399         else
00400                 return -1;
00401 
00402 #else
00403         char *s = strstr(Fmeldung, "Zeile");
00404 
00405         if ( !s ) return -1;
00406 
00407         return atol(&(s[5]));
00408 
00409 #endif
00410 }
00411 
00412 

Erzeugt am Sun Aug 21 2011 10:51:51 für Mutabor von doxygen 1.7.4