Κεφάλαιο 3 - Ανάπτυξη και Υλοποίηση της Εφαρμογής
62
1.
$handle
=
fopen
(
$vcd_file
,
"r"
);
2.
if
(
$handle
){
3.
while
((
$line
=
fgets
(
$handle
))
!==
false
)
{
4.
// if the line is timescale definition, keep it to the time infor-
mation
5.
if
(
preg_match
(
'/^ 1 .*/'
,
$line
)
===
1
){
6.
// trim unnecessary parts and keep the timescale units
7.
$timescale
=
trim
(
str_replace
(
'1'
,
""
,
$line
));
8.
}
9.
10.
// if the line is module definition, add that module to the path
11.
if
(
preg_match
(
'/^\$scope module .*/'
,
$line
)
===
1
){
12.
// trim unnecessary parts and keep the module's name
13.
$line
=
str_replace
(
'$scope module '
,
""
,
$line
);
14.
$module
.=
"_-_"
.
trim
(
str_replace
(
' $end'
,
""
,
$line
));
15.
}
Κώδικας 29: ajax_handler.php - Κομμάτι κώδικα εξαγωγής δεδομένων από το VCD αρχείο
Η μετάφραση των αποτελεσμάτων παίρνει αρχικά την μορφή ενός πίνακα όπου συγκρατούμε
για το κάθε σήμα την ονομασία του, το μήκος του, την οντότητα στην οποία ανήκει και τους
χρόνους στους οποίους αλλάζει τιμή καθώς και την τιμή που παίρνει. Εκτός αυτών,
συγκρατούμε και κάποια στοιχεία της ίδιας της προσομοίωσης όπως τον συνολικό χρόνο
προσομοίωσης, τον αριθμό χρόνων όπου υπάρχει τουλάχιστον μία αλλαγή τιμής καθώς και την
χρονική υποδιαίρεση που χρησιμοποιείται στους χρόνους που μας δίνονται. Η διαδικασία αυτή
γίνεται εξετάζοντας κάθε γραμμή του αρχείου VCD και συγκρίνοντάς την με συγκεκριμένες
αναμενόμενες μορφές που αντιστοιχούν σε δηλώσεις δεδομένων που μας ενδιαφέρουν
(Κώδικας 29). Καθώς η σύνθεση του πίνακα αυτού μπορεί να είναι σχετικά χρονοβόρα
φτάνοντας στα μερικά δευτερόλεπτα για πολύ μεγάλα αρχεία VCD, χρησιμοποιούμε ένα
ενδιάμεσο αρχείο τύπου JSON (JavaScript Object Notation, Συμβολισμός Αντικειμένου
JavaScript) [28]. Στο αρχείο αυτό συγκρατούμε τον πίνακα με τα αποτελέσματα προσομοίωσης
σε μορφή JSON. Έτσι μπορούμε αρχικά να ελέγξουμε εάν υπάρχει αλλαγή στο αρχείο VCD
από την τελευταία του μετάφραση και εάν δεν υπάρχει κάποια αλλαγή να πάρουμε απευθείας
τα δεδομένα που χρειαζόμαστε από το ενδιάμεσο αρχείο JSON.
1.
$vcd_timestamp
=
$path
.
filemtime
(
$vcd_file
);
2.
[...]
3.
if
(
file_exists
(
$vcd_timestamp
.
'.json'
)
){
4.
[...]
5.
}
else
{
6.
[...]
7.
$fp
=
fopen
(
$vcd_timestamp
.
'.json'
,
'w'
)
or
die
(
"Unable to open
file!"
);
8.
fwrite
(
$fp
,
json_encode
(
$data
));
9.
fclose
(
$fp
);
Κώδικας 30: ajax_handler.php - Ο έλεγχος και δημιουργία του ενδιάμεσου αρχείου JSON
Ο έλεγχος αυτός επιτυγχάνεται με την χρήση της PHP συνάρτησης filemtime() η οποία
επιστρέφει τον χρόνο στον οποίο έγινε η τελευταία αλλαγή σε ένα αρχείο. Κατά την δημιουργία
του ενδιάμεσου αρχείου JSON παίρνουμε τον χρόνο αυτό για το αντίστοιχο VCD και τον
χρησιμοποιήσουμε ως ονομασία του JSON αρχείου. Έτσι, στην επόμενη εκτέλεση θα
ξαναπάρουμε τον χρόνο τελευταίας αλλαγής του VCD αρχείου και θα ελέγξουμε αρχικά εάν
υπάρχει διαθέσιμο JSON αρχείο με ονομασία τον χρόνο που ζητάμε οπότε προχωράμε