Informal Introduction
Directory is a special file which contains a sequence of pairs: file name and file
i-node number.
(0) CHARACTERISTICS
-type specified: directory
-features: deterministic, non-parameterized
-foreign types: global, mystring
(1) SYNTAX
ACCESS-PROGRAMS
Arg#1 | Arg#2 | Arg#3 | Result Type | CREATE | directory:VO | mystring:V | int:V | | REMOVE | directory:VO | mystring:V | | | GETINODETABLEINDEX | directory:V | mystring:V | | int | EXISTS | directory:V | mystring:V | | bool | ISFULL | directory:V | | | bool | |
---|
(2) CANONICAL TRACES
canonical(T) T = _ n:<int>; s[0]..s[n]:<mystring>; v[0]..v[n]:<int>0 n n < global::G_directory_size() i:<int>0 i i n [0 v[i] v[i] < global::G_inodetable_size() mystring::iscorrectfilename(s[i]) (i < n s[i] < s[i + 1])] [T = [CREATE(*, s[i], v[i])]i=0..n ]AUXILIARY FUNCTIONS
interrorval: <int>
interrorval() = -1
exists: <directory> × <mystring> <bool>
exists(dir, name) = d1,d2:<directory>; in:<int> [dir = d1.CREATE(*, name, in).d2 ]
getinodetableindex: <directory> × <mystring> <int>
getinodetableindex(dir, name) =
Condition | Value |
---|---|
! d1,d2:<directory>; in:<int> [dir = d1.CREATE(*, name, in).d2 ] | in |
¬exists(dir, name) | interrorval() |
isfull: <directory> <bool>
isfull(dir) = length(dir) = global::G_directory_size()
(3) SEMANTICS
ACCESS-PROGRAMSLegality(CREATE((n, T), name, in)) =
Condition | Value |
---|---|
exists(T, name) ¬mystring::iscorrectfilename(name) in < 0 in global::G_inodetable_size() isfull(T) | %illegal% |
¬exists(T, name) mystring::iscorrectfilename(name) 0 in in < global::G_inodetable_size() ¬isfull(T) | %legal% |
CREATE((n, T) , name, in) = T1.CREATE(*, name, in).T2 where T1,T2:<directory> [T = T1.T2 canonical(T1.CREATE(*, name, in).T2)]
Legality(REMOVE((n, T), name)) =
Condition | Value |
---|---|
¬exists(T, name) | %file not found% |
exists(T, name) | %legal% |
REMOVE((n, T) , name) = T1.T2 where T1,T2:<directory>; in:<int> [T = T1.CREATE(*, name, in).T2 ]
Legality(GETINODETABLEINDEX(T, name)) = %legal%
GETINODETABLEINDEX(T, name) = getinodetableindex(T, name)
Legality(EXISTS(T, name)) = %legal%
EXISTS(T, name) = exists(T, name)
Legality(ISFULL(T)) = %legal%
ISFULL(T) = isfull(T)