Roger Kehr <kehr@iti.informatik.th-darmstadt.de> wrote: : Bernd Raichle wrote: [...] : > Can you explain what the differences beetwen ``:input'' and : > ``:input-immutable'' are? : : I borrowed this from the implementation of function `load' int the : CLISP-source :) I never asked if it is standard. Bad practice! Better change the :direction option of `open' option to the standard `:input'. [...] : > - "markup.lsp" : > : > When opening the `logfile' in function `do-startup' add the : > keyword/value : > :if-exists :overwrite : > to the `open' function call. The default for :if-exists is :error, : > i.e. signal an error if file to be written exists. : > : > Same change needed when opening the `output' file in this function. : : CLISP did never report an error :) This is a bug in CLISP (or the Lisp standard has changed once more?). Allegro CL reports an error if the log file existed which is the standard behaviour. [...] : > [...] : > ; Note: Closure (:INTERNAL SPLIT-LIST 1) will be stack allocated. : > ; Note: Closure (:INTERNAL SPLIT-LIST 0) will be stack allocated. : > [...] : : Are these messages something important or can they be ignored? These are only notices---no warning, no errors. (Look in CLtL2 for more about "stack allocation".) [...] : What about the (system::getenv "XINDY_SEARCHPATH") call in : set-searchpath-by-environment? Does it work on Allegro? Ugh, no. Allegro has a `getenv' function in package `sys', i.e. (sys:getenv "XINDY_SEARCHPATH") will work. : > %%%%%%%%%%%%%%%%%%%% : > : > After compiling all files and fixed these two remaining bugs, I tried : > the test again: [...] : > ERROR: : > Syntax Error in : > (MARKUP-RANGE :CLASS "follows" :OPEN "\\folone{" :CLOSE "}f." :LENGTH 1 : > :IGNORE-END).; killing "Editor Server" : > ; Exiting Lisp : > : > : > Any hints? Any hints how to trace/debug Xindy to find this bug? : : Hm. Best would be to directly trace the (markup-trace)-macro. : : This error message is generated by the : (desctructuring-swith-bind)-macro in idxstyle.lsp (intface.nw). It : preprocesses a macro-call and removes any switches (&switch) form the : lambda-list. The remaining-list is simply passed to a : (destructuring-bind) that for some reason has failed. : : Try the following: : : (LET : ((<DESTRUCTURING-SWITCH-FORM> : '(:CLASS "follows" :OPEN "folone{" :CLOSE "}f." :LENGTH 1 : :IGNORE-END : )) ) : (LET ((IGNORE-END (FIND :IGNORE-END <DESTRUCTURING-SWITCH-FORM>))) : (DESTRUCTURING-BIND (&KEY OPEN CLOSE SEP CLASS LENGTH) : (SET-DIFFERENCE <DESTRUCTURING-SWITCH-FORM> '(:IGNORE-END)) : (LIST OPEN CLOSE SEP CLASS LENGTH : IGNORE-END)))) : : if it returns : : -> ("folone{" "}f." NIL "follows" 1 :IGNORE-END) No, it signals the following error (if done in the IDXSTYLE package): Error: keyword list (1 :LENGTH "}f." :CLOSE "folone{" :OPEN "follows" :CLASS) should only contain keys (:LENGTH :CLASS :SEP :CLOSE :OPEN) [condition type: PROGRAM-ERROR] which seems to be the cause of the bug. Something has reversed the given keyword list.... : Then you can try interactively : : (macroexpand : '(intface:destructuring-switch-bind (&key : open close sep class length : &switch ignore-end) : '(:class "follows" :open "\folone{" :close "}f." : :length 1 :ignore-end) : (list open close sep class length ignore-end))) : : if it returns the above expansion. It returns (LET ((<DESTRUCTURING-SWITCH-FORM> '(:CLASS "follows" :OPEN "folone{" :CLOSE "}f." :LENGTH 1 :IGNORE-END))) (LET ((IGNORE-END (FIND :IGNORE-END <DESTRUCTURING-SWITCH-FORM>))) (HANDLER-CASE (DESTRUCTURING-BIND (&KEY OPEN CLOSE SEP CLASS LENGTH) (SET-DIFFERENCE <DESTRUCTURING-SWITCH-FORM> '(:IGNORE-END)) (LIST OPEN CLOSE SEP CLASS LENGTH IGNORE-END)) (ERROR (COND) (DECLARE (IGNORE COND)) (ERROR "~&Syntax Error in ~S." WHOLE))))) which is almost the same as your shown code except of the additional `handler-case'. -bernd