(defun xappend (lists)
  "append any number of lists.
the value is a list whose elements are those of the argument lists, in order."
;; it would be nice if this would error on circular lists
  (prog (total-length lists-to-copy new-list-start new-list-pointer)
	(cond ((atom lists)
	       (return nil))			;if the arg is an atom, return NIL
	      ((atom (cdr lists)) 
		(return (car lists))))
	(setq total-length 0)			;;; Accumulate length of args we must copy
	(do ((lists-to-measure lists (cdr lists-to-measure)))
	    ((atom (cdr lists-to-measure))  ;; plus one more if the last arg is not NIL.
				            ;; But if all are NIL so far, leave it 0 as signal to COND that follows.
	     (and (car lists-to-measure)
		  (not (zerop total-length))
		  (incf total-length)))
	  (unless (listp (car lists-to-measure))		;; verify that all args (except perhaps the last) are lists.
	      (let ((list-to-measure (car lists-to-measure)))
		(check-type list-to-measure list)
		(setf (car lists-to-measure) list-to-measure)))	;whaa???
	  (setq total-length (+ total-length (length (car lists-to-measure)))))
  	(cond ((zerop total-length) (return (car (last lists)))))
	(setq new-list-pointer  (setq new-list-start (make-list total-length)))
	(setq lists-to-copy lists)
     l2	(cond ((null (cdr lists-to-copy))		        ;;; when we reach the last arg, if it's nil, we are done.
	       (unless (car lists-to-copy) (return new-list-start))	        ;;; otherwise, stick in a pointer to the last arg,
	       (setf (car new-list-pointer) (caar lists-to-copy))	;;; and then change it from an element to a cdr.
	       (rplacd new-list-pointer (cdar lists-to-copy))
;	       (without-interrupts		;no cdr codes, change this!!
;		 (%p-dpb-offset cdr-error %%q-cdr-code new-list-pointer 0)
;		 (%p-dpb-offset cdr-normal %%q-cdr-code new-list-pointer -1))
	       (return new-list-start)))
	(do ((list-to-copy (car lists-to-copy) (cdr list-to-copy)))
	    ((atom list-to-copy) 
	     (setq lists-to-copy (cdr lists-to-copy))
	     (go l2))
	  (setf (car new-list-pointer) (car list-to-copy))
	  (setq new-list-pointer (cdr new-list-pointer)))))

P_21
   (MOVE A4 (QUOTE NIL))
   (MOVE A3 (QUOTE NIL))
   (MOVE A2 (QUOTE NIL))
   (MOVE A1 (QUOTE NIL))
   (OPEN-CALL ATOM (QUOTE 1) A5 (O0 A0))
C_136
   (ALU L-R GARBAGE A5 (QUOTE NIL))
   (TEST BR-EQUAL)
   (BRANCH C_118)
C_115
   (MOVE RETURN (QUOTE NIL) CH-RETURN)
C_118
   (KOPEN)
   (OPEN-CALL CDR (QUOTE 1) O0 (O0 A0))
C_130
   (KCALL NIL ATOM (QUOTE 1) A6)
C_133
   (ALU L-R GARBAGE A6 (QUOTE NIL))
   (TEST BR-EQUAL)
   (BRANCH C_127)
C_121
   (OPEN-CALL CAR (QUOTE 1) A7 (O0 A0))
C_124
   (MOVE RETURN A7 CH-RETURN)
C_127
   (MOVE A1 (QUOTE 0))
   (MOVE A7 A0)
   (JUMP DO6036_144)
B_249
   (ALU L-R GARBAGE A1 (QUOTE 0))
   (TEST BR-NOT-EQUAL)
   (BRANCH C_244)
C_234
   (KOPEN)
   (OPEN-CALL LAST (QUOTE 1) O0 (O0 A0))
C_238
   (KCALL NIL CAR (QUOTE 1) A7)
C_241
   (MOVE RETURN A7 CH-RETURN)
C_244
   (OPEN-CALL MAKE-LIST (QUOTE 1) A3 (O0 A1))
C_253
   (MOVE A4 A3)
   (MOVE A2 A0)
   (JUMP L2_29)
DO6036_144
   (KOPEN)
   (OPEN-CALL CDR (QUOTE 1) O0 (O0 A7))
C_225
   (KCALL NIL ATOM (QUOTE 1) A8)
C_228
   (ALU L-R GARBAGE A8 (QUOTE NIL))
   (TEST BR-EQUAL)
   (BRANCH C_171)
C_147
   (OPEN-CALL CAR (QUOTE 1) A9 (O0 A7))
C_170
   (ALU L-R GARBAGE A9 (QUOTE NIL))
   (TEST BR-EQUAL)
   (BRANCH C_167)
C_150
   (ALU L-R GARBAGE A1 (QUOTE 0))
   (TEST BR-NOT-EQUAL)
   (BRANCH C_153)
C_157
   (JUMP B_249)
C_153
   (ALU L+R A1 A1 (QUOTE 1))
   (JUMP B_249)
C_167
   (JUMP B_249)
C_171
   (KOPEN)
   (OPEN-CALL CAR (QUOTE 1) O0 (O0 A7))
C_201
   (KCALL NIL LISTP (QUOTE 1) A9)
C_204
   (ALU L-R GARBAGE A9 (QUOTE NIL))
   (TEST BR-EQUAL)
   (BRANCH C_175)
C_174
   (JUMP B_216)
C_175
   (OPEN-CALL CAR (QUOTE 1) A10 (O0 A7))
C_196
   (MOVE O0 A10 CH-OPEN)
   (KCALL TYPEP (QUOTE 2) A11 (O1 (QUOTE LIST)))
C_188
   (ALU L-R GARBAGE A11 (QUOTE NIL))
   (TEST BR-EQUAL)
   (BRANCH C_180)
C_179
   (JUMP B_190)
C_180
   (MOVE O0 A10 CH-OPEN)
   (MOVE O1 (QUOTE LIST-TO-MEASURE))
   (KCALL CHECK-TYPE-INTERNAL (QUOTE 3) A10 (O2 (QUOTE LIST)))
C_184
B_190
   (MOVE O0 A7 CH-OPEN)
   (KCALL SETCAR (QUOTE 2) IGNORE (O1 A10))
C_318
B_216
   (KOPEN)
   (OPEN-CALL CAR (QUOTE 1) O0 (O0 A7))
C_208
   (KCALL NIL LENGTH (QUOTE 1) A9)
C_211
   (ALU L+R A1 A1 A9)
   (OPEN-CALL CDR (QUOTE 1) A7 (O0 A7))
C_219
   (JUMP DO6036_144)
L2_29
   (OPEN-CALL CDR (QUOTE 1) A5 (O0 A2))
C_67
   (ALU L-R GARBAGE A5 (QUOTE NIL))
   (TEST BR-NOT-EQUAL)
   (BRANCH C_63)
C_32
   (OPEN-CALL CAR (QUOTE 1) A6 (O0 A2))
C_42
   (ALU L-R GARBAGE A6 (QUOTE NIL))
   (TEST BR-EQUAL)
   (BRANCH C_36)
C_35
   (KOPEN)
   (OPEN-CALL CAAR (QUOTE 1) O1 (O0 A2))
C_47
   (KCALL SETCAR (QUOTE 2) IGNORE (O0 A4))
B_58
   (KOPEN)
   (OPEN-CALL CDAR (QUOTE 1) O1 (O0 A2))
C_55
   (KCALL RPLACD (QUOTE 2) IGNORE (O0 A4))
B_62
   (MOVE RETURN A3 CH-RETURN)
C_36
   (MOVE RETURN A3 CH-RETURN)
C_63
   (OPEN-CALL CAR (QUOTE 1) A6 (O0 A2))
C_109
DO6035_76
   (OPEN-CALL ATOM (QUOTE 1) A7 (O0 A6))
C_106
   (ALU L-R GARBAGE A7 (QUOTE NIL))
   (TEST BR-EQUAL)
   (BRANCH C_87)
C_79
   (OPEN-CALL CDR (QUOTE 1) A2 (O0 A2))
C_82
   (JUMP L2_29)
C_87
   (KOPEN)
   (OPEN-CALL CAR (QUOTE 1) O1 (O0 A6))
C_90
   (KCALL SETCAR (QUOTE 2) IGNORE (O0 A4))
B_96
   (OPEN-CALL CDR (QUOTE 1) A4 (O0 A4))
C_94
   (OPEN-CALL CDR (QUOTE 1) A6 (O0 A6))
C_99
   (JUMP DO6035_76)