misc improvements

svn: r7189
This commit is contained in:
Eli Barzilay 2007-08-27 00:50:44 +00:00
parent 74b20d58d1
commit b4dd7515c4

View File

@ -3,7 +3,7 @@
(lib "match.ss") (lib "match.ss")
(lib "acks.ss" "drscheme") (lib "acks.ss" "drscheme")
(lib "uri-codec.ss" "net") (lib "uri-codec.ss" "net")
(lib "dirs.ss" "setup") (lib "dirs.ss" "setup")
(lib "list.ss") (lib "list.ss")
(lib "url.ss" "net") (lib "url.ss" "net")
"../private/manuals.ss" "../private/manuals.ss"
@ -19,470 +19,465 @@
(define interface-version 'v1) (define interface-version 'v1)
(define timeout +inf.0) (define timeout +inf.0)
; html-subpage : xexprs -> xexpr ;; html-subpage : xexprs -> xexpr
(define (html-subpage . xs) (define (html-subpage . xs)
(case (helpdesk-platform) (apply (case (helpdesk-platform)
[(internal-browser-simple) [(internal-browser-simple) make-simple-page/internal-browser]
(apply make-simple-page/internal-browser xs)] [(internal-browser) make-split-page/internal-browser]
[(internal-browser) [else make-split-page])
(apply make-split-page/internal-browser xs)] xs))
[else
(apply make-split-page xs)]))
(define (start initial-request) (define (start initial-request)
; Note : DrScheme preferences calls start with a #f argument, ;; Note : DrScheme preferences calls start with a #f argument,
; so initial-request can be either a request structure or #f ;; so initial-request can be either a request structure or #f
(unless initial-request (unless initial-request
(set! initial-request (set! initial-request
(make-request 'get (string->url "") '() '() #f "localhost" (internal-port) "localhost"))) (make-request 'get (string->url "") '() '() #f "localhost"
(internal-port) "localhost")))
(with-errors-to-browser (with-errors-to-browser
send/finish send/finish
(lambda () (lambda ()
(let* ([bindings (request-bindings initial-request)] (let* ([bindings (request-bindings initial-request)]
[subpage (if (exists-binding? 'subpage bindings) [subpage (if (exists-binding? 'subpage bindings)
(extract-binding/single 'subpage bindings) (extract-binding/single 'subpage bindings)
"home")]) "home")])
; dispatch on subpage ;; dispatch on subpage
; the dynamic ones (manuals and release) are handled are here, ;; the dynamic ones (manuals and release) are handled are here,
; the static pages below ;; the static pages below
(match subpage (match subpage
["manuals" ["manuals"
(html-subpage (html-subpage
"PLT Scheme Help Desk: Installed Manuals" "PLT Scheme Help Desk: Installed Manuals"
(html-top initial-request) (left-items) "" (html-top initial-request) (left-items) ""
`(,@(if (eq? (helpdesk-platform) 'external-browser) `(,@(if (eq? (helpdesk-platform) 'external-browser)
'((h3 "NOTE") '((h3 "NOTE")
(p "To see the list of manuals installed on " (i "your") " computer, " (p "To see the list of manuals installed on " (i "your") " computer,"
" use the HelpDesk from within DrScheme. This list of manuals reflects " " use the HelpDesk from within DrScheme. This list of manuals reflects"
"what is installed on this HelpDesk server only.")) " what is installed on this HelpDesk server only."))
'()) '())
(VERBATIM ,(find-manuals)) (VERBATIM ,(find-manuals))
(p) (p)
(i "Version: " ,(plt-version))))] (i "Version: " ,(plt-version))))]
["release" ["release"
(let () (let ([link-stuff (lambda (url txt)
(define (link-stuff url txt) `(li (b (a ([href ,url]) ,txt)))) `(li (b (a ([href ,url]) ,txt))))])
(html-subpage (html-subpage
"PLT Scheme Help Desk: Release Info" "PLT Scheme Help Desk: Release Info"
(html-top initial-request) (left-items) "" (html-top initial-request) (left-items) ""
`((VERBATIM `((VERBATIM
((h3 "NOTE") ((h3 "NOTE")
(p "To see the release information for your installation, use the HelpDesk from " (p "To see the release information for your installation,"
"within DrScheme. " " use the HelpDesk from within DrScheme."
"The following information reflects the installation on this server only.") " The following information reflects the installation on"
" this server only.")
(h1 "Release Information") (h1 "Release Information")
(p) (p (i "Version: " ,(plt-version)))
(i "Version: " ,(plt-version))
(p)
(ul ,(link-stuff url-helpdesk-license "License") (ul ,(link-stuff url-helpdesk-license "License")
,(link-stuff url-helpdesk-release-notes "Release Notes") ,(link-stuff url-helpdesk-release-notes "Release Notes")
,(link-stuff url-helpdesk-known-bugs "Known Bugs") ,(link-stuff url-helpdesk-known-bugs "Known Bugs")
,(link-stuff url-helpdesk-patches "Downloadable Patches")) ,(link-stuff url-helpdesk-patches "Downloadable Patches"))
(p) (p "The PLT software is installed on this machine at" (br)
"The PLT software is installed on this machine at" (br) (pre nbsp nbsp
(pre nbsp nbsp ,(path->string (find-collects-dir)))))))))]
,(let-values ([(base file dir?)
(split-path (collection-path "mzlib"))])
(path->string base))))))))]
[_ [_
(let-values ([(right-header right-items) (let-values ([(right-header right-items)
(page-tag->title+items subpage)]) (page-tag->title+items subpage)])
(cond (cond
[(and (eq? (helpdesk-platform) 'internal-browser-simple) [(and (eq? (helpdesk-platform) 'internal-browser-simple)
(equal? subpage "home")) (equal? subpage "home"))
; change the "home" page for internal HelpDesk with no menus ;; change the "home" page for internal HelpDesk with no menus
(html-subpage "PLT Scheme Help Desk: Home" (html-subpage "PLT Scheme Help Desk: Home"
(html-top initial-request) (html-top initial-request)
"home" "home"
right-header (append (left-items) right-header
`(((p) (append (left-items)
(i "Version: " ,(plt-version))))))] `(((p)
(i "Version: " ,(plt-version))))))]
[else [else
(html-subpage "PLT Scheme Help Desk: Home" (html-subpage "PLT Scheme Help Desk: Home"
(html-top initial-request) (html-top initial-request)
(left-items) (left-items)
right-header right-items)]))]))))) right-header right-items)]))])))))
(define (br) (define (br*)
(if (eq? (helpdesk-platform) 'external-browser) (if (eq? (helpdesk-platform) 'external-browser)
'() '()
'((br) (br)))) '((br) (br))))
(define (left-items) (define (left-items)
`(-- -- -- -- -- `(-- -- -- -- --
("Get help: " ("Get help: "
nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp
(b (a ((href ,url-helpdesk-help)) "Help Desk")) (b (a ((href ,url-helpdesk-help)) "Help Desk"))
,@(br)) ,@(br*))
-- -- -- --
("Learn to program in Scheme: " ("Learn to program in Scheme: "
nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp
"Reference: " "Reference: "
'nbsp 'nbsp
(a ((href ,url-helpdesk-manuals)) "Manuals") ", " (a ((href ,url-helpdesk-manuals)) "Manuals") ", "
(a ((href ,url-helpdesk-libraries)) "Libraries") (a ((href ,url-helpdesk-libraries)) "Libraries")
(br) nbsp nbsp nbsp nbsp (br) nbsp nbsp nbsp nbsp
(b (a ((href ,url-helpdesk-program-design)) "Program Design: ")) (b (a ((href ,url-helpdesk-program-design)) "Program Design: "))
'nbsp 'nbsp
(a ((href ,url-helpdesk-books)) "Books") ", " (a ((href ,url-helpdesk-books)) "Books") ", "
(a ((href ,url-helpdesk-languages)) "Languages") ", " (a ((href ,url-helpdesk-languages)) "Languages") ", "
(a ((href ,url-helpdesk-teachpacks)) "Teachpacks") (a ((href ,url-helpdesk-teachpacks)) "Teachpacks")
,@(br)) ,@(br*))
-- -- -- --
("How to run programs: " ("How to run programs: "
nbsp nbsp nbsp nbsp (b (a ((href ,url-helpdesk-software)) "Software: ")) nbsp nbsp nbsp nbsp (b (a ((href ,url-helpdesk-software)) "Software: "))
'nbsp 'nbsp
(a ((href ,url-helpdesk-tour)) "Tour") ", " (a ((href ,url-helpdesk-tour)) "Tour") ", "
(a ((href ,url-helpdesk-drscheme)) "DrScheme") ", " (a ((href ,url-helpdesk-drscheme)) "DrScheme") ", "
(a ((href ,url-helpdesk-release)) "Release") (a ((href ,url-helpdesk-release)) "Release")
,@(br) ,@(br*)
; (a ((href ,url-helpdesk-drscheme-faq)) "FAQ")) ; Moved to the DrScheme page ;; (a ((href ,url-helpdesk-drscheme-faq)) "FAQ") ; Moved to DrScheme page
) )
-- -- -- --
("Get involved:" ("Get involved:"
nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp
(a ((href ,url-helpdesk-mailing-lists)) "Mailing Lists") (a ((href ,url-helpdesk-mailing-lists)) "Mailing Lists")
,@(case (helpdesk-platform) ,@(case (helpdesk-platform)
((external-browser) `(", " (a ((href ,url-external-send-bug-report)) "Send a bug report"))) [(external-browser)
(else '())) `(", " (a ((href ,url-external-send-bug-report)) "Send a bug report"))]
,@(br)) [else '()])
-- -- ,@(br*))
("" -- --
" " " " (""
,@(case (helpdesk-platform) " " " "
[(internal-browser internal-browser-simple) ,@(case (helpdesk-platform)
'((b (a ([mzscheme [(internal-browser internal-browser-simple)
"((dynamic-require '(lib |bug-report.ss| |help|) 'help-desk:report-bug))"]) '((b (a ([mzscheme
(font ([color "forestgreen"]) "Send a bug report"))) "((dynamic-require '(lib |bug-report.ss| |help|) 'help-desk:report-bug))"])
nbsp nbsp)] (font ([color "forestgreen"]) "Send a bug report")))
[else `()]) nbsp nbsp)]
; DrScheme Acknowledgements [else `()])
,@(case (helpdesk-platform) ;; DrScheme Acknowledgements
[(internal-browser internal-browser-simple) ,@(case (helpdesk-platform)
`((b (a ((href ,url-helpdesk-acknowledge)) [(internal-browser internal-browser-simple)
(font ([color "forestgreen"])"Acknowledgments"))))] `((b (a ((href ,url-helpdesk-acknowledge))
[else '()])) (font ([color "forestgreen"])"Acknowledgments"))))]
-- -- -- --)) [else '()]))
-- -- -- --))
; page-tag->title+items : string -> (values string list-of-right-items) ;; page-tag->title+items : string -> (values string list-of-right-items)
(define (page-tag->title+items page-tag) (define (page-tag->title+items page-tag)
(match (assoc page-tag easy-pages) (match (assoc page-tag easy-pages)
[#f (page-tag->title+items "home")] [#f (page-tag->title+items "home")]
[(tag header body) (values header body)])) [(tag header body) (values header body)]))
;; static subpages
; static subpages ;; - In ALPHABETICAL order
; - In ALPHABETICAL order
(define easy-pages (define easy-pages
`(("acknowledge" "Acknowledgements" `(("acknowledge" "Acknowledgements"
((p ,(get-general-acks)) ((p ,(get-general-acks))
(p ,(get-translating-acks)))) (p ,(get-translating-acks))))
("books" "Books" ("books" "Books"
((h3 "HTDP - How to Design Programs") ((h3 "HTDP - How to Design Programs")
(p (a ((href "http://www.htdp.org/")) (p (a ((href "http://www.htdp.org/"))
"'How to Design Programs - An Introduction to Programming and Computing'") "'How to Design Programs - An Introduction to Programming and Computing'")
(br) (br)
" by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurthi") " by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurthi")
(p (a ((href "http://www.ccs.neu.edu/home/matthias/htdp-plus.html")) "HTDP+") (p (a ((href "http://www.ccs.neu.edu/home/matthias/htdp-plus.html")) "HTDP+")
(br) (br)
" Supplemental Materials for 'How to Design Programs'") " Supplemental Materials for 'How to Design Programs'")
(h3 "Teach Yourself Scheme in Fixnum Days") (h3 "Teach Yourself Scheme in Fixnum Days")
(p (a ((href, url-helpdesk-teach-yourself)) (p (a ((href, url-helpdesk-teach-yourself))
" Teach Yourself Scheme in Fixnum Days") " Teach Yourself Scheme in Fixnum Days")
(br) (br)
"- an introduction to Scheme by Dorai Sitaram"))) "- an introduction to Scheme by Dorai Sitaram")))
("drscheme" "DrScheme" ("drscheme" "DrScheme"
((p "DrScheme is PLT's flagship programming environment") ((p "DrScheme is PLT's flagship programming environment")
(ul (li (a ((href ,url-helpdesk-tour)) (b "Tour: ") "An introduction to DrScheme")) (ul (li (a ((href ,url-helpdesk-tour)) (b "Tour: ") "An introduction to DrScheme"))
(li (a ((href ,url-helpdesk-interface-essentials)) "Quick-start jump into the user manual")) (li (a ((href ,url-helpdesk-interface-essentials)) "Quick-start jump into the user manual"))
(li (a ((href ,url-helpdesk-languages)) "Languages: ") "supported by DrScheme") (li (a ((href ,url-helpdesk-languages)) "Languages: ") "supported by DrScheme")
(li (a ((href ,url-helpdesk-drscheme-manual)) "PLT DrScheme: Programming Environment Manual") (li (a ((href ,url-helpdesk-drscheme-manual)) "PLT DrScheme: Programming Environment Manual")
(br) "The complete user manual") (br) "The complete user manual")
(li (a ((href ,url-helpdesk-drscheme-faq)) "FAQ") ": DrScheme Frequently asked questions") (li (a ((href ,url-helpdesk-drscheme-faq)) "FAQ") ": DrScheme Frequently asked questions")
(li (a ((href ,url-helpdesk-why-drscheme)) "Why DrScheme?"))))) (li (a ((href ,url-helpdesk-why-drscheme)) "Why DrScheme?")))))
("home" "Help Desk Home" ("home" "Help Desk Home"
((p "The HelpDesk is a complete source of information about PLT software, " ((p "The HelpDesk is a complete source of information about PLT software, "
"including DrScheme, MzScheme and MrEd.") "including DrScheme, MzScheme and MrEd.")
(p "There are two ways to find information in the Help Desk: searching and browsing.") (p "There are two ways to find information in the Help Desk: searching and browsing.")
(h3 "Search the Help Desk") (h3 "Search the Help Desk")
(p "Search for keywords, index entries or raw text in the documentation pages" (p "Search for keywords, index entries or raw text in the documentation pages"
(ul (li (i "Keywords: ") "are Scheme names, such as " (b "define") " and " (b "cons")".") (ul (li (i "Keywords: ") "are Scheme names, such as " (b "define") " and " (b "cons")".")
(li (i "Index entries: ") "are topical phrases, such as 'lists'.") (li (i "Index entries: ") "are topical phrases, such as 'lists'.")
(li (i "Raw text: ") "are fragments of text from the documentation pages. " (li (i "Raw text: ") "are fragments of text from the documentation pages. "
"Use only as a last resort.")) "Use only as a last resort."))
"The Help Desk search results are sorted according to their source.") "The Help Desk search results are sorted according to their source.")
(h3 "Browse the Help Desk") (h3 "Browse the Help Desk")
(ul (li "The " (b "Home") " link will take you back to this page.") (ul (li "The " (b "Home") " link will take you back to this page.")
(li "The " (b "Manuals") " link displays a list of manuals and other documentation") (li "The " (b "Manuals") " link displays a list of manuals and other documentation")
#;(li "The " (b "Send a bug report") " link allows you to submit a bug report to PLT.")))) #;(li "The " (b "Send a bug report") " link allows you to submit a bug report to PLT."))))
("known-bugs" "Known Bugs" ("known-bugs" "Known Bugs"
((p (a ([name "bugs"] [value "Bugs"])) ((p (a ([name "bugs"] [value "Bugs"]))
"For an up-to-date list of bug reports, see the " "For an up-to-date list of bug reports, see the "
(a ([href "http://bugs.plt-scheme.org/query/"] [target "_top"]) (a ([href "http://bugs.plt-scheme.org/query/"] [target "_top"])
"PLT bug report query page") "."))) "PLT bug report query page") ".")))
("languages" "Scheme Languages" ("languages" "Scheme Languages"
((p "DrScheme supports many dialects of Scheme. " ((p "DrScheme supports many dialects of Scheme. "
"The following dialects are specifically designed for teaching " "The following dialects are specifically designed for teaching "
"computer science. In DrScheme's " "computer science. In DrScheme's "
; TODO: (a ([href "/servlets/scheme/what.ss#lang-sel"]) "language selection menu") ;; TODO: (a ([href "/servlets/scheme/what.ss#lang-sel"]) "language selection menu")
(b "Language selection menu") ", " (b "Language selection menu") ", "
"they are found under the heading " "they are found under the heading "
(b "How to Design Programs") "." (b "How to Design Programs") "."
(ul (li (b "Beginning Student") " is a pedagogical version of Scheme " (ul (li (b "Beginning Student") " is a pedagogical version of Scheme "
"that is tailored for beginning computer science students.") "that is tailored for beginning computer science students.")
(li (b "Beginning Student with List Abbreviations") " extends Beginning Student " (li (b "Beginning Student with List Abbreviations") " extends Beginning Student "
"with convenient (but potentially confusing) " "with convenient (but potentially confusing) "
"ways to write lists, including quasiquote.") "ways to write lists, including quasiquote.")
(li (b "Intermediate Student") " adds local bindings and higher-order functions.") (li (b "Intermediate Student") " adds local bindings and higher-order functions.")
(li (b "Intermediate Student with Lambda") " adds anonymous functions.") (li (b "Intermediate Student with Lambda") " adds anonymous functions.")
(li (b "Advanced Student") " adds mutable state."))) (li (b "Advanced Student") " adds mutable state.")))
(p "The " (b "The Essentials of Programming Languages") (p "The " (b "The Essentials of Programming Languages")
" language is designed for use with the MIT Press textbook with that name.") " language is designed for use with the MIT Press textbook with that name.")
(p "Other dialects are designed for practicing programmers. " (p "Other dialects are designed for practicing programmers. "
"The R5RS language is a standard dialect of Scheme that is defined by the " "The R5RS language is a standard dialect of Scheme that is defined by the "
"Revised^5 Report on the Algorithmic Language Scheme. " "Revised^5 Report on the Algorithmic Language Scheme. "
"In DrScheme's language selection menu, the following languages are found under the heading PLT: ") "In DrScheme's language selection menu, the following languages are found under the heading PLT: ")
(ul (li (b "Textual (MzScheme)") " is a superset of R5RS Scheme. " (ul (li (b "Textual (MzScheme)") " is a superset of R5RS Scheme. "
"In addition to the base Scheme language, PLT Scheme provides " "In addition to the base Scheme language, PLT Scheme provides "
"exceptions, threads, objects, modules, components, regular expressions, " "exceptions, threads, objects, modules, components, regular expressions, "
"TCP support, filesystem utilities, and process control operations. " "TCP support, filesystem utilities, and process control operations. "
"This language is defined in PLT MzScheme: Language Manual. ") "This language is defined in PLT MzScheme: Language Manual. ")
(li (b "Graphical (MrEd)") " includes the Textual (MzScheme) language " (li (b "Graphical (MrEd)") " includes the Textual (MzScheme) language "
"and adds a graphical toolbox, described in PLT MrEd: Graphical Toolbox Manual.") "and adds a graphical toolbox, described in PLT MrEd: Graphical Toolbox Manual.")
(li (b "Pretty Big") " is a superset of the Graphical (MrEd) language, " (li (b "Pretty Big") " is a superset of the Graphical (MrEd) language, "
"and adds forms from the Pretty Big language. " "and adds forms from the Pretty Big language. "
"For those forms that are in both languages, Pretty Big behaves like Graphical (MrEd).")) "For those forms that are in both languages, Pretty Big behaves like Graphical (MrEd)."))
(p "The " (b "module language") " supports development using PLT Scheme's module form, " (p "The " (b "module language") " supports development using PLT Scheme's module form, "
"where the module's language is explicitly declared in the code.") "where the module's language is explicitly declared in the code.")
(p "See the DrScheme manual for further details on the languages, especially the " (p "See the DrScheme manual for further details on the languages, especially the "
"teaching languages.") "teaching languages.")
(p "DrScheme's set of languages can be extended, so the above list mentions only " (p "DrScheme's set of languages can be extended, so the above list mentions only "
"the languages installed by default. " "the languages installed by default. "
"Documentation for all languages is available through the manuals page."))) "Documentation for all languages is available through the manuals page.")))
("libraries" "Libraries" ("libraries" "Libraries"
((h3 "Built-in Libraries") ((h3 "Built-in Libraries")
(p "PLT Scheme has a lot of libraries. The core libraries are described in " (p "PLT Scheme has a lot of libraries. The core libraries are described in "
(a ((href ,url-helpdesk-mzlib)) "PLT MzLib: Libraries Manual")) (a ((href ,url-helpdesk-mzlib)) "PLT MzLib: Libraries Manual"))
(p "See the " (a ((href ,url-helpdesk-manuals)) "Manuals") " page for more.") (p "See the " (a ((href ,url-helpdesk-manuals)) "Manuals") " page for more.")
(h3 "User / PLaneT Libraries") (h3 "User / PLaneT Libraries")
(p (a ((href ,url-external-planet)) "PLaneT") " is the repository for user contributed libraries. " (p (a ((href ,url-external-planet)) "PLaneT") " is the repository for user contributed libraries. "
"Join the PLaneT announcement mailing list to get notified on new PLaneT packages."))) "Join the PLaneT announcement mailing list to get notified on new PLaneT packages.")))
("license" "License" ("license" "License"
((a ([name "lic"] [value "License"])) ((a ([name "lic"] [value "License"]))
(b "PLT Software") (br) (b "PLT Software") (br)
(b ,(format "Copyright (c) ~a PLT Scheme Inc." copyright-year)) (b ,(format "Copyright (c) ~a PLT Scheme Inc." copyright-year))
(p "PLT software is distributed under the GNU Library General Public " (p "PLT software is distributed under the GNU Library General Public "
" License (LGPL). This means you can link PLT software (such as " " License (LGPL). This means you can link PLT software (such as "
"MzScheme or MrEd) into proprietary applications, provided you follow " "MzScheme or MrEd) into proprietary applications, provided you follow "
"the specific rules stated in the LGPL. You can also modify PLT " "the specific rules stated in the LGPL. You can also modify PLT "
"software; if you distribute a modified version, you must distribute it " "software; if you distribute a modified version, you must distribute it "
"under the terms of the LGPL, which in particular means that you must " "under the terms of the LGPL, which in particular means that you must "
"release the source code for the modified software. See " "release the source code for the modified software. See "
(a ([href ,(format "/servlets/doc-anchor.ss?~a&file=~a" (a ([href ,(format "/servlets/doc-anchor.ss?~a&file=~a"
"name=COPYING.LIB&caption=Copying PLT software" "name=COPYING.LIB&caption=Copying PLT software"
(uri-encode (uri-encode
(path->string (path->string
(simplify-path (build-path (find-doc-dir) (simplify-path (build-path (find-doc-dir)
"release-notes" "release-notes"
"COPYING.LIB")))))]) "COPYING.LIB")))))])
"COPYING.LIB") "COPYING.LIB")
" for more information.") " for more information.")
(p "PLT software includes or extends the following copyrighted material:" (p "PLT software includes or extends the following copyrighted material:"
,@(let () ,@(map
(define (make-item ss) `(ul (li ,@(map (lambda (s) `(div ,s (br))) ss)))) (lambda (ss) `(ul (li ,@(map (lambda (s) `(div ,s (br))) ss))))
(map `(("DrScheme"
make-item ,(format "Copyright (c) 1995-~a PLT" copyright-year)
`(("DrScheme" ,(format "Copyright (c) 2004-~a PLT Scheme Inc." copyright-year)
,(format "Copyright (c) 1995-~a PLT" copyright-year) "All rights reserved.")
,(format "Copyright (c) 2004-~a PLT Scheme Inc." copyright-year) ("MrEd"
"All rights reserved.") ,(format "Copyright (c) 1995-~a PLT" copyright-year)
("MrEd" ,(format "Copyright (c) 2004-~a PLT Scheme Inc." copyright-year)
,(format "Copyright (c) 1995-~a PLT" copyright-year) "All rights reserved.")
,(format "Copyright (c) 2004-~a PLT Scheme Inc." copyright-year) ("MzScheme"
"All rights reserved.") ,(format "Copyright (c) 1995-~a PLT" copyright-year)
("MzScheme" ,(format "Copyright (c) 2004-~a PLT Scheme Inc." copyright-year)
,(format "Copyright (c) 1995-~a PLT" copyright-year) "All rights reserved.")
,(format "Copyright (c) 2004-~a PLT Scheme Inc." copyright-year) ("libscheme"
"All rights reserved.") "Copyright (c) 1994 Brent Benson"
("libscheme" "All rights reserved.")
"Copyright (c) 1994 Brent Benson" ("wxWindows"
"All rights reserved.") ,(string-append "Copyright (c) 1994 Artificial Intelligence Applications Institute, "
("wxWindows" "The University of Edinburgh")
,(string-append "Copyright (c) 1994 Artificial Intelligence Applications Institute, " "All rights reserved.")
"The University of Edinburgh") ("wxWindows Xt"
"All rights reserved.") ,(string-append "Copyright (c) 1994 Artificial Intelligence Applications Institute, "
("wxWindows Xt" "The University of Edinburgh")
,(string-append "Copyright (c) 1994 Artificial Intelligence Applications Institute, " "Copyright (c) 1995 GNU (Markus Holzem)"
"The University of Edinburgh") "All rights reserved.")
"Copyright (c) 1995 GNU (Markus Holzem)" ("Conservative garbage collector"
"All rights reserved.") "Copyright (c) 1988, 1989 Hans-J. Boehm, Alan J. Demers"
("Conservative garbage collector" "Copyright (c) 1991-1996 Xerox Corporation"
"Copyright (c) 1988, 1989 Hans-J. Boehm, Alan J. Demers" "Copyright (c) 1996-1999 Silicon Graphics"
"Copyright (c) 1991-1996 Xerox Corporation" "Copyright (c) 1999-2001 by Hewlett-Packard Company"
"Copyright (c) 1996-1999 Silicon Graphics" "All rights reserved.")
"Copyright (c) 1999-2001 by Hewlett-Packard Company" ("Collector C++ extension by Jesse Hull and John Ellis"
"All rights reserved.") "Copyright (c) 1994 Xerox Corporation"
("Collector C++ extension by Jesse Hull and John Ellis" "All rights reserved.")
"Copyright (c) 1994 Xerox Corporation" ("The A List"
"All rights reserved.") "Copyright (c) 1997-2000 Kyle Hammond."
("The A List" "All rights reserved.")
"Copyright (c) 1997-2000 Kyle Hammond." ("Independent JPEG Group library"
"All rights reserved.") "Copyright (c) 1991-1998 Thomas G. Lane."
("Independent JPEG Group library" "All rights reserved.")
"Copyright (c) 1991-1998 Thomas G. Lane." ("libpng"
"All rights reserved.") "Copyright (c) 2000-2002 Glenn Randers-Pehrson"
("libpng" "All rights reserved.")
"Copyright (c) 2000-2002 Glenn Randers-Pehrson" ("zlib"
"All rights reserved.") "Copyright (c) 1995-2002 Jean-loup Gailly and Mark Adler"
("zlib" "All rights reserved.")
"Copyright (c) 1995-2002 Jean-loup Gailly and Mark Adler" ("GNU MP Library"
"All rights reserved.") "Copyright (c) 1992, 1993, 1994, 1996 by Free Software Foundation, Inc.")
("GNU MP Library" ("GNU lightning"
"Copyright (c) 1992, 1993, 1994, 1996 by Free Software Foundation, Inc.") "Copyright (c) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.")
("GNU lightning" ("GNU Classpath"
"Copyright (c) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.") "GNU Public License with special exception"))))))
("GNU Classpath"
"GNU Public License with special exception")))))))
("mailing-lists" "Mailing Lists" ("mailing-lists" "Mailing Lists"
((p "There are two mailing lists: the discussion list and the announcements only list.") ((p "There are two mailing lists: the discussion list and the announcements only list.")
(h3 "Archives") (h3 "Archives")
(p "The lists are archived:" (p "The lists are archived:"
(ul (li (a ((href ,url-external-discussion-list-archive)) "Discussions") (ul (li (a ((href ,url-external-discussion-list-archive)) "Discussions")
" - " (a ((href ,url-external-discussion-list-archive-old)) "(old archive)")) " - " (a ((href ,url-external-discussion-list-archive-old)) "(old archive)"))
(li (a ((href ,url-external-announcement-list-archive)) "Announcements only")))) (li (a ((href ,url-external-announcement-list-archive)) "Announcements only"))))
(h3 "Subscribing") (h3 "Subscribing")
(p "Visit the " (a ((href ,url-external-mailing-list-subscription)) (p "Visit the "
"subscription page") " to join the mailing lists."))) (a ((href ,url-external-mailing-list-subscription))
("patches" "Downloadable Patches" "subscription page")
((p (a ([name "patches"] [value "Downloadable patches"])) " to join the mailing lists.")))
"The following Web page may contain downloadable patches to fix " ("patches" "Downloadable Patches"
"serious bugs in version " ,(version) " of the PLT software:") ((p (a ([name "patches"] [value "Downloadable patches"]))
(p nbsp nbsp "The following Web page may contain downloadable patches to fix "
,(let ([url (format "http://download.plt-scheme.org/patches/~a/" "serious bugs in version " ,(version) " of the PLT software:")
(version))]) (p nbsp nbsp
`(a ([href ,url] [target "_top"]) ,url))))) ,(let ([url (format "http://download.plt-scheme.org/patches/~a/"
(version))])
`(a ([href ,url] [target "_top"]) ,url)))))
("program-design" "Program Design" ("program-design" "Program Design"
((h3 "For Students") ((h3 "For Students")
(p "The textbook " (a ((href "http://www.htdp.org")) "How to Design Programs") (p "The textbook " (a ((href "http://www.htdp.org")) "How to Design Programs")
" provides an introduction to programming using the DrScheme environment. " " provides an introduction to programming using the DrScheme environment. "
"The Help Desk provides the following interactve support for the text book: " "The Help Desk provides the following interactve support for the text book: "
(a ((href ,url-helpdesk-teachpacks)) "Teachpack documentation")) (a ((href ,url-helpdesk-teachpacks)) "Teachpack documentation"))
(h3 "For Experienced Programmers") (h3 "For Experienced Programmers")
(p (a ((href ,url-helpdesk-teach-yourself)) "Teach Yourself Scheme in a Fixnum Days") (p (a ((href ,url-helpdesk-teach-yourself)) "Teach Yourself Scheme in a Fixnum Days")
": For programmers with lots of experience in other languages") ": For programmers with lots of experience in other languages")
(h3 "For Teachers and Researchers") (h3 "For Teachers and Researchers")
(p (a ((href ,url-helpdesk-why-drscheme)) "PLT's vision")))) (p (a ((href ,url-helpdesk-why-drscheme)) "PLT's vision"))))
("release-notes" (h1 "Release Notes for PLT Scheme version " ,(version)) ("release-notes" (h1 "Release Notes for PLT Scheme version " ,(version))
((a ([name "relnotes"] [VALUE "Release notes"])) ((a ([name "relnotes"] [VALUE "Release notes"]))
(p "Detailed release notes:" (p "Detailed release notes:"
(ul (ul
,@(let () ,@(let ()
(define (make-release-notes-entry s) (define (make-release-notes-entry s)
(match s (match s
[(label dir filename) [(label dir filename)
(let ([file (build-path (find-doc-dir) "release-notes" dir filename)]) (let ([file (build-path (find-doc-dir) "release-notes" dir filename)])
(if (file-exists? file) (if (file-exists? file)
`(li (a ([href ,(format `(li (a ([href ,(format
"/servlets/doc-anchor.ss?file=~a&name=~a&caption=~a" "/servlets/doc-anchor.ss?file=~a&name=~a&caption=~a"
(uri-encode (path->string file)) (uri-encode (path->string file))
filename filename
label)]) label)])
,label)) ,label))
#f))])) #f))]))
(filter (filter
values ; delete #f entries values ; delete #f entries
(map make-release-notes-entry (map make-release-notes-entry
'(("DrScheme release notes" "drscheme" "HISTORY") '(("DrScheme release notes" "drscheme" "HISTORY")
("Teachpack release notes" "teachpack" "HISTORY") ("Teachpack release notes" "teachpack" "HISTORY")
("MzScheme version 300 notes" "mzscheme" "MzScheme_300.txt") ("MzScheme version 300 notes" "mzscheme" "MzScheme_300.txt")
("MzScheme release notes" "mzscheme" "HISTORY") ("MzScheme release notes" "mzscheme" "HISTORY")
("MrEd release notes" "mred" "HISTORY") ("MrEd release notes" "mred" "HISTORY")
("Stepper release notes" "stepper" "HISTORY") ("Stepper release notes" "stepper" "HISTORY")
("MrFlow release notes" "mrflow" "HISTORY"))))))))) ("MrFlow release notes" "mrflow" "HISTORY")))))))))
("software" "Software" ("software" "Software"
((ul (li (a ((href ,url-helpdesk-drscheme)) "DrScheme") ": The programming environment") ((ul (li (a ((href ,url-helpdesk-drscheme)) "DrScheme") ": The programming environment")
(li (a ((href ,url-helpdesk-languages)) "Languages") ": The family of languages " (li (a ((href ,url-helpdesk-languages)) "Languages") ": The family of languages "
"supported by PLT Software") "supported by PLT Software")
; (li (a ((href ,url-helpdesk-documentation)) "Documentation") ;; (li (a ((href ,url-helpdesk-documentation)) "Documentation")
; ": Organization and manuals") ;; ": Organization and manuals")
; (li (a ((href ,url-helpdesk-hints)) "Hints") ;; (li (a ((href ,url-helpdesk-hints)) "Hints")
; ": How to do things in Scheme") ;; ": How to do things in Scheme")
))) )))
("teachpacks" "Teachpacks" ("teachpacks" "Teachpacks"
((ul (li (a ((href ,url-helpdesk-teachpacks-for-htdp)) ((ul (li (a ((href ,url-helpdesk-teachpacks-for-htdp))
"Teachpacks for 'How to Design Programs'")) "Teachpacks for 'How to Design Programs'"))
(li (a ((href ,url-helpdesk-teachpacks-for-htdc)) (li (a ((href ,url-helpdesk-teachpacks-for-htdc))
"Teachpacks for 'How to Design Classes'"))))) "Teachpacks for 'How to Design Classes'")))))
("teachscheme" "Teach Scheme" ("teachscheme" "Teach Scheme"
((h2 "TeachScheme! Workshops") ((h2 "TeachScheme! Workshops")
(p (a ([name "workshops"] [value "TeachScheme! workshops"])) (p (a ([name "workshops"] [value "TeachScheme! workshops"]))
"TeachScheme! is a free summer workshop for high school teachers. " "TeachScheme! is a free summer workshop for high school teachers. "
"Its goal is to bridge the gulf between high school and " "Its goal is to bridge the gulf between high school and "
"college-level computing curricula. In the workshop, programming " "college-level computing curricula. In the workshop, programming "
"is taught as an algebraic problem-solving process, and computing " "is taught as an algebraic problem-solving process, and computing "
"is the natural generalization of grade-school level calculating." ) "is the natural generalization of grade-school level calculating." )
(p "Students who learn to design programs properly learn to " (p "Students who learn to design programs properly learn to "
"analyze a problem statement; express its essence, abstractly " "analyze a problem statement; express its essence, abstractly "
"and with examples; formulate statements and comments in a " "and with examples; formulate statements and comments in a "
"precise language; evaluate and revise these activities in " "precise language; evaluate and revise these activities in "
"light of checks and tests; and pay attention to details. " "light of checks and tests; and pay attention to details. "
"As a result, all students benefit, those who wish to study computing " "As a result, all students benefit, those who wish to study computing "
"as well as those who just wish to explore the subject.") "as well as those who just wish to explore the subject.")
(p "For more information, see the " (p "For more information, see the "
(a ([href "http://www.teach-scheme.org/Workshops/"] (a ([href "http://www.teach-scheme.org/Workshops/"]
[TARGET "_top"]) [TARGET "_top"])
"TeachScheme! Workshops page") "."))) "TeachScheme! Workshops page") ".")))
("tour" "Tour of DrScheme" ("tour" "Tour of DrScheme"
((p "Take a " (a ((href ,url-external-tour-of-drscheme)) "Tour of DrScheme") ((p "Take a " (a ((href ,url-external-tour-of-drscheme)) "Tour of DrScheme")
" and discover the wealth of features of the interactive, " " and discover the wealth of features of the interactive, "
"integrated programming environment."))) "integrated programming environment.")))
("why-drscheme" "Why DrScheme?" ("why-drscheme" "Why DrScheme?"
((p "Teaching introductory computing courses with Scheme, or any other " ((p "Teaching introductory computing courses with Scheme, or any other "
"functional programming language, facilitates many conceptual tasks " "functional programming language, facilitates many conceptual tasks "
"and greatly enhances the appeal of computer science. Specifically, " "and greatly enhances the appeal of computer science. Specifically, "
"students can implement many interesting programs with just a small " "students can implement many interesting programs with just a small "
"subset of the language. The execution " "subset of the language. The execution "
"of a functional program can be explained with simple reduction " "of a functional program can be explained with simple reduction "
"rules that students mostly know from " "rules that students mostly know from "
"secondary school. Interactive implementations allow for quick " "secondary school. Interactive implementations allow for quick "
"feedback to the programmers andmake the " "feedback to the programmers andmake the "
"development of small functions a pleasant experience.") "development of small functions a pleasant experience.")
(p "Unfortunately, the poor quality of the available environments " (p "Unfortunately, the poor quality of the available environments "
"for functional languages negates these advantages. Typical " "for functional languages negates these advantages. Typical "
"implementations accept too many definitions, that is, definitions " "implementations accept too many definitions, that is, definitions "
"that are syntactically well-formed in the sense of the full " "that are syntactically well-formed in the sense of the full "
"language but meaningless for beginners. The results are inexplicable " "language but meaningless for beginners. The results are inexplicable "
"behavior, incomprehensible run-time errors, or confusing type " "behavior, incomprehensible run-time errors, or confusing type "
"error messages. The imperative nature of " "error messages. The imperative nature of "
"read-eval-print loops often introduces subtle bugs into otherwise " "read-eval-print loops often introduces subtle bugs into otherwise "
"perfect program developments. Scheme, in " "perfect program developments. Scheme, in "
"particular, suffers from an adherence to Lisp's output traditions, " "particular, suffers from an adherence to Lisp's output traditions, "
"which often produces confusing effects. " "which often produces confusing effects. "
"In many cases students, especially those familiar with commercial C++ " "In many cases students, especially those familiar with commercial C++ "
"environments, mistake these problems " "environments, mistake these problems "
"for problems with the functional approach and reject the approach itself. ") "for problems with the functional approach and reject the approach itself. ")
(p "To overcome this obstacle, we have developed a new programming " (p "To overcome this obstacle, we have developed a new programming "
"environment for Scheme. It fully integrates a " "environment for Scheme. It fully integrates a "
"(graphics-enriched) editor, a multi-lingual parser that can process a " "(graphics-enriched) editor, a multi-lingual parser that can process a "
"hierarchy of syntactically restrictive " "hierarchy of syntactically restrictive "
"variants of Scheme, a functional read-eval-print loop, and an " "variants of Scheme, a functional read-eval-print loop, and an "
"algebraically sensible printer. The environment " "algebraically sensible printer. The environment "
"catches the typical syntactic mistakes of beginners and pinpoints " "catches the typical syntactic mistakes of beginners and pinpoints "
"the exact source location of run-time " "the exact source location of run-time "
"exceptions. The new programming environment also provides an " "exceptions. The new programming environment also provides an "
"algebraic stepper and a static debugger. The " "algebraic stepper and a static debugger. The "
"former reduces Scheme programs, including programs with assignment " "former reduces Scheme programs, including programs with assignment "
"and control effects, to values (and effects). " "and control effects, to values (and effects). "
"The static debugger infers what set of values an expression may " "The static debugger infers what set of values an expression may "
"produce and how values flow from expressions " "produce and how values flow from expressions "
"into variables. It exposes potential safety violations and, upon " "into variables. It exposes potential safety violations and, upon "
"demand from the programmer, explains its " "demand from the programmer, explains its "
"reasoning by drawing value flowgraphs over the program text. " "reasoning by drawing value flowgraphs over the program text. "
"Preliminary experience with the environment shows " "Preliminary experience with the environment shows "
"that students find it helpful and that they greatly prefer it to " "that students find it helpful and that they greatly prefer it to "
"shell-based or Emacs-based systems.") "shell-based or Emacs-based systems.")
(p "A paper that discusses DrScheme in more detail is available in the paper: " (p "A paper that discusses DrScheme in more detail is available in the paper: "
(a ((href "http://www.ccs.neu.edu/scheme/pubs/#jfp01-fcffksf")) (a ((href "http://www.ccs.neu.edu/scheme/pubs/#jfp01-fcffksf"))
"DrScheme: A Programming Environment for Scheme.")))) "DrScheme: A Programming Environment for Scheme."))))
))) )))