|
; please run this and comment as you will :-)
REBOL [
Title: "HTML Monthly Calendar" Date: 19-Feb-2000 Version: 0.0.1 Name: "Monthly Calendar" File: %rebMonth.r Author: "John Braman" Email: [EMAIL PROTECTED] Rights: { "Copyright (C) John Braman" Permission to use and improve granted, with the understanding you include my footer on calendar. And if improvements are made please email improvements to [EMAIL PROTECTED]. } Purpose: { Prelude to AN INTERACTIVE HTML MONTHLY CALENDAR. Currently, using the Rebol Console, you enter the month and year you are interested in. This code prints the html version of that month to a file called rebolcal.htm " } Comment: { Thanks to bpaddock, olivier
doleman, Donald Dalley, karin,
rryost
especially Olivier doleman for the slick date coding, and Donald Dalley and others on list who replied to my initial 'prelude to HTML post'. The next version
will be more interactive and completely cgi-enabled with a
database or series in flat files. However... I need HELP HERE: The simplist of code that is
intuitively obvious for
veteran Rebols, is new to me. For example. I've seen several html related scripts using an "EMIT" function, yet I don't know how it works. The ideal is to retrieve values from a database or at
least from a file, much
like one using coldFusion, PERL, PHP, ASP etc. However I've not found clear examples of dbase connection. Or even less sophisticated examples of getting data from a flat file. There are too few good examples of using REBOL words in the dictionary. HELP ! For example: What if I had a file with 365+ records many of which will conatin the values of holidays and the like. The unique key being the date. How do I get data from that file via http? How would I write to that file for updates? How do I write to that file to update the specific record only using cgi? }
History: [version 0.0.1 created
19-2-2000]
Example: {Show how to use it.} ] ;;;;;;;;;;;; BODY OF CODE FOLLOWS ;;;;;;;;;;;;; ; initialize
weekdays: [Monday Tuesday Wednesday Thursday Friday Saturday
Sunday]
; weeks in this calandar start with Monday, if you want them to start with any other day then use the series or offset to the appropriate day of week. Or change this block to start with the day of the week that you want it to. months: [January February March April May June July August
September October November December]
; get month and year from user
userDate: PARSE ASK " Enter Month as MM YYYY, or q to exit : " NONE IF (first userDate) = "q" [ PRINT "HTMLCalendar.r" HALT ]
; use appropriate datatype month: MAKE INTEGER! FIRST userDate year: MAKE INTEGER! SECOND userDate ; join the input and make it to be the first day of the
month
inputDate: JOIN 1 [ "-" month "-" year ] firstOfMonth: MAKE DATE! inputDate PRINT ["Do I have it right, the month you are intrested in is
" PICK months(firstOfMonth/month) year"?"]
; find first of next month and first of previous month
; this will help us to find the number of days in month to make calendar firstOfNextMonth: firstOfMonth/month: firstOfMonth/month + 1 PRINT ["check again is this the month?" PICK
months(firstOfMonth/month)]
; find days in month and days in previous month
daysInMonth: firstOfNextMonth - firstOfMonth
; firstOfPrevMonth: firstOfMonth/month: firstOfMonth/month -
1
; there is a bug in the above date function which doesn't work for the first month in the year. ; so do a work around. Either (month = 1) [
prevMonthName: "December" daysInPrevMonth: 31 ] [ firstOfPrevMonth: firstOfMonth/month: firstOfMonth/month - 1 daysInPrevMonth: firstOfMonth - firstOfPrevMonth ; convert previos month to words and save it. prevMonthName: PICK months (firstOfPrevMonth/month) ]; end first month bug correction ; convert the month to words, save it.
monthName: PICK months (month) nextMonthName: PICK months (firstOfNextMonth/month) ; print the values just to check them
PRINT ["There are " daysInPrevMonth " days in " prevMonthName ] ; adjust for first month bug PRINT ["There are " daysInMonth " days in " monthName firstOfMonth/year ] ; is it possible to echo to a port easily for cgi purposes,
what is the best way if this were running on a server to get the follwing back
to the client, after evaluation of course?
ECHO %rebolcal.htm ; write output to a file
; how do I surpress the printing to the console? ; HTML header of the calendar page include title and a heading
with name of month.
print "<html>" print "<head>" print "<title> REBOL MADE CALENDAR by John Braman's rebolcal.htm </title>" print "</head>" print "<body>" print "<center><h1><font face='Arial' color='BLUE'>" print [monthName firstOfMonth/year] ; we get month from the input print "</font></h1></center>" ; Print table, heading days of week, start with
Monday
print "<table border='1' bordercolor='yellow' cellpadding='5' cellspacing='5' width='100%'><tr>" i: 1 while [i <= 7] [ print ["<th><b><font face='Arial color='blue'>" PICK weekdays(i) "</font></b></th>"] i: i + 1 ] ; end while for headings print "</tr>" ; Put the data into the table to form a calendar.
; Don't exceed the total number of daysInMonth. ; Initialize
day: 1 ; for the days of the month i: 1 ; for figuring out where to start printing the first day of month "fdom" off: 0 ; used to keep track of where in the week we are. fdom: firstOfMonth/weekday ; set where to print first day of week. PRINT "<tr>" ; start the first weeks row
WHILE [day < daysInMonth] [
off: off + 1 ; marks where in week we are so we can start new
row after 7 days.
IF (off > 7) [PRINT "<tr>" off: 1] ; used to
start the each week after the first
; at the very start of the month we might need to fill
in table cells.
IF day = 1 [ ; print preceeding cells for the first week, fill with dates from prev month WHILE [i < fdom][ PRINT ["<td valign='top' halign='left' height='100' width='100'><font face='Arial' color='black'>"] PRINT [(daysInPrevMonth - fdom + i + 1)"<small><small>"prevMonthName"</small></small></font></td>" NEWLINE] ; ????????? i: 1 + i ; ???????? isn't there a short cut for incrementing values +=i? ; ????????? off: off + 1 ; advance where we are in the week ] ; end while, preceed cells are filled with end dates from previous month. ; print the first day of the month PRINT ["<td valign='top' halign='left' height='100' width='100'><font face='Arial' color='red'>1</font></td>" NEWLINE] off: off + 1 ; advance where we are in the week ] ; end IF (day = 1) day: day + 1 ; advance to next day
PRINT ["<td valign='top' halign='left' height='100'
width='100'><font face='Arial' color='red'>"day
"</font></td>"]
; Either we are at the end of the week so we print a </tr> ; Or we're not there yet so print a blank line, this keeps the html easy to read ; and continue cells for that week using the while for the month. EITHER (off > 7) [
PRINT ["</tr>" NEWLINE] ] [ PRINT "" ] ; end EITHER ] ; end while for month
; Let's show the start of the next month while printing the
remaining cells in the table.
IF (off < 7) [
idayNextMonth: 1 While [off < 7] [ PRINT ["<td valign='top' halign='left' height='100' width='100'>"] PRINT ["<font face='Arial' color='purple'>" idayNextMonth "<small><small>" nextMonthName "</small></small></font></td>"] off: off + 1 idayNextMonth: idayNextMonth + 1 EITHER (off > 7) [PRINT ["</tr>" NEWLINE]] [PRINT ""] ] ; end nextMonths first days While ] ; end off < 7 IF PRINT "</table>"
PRINT "<center><font face='Arial' color='red'><small><small><a href=mailto:[EMAIL PROTECTED]>John Braman copyright Feb 2000<br>[EMAIL PROTECTED]</a></small></small></font></center>" PRINT ["</body>" NEWLINE "</html>"] ECHO NONE |
