error.scm 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. ;; Copyright (c) 2001-2003 by Norbert Freudemann, David Frese
  2. ;; *** x errors ******************************************************
  3. (define-record-type x-error :x-error
  4. (make-x-error display serial code major-opcode minor-opcode resource-id text)
  5. x-error?
  6. (display x-error:display)
  7. (serial x-error:serial)
  8. (code x-error:code)
  9. (major-opcode x-error:major-opcode)
  10. (minor-opcode x-error:minor-opcode)
  11. (resource-id x-error:resource-id)
  12. (text x-error:text))
  13. (define-exported-binding "scx-x-error" :x-error)
  14. (define-enumerated-type error-code :error-code
  15. error-code? error-codes error-code-name error-code-index
  16. (success bad-request bad-value bad-window bad-pixmap bad-atom
  17. bad-cursor bad-font bad-match bad-drawable bad-access bad-alloc
  18. bad-color bad-gc bad-id-choice bad-name bad-length bad-implementation))
  19. (define-exported-binding "scx-error-code" :error-code)
  20. (define-exported-binding "scx-error-codes" error-codes)
  21. ;; *** error exceptions **********************************************
  22. (define (opcode->string oc)
  23. (case oc
  24. ((1) "X_CreateWindow")
  25. ((2) "X_ChangeWindowAttributes")
  26. ((3) "X_GetWindowAttributes")
  27. ((4) "X_DestroyWindow")
  28. ((5) "X_DestroySubwindows")
  29. ((6) "X_ChangeSaveSet")
  30. ((7) "X_ReparentWindow")
  31. ((8) "X_MapWindow")
  32. ((9) "X_MapSubwindows")
  33. ((10) "X_UnmapWindow")
  34. ((11) "X_UnmapSubwindows")
  35. ((12) "X_ConfigureWindow")
  36. ((13) "X_CirculateWindow")
  37. ((14) "X_GetGeometry")
  38. ((15) "X_QueryTree")
  39. ((16) "X_InternAtom")
  40. ((17) "X_GetAtomName")
  41. ((18) "X_ChangeProperty")
  42. ((19) "X_DeleteProperty")
  43. ((20) "X_GetProperty")
  44. ((21) "X_ListProperties")
  45. ((22) "X_SetSelectionOwner")
  46. ((23) "X_GetSelectionOwner")
  47. ((24) "X_ConvertSelection")
  48. ((25) "X_SendEvent")
  49. ((26) "X_GrabPointer")
  50. ((27) "X_UngrabPointer")
  51. ((28) "X_GrabButton")
  52. ((29) "X_UngrabButton")
  53. ((30) "X_ChangeActivePointerGrab")
  54. ((31) "X_GrabKeyboard")
  55. ((32) "X_UngrabKeyboard")
  56. ((33) "X_GrabKey")
  57. ((34) "X_UngrabKey")
  58. ((35) "X_AllowEvents")
  59. ((36) "X_GrabServer")
  60. ((37) "X_UngrabServer")
  61. ((38) "X_QueryPointer")
  62. ((39) "X_GetMotionEvents")
  63. ((40) "X_TranslateCoords")
  64. ((41) "X_WarpPointer")
  65. ((42) "X_SetInputFocus")
  66. ((43) "X_GetInputFocus")
  67. ((44) "X_QueryKeymap")
  68. ((45) "X_OpenFont")
  69. ((46) "X_CloseFont")
  70. ((47) "X_QueryFont")
  71. ((48) "X_QueryTextExtents")
  72. ((49) "X_ListFonts")
  73. ((50) "X_ListFontsWithInfo")
  74. ((51) "X_SetFontPath")
  75. ((52) "X_GetFontPath")
  76. ((53) "X_CreatePixmap")
  77. ((54) "X_FreePixmap")
  78. ((55) "X_CreateGC")
  79. ((56) "X_ChangeGC")
  80. ((57) "X_CopyGC")
  81. ((58) "X_SetDashes")
  82. ((59) "X_SetClipRectangles")
  83. ((60) "X_FreeGC")
  84. ((61) "X_ClearArea")
  85. ((62) "X_CopyArea")
  86. ((63) "X_CopyPlane")
  87. ((64) "X_PolyPoint")
  88. ((65) "X_PolyLine")
  89. ((66) "X_PolySegment")
  90. ((67) "X_PolyRectangle")
  91. ((68) "X_PolyArc")
  92. ((69) "X_FillPoly")
  93. ((70) "X_PolyFillRectangle")
  94. ((71) "X_PolyFillArc")
  95. ((72) "X_PutImage")
  96. ((73) "X_GetImage")
  97. ((74) "X_PolyText8")
  98. ((75) "X_PolyText16")
  99. ((76) "X_ImageText8")
  100. ((77) "X_ImageText16")
  101. ((78) "X_CreateColormap")
  102. ((79) "X_FreeColormap")
  103. ((80) "X_CopyColormapAndFree")
  104. ((81) "X_InstallColormap")
  105. ((82) "X_UninstallColormap")
  106. ((83) "X_ListInstalledColormaps")
  107. ((84) "X_AllocColor")
  108. ((85) "X_AllocNamedColor")
  109. ((86) "X_AllocColorCells")
  110. ((87) "X_AllocColorPlanes")
  111. ((88) "X_FreeColors")
  112. ((89) "X_StoreColors")
  113. ((90) "X_StoreNamedColor")
  114. ((91) "X_QueryColors")
  115. ((92) "X_LookupColor")
  116. ((93) "X_CreateCursor")
  117. ((94) "X_CreateGlyphCursor")
  118. ((95) "X_FreeCursor")
  119. ((96) "X_RecolorCursor")
  120. ((97) "X_QueryBestSize")
  121. ((98) "X_QueryExtension")
  122. ((99) "X_ListExtensions")
  123. ((100) "X_ChangeKeyboardMapping")
  124. ((101) "X_GetKeyboardMapping")
  125. ((102) "X_ChangeKeyboardControl")
  126. ((103) "X_GetKeyboardControl")
  127. ((104) "X_Bell")
  128. ((105) "X_ChangePointerControl")
  129. ((106) "X_GetPointerControl")
  130. ((107) "X_SetScreenSaver")
  131. ((108) "X_GetScreenSaver")
  132. ((109) "X_ChangeHosts")
  133. ((110) "X_ListHosts")
  134. ((111) "X_SetAccessControl")
  135. ((112) "X_SetCloseDownMode")
  136. ((113) "X_KillClient")
  137. ((114) "X_RotateProperties")
  138. ((115) "X_ForceScreenSaver")
  139. ((116) "X_SetPointerMapping")
  140. ((117) "X_GetPointerMapping")
  141. ((118) "X_SetModifierMapping")
  142. ((119) "X_GetModifierMapping")
  143. ((127) "X_NoOperation")
  144. (else "unknown")))
  145. (define (x-error->string e)
  146. (string-append (x-error:text e) ""
  147. " Major Opcode: " (number->string (x-error:major-opcode e))
  148. " (" (opcode->string (x-error:major-opcode e)) ")"
  149. " Resource ID: " (number->string (x-error:resource-id e))))
  150. (define-condition-type &x-warning &warning make-x-warning x-warning?)
  151. (define (signal-x-warning x-error)
  152. (signal &x-warning (x-error:text x-error)
  153. (opcode->string (x-error:major-opcode x-error))
  154. (x-error:resource-id x-error)
  155. x-error))
  156. ;; Call synchronize to have the warnings signaled where they belong to.
  157. (define (use-x-error-warnings! display on?)
  158. (let ((was (display:warnings? display))) ;; lock??
  159. (set-display:warnings?! display on?)
  160. was))
  161. ;; *** error-queue ***************************************************
  162. ;; Interface:
  163. ;; (empty-x-error-queue? q) return #t only for the initial queue.
  164. ;; (next-x-error-queue q) returns the next queue element, blocks if necessary.
  165. ;; (x-error-queue:this q) returns the x-error of that queue.
  166. (define-record-type x-error-queue :x-error-queue
  167. (really-make-x-error-queue this next)
  168. x-error-queue?
  169. (this x-error-queue:this)
  170. (next really-next-x-error-queue really-set-next-x-error-queue!))
  171. (define (make-x-error-queue error)
  172. (really-make-x-error-queue error (make-placeholder)))
  173. (define (empty-x-error-queue)
  174. (make-x-error-queue #f))
  175. (define (empty-x-error-queue? obj)
  176. (eq? obj empty-x-error-queue))
  177. (define (next-x-error-queue x-error-queue)
  178. (placeholder-value (really-next-x-error-queue x-error-queue)))
  179. (define (set-next-x-error-queue! x-error-queue next-x-error-queue)
  180. (placeholder-set! (really-next-x-error-queue x-error-queue)
  181. next-x-error-queue))
  182. ;; *** default error handlers ****************************************
  183. (define (internal-x-error-handler display error)
  184. (let ((queue (make-x-error-queue error)))
  185. (set-next-x-error-queue! (display:error-queue display) queue)
  186. (set-display:error-queue! display queue)))
  187. (define-exported-binding "internal-x-error-handler" internal-x-error-handler)
  188. (import-lambda-definition-2 get-error-text (display code)
  189. "scx_Get_Error_Text")
  190. (import-lambda-definition-2 get-error-database-text
  191. (display name message default-string)
  192. "scx_Get_Error_Database_Text")
  193. ;(import-lambda-definition-2 %set-io-error-handler (handler)
  194. ; "scx_Set_IO_Error_Handler")
  195. (define *x-fatal-error-handler* #f)
  196. (define (internal-x-fatal-error-handler display)
  197. (if *x-fatal-error-handler*
  198. (*x-fatal-error-handler* display)
  199. #f))
  200. (define-exported-binding "internal-x-fatal-error-handler"
  201. internal-x-fatal-error-handler)
  202. (define (set-fatal-error-handler! handler)
  203. (let ((old-handler *x-fatal-error-handler*))
  204. (set! *x-fatal-error-handler* handler)
  205. old-handler))