(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP")(FILECREATED "16-May-90 14:28:05" {DSK}<usr>local>lde>lispcore>sources>CMLSEQCOMMON.;2 5238         changes to%:  (VARS CMLSEQCOMMONCOMS)      previous date%: "12-Nov-86 14:57:08" {DSK}<usr>local>lde>lispcore>sources>CMLSEQCOMMON.;1)(* ; "Copyright (c) 1986, 1990 by Venue & Xerox Corporation.  All rights reserved.")(PRETTYCOMPRINT CMLSEQCOMMONCOMS)(RPAQQ CMLSEQCOMMONCOMS ((FUNCTIONS CHECK-SUBSEQ COLLECT-ITEM COPY-VECTOR-SUBSEQ                                     FILL-VECTOR-SUBSEQ MAKE-SEQUENCE-LIKE SEQ-DISPATCH TYPE-SPECIFIER                                    )                             (FUNCTIONS BACKWARD-LIST-LOOP BACKWARD-VECTOR-LOOP FORWARD-LIST-LOOP                                     FORWARD-VECTOR-LOOP)                             (PROP FILETYPE CMLSEQCOMMON)                             (DECLARE%: EVAL@COMPILE DONTCOPY DONTEVAL@LOAD (LOCALVARS . T))))(DEFMACRO CHECK-SUBSEQ (SEQ START END LENGTH)   `(CL:IF (NOT (<= 0 ,START ,END ,LENGTH))        (CL:ERROR "Illegal subsequence for ~S.~%%Start is ~D. End is ~D" ,SEQ ,START ,END)))(DEFMACRO COLLECT-ITEM (ITEM HEAD TAIL)   `(CL:IF ,TAIL        [RPLACD ,TAIL (SETQ ,TAIL (LIST ,ITEM]        [SETQ ,HEAD (SETQ ,TAIL (LIST ,ITEM]))(DEFMACRO COPY-VECTOR-SUBSEQ (FROM-VECTOR START-FROM END-FROM TO-VECTOR START-TO END-TO)   "Copy one vector subsequence to another"   `(CL:DO ((FROM-INDEX ,START-FROM (CL:1+ FROM-INDEX))            (TO-INDEX ,START-TO (CL:1+ TO-INDEX)))           (,(CL:IF END-FROM                 `(EQL FROM-INDEX ,END-FROM)                 `(EQL TO-INDEX ,END-TO))            ,TO-VECTOR)        (CL:SETF (CL:AREF ,TO-VECTOR TO-INDEX)               (CL:AREF ,FROM-VECTOR FROM-INDEX))))(DEFMACRO FILL-VECTOR-SUBSEQ (VECTOR START END NEWVALUE)   `(CL:DO ((INDEX ,START (CL:1+ INDEX)))           ((EQL INDEX ,END)            ,VECTOR)        (CL:SETF (CL:AREF ,VECTOR INDEX)               ,NEWVALUE)))(DEFMACRO MAKE-SEQUENCE-LIKE (SEQUENCE LENGTH)   "Returns a sequence of the same type as SEQUENCE and the given LENGTH."   `[LET ((SEQ ,SEQUENCE))         (CL:ETYPECASE SEQ             (LIST (CL:MAKE-LIST ,LENGTH))             (STRING (CL:MAKE-STRING ,LENGTH))             (CL:VECTOR (MAKE-VECTOR ,LENGTH :ELEMENT-TYPE (CL:ARRAY-ELEMENT-TYPE SEQ))))])(DEFMACRO SEQ-DISPATCH (SEQUENCE LIST-FORM VECTOR-FORM)   `(CL:ETYPECASE ,SEQUENCE        (LIST ,LIST-FORM)        (CL:VECTOR ,VECTOR-FORM)))(DEFMACRO TYPE-SPECIFIER (TYPE)   "Returns the broad class of which TYPE is a specific subclass."   `(CL:IF (CL:ATOM ,TYPE)        ,TYPE        (CAR ,TYPE)))(DEFMACRO BACKWARD-LIST-LOOP (SEQUENCE START END LOCAL-VARS RETURN-FORM &REST BODY)   [LET ((INDEX-VAR (CAR LOCAL-VARS))         (CURRENT-ELEMENT-VAR (CADR LOCAL-VARS))         (OTHER-VARS (CDDR LOCAL-VARS)))        `(CL:DO ((,INDEX-VAR (CL:1- ,END)                        (CL:1- ,INDEX-VAR))                 %%SUBSEQ                 ,CURRENT-ELEMENT-VAR                 ,@OTHER-VARS)                ((< ,INDEX-VAR ,START)                 ,RETURN-FORM)             (SETQ %%SUBSEQ (CL:NTHCDR ,INDEX-VAR ,SEQUENCE))             (SETQ ,CURRENT-ELEMENT-VAR (CAR %%SUBSEQ))             ,@BODY)])(DEFMACRO BACKWARD-VECTOR-LOOP (SEQUENCE START END LOCAL-VARS RETURN-FORM &REST BODY)   [LET ((INDEX-VAR (CAR LOCAL-VARS))         (CURRENT-ELEMENT-VAR (CADR LOCAL-VARS))         (OTHER-VARS (CDDR LOCAL-VARS)))        `(CL:DO ((,INDEX-VAR (CL:1- ,END)                        (CL:1- ,INDEX-VAR))                 ,CURRENT-ELEMENT-VAR                 ,@OTHER-VARS)                ((< ,INDEX-VAR ,START)                 ,RETURN-FORM)             (SETQ ,CURRENT-ELEMENT-VAR (CL:AREF ,SEQUENCE ,INDEX-VAR))             ,@BODY)])(DEFMACRO FORWARD-LIST-LOOP (SEQUENCE START END LOCAL-VARS RETURN-FORM &REST BODY)   [LET ((INDEX-VAR (CAR LOCAL-VARS))         (CURRENT-ELEMENT-VAR (CADR LOCAL-VARS))         (OTHER-VARS (CDDR LOCAL-VARS)))        `(CL:DO ((%%SUBSEQ (CL:NTHCDR ,START ,SEQUENCE)                        (CDR %%SUBSEQ))                 (,INDEX-VAR ,START (CL:1+ ,INDEX-VAR))                 ,CURRENT-ELEMENT-VAR                 ,@OTHER-VARS)                ((EQL ,INDEX-VAR ,END)                 ,RETURN-FORM)             (SETQ ,CURRENT-ELEMENT-VAR (CAR %%SUBSEQ))             ,@BODY)])(DEFMACRO FORWARD-VECTOR-LOOP (SEQUENCE START END LOCAL-VARS RETURN-FORM &REST BODY)   "Canonical forward loop for vectors"   [LET ((INDEX-VAR (CAR LOCAL-VARS))         (CURRENT-ELEMENT-VAR (CADR LOCAL-VARS))         (OTHER-VARS (CDDR LOCAL-VARS)))        `(CL:DO ((,INDEX-VAR ,START (CL:1+ ,INDEX-VAR))                 ,CURRENT-ELEMENT-VAR                 ,@OTHER-VARS)                ((EQL ,INDEX-VAR ,END)                 ,RETURN-FORM)             (SETQ ,CURRENT-ELEMENT-VAR (CL:AREF ,SEQUENCE ,INDEX-VAR))             ,@BODY)])(PUTPROPS CMLSEQCOMMON FILETYPE CL:COMPILE-FILE)(DECLARE%: EVAL@COMPILE DONTCOPY DONTEVAL@LOAD (DECLARE%: DOEVAL@COMPILE DONTCOPY(LOCALVARS . T)))(PUTPROPS CMLSEQCOMMON COPYRIGHT ("Venue & Xerox Corporation" 1986 1990))(DECLARE%: DONTCOPY  (FILEMAP (NIL)))STOP