/* PTNMASS.PCN: * * Check for _l and _g variables. Also program names. * */ /*-exports("massage_proc","check_term")*/ /***** Code to check for _l and _g variables ***********************/ check_term(term,max,new,lmax,lnew) { ? int(term) -> {|| lnew=lmax, new=max }, char(term) -> {|| lnew=lmax, new=max}, double(term) -> {|| lnew=lmax, new=max}, term ?= [] -> {|| lnew=lmax, new=max}, term ?= {v,nm,sz}, v=="_var" -> {|| check_name(1,nm,max,new), check_name(2,nm,lmax,lnew) }, default -> {; check_tuple(term,length(term)-1,max,new,lmax,lnew) } } check_tuple(call,n,max,new,lmax,lnew) { ? n >= 0 -> { ; a=call[n], check_term(a,max,new1,lmax,lnew1), check_tuple(call,n-1,new1,new,lnew1,lnew) }, default -> {|| new=max, lnew=lmax} } check_name(type,name,old,new) { ? char(name), type==1 -> {|| parse_gname(name,val), { ? val>old -> {; new = val }, val<=old -> {; new = old } } }, char(name),type==2 -> {|| parse_lname(name,val), { ? val>old -> {; new = val }, val<=old -> {; new = old } } }, default -> {; print(check_name_error(name)) } } parse_lname(name,val) { ? char(name) -> {|| sys:string_to_list(name,l,[]), { ? l ?= [95,108|l1] -> {; parse_int(l1,[],val) }, default -> {; val=0 } } }, default -> {; print(parse_lname_error(name)) } } parse_gname(name,val) { ? char(name) -> {|| sys:string_to_list(name,l,[]), { ? l ?= [95,103|l1] -> {; parse_int(l1,[],val) }, l ?= [95,97,112|l1] -> {; parse_int(l1,[],val) }, default -> {; val=0 } } }, default -> {; print(parse_gname_error(name)) } } parse_int(l,lp,val) { ? l ?= [n|l1], n >= 48, n <= 57 -> {|| n1 = n, parse_int(l1,[n1|lp],val)}, l ?= [n|l1], n < 48 -> {|| parse_int(l1,lp,val)}, l ?= [n|l1], n > 57 -> {|| parse_int(l1,lp,val)}, l ?= [], lp!=[] -> {|| reverse(lp,lp1),sys:list_to_integer(lp1,val)}, default -> {; val = 0 } } reverse(l,l1) {; reverse1(l, [], l1) } reverse1(list, new_in, new_out) {? list ?= [] -> {; new_out = new_in }, list ?= [elt | list1] -> {; reverse1(list1, [elt | new_in], new_out) } } args(head,args) {|| sys:tuple_to_list(head,L,[]), args = L[1] }