$Id: dfui.html,v 1.2 2004/07/17 01:50:34 cpressey Exp $
This document describes a user interface (UI) abstraction which allows an
application to communicate with a user through any number of kinds
of concrete user interfaces, such as curses
, GTK+, or a
web browser.
This abstraction should be suitable for presenting the DragonFly system installer to the user; however it need not and should not be limited to only the installer. Many other tasks in DragonFly, such as system configuration and package installation, could and for the sake of consistency should use the same UI.
The DFUI abstraction isolates the semantics of user interation from the concrete details of it, similar to a Model View Controller abstraction. Such a system is split into frontend and backend:
fdisk
.)The backend tells the frontend what kind of conversation to hold with the user; the frontend tells the backend the user's ultimate decisions.
The backend talks to the frontend in terms of abstract user interface elements. It tells the frontend nothing about how the UI should be presented, only the bare essentials of what it must convey. Likewise, the frontend talks to the backend in terms of data. It keeps trivia about the user (like what language they are using) to itself. In this way, we maintain component isolation: the backend is concerned only with the semantics of the user interaction, while the frontend is concerned only with its implementation.
The frontend may be constructed in almost any manner. It may be a
curses
program, or it may be a CGI. This presents a unique barrier, namely that the
frontend might be either a single, long-running process or a series of short-running
processes. This essentially requires a concurrently design where the frontend and backend
exist in seperate processes that exchange messages using IPC.
The contrast between the curses
scenario and the CGI scenario
is illustrated below.
This abstraction gives us several benefits:
Each of the messages sent between the frontend and the backend consists of one piece of data. Before getting to the messages themselves, we'll examine the data types in use.
Many of the other data types each have an id.
An id is a key which identifies the object to both the frontend and the backend. It should be unique across all similar objects in the same container. (i.e. a form id should be unique across all forms in a session, a field id should be unique across all fields in a form, etc.)
Id's are implemented as a short alphanumeric (plus underscores) strings
such as disk_select_menu
.
Many of the other data types each have an info block.
In contrast to the id, which the computer uses to tell objects apart, an info block is for the human operator's benefit. Each info block contains:
The basic unit of interaction is a form. While typically displayed as a familiar electronic version of a paper fill-out form, it is defined abstractly enough to not pose any obstacles should we need to deal with other media. However, in this document we will give typical examples using a familiar GUI interpretation.
Each form consists of:
The multiplicity flag determines whether there is a single set of data displayed on the form (multiplicity = false), or multiple sets of data (multiplicity = true). The former resembles a 'dialog box' in a typical UI. The latter resembles a spreadsheet or database entry form, with zero or more 'rows' of a data, and facilities for the user to add, remove, etc rows. Examples of these two different layout styles are shown below (note of course that these are only examples - the frontend may interpret them any reasonable way it likes.)
|
multiplicity = false |
multiplicity = true |
Each field describes a piece of data that the user can view and possibly manipulate. In a typical GUI, fields are rendered as text boxes and similar widgets. Each field has:
A form with zero fields has only actions, and might typically look like a menu or informative-only dialog box.
Each action describes an action that can be taken. In a typical GUI, actions are rendered as buttons that can be clicked. Each action consists of:
Each dataset describes a set of data that is displayed or entered into a form. In a form with more than zero fields, a multiplicity = false form has exactly one dataset, while a multiplicity = true form may have more than one. A form with zero fields must have zero datasets.
Each dataset consists of a set of one celldata for each field of the form.
A celldata represents a value entered into a field on a form, either as a default value by the backend, or by the user's choice.
Each celldata consists of:
The data type of all celldata values, as far as DFUI is concerned, is text. The backend may convert the text into a more semantically meaningful format, such as floating-point values, internally.
Each field has zero or more options. These are supplied values that the user may choose to place in the field.
The semantics of options in combination with the editable flag are summarized here:
| Editable flag | Number of Options | Semantics |
|---|---|---|
| true | zero | user may manually enter any value in field |
| true | one or more | user may manually enter any value in field, or may select any option to fill field with ("combo box") |
| false | zero | user may not enter data into field in any fashion |
| false | one or more | user may not manually enter values into field, but may select an option to fill the field with ("list box") |
Each response describes a user's decision. Each response consists of:
The form id indicates the form that this is a response to.
The action id indicates the action that the user executed which caused this response.
The datasets contain the user's choices. When the form is multiplicity = false, there should be exactly one dataset; when the form is multiplicity = true, there should be one dataset per "row" of data that the user entered. Either way, there should always be one celldata per field of the form in each dataset.
A progress represents some task which takes a relatively long time to complete; in a typical GUI it would be implemented by a progress bar. Each progress consists of:
The amount is an integer which ranges from 0 to 100, where 0 indicates no progress has been made, and 100 indicates that the task is finished.
Progresses do not have responses, but they may be cancelled.
See dfui_property
.
The backend may send the following kinds of messages to the frontend:
present(form)
prog_begin(progress)
prog_update(progress)
prog_end()
stop()
The frontend may send the following kinds of replies to the backend:
submit(response)
continue()
cancel()
abort()
These may, in theory, be asynchronous: the backend may, for example, send several
present
messages before receiving any submit
replies,
so long as there is some way to identify which submit
s are associated with
which present
s (i.e. the form id).
However, in practice, while some UI's support concurrently displaying multiple UI elements in a natural fashion (typified by "windows",) others do not. So to begin, we will limit ourselves by enforcing a sychronous discipline: each message from the backend must be replied by a reply from the frontend before the next message from the backend is sent.
present
MessageThe present
message carries a form as a payload. Upon
receipt of this message, the frontend should display the form and let the user
manipulate it.
The frontend may then reply to a present
message with:
submit
reply with the corresponding form id, which
indicates that the user chose an action from the form; orabort
reply, which indicates something catastrophic happened
and that the backend should halt everything.submit
ReplyThe submit
reply carries a response as a payload. It should
only occur after a present
message.
prog_begin
MessageA prog_begin
message carries a progress as a payload
and indicates that a progress has begun.
The frontend may reply to a prog_begin
message with:
continue
reply, indicating all is well; orabort
reply, indicating the backend should halt.prog_update
MessageA prog_update
message carries a progress as a payload
and indicates that the state of progress has changed.
The frontend may reply to a prog_update
message with:
continue
reply, indicating all is well;cancel
reply, indicating that the user cancelled the
progress; orabort
reply, indicating the backend should halt.prog_end
MessageA prog_end
message indicates that a progress is finished.
It has no payload.
The frontend may reply to a prog_end
message with:
continue
reply, indicating all is well; orabort
reply, indicating the backend should halt.stop
MessageThe stop
message has no payload; it simply tells the frontend
that the backend has finished processing. The frontend may exit, if it is a
long-running process, or it may simply display a 'finished' page, if it is a
short-running CGI process.
| curses frontend | CGI frontend |
if backend is running error "backend is already running" start backend while not done { wait for a message from backend if the message is 'stop' done := TRUE else if the message is 'present' { display a form based on the message let the user interact with the form until the user selects an action send 'submit' message to backend } } |
if the request method was 'POST' { create 'submit' message from POSTed data send 'submit' message to backend } else { if backend is running error "backend is already running" start backend } wait for a message from backend if the message is 'stop' display 'done' page else if the message is 'present' display a form based on the message |
Let us consider now a library, libdfui
, which implements this abstraction:
From the backend's point of view, the useful functions in this library are as follows. Each function returns an error response (1 = success, 0 = failure.)
dfui_be_start(struct dfui_connection *c)
Connect to the frontend and return a handle to it in c
. XXX this function
also needs to know what frontend to try to connect to and how somehow.
dfui_be_present(struct dfui_connection *c, struct dfui_form *f, struct dfui_response *r)
Ask the frontend on the other end of c
to present the form f
, wait
for a submit reply, and return the response in r
dfui_be_prog_begin(struct dfui_connection *c, struct dfui_progress *p)
Ask the frontend on the other end of c
to start showing the progress p
.
dfui_be_prog_update(struct dfui_connection *c, struct dfui_progress *p)
Ask the frontend on the other end of c
to update the progress p
.
dfui_be_prog_end(struct dfui_connection *c)
Ask the frontend on the other end of c
to stop showing any progress.
dfui_be_stop(struct dfui_connection *c)
Tell the frontend on the other end of c
to stop, and close the connection.
Notably, there are also functions for constructing struct dfui_form
s and its
brethren, and for intrerpreting and freeing struct dfui_response
s.
From the frontend's point of view, the useful functions in this library are as follows. Like the backend, these all return failure/success values.
dfui_fe_start(struct dfui_connection *c)
Connect to the backend XXX somehow.
dfui_fe_receive(struct dfui_connection *c, char *msgtype, void **payload)
Wait for the backend to send a message, then return the message type in *msgtype
and the message itself in *payload
. It is the frontend's reponsibility to cast the
payload to the correct data type (based on *msgtype
,) and to free it at some later
time if it is not NULL.
dfui_fe_submit(struct dfui_connection *c, struct dfui_response *r)
Send a submit reply to the backend.
dfui_fe_progress_continue(struct dfui_connection *c)
Send a continue reply to the backend.
dfui_fe_progress_cancel(struct dfui_connection *c)
Send a cancel reply to the backend.
dfui_fe_abort(struct dfui_connection *c)
Send an abort reply to the backend.
dfui_fe_stop(struct dfui_connection *c)
Close the connection.
Notably, there are also functions for intrerpreting struct dfui_form
s et al,
and for constructing and freeing struct dfui_responses
s.
The IPC used by libdfui, through which the frontend and backend exchange messages and replies, is a wrapper around the CAPS mechanism. CAPS is the lightweight messaging abstraction Matt Dillon has introduced into DragonFly.
CAPS was chosen for two reasons: it fulfils DFUI's needs as an IPC mechanism, and DFUI provides a good "real world" test for CAPS.
The implementation of libdfui in CAPS is fairly straightforward, with one significant twist.
Despite the backend sending 'requests' and the frontend sending 'replies', the backend is a CAPS service, while the frontend is a CAPS client. This is necessary as the frontend could be a series of short-lived processes. A CAPS service cannot receive a message in one process and reply to it in another.
We implement this role reversal by having each message exchange, as described above, be implemented by two full CAPS message-reply exchange cycles internally.
That is, for a backend to send a message to the frontend, the backend waits until it receives a generic 'client ready' message from the frontend, then sends it's request as a CAPS reply. It then waits for another message from the frontend (the DFUI reply) and replies to that with a generic 'service ready' message.


BLESSED VIRGIN MARY
FIRST
1 Chronicles 15:3-4,
15-16; 16:1-2
Easter
Time:
Acts 1:12-14
Revelation 11:19; 12:1-6, 10
Revelation 21:1-5
A reading from the book of Genesis 3:9-15, 20
[After Adam had eaten of the tree,] the LORD God called to him and said,
"Where are you?" And he said, "I heard the sound of you in the
garden, and I was afraid, because I was naked; and I hid myself." He said,
"Who told you that you were naked? Have you eaten of the tree of which I
commanded you not to eat?" The man said, "The woman whom you gave to
be with me, she gave me fruit of the tree, and I ate." Then the LORD God
said to the woman, "What is this that you have done?" The woman said,
"The serpent beguiled me, and I ate."  I will put enmity between you and the woman, and
between your seed and her seed; he shall bruise your head, and you shall bruise
his heel." The man called his wife's name Eve, because she was the mother
of all living.
A reading from the book of Genesis 12:1-7
In those days: the LORD said to Abram, "Go from your country and
your kindred and your father's house to the land that I will show you.   "So Abram went, as the LORD
had told him; and
A reading from the second book of Samuel 7:1-5, 8-11, 16
Now when King David dwelt in his house, and the LORD had given him rest
from all his enemies round about, the king said to Nathan the prophet,
"See now, I dwell in a house of cedar, but the ark of God dwells in a
tent." And Nathan said to the king, "Go, do all that is in your
heart; for the LORD is with you." But that same night the word of the LORD
came to Nathan, "Go and tell my servant David, 'Thus
says the LORD: Would you build me a house to dwell in? I took you from the
pasture, from following the sheep, that you should be prince over my people
A reading from the first book of Chronicles 15:3-4, 15-16; 16:1-2
In those days: David assembled all
A reading from the Book of Proverbs 8:22-31
[Thus speaks the Wisdom of God:] The LORD created me at the beginning of
his work, the first of his acts of old. Ages ago I was set up, at the first,
before the beginning of the earth. When there were no depths I was brought
forth, when there were no springs abounding with water. Before the mountains
had been shaped, before the hills, I was brought forth; before he had made the
earth with its fields, or the first of the dust of the world. When he
established the heavens, I was there, when he drew a circle on the face of the
deep, when he made firm the skies above, when he established the fountains of
the deep, when he assigned to the sea its limit, so that the waters might not
transgress his command, when he marked out the foundations of the earth, then I
was beside him, like a master workman; and I was daily his delight, rejoicing
before him always, rejoicing in his inhabited world and delighting in the sons
of men.
A reading from the Book of Sirach 24:1, 3-4, 8-12, 19-22
Wisdom will praise herself, and is honoured in
God, and will glory in the midst of her people. "I came forth from
the mouth of the Most High the first-born before all creatures. I ordained that
an unfailing light should arise in the heavens, and I covered the earth like a
mist. I dwelt in high places, and my throne was in a pillar of cloud. Then the
Creator of all things gave me a commandment, and the one who created me
assigned a place for my tent. And he said, 'Make your dwelling in Jacob, and in
A reading from the book of Isaiah 7:10-14; 8:10
In those days: The LORD spoke to Ahaz, "Ask a sign of the LORD
your God; let it be deep as Sheol or high
as heaven." But Ahaz said, "I will not ask, and I will not
put the LORD to the test." And he said, "Hear then, O house of David!
 Therefore
the Lord himself will give you a sign. Behold, a virgin shall conceive and bear
a son, and shall call his name Immanuel [God is with us]. Take
counsel together, but it will come to nought; speak a word, but it will not
stand, for God is with us.
A reading from the book of Isaiah 9:2-7
The people who walked in darkness have seen a great light; those who
dwelt in a land of deep darkness, on them has light
shined. You have multiplied the nation, you have increased its joy; they
rejoice before you as with joy at the harvest, as men rejoice when they divide
the spoil. For the yoke of his burden, and the staff for his shoulder, the rod
of his oppressor, you have broken as on the day of Midian.
For every boot of the tramping warrior in battle tumult and every garment
rolled in blood will be burned as fuel for the fire. For to us a child is born,
to us a son is given; and the government will be upon his shoulder, and his
name will be called "Wonderful Counsellor,
Mighty God, Everlasting Father, Prince of Peace." Of the increase of his
government and of peace there will be no end, upon the throne of David, and over
his kingdom, to establish it, and to uphold it with justice and with
righteousness from this time forth and for evermore. The zeal of the LORD of
hosts will do this.
A reading from the book of Isaiah 61:9-11
The descendants of my people shall be known among the nations, and their offspring in the midst of the peoples; all who see them shall acknowledge them, that they are a people whom the LORD has blessed. I will greatly rejoice in the LORD, my soul shall exult in my God; for he has clothed me with the garments of salvation, he has covered me with the robe of righteousness, as a bridegroom decks himself with a garland, and as a bride adorns herself with her jewels. For as the earth brings forth its shoots, and as a garden causes what is sown in it to spring up, so the Lord GOD will cause righteousness and praise to spring forth before all the nations.
A reading from the book of Micah 5:2-5
Thus says the Lord: You, O Bethlehem Ephrathah,
who are little to be among the clans of
A reading from the book of the Prophet Zechariah 2:10-13
Sing and rejoice, O daughter of Sion; for
behold, I come and I will dwell in the midst of you, says the LORD. And many
nations shall join themselves to the LORD in that day, and shall be my people;
and I will dwell in the midst of you, and you shall know that the LORD of hosts
has sent me to you. And the LORD will inherit
A reading from the Acts of the Apostles 1:12-14
[After Jesus was taken up into heaven,] the apostles returned to Jerusalem
from the mount called Olivet, which is near Jerusalem, a sabbath day's journey
away; and when they had entered, they went up to the upper room, where they
were staying, Peter and John and James and Andrew, Philip and Thomas,
Bartholomew and Matthew, James the son of Alphaeus
and Simon the Zealot and Judas the son of James. All these with one accord
devoted themselves to prayer, together with the women and Mary the mother of
Jesus, and with his brethren.
A reading from the book of the Revelation 11:19; 12:1-6, 10
God's temple in heaven was opened. And a great portent appeared in
heaven, a woman clothed with the sun, with the moon under her feet, and on her
head a crown of twelve stars; she was with child and she cried out in her pangs
of birth, in anguish for delivery. And another portent appeared in heaven;
behold, a great red dragon, with seven heads and ten horns, and seven diadems
upon his heads. His tail swept down a third of the stars of heaven, and cast
them to the earth.  And I heard a loud voice in
heaven, saying, "Now the salvation and the power and the kingdom of our God
and the authority of his Christ have come.
A reading from the book of the Revelation 21:1-5
I, John, saw a new heaven and a new earth; for the first heaven and the first earth had passed away, and the sea was no more. And I saw the holy city, new Jerusalem, coming down out of heaven from God, prepared as a bride adorned for her husband; and I heard a loud voice from the throne saying, "Behold, the dwelling of God is with men. He will dwell with them, and they shall be his people, and God himself will be with them; he will wipe away every tear from their eyes, and death shall be no more, neither shall there be mourning nor crying nor pain any more, for the former things have passed away." And he who sat upon the throne said, "Behold, I make all things new."
R. My heart exults in the Lord, my Saviour.
My heart exults in the LORD; my strength is
exalted in the LORD.
R. My heart exults in the Lord, my Saviour.
The bows of the mighty are broken, but the feeble
gird on strength. Those who were full have hired themselves out for bread, but
those who were hungry have ceased to hunger. The barren has borne seven, but
she who has many children is forlorn.
R. My heart exults in the Lord, my Saviour.
The LORD kills and brings to life; he brings
down to Sheol and raises up.
The LORD makes poor and makes rich; he brings low, he also exalts.
R. My heart exults in the Lord, my Saviour.
He raises up the poor
from the dust; he lifts the needy from the dung heap, to make them sit with
princes and inherit a seat of honour.
R. My heart exults in the Lord, my Saviour.
Second Reading †Or† Gospel
Acclamation
R. You are the great pride of our nation.
O daughter, you are blessed by the Most High God
above all women on earth; and blessed be the lord God, who created the heavens
and the earth.
R. You are the great pride
of our nation.
Your hope will never depart from the hearts of
men, as they remember the power of God.
R. You are the great pride
of our nation.
Second Reading †Or† Gospel
Acclamation
R. Listen, O daughter; pay heed and give ear.
Listen, O daughter; pay heed and give ear:
forget your own people and your fatherís house. So will the king desire your beauty. He is your lord, pay homage to him.
R. Listen, O daughter; pay
heed and give ear.
The daughter of the king is clothed with splendour; her robes are threaded with gold. In fine
clothing she is led to the king; behind her are her maiden companions, brought
to you.
R. Listen, O daughter; pay
heed and give ear.
They are escorted amid gladness and joy; they
pass within the palace of the king. Sons will be yours to succeed your fathers;
you will make them rulers over all the earth.
R. Listen, O daughter; pay
heed and give ear.
Second Reading †Or† Gospel
Acclamation
R. May the name of the Lord be blest for evermore.
Praise, O servants of the LORD, praise the name of the LORD! May the name of the LORD be
blest both now and for evermore!
R. May the name of the Lord
be blest for evermore.
From the rising of the sun to its setting,
praised be the name of the LORD! High above all
nations is the LORD, above the heavens his glory.
R. May the name of the Lord
be blest for evermore.

R. May the name of the Lord
be blest for evermore.
From the dust he lifts up the lowly, from the ash
heap he raises the poor, to set them in the company of princes, yes, with the
princes of his people.
R. May the name of the Lord
be blest for evermore.
Second Reading †Or† Gospel
Acclamation
R. He who is mighty has done great things for me, and holy is his name.
My soul magnifies the LORD, and my spirit
rejoices in God my Saviour.
R. He who is mighty has
done great things for me, and holy is his name.
For he has regarded the low
estate of his handmaiden. For behold, henceforth all
generations will call me blessed; for he who is mighty has done great things
for me, and holy is his name.
R. He who is mighty has
done great things for me, and holy is his name.
And his mercy is on those who fear him from
generation to generation. He has shown strength with his arm, he has scattered
the proud in the imagination of their hearts.
R. He who is mighty has
done great things for me, and holy is his name.
He has put down the mighty from their thrones,
and exalted those of low degree; he has filled the hungry with good things, and
the rich he has sent empty away.
R. He who is mighty has
done great things for me, and holy is his name.
He has helped his servant
R. He who is mighty has
done great things for me, and holy is his name.
A reading from the letter of St. Paul to the Romans 5:12, 17-19
Brethren: As sin came into the world through one man and death through sin, and so death spread to all men because all men sinned. If, because of one man's trespass, death reigned through that one man, much more will those who receive the abundance of grace and the free gift of righteousness reign in life through the one man Jesus Christ. Then as one man's trespass led to condemnation for all men, so one man's act of righteousness leads to acquittal and life for all men. For as by one man's disobedience many were made sinners, so by one man's obedience many will be made righteous.
A reading from the letter of St. Paul to the Romans 8:28-30
Brethren: We know that in everything God works for good with those who love him, who are called according to his purpose. For those whom he foreknew he also predestined to be conformed to the image of his Son, in order that he might be the first-born among many brethren. And those whom he predestined he also called; and those whom he called he also justified; and those whom he justified he also glorified.
A reading from the letter of St. Paul to the Galatians 4:4-7
Brethren: When the time had fully come, God sent forth his Son, born of woman, born under the law, to redeem those who were under the law, so that we might receive adoption as sons. And because you are sons, God has sent the Spirit of his Son into our hearts, crying, "Abba! Father!" So through God you are no longer a slave but a son, and if a son then an heir.
A reading from the letter of St. Paul to the Ephesians 1:3-6, 11-12
Blessed be the God and Father of our Lord Jesus
Christ, who has blessed us in Christ with every spiritual blessing in the
heavenly places, even as he chose us in him before the foundation of the world,
that we should be holy and blameless before him. He destined us in love to be
his sons through Jesus Christ, according to the purpose of his will, to the
praise of his glorious grace which he freely bestowed on us in the Beloved. In
him, according to the purpose of him who accomplishes all things according to
the counsel of his will, we who first hoped in Christ have been destined and
appointed to live for the praise of his glory.
Luke 1:28
R. Alleluia.  R. Alleluia.
Luke 1:45
R. Alleluia. Blessed are you, O Virgin Mary, who believed that there would be a fulfilment of what was spoken to you from the Lord. R. Alleluia.
Luke 2:19
R. Alleluia. Blessed is the Virgin Mary, who kept the word of God, and pondered it in her heart. R. Alleluia.
Luke 11:28
R. Alleluia. Blessed are those who
hear the word of God and keep it. R. Alleluia.
R. Alleluia.
R. Alleluia. Blessed is the Blessed Virgin Mary; for, without dying, she merited the palm of martyrdom at the foot of the Lordís cross. R. Alleluia.
A reading from the holy Gospel according to Matthew 1:1-16, 18-23†† Or Shorter
The book of the genealogy of Jesus Christ, the son of
David, the son of Abraham. Abraham was the father of Isaac, and Isaac the father
of Jacob, and Jacob the father of Judah and his brothers, and Judah the father
of Perez and Zerah by Tamar, and Perez the father of Hezron, and Hezron the father of
Ram, and Ram the father of Amminadab, and Amminadab the father of Nahshon,
and Nahshon the father of Salmon, and Salmon the
father of Boaz by Rahab, and Boaz the father of Obed by Ruth, and Obed the father
of Jesse, and Jesse the father of David the king. And David was the father of
Solomon by the wife of Uriah, and Solomon the father
of Rehoboam, and Rehoboam
the father of Abijah, and Abijah
the father of Asa, and Asa the
father of Jehoshaphat, and Jehoshaphat
the father of Joram, and Joram
the father of Uzziah, and Uzziah
the father of Jotham, and Jotham
the father of Ahaz, and Ahaz the father of Hezekiah, and Hezekiah the father of
Manasseh, and Manasseh the father of Amos, and Amos the father of Josiah, and
Josiah the father of Jechoniah and his brothers, at
the time of the deportation to Babylon. And after the deportation to Babylon: Jechoniah was the father of Shealtiel,
and Shealtiel the father of Zerubbabel,
and Zerubbabel the father of Abiud,
and Abiud the father of Eliakim,
and Eliakim the father of Azor,
and Azor the father of Zadok,
and Zadok the father of Achim,
and Achim the father of Eliud,
and Eliud the father of Eleazar,
and Eleazar the father of Matthan,
and Matthan the father of Jacob, and Jacob the father
of Joseph the husband of Mary, of whom Jesus was born, who is called Christ. Now
the birth of Jesus Christ took place in this way.   All this took place to
fulfil what the Lord had spoken by the prophet: "Behold, a virgin shall
conceive and bear a son, and his name shall be called Emmanuel" (which
means, God with us).
Now the birth of Jesus Christ took place in this way.   All
this took place to fulfil what the Lord had spoken by
the prophet: "Behold, a virgin shall conceive and bear a son, and his name
shall be called Emmanuel" (which means, God with us).
A reading from the holy Gospel according to Matthew 2:13-15, 19-23
When the wise men had departed,
behold, an angel of the Lord appeared to Joseph in a dream and said,
"Rise, take the child and his mother, and flee to
A reading from the holy Gospel according to Matthew 12:46-50
At that time: While Jesus was still speaking to the people, behold, his
mother and his brethren stood outside, asking to speak to him. But he replied
to the man who told him, "Who is my mother, and who are my brethren?"
 For whoever does the will of my Father in heaven is my
brother, and sister, and mother."
A reading from the holy Gospel according to Luke 1:26-38
At that time: The angel Gabriel was sent from God to a city of
A reading from the holy Gospel according to Luke 1:39-47
In those days Mary arose and went with haste into the hill country, to a
city of
A reading from the holy Gospel according to Luke 2:1-14
In those days a decree went out from Caesar Augustus that all the world
should be enrolled. This was the first enrolment, when Quirinius
was governor of
A reading from the holy Gospel according to Luke 2:15-19
At that time: The shepherds said to one another, "Let us go over to
A reading from the holy Gospel according to Luke 2:27-35
At that time: Inspired by the Spirit Simeon came into the temple; and
when the parents brought in the child Jesus, to do for him according to the
custom of the law, he took him up in his arms and blessed God and said, "Lord,
now let your servant depart in peace, according to your word; for my eyes have
seen your salvation which you have prepared in the presence of all peoples, a
light for revelation to the Gentiles, and for glory to your people
Israel." And his father and his mother marvelled
at what was said about him; and Simeon blessed them and said to Mary his
mother, "Behold, this child is set for the fall and rising of many in
Israel, and for a sign that is spoken against (and a sword will pierce through
your own soul also), that thoughts out of many hearts may be revealed."
A reading from the holy Gospel according to Luke 2:41-52
The parents of Jesus went to
A reading from the holy Gospel according to Luke 11:27-28
At that time: As Jesus was speaking to the crowd,
a woman raised her voice and said to him, "Blessed is the womb that bore
you, and the breasts that you sucked!" But he said, "Blessed rather
are those who hear the word of God and keep it!"
A reading from the holy Gospel according to John 2:1-11
At that time: There was a marriage at Cana in
A reading from the holy Gospel according to John 19:25-27
At that time: Standing by the cross of Jesus were his mother, and his
mother's sister, Mary the wife of Clopas, and Mary
Magdalene. When Jesus saw his mother, and the disciple whom he loved standing
near, he said to his mother, "Woman, behold, your son!" Then he said
to the disciple, "Behold, your mother!" And from that hour the
disciple took her to his own home.


Server: Microsoft-IIS/3.0 Date: Thu, 18 Dec 1997 19:09:38 GMT Content-Type: text/html Accept-Ranges: bytes Last-Modified: Mon, 15 Dec 1997 13:57:04 GMT Content-Length: 4080
Thank you for sharing your thoughts with us at US Diagnostic!
For more information about USDI<EMAIL_ADDRESS>|
|
For investor relations<EMAIL_ADDRESS>|
|
To submit a resume<EMAIL_ADDRESS>|
|
For comments about this web site<EMAIL_ADDRESS>|
Corporate headquarters:
US Diagnostic, Inc.
777 S. Flagler Drive
Suite 1201 East
West Palm Beach, Florida 33401
Back Home | About USD | Investor Relations | Search | Maps | News
US Diagnostic Inc. (c) 1997
All Rights Reserved
Contact<EMAIL_ADDRESS>This document was last
updated: 12/08/97