Directory Module Interface Specification

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

Program Name
Arg#1Arg#2Arg#3Result Type
CREATEdirectory:VOmystring:Vint:V 
REMOVEdirectory:VOmystring:V   
GETINODETABLEINDEXdirectory:Vmystring:V  int
EXISTSdirectory:Vmystring:V  bool
ISFULLdirectory: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) =

ConditionValue
! 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-PROGRAMS

Legality(CREATE((n, T), name, in)) =

ConditionValue
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)) =

ConditionValue
¬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)