esrf

Beamline Instrument Software Support
SPEC Macro documentation: [ Macro Index | BCU Home ]

#
# props.mac
#
#

def get_property_filename() '{
    return sprintf("%s/../../../local/spec/spec.d/%s/properties",SPECD,SPEC)
}'

def properties '{
    local propfile editor

    propfile = get_property_filename()
    editor = SEDITOR

    unix(sprintf("%s %s", editor, propfile))
}'

def get_ctrl_id(prefix,ctrlno) '{
    return PROPERTIES[prefix][ctrlno]
}'

def ctrl_register(id,prefix) '{
    PROPERTIES["mnemonic"][id] =  prefix
}'

def get_nonempty_line(line) '{
    local i j

    for (i = 1; i <= length(line); i++) {
        j = index("# \t\n", substr(line, i, 1))
        if (j <= 1){
            return (j == 0) ? line : ""
        }
    }

    return ""
}'


def load_properties() '{

    unglobal PROPERTIES
    global   PROPERTIES

    local vals, propfile, nv, key, line
    local smkeys

    propfile = get_property_filename()

    while ( (line = getline(propfile)) != -1 ) {
        # print ".. reading line " line
        if ((line = get_nonempty_line(line)) == ""){
            continue
        }
        nv = split(line,vals,"=")
        if (nv == 2) {
            sscanf(vals[0],"%s",key)
            split(key,smkeys,":")
            sscanf(vals[1],"%s",value)
            if ( split(value,vals,"\"") > 2 || split(value,vals,"\'") > 2) {
                value = vals[1]
            }
            PROPERTIES[smkeys[0]][smkeys[1]] = value
        }
    }
    getline(propfile,"close")

    load_mnemonics()
}'

def load_mnemonics() '{
    local mi ci

    for (mi=0;mi<MOTORS;mi++) {
        PROPERTIES["mnemonic"][motor_mne(mi)] = "motor"
    }
    for (ci=0;ci<COUNTERS;ci++) {
        PROPERTIES["mnemonic"][cnt_mne(ci)]  = "counter"
    }
}'

def get_property(id,propname) '{
    return PROPERTIES[id][propname];
}'

def get_properties(id) '{

    local retval rval

    for ( rval in PROPERTIES[id] ) {
        retval[rval] = PROPERTIES[id][rval]
    }

    return retval
}'

def set_property(id, propname, value ) '{
    PROPERTIES[id][propname] = value
}'

def gethardbyname(name) '{
    local answer

    answer = name ":" PROPERTIES["mnemonic"][name]
    return answer
}'

def gethardlist(type) '{
    local answer ci mi key

    answer = ""

    for (key in PROPERTIES["mnemonic"]) {
        if (type == "") {
            answer = answer "," key ":" PROPERTIES["mnemonic"][key]
        } else if ( type != "" && PROPERTIES["mnemonic"][key] == type ) {
            answer = answer "," key ":" type
        }
    }
    return substr(answer,2)
}'