;-*- Mode:LISP; Package:ZWEI; Base:8. -*- ;;; Balance Directories Editor, by HANSON -- feel free to use it. ;;;; BDIRED Lines (DEFSUBST BDIRED-CURRENT-LINE (STREAM) (BP-LINE (SEND STREAM ':READ-BP))) (DEFSUBST BDIRED-PREVIOUS-LINE (STREAM) (LINE-PREVIOUS (BDIRED-CURRENT-LINE STREAM))) (DEFSUBST BDIRED-NEXT-LINE (STREAM) (LINE-NEXT (BDIRED-CURRENT-LINE STREAM))) (DEFSUBST PUT-LINE (LINE ITEM KEY) (PUTPROP (LOCF (LINE-PLIST LINE)) ITEM KEY)) (DEFSUBST GET-LINE (LINE KEY) (GET (LOCF (LINE-PLIST LINE)) KEY)) (DEFUN BDIRED-DELETE-LINE (FIRST-LINE &OPTIONAL LAST-LINE) (IF (NULL LAST-LINE) (SETQ LAST-LINE FIRST-LINE)) (WITH-READ-ONLY-SUPPRESSED (*INTERVAL*) (DELETE-INTERVAL (BEG-LINE (CREATE-BP FIRST-LINE 0) 0) (BEG-LINE (CREATE-BP LAST-LINE 0) 1) T))) ;;; Line CFILE. (DEFUN BDIRED-LIST-CFILE (CFILE STREAM) (FUNCALL *DIRECTORY-SINGLE-FILE-LISTER* CFILE STREAM) (LET ((LINE (BDIRED-PREVIOUS-LINE STREAM))) (SETF (LINE-PLIST LINE) (CONS ':CFILE CFILE)) LINE)) (DEFSUBST BDIRED-LINE-CFILE (LINE) (GET (LOCF (LINE-PLIST LINE)) :CFILE)) ;;;; BDIRED Buffers ;(DEFSUBST BDIRED-ALTERNATE-PATHNAME (BUFFER) ; (FOURTH (BUFFER-FILE-ID BUFFER))) (DEFSUBST BDIRED-ALTERNATE-PATHNAME (BUFFER) (GET (LOCF (NODE-PROPERTY-LIST BUFFER)) ':ALTERNATE-PATHNAME)) (DEFSUBST UPDATE-BDIRED-BUFFER-PATHNAMES (BUFFER PATHNAME1 PATHNAME2) (SETF (BUFFER-PATHNAME BUFFER) PATHNAME1) (SETF (BDIRED-ALTERNATE-PATHNAME BUFFER) PATHNAME2)) (DEFUN FIND-OR-CREATE-BDIRED-BUFFER (PATHNAME1 PATHNAME2) (LET ((BUFFER (FUNCALL-SELF ':FIND-SPECIAL-BUFFER ':BDIRED T "BDired"))) (IF (NULL BUFFER) (ERROR "Cannot find BDIRED buffer" ())) (UPDATE-BDIRED-BUFFER-PATHNAMES BUFFER PATHNAME1 PATHNAME2) BUFFER)) ;;;; Pathname Stuff ;(DEFUN BDIRED-READ-DIRECTORY-STRING (PROMPT PATHNAME) ; (LET ((*READING-PATHNAME-DEFAULTS* PATHNAME) ; (*READING-PATHNAME-SPECIAL-TYPE* (FS:PATHNAME-TYPE PATHNAME)) ; (*READING-PATHNAME-SPECIAL-VERSION* (FS:PATHNAME-VERSION PATHNAME)) ; (*READING-PATHNAME-DIRECTION* ':READ) ; (*READING-PATHNAME-LAST-NAME-TYPED* *LAST-FILE-NAME-TYPED*)) ; (MULTIPLE-VALUE-BIND (NIL NIL INTERVAL) ; (EDIT-IN-MINI-BUFFER *PATHNAME-READING-COMTAB* NIL NIL ; (LIST (FORMAT NIL "~A (Default is ~A)" PROMPT PATHNAME) ; '(:RIGHT-FLUSH " (Completion)"))) ; (STRING-INTERVAL INTERVAL)))) ;(DEFUN BDIRED-READ-DIRECTORY-NAME (PROMPT PATHNAME) ; (LET ((INTERVAL (BDIRED-READ-DIRECTORY-STRING PROMPT PATHNAME))) ; (COND ((EQUAL INTERVAL "") ; PATHNAME) ; (T ; (SETQ *LAST-FILE-NAME-TYPED* INTERVAL) ; (FS:MERGE-PATHNAME-DEFAULTS INTERVAL PATHNAME NIL NIL))))) ;;;; Top Level (DEFVAR *BDIRED-PATHNAME1-NAME* :UNBOUND "Pathname of active BDIRED buffer") (DEFVAR *BDIRED-PATHNAME2-NAME* :UNBOUND "Alternate pathname of active BDIRED buffer") (DEFMAJOR COM-BDIRED-MODE BDIRED-MODE "BDired" "Setup for editing directory differences" () (PROGN ;Due to ZWEI inversion lossage. (IF (TYPEP *INTERVAL* 'FILE-BUFFER) (LET ((PATHNAME1 (BUFFER-PATHNAME *INTERVAL*)) (PATHNAME2 (BDIRED-ALTERNATE-PATHNAME *INTERVAL*))) (IF (NOT (NULL PATHNAME1)) (SETQ *BDIRED-PATHNAME1-NAME* (STRING PATHNAME1))) (IF (NOT (NULL PATHNAME2)) (SETQ *BDIRED-PATHNAME2-NAME* (STRING PATHNAME2)))))) (SET-COMTAB *MODE-COMTAB* '(#/SP COM-DOWN-REAL-LINE #/= COM-DIRED-SRCCOM #/? COM-BDIRED-DOCUMENTATION #/HELP COM-BDIRED-DOCUMENTATION #/C COM-DIRED-COPY #/c (0 #/C) ;#/I COM-BDIRED-RESOLVE-INCONSISTENCY ;#/i (0 #/I) #/P com-bdired-print-transfer #/p (0 #/P) #/Q COM-BDIRED-EXIT #/q (0 #/Q) #/R COM-DIRED-RENAME #/r (0 #/R) #/T COM-BDIRED-TRANSFER #/t (0 #/T) #/U COM-BDIRED-UNMARK #/u (0 #/U) #/V COM-DIRED-VIEW-FILE #/v (0 #/V) #/RUBOUT COM-BDIRED-REVERSE-UNMARK #/ABORT COM-BDIRED-ABORT #/END COM-BDIRED-EXIT) '()) (SETQ *MODE-LINE-LIST* (APPEND *MODE-LINE-LIST* '(" " *BDIRED-PATHNAME1-NAME* " " *BDIRED-PATHNAME2-NAME* " (Q to exit)")))) (DEFUN (BDIRED-MODE PATHNAME-DEFAULTING-FUNCTION) (IGNORE BUFFER) (AND (EQ BUFFER *INTERVAL*) (DONT-OPTIMIZE (DIRED-LINE-PATHNAME (BP-LINE (POINT)))))) (DEFCOM COM-BDIRED "Edit the differences between two directories." () (KILL-NEW-BUFFER-ON-ABORT (*INTERVAL*) (LET* ((DEFAULT (SEND (DEFAULT-PATHNAME) ':NEW-PATHNAME ':NAME NIL ':TYPE NIL ':VERSION NIL)) (PATHNAME1 (READ-DIRECTORY-NAME "Balance directory" DEFAULT))) (BDIRECTORY-EDIT PATHNAME1 (READ-DIRECTORY-NAME (FORMAT NIL "Balance directory ~A with directory" PATHNAME1) PATHNAME1))))) (DEFUN BDIRECTORY-EDIT (PATHNAME1 PATHNAME2) "Enter the balance directories editor on directories PATHNAME1 and PATHNAME2. In ZMACS, this creates a BDIRED buffer and reads the differences into it, making it the current buffer." (LET ((*INTERVAL* (FIND-OR-CREATE-BDIRED-BUFFER PATHNAME1 PATHNAME2))) (MAKE-BUFFER-READ-ONLY *INTERVAL*) (COM-BDIRED-MODE) (BDIRED-INITIALIZE-BUFFER *INTERVAL* PATHNAME1 PATHNAME2) DIS-TEXT)) ;;;; BDIRED Buffer Initialization (DEFPROP BDIRED-MODE BDIRECTORY-EDIT-REVERT MAJOR-MODE-REVERT-FUNCTION) (DEFUN BDIRECTORY-EDIT-REVERT (BUFFER PATHNAME &OPTIONAL IGNORE SELECT-FLAG IGNORE) "Revert a BDIRED buffer." (BDIRED-INITIALIZE-BUFFER BUFFER PATHNAME (BDIRED-ALTERNATE-PATHNAME BUFFER) SELECT-FLAG)) (DEFUN BDIRED-INITIALIZE-BUFFER (BUFFER PATHNAME1 PATHNAME2 &OPTIONAL SELECT-FLAG) "Initialize a BDIRED buffer." (WITH-READ-ONLY-SUPPRESSED (BUFFER) (LET ((*BATCH-UNDO-SAVE* T) (SELECTED-P (EQ BUFFER *INTERVAL*)) (*INTERVAL* BUFFER) (DIR1 (FS:CREATE-CDIRECTORY PATHNAME1 '() T)) (DIR2 (FS:CREATE-CDIRECTORY PATHNAME2 '() T))) ;; What directories did we ultimately read? Maybe the user corrected an error. (SETQ PATHNAME1 (FS:CDIRECTORY-PATHNAME DIR1)) (SETQ PATHNAME2 (FS:CDIRECTORY-PATHNAME DIR2)) (UPDATE-BDIRED-BUFFER-PATHNAMES BUFFER PATHNAME1 PATHNAME2) (FS:COMPARE-CDIRECTORIES DIR1 DIR2) (DELETE-INTERVAL BUFFER) (DISCARD-UNDO-INFORMATION BUFFER) (IF SELECTED-P (SETQ *BDIRED-PATHNAME1-NAME* (FUNCALL PATHNAME1 ':STRING-FOR-PRINTING) *BDIRED-PATHNAME2-NAME* (FUNCALL PATHNAME2 ':STRING-FOR-PRINTING))) (LET ((STREAM (INTERVAL-STREAM-INTO-BP (INTERVAL-FIRST-BP BUFFER)))) (BDIRED-INSERT-DIRECTORY DIR1 STREAM DIR2) (SEND STREAM ':TYO #/CR) (BDIRED-INSERT-DIRECTORY DIR2 STREAM DIR1)) (LET ((FIRST-LINE (BP-LINE (INTERVAL-FIRST-BP BUFFER)))) (PUT-LINE FIRST-LINE DIR1 'CDIRECTORY1) (PUT-LINE FIRST-LINE DIR2 'CDIRECTORY2))) (BDIRED-MARK-INITIAL-TRANSFERS)) (IF SELECT-FLAG (MAKE-BUFFER-CURRENT BUFFER))) (DEFUN BDIRED-INSERT-DIRECTORY (DIRECTORY STREAM ALTERNATE-DIRECTORY) (LET ((DIRLIST (FS:CDIRECTORY-LIST DIRECTORY)) (PATHNAME (FS:CDIRECTORY-PATHNAME DIRECTORY))) (DOLIST (CFILE (CDR DIRLIST)) (PUTPROP (FS:CFILE-PLIST CFILE) ALTERNATE-DIRECTORY ':ALTERNATE-DIRECTORY)) (SEND STREAM ':STRING-OUT (SEND PATHNAME ':STRING-FOR-PRINTING)) (SEND STREAM ':LINE-PUT ':DIRECTORY PATHNAME) (SEND STREAM ':TYO #/CR) (SEND *DIRECTORY-SINGLE-FILE-LISTER* (CAR DIRLIST) STREAM) ;hands to DIRED of a CDIRECTORY. The :CFILE property of each line ; gets the CAR of the DIRLIST element. (BDIRED-INSERT-DIRLIST DIRLIST STREAM 0))) (DEFUN BDIRED-INSERT-DIRLIST (DIRECTORY STREAM LEVEL) ; this is almost the same function as DIRED-INSERT-DIRECTORY, but it puts the CFILE ; on the line as a CFILE property. The TRUENAME is also put on as the :PATHNAME property ; for compatibility with DIRED commands. "Insert into a DIRED buffer lines describing the files in DIRECTORY. DIRECTORY is a value returned by FS:DIRECTORY-LIST. STREAM is a stream outputting into the DIRED buffer. LEVEL is the depth in subdirectories of these files. Returns the first inserted line that describes a file." ;; Mark all files that are the newest (DIRED-COMPUTE-GREATER-THANS (CDR DIRECTORY)) (DO ((FILES DIRECTORY (CDR FILES)) (FILE) (LINE) (FIRST-FILE-LINE)) ((NULL FILES) FIRST-FILE-LINE) (SETQ FILE (CAR FILES)) (UNLESS (NULL (FS:CFILE-TRUENAME FILE)) (IF (GET FILE ':DIRECTORY) (LET ((STR (SEND (SEND (SEND (FS:CFILE-TRUENAME FILE) :NEW-PATHNAME :DEVICE NIL ;; Get rid of the version iff ;; this is the newest one. :VERSION (IF (GET FILE :NEWEST) NIL (SEND (CAR FILE) :VERSION))) :PATHNAME-AS-DIRECTORY) :STRING-FOR-DIRECTORY))) ;; STR has the string we want to print instead of the filename. ;; Replace (CAR FILE) with a phony "pathname" that will print as that string. (WITH-STACK-LIST* (FILE1 #'(LAMBDA (&REST IGNORE) STR) (CDR FILE)) (FUNCALL *DIRECTORY-SINGLE-FILE-LISTER* FILE1 STREAM))) (FUNCALL *DIRECTORY-SINGLE-FILE-LISTER* FILE STREAM)) (SETQ LINE (LINE-PREVIOUS (BP-LINE (SEND STREAM :READ-BP)))) (INSERT-CHARS (CREATE-BP LINE 5) #/SPACE (* *DIRED-SUBDIRECTORY-INDENTATION* LEVEL)) ;; Use lower-case "d" to mark already-deleted files. (IF (GET FILE ':DELETED) (SETF (CHAR LINE 0) #/d)) (OR FIRST-FILE-LINE (SETQ FIRST-FILE-LINE LINE)) (SETF (GETF (LINE-PLIST LINE) 'LEVEL) LEVEL) (LOOP FOR (PROP VAL) ON (CDR FILE) BY 'CDDR ;transfer properties to dired line. DO (SETF (GETF (LINE-PLIST LINE) PROP) VAL)) (SETF (GETF (LINE-PLIST LINE) ':CFILE) FILE) (SETF (GETF (LINE-PLIST LINE) ':PATHNAME) (CAR FILE)) ))) ;;;; Commands (DEFCOM COM-BDIRED-EXIT "Exit from BDIRED, performing transfers that you have selected." () (IF (BDIRED-PROCESS-FILES) (FUNCALL-SELF ':EXIT-SPECIAL-BUFFER T *INTERVAL*)) DIS-BPS) (DEFCOM COM-BDIRED-ABORT "Exit BDIRED, not transferring any files." () (FUNCALL-SELF ':EXIT-SPECIAL-BUFFER T *INTERVAL*) DIS-BPS) (DEFUN BDIRED-MAP-OVER-ALL-LINES (FUN) (DO ((LINE (BP-LINE (INTERVAL-FIRST-BP *INTERVAL*)) (LINE-NEXT LINE)) (LAST-LINE (BP-LINE (INTERVAL-LAST-BP *INTERVAL*)))) ((EQ LINE LAST-LINE)) (FUNCALL FUN LINE))) (DEFUN BDIRED-MARK-INITIAL-TRANSFERS () (BDIRED-MAP-OVER-ALL-LINES #'BDIRED-MARK-INITIAL-TRANSFER)) (DEFUN BDIRED-MARK-INITIAL-TRANSFER (LINE) (COND ((NOT (NULL (FS:CFILE-TRANSFER-DESTINATIONS (BDIRED-LINE-CFILE LINE)))) (MUNG-LINE LINE) (ASET #/T LINE 0)))) (DEFUN BDIRED-MARK-TRANSFER (CFILE) (FS:MARK-CFILE-FOR-TRANSFER CFILE (GET (FS:CFILE-PLIST CFILE) ':ALTERNATE-DIRECTORY))) (DEFUN BDIRED-UNMARK-TRANSFER (CFILE) (IF (NOT (NULL (FS:CFILE-TRANSFER-DESTINATIONS CFILE))) (SETF (FS:CFILE-TRANSFER-DESTINATIONS CFILE) '()))) (DEFCOM COM-BDIRED-PRINT-TRANSFER "Print intended transfers for file(s)." () (DIRED-MAP-OVER-LINES *NUMERIC-ARG* #'(LAMBDA (LINE) (BDIRED-PRINT-TRANSFER (BDIRED-LINE-CFILE LINE))))) (defun bdired-print-transfer (cfile) (let ((*print-circle* t)) (print (fs:cfile-transfer-destinations cfile)))) (DEFUN BDIRED-PROCESS-FILES () (LET ((TERMINAL-IO *TYPEIN-WINDOW*) (FIRST-LINE (BP-LINE (INTERVAL-FIRST-BP *INTERVAL*)))) (LET ((DIR1 (GET-LINE FIRST-LINE 'CDIRECTORY1)) (DIR2 (GET-LINE FIRST-LINE 'CDIRECTORY2))) (FS:SETUP-CDIRECTORY-TRANSFER-MODE DIR1) (FS:SETUP-CDIRECTORY-TRANSFER-MODE DIR2) (FS:CDIRECTORY-TRANSFER DIR1) (FS:CDIRECTORY-TRANSFER DIR2))) T) (DEFCOM COM-BDIRED-TRANSFER "Mark file(s) for transfer." () (DIRED-MAP-OVER-LINES *NUMERIC-ARG* #'(LAMBDA (LINE) (MUNG-LINE LINE) (ASET #/T LINE 0) (BDIRED-MARK-TRANSFER (BDIRED-LINE-CFILE LINE))))) (DEFCOM COM-BDIRED-UNMARK "Un-mark file(s) for transfer or other action." () (DIRED-MAP-OVER-LINES (IF (AND (NOT *NUMERIC-ARG-P*) (OR (NOT (DIRED-LINE-PATHNAME (BP-LINE (POINT)))) (EQ (BP-CHAR (BEG-LINE (POINT))) #/SP))) -1 *NUMERIC-ARG*) #'(LAMBDA (LINE) (MUNG-LINE LINE) (ASET #/SP LINE 0) (BDIRED-UNMARK-TRANSFER (BDIRED-LINE-CFILE LINE))))) (DEFCOM COM-BDIRED-REVERSE-UNMARK "Un-mark previous file(s) for transfer or other action." () (SETQ *NUMERIC-ARG* (- *NUMERIC-ARG*)) (COM-BDIRED-UNMARK)) (COMMENT ;may want some of this later. ;;; An Inconsistency consists of two Cfiles and ;;; a group of consecutive Lines in a Buffer. (DEFSTRUCT (INCONSISTENCY (:TYPE :NAMED-ARRAY) :CONC-NAME) CFILE1 CFILE2 FIRST-LINE LAST-LINE) (DEFUN BDIRED-INSERT-INCONSISTENCY (CFILE1 CFILE2 STREAM) (LET* ((LINE1 (BDIRED-LIST-CFILE CFILE1 STREAM)) (LINE2 (BDIRED-LIST-CFILE CFILE2 STREAM)) (LINE3 (PROGN (SEND STREAM ':TYO #/CR) (BDIRED-PREVIOUS-LINE STREAM))) (INCONSISTENCY (MAKE-INCONSISTENCY FIRST-LINE LINE1 LAST-LINE LINE3 CFILE1 CFILE1 CFILE2 CFILE2))) (PUT-LINE LINE1 INCONSISTENCY 'BDIRED-INCONSISTENCY) (PUT-LINE LINE2 INCONSISTENCY 'BDIRED-INCONSISTENCY) (PUT-LINE LINE3 INCONSISTENCY 'BDIRED-INCONSISTENCY) LINE1)) (DEFSUBST BDIRED-DELETE-INCONSISTENCY (INCONSISTENCY) (BDIRED-DELETE-LINE (INCONSISTENCY-FIRST-LINE INCONSISTENCY) (INCONSISTENCY-LAST-LINE INCONSISTENCY))) (DEFSUBST RELATED-INCONSISTENCY (LINE) (GET-LINE LINE 'BDIRED-INCONSISTENCY)) (DEFUN INCONSISTENCY-RELATED-CFILE (INCONSISTENCY CFILE) (COND ((EQ CFILE (INCONSISTENCY-CFILE1 INCONSISTENCY)) (INCONSISTENCY-CFILE2 INCONSISTENCY)) ((EQ CFILE (INCONSISTENCY-CFILE2 INCONSISTENCY)) (INCONSISTENCY-CFILE1 INCONSISTENCY)) (T (ERROR "Cfile not element of Inconsistency" (LIST CFILE INCONSISTENCY))))) (DEFCOM COM-BDIRED-RESOLVE-INCONSISTENCY "Alter the other file's version//creation date. When pointing at one file of an inconsistency, alters the version//creation-date information of the other file to match this file." () (LET ((LINE (BP-LINE (POINT)))) (LET ((CORRECT-CFILE (BDIRED-LINE-CFILE LINE)) (INCONSISTENCY (OR (RELATED-INCONSISTENCY LINE) (BARF "Not an inconsistency")))) (LET ((INCORRECT-CFILE (INCONSISTENCY-RELATED-CFILE INCONSISTENCY CORRECT-CFILE))) (LET ((V1 (FS:CFILE-VERSION CORRECT-CFILE)) (V2 (FS:CFILE-VERSION INCORRECT-CFILE)) (CD1 (FS:CFILE-CREATION-DATE CORRECT-CFILE)) (CD2 (FS:CFILE-CREATION-DATE INCORRECT-CFILE)) (TRUENAME (FS:CFILE-TRUENAME INCORRECT-CFILE))) (IF (= V1 V2) (IF (NOT (= CD1 CD2)) (BDIRED-CHANGE-CREATION-DATE TRUENAME CD1)) (IF (= CD1 CD2) (BDIRED-CHANGE-VERSION TRUENAME V1) (BDIRED-CHANGE-VERSION-AND-CREATION-DATE TRUENAME V1 CD1))))) (BDIRED-DELETE-INCONSISTENCY INCONSISTENCY))) DIS-TEXT) (DEFUN BDIRED-CHANGE-CREATION-DATE (TRUENAME DATE) (WITH-OPEN-FILE (STREAM TRUENAME ':DIRECTION ':INPUT) (SEND STREAM ':CHANGE-PROPERTIES NIL ':CREATION-DATE DATE)) (FORMAT *QUERY-IO* "~&Creation date of ~A changed to ~A" TRUENAME (TIME:PRINT-UNIVERSAL-TIME DATE NIL))) (DEFUN BDIRED-CHANGE-VERSION (TRUENAME VERSION) (LET ((NEWNAME (SEND TRUENAME ':NEW-VERSION VERSION))) (WITH-OPEN-FILE (STREAM TRUENAME ':DIRECTION ':INPUT) (SEND STREAM ':RENAME NEWNAME)) (FORMAT *QUERY-IO* "~&~A renamed to ~A" TRUENAME NEWNAME))) (DEFUN BDIRED-CHANGE-VERSION-AND-CREATION-DATE (TRUENAME VERSION DATE) (LET ((NEWNAME (SEND TRUENAME ':NEW-VERSION VERSION))) (WITH-OPEN-FILE (STREAM TRUENAME ':DIRECTION ':INPUT) (SEND STREAM ':RENAME NEWNAME) (SEND STREAM ':CHANGE-PROPERTIES NIL ':CREATION-DATE DATE)) (FORMAT *QUERY-IO* "~&~A renamed to ~A;~%creation date changed to ~A" TRUENAME NEWNAME (TIME:PRINT-UNIVERSAL-TIME DATE NIL)))) ) ;;;; Documentation (DEFCOM COM-BDIRED-DOCUMENTATION "Print various sorts of editor documentation" () (LET ((*COM-DOCUMENTATION-ALIST* (CONS '(#/M COM-BDIRED-HELP) *COM-DOCUMENTATION-ALIST*))) (COM-DOCUMENTATION))) (DEFCOM COM-BDIRED-HELP "Explain use of DIRED commands" () (FORMAT T "You are in the balance directories editor. The commands are: T Mark the current file to be transferred. P Mark the current file to be printed on the standard hardcopy device. U Cancel any request marked on the current line, or else the line above. Rubout Move up and cancel any request marked on that line. R Rename this file. You type the new filename in a mini buffer. C Copy this file. You type the new filename in a mini buffer. Space Move to the next line. Above commands repeat with a numeric argument, backwards if the argument is negative. V View current file. Q (or End) Exit. The remaining files in the transfer lists will be moved. Abort Exit without performing any transfers. = SRCCOM this file with the > version. ") DIS-NONE)