home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / monitors / rsys / rsyssrc.lha / RSysError.c < prev    next >
C/C++ Source or Header  |  1993-09-25  |  3KB  |  148 lines

  1. /*
  2. ***************************************************************************
  3. *
  4. * Datei:
  5. *      RSysError.c
  6. *
  7. * Inhalt:
  8. *
  9. *      --- Globale Routinen ---
  10. *
  11. *    void ErrorHandleFull ( char *ObjName , enum err_objects errobj , enum err_actions erract , int kill , char *file , char *func , int line );
  12. *
  13. *      --- Lokale  Routinen ---
  14. *
  15. *
  16. * Bemerkungen:
  17. *      Enthält die Fehlerbehandlungsroutinen für RSys. Es werden der
  18. *      Quelldateiname, die Funktion und die entsprechende
  19. *      Zeilennummer unterstützt.
  20. *
  21. * Erstellungsdatum:
  22. *      20-Apr-93     Rolf Böhme
  23. *
  24. * Änderungen:
  25. *      20-Apr-93     Rolf Böhme      Erstellung
  26. *
  27. ***************************************************************************
  28. */
  29.  
  30. #include "RSys.h"
  31.  
  32. char *str_err_objects[] = {
  33.     "Broker",
  34.     "Ports",
  35.     "Files and Directories",
  36.     "Screens",
  37.     "Windows",
  38.     "Libraries",
  39.     "Devices",
  40.     "Icons",
  41.     "Gadgets",
  42.    "Menus",
  43.     "Environment and Prefs",
  44.     "DOS-ExAll()",
  45.     "Fonts",
  46.     "Lists and Nodes",
  47.     "Memory",
  48.     "Tasks",
  49.     "Clipboard",
  50.    "Own object",
  51.    "Data entry",
  52.    "Object context creation",
  53.     "Miscellaneous"
  54. };
  55.  
  56. char *str_err_actions[] = {
  57.     "Duplicate name attempted",
  58.     "Creation failed",
  59.     "Can't find object",
  60.     "Can't kill object",
  61.     "Can't open object",
  62.     "Can't read file",
  63.     "Can't write file",
  64.     "ExAll() failed",
  65.     "Size of object to large",
  66.     "Object not saved",
  67.     "Wrong input or argument given",
  68.     "Can't examine object info",
  69.     "Object does no exist",
  70.     "Object has wrong type",
  71.     "Allocation failed",
  72.    "Can't modify this object",
  73.    "Locking failed"
  74. };
  75.  
  76. extern long maxentries;
  77.  
  78.     /*
  79.      * ErrorHandleFull() gibt im Falle eines Fehlers eine
  80.      * vollständige Beschreibung des Fehlers unter Angabe der
  81.      * Zeilennummer und der Quelldatei sowie der Funktion, in der
  82.      * der Fehler auftrat
  83.      */
  84. void
  85. ErrorHandleFull(char *ObjName, enum err_objects errobj, enum err_actions erract,
  86.                      int kill, char *file, char *func, int line)
  87. {
  88.    long ioerr;
  89.     UBYTE header[BUFSIZE],
  90.             kind[BUFSIZE], 
  91.          iofault[BUFSIZE];
  92.     UBYTE *errfmt = (UBYTE *)"Error object  : %s\n"
  93.                             "Error type    : %s\n"
  94.                                      "Error action  : %s\n"
  95.                             "I/O-Error     : %ld (%s)\n"
  96.                                      "Source file   : %s\n"
  97.                                      "Function      : %s()\n"
  98.                                      "Source line   : %ld\n"
  99.                                      "-- %s";
  100.  
  101.     DPOS;
  102.  
  103.     sprintf((char *)header, "%s %s message", NAME, (kill ? "Error" : "Info"));
  104.     strcpy((char *)kind, (kill == KILL) ? "Sorry...this killed the Program!" :
  105.                                          "Don't worry! The program continues...");
  106.  
  107.    ioerr = IoErr();
  108.  
  109.    if(!Fault(ioerr, (STRPTR)"is", iofault, (long)(BUFSIZE-1)))
  110.       strcpy((char *)iofault, field[NO_FIELD]);
  111.  
  112.    if(ioerr != 0L) SetIoErr(0L);
  113.  
  114.     if (IntuitionBase)
  115.     {
  116.       DisplayBeep(NULL);
  117.  
  118.         MyEasyRequest(SysWnd, header,
  119.                           (UBYTE *)((kill == KILL) ? "Kill!" : "Continue"),
  120.                           errfmt,
  121.                     (UBYTE *) ObjName,
  122.                           (UBYTE *) str_err_objects[errobj],
  123.                           (UBYTE *) str_err_actions[erract],
  124.                     ioerr, iofault,
  125.                           (UBYTE *) file,
  126.                           (UBYTE *) func,
  127.                           line,
  128.                           kind);
  129.     }
  130.     else if (NOT(Flags.wb_start))
  131.     {
  132.         strcat((char *)kind, "\n");
  133.         Printf(errfmt,(ULONG) ObjName,
  134.                     str_err_objects[errobj],
  135.                           (UBYTE *) str_err_actions[erract],
  136.                     ioerr, iofault,
  137.                           (UBYTE *) file,
  138.                           (UBYTE *) func,
  139.                           line,
  140.                           kind);
  141.     }
  142.  
  143.     if (kill == KILL) CloseAll();
  144.  
  145.     return;
  146. }
  147.  
  148.