Code:
;| ______________________________________________________________________
| |
| - Filtern der Systemvariablen |
|______________________________________________________________________|
| |
| Aufrufe: siehe unten |
| |
| Beschreibung: Funktionen zum Filtern der Systemvariablen |
| nach Eigenschaften. Funktioniert nur in Verbindung mit |
| SYSVDLG.ARX +.DAT aus den Expresstools |
| |
| Hinweis: Die SYSVDLG.DAT wurde folgendermaßen interpretiert: |
| # = READONLY |
| ! = READ/WRITE |
| |
| - Wolfgang Sünder |
| - Version 1.0 |
| - 4. Mai 2009 |
|______________________________________________________________________|
|;;| ______________________________________________________________________
| |
| - Hilfsfunktionen |
|______________________________________________________________________|
|;
;| ______________________________________________________________________
| |
| - Destruktive Form von append, Erstatz (setq sym (append sym list))|
|______________________________________________________________________|
|;
(defun append!(symbol1 liste2 / )
(set symbol1(append(eval symbol1)liste2))
)
;| ______________________________________________________________________
| |
| - zerlegt String am angegebenen Zeichen |
|______________________________________________________________________|
|;
(defun str-tok(str c / tmp)
(if(/= str "")
(progn
(setq tmp(str-div str c))
(append(list(car tmp))(str-tok(cadr tmp)c))
)
)
)
;| ______________________________________________________________________
| |
| - zerteilt STR beim ersten Fund von C (einzelnes Zeichen) |
|______________________________________________________________________|
|;
(defun str-div(str c / i l )
(setq i 1)
(setq l(strlen str))
(while(and(<= i l)(/=(substr str i 1)c))
(setq i(1+ i))
)
(list(substr str 1(1- i))(substr str(1+ i)))
)
;| ______________________________________________________________________
| |
| - Die SYSVDLG.BAT auslesen (ohne Beschreibung) |
|______________________________________________________________________|
|;
(defun read-vardata (/ FILE textline)
(setq FILE (open (findfile "sysvdlg.dat") "r"))
(while (setq textline (READ-LINE FILE))
(if (member (substr textline 1 1) '("!" "#"))
(append! '*SW#DAT-LIST* (list (append (str-tok (substr textline 2) "|") (list(substr textline 1 1))) ))
)
)
*SW#DAT-LIST*
)
;| ______________________________________________________________________
| |
| - Eine Filterbedingung auf die SYSVAR-Liste anwenden |
|______________________________________________________________________|
|;
(defun filter-list (condition /)
(vl-remove-if
'not
(mapcar '(lambda (VARDATA /)
(if (apply condition (list VARDATA))
VARDATA
)
)
(if (not *SW#DAT-LIST*)
(read-vardata)
*SW#DAT-LIST*
)
)
)
)
;| ______________________________________________________________________
| |
| - Befehle mit vorgefertigten Filtern |
|______________________________________________________________________|
|;
;| ______________________________________________________________________
| |
| - Sysvars filtern nach Typ: Integer (list-sysvar-int) |
|______________________________________________________________________|
|;
(defun list-sysvar-int (/)
(filter-list '(lambda (testme) (= "INTEGER" (strcase (cadr testme)))))
)
;| ______________________________________________________________________
| |
| - Sysvars filtern nach Typ: String (list-sysvar-str) |
|______________________________________________________________________|
|;
(defun list-sysvar-str (/)
(filter-list '(lambda (testme) (= "STRING" (strcase (cadr testme)))))
)
;| ______________________________________________________________________
| |
| - Sysvars filtern nach Speichern: alle nicht gespeicherten |
| - (list-sysvar-notsaved) |
|______________________________________________________________________|
|;
(defun list-sysvar-notsaved (/)
(filter-list '(lambda (testme) (= "NOT SAVED" (strcase (caddr testme)))))
)
;| ______________________________________________________________________
| |
| - Sysvars filtern nach Speichern: alle gespeicherten |
| - (list-sysvar-saved) |
|______________________________________________________________________|
|;
(defun list-sysvar-saved (/)
(filter-list '(lambda (testme) (/= "NOT SAVED" (strcase (caddr testme)))))
)
;| ______________________________________________________________________
| |
| - Sysvars filtern nach Speicherort: Registry |
| - (list-sysvar-registry) |
|______________________________________________________________________|
|;
(defun list-sysvar-registry (/)
(filter-list '(lambda (testme) (= "REGISTRY" (strcase (caddr testme)))))
)
;| ______________________________________________________________________
| |
| - Sysvars filtern nach Speicherort: Drawing (list-sysvar-drawing) |
|______________________________________________________________________|
|;
(defun list-sysvar-drawing (/)
(filter-list '(lambda (testme) (= "DRAWING" (strcase (caddr testme)))))
)
;| ______________________________________________________________________
| |
| - Sysvars filtern READ-ONLY (list-sysvar-readonly) |
|______________________________________________________________________|
|;
(defun list-sysvar-readonly (/)
(filter-list '(lambda (testme) (= "#" (last testme))))
)
;| ______________________________________________________________________
| |
| - Sysvars filtern VERÄNDERBAR (list-sysvar-readwrite) |
|______________________________________________________________________|
|;
(defun list-sysvar-readwrite (/)
(filter-list '(lambda (testme) (/= "#" (last testme))))
)
;| ______________________________________________________________________
| |
| - Sysvars filtern : ALLE (list-sysvar-all) |
|______________________________________________________________________|
|;
(defun list-sysvar-all (/)
(filter-list '(lambda (testme) testme))
)