( all in one file )
1. THE ORDER PROCESS
1.1. How to order an item
1.2. How to set up an order link
1.3. How to set up an order button
1.4. How to set up an on-the-fly item
1.5. Order Groups
1.6. Basket display
1.7. Multiple Shopping Carts
2. PRODUCT PRICING
2.1. Simple pricing
2.2. Price Maintenance with CommonAdjust
2.3. CommonAdjust Examples
2.4. PriceBreaks, discounts, and PriceAdjustment
2.5. Item Attributes
2.6. Product Discounts
3. Taxing
3.1. Sales Tax -- simple salestax.asc table
3.2. Fly tax
3.3. Salestax "multi" -- VAT taxing
4. THE CHECKOUT PROCESS
4.1. Advanced Multi-level Order Pages
4.2. Simple Order Report File
4.3. Fully-configurable Order Reports
4.4. Order Receipts
4.5. The Order Counter
4.6. Customer Input Fields
( all in one file )
1. Introduction
1.1. Preamble
1.2. Purpose
1.3. Audience
1.4. Contact the author
1.5. The advantages of using CVS
1.6. How to use this document
2. Setup CVS
2.1. Assumptions
2.2. Install CVS
2.3. Create the CVS repository directory
2.4. Setup environment variables
2.5. Initialize the repository
2.6. CVS Authentication
2.7. Setup CVS modules
2.8. Setup binary file types
2.9. Setup the CVS pserver
3. Import your Interchange catalog into CVS
3.1. Configuring your catalog
3.2. Remove old CVS folders
3.3. Create a working copy of your catalog
3.4. Streamline your catalog for CVS
3.5. Import the streamlined catalog
3.6. Testing the new CVS module
4. Integrate CVS and Interchange
4.1. CVS checkout into the catalog directory
4.2. Testing manual CVS updates on Interchange catalogs
4.3. Automatic updates on commit
4.4. Automatic e-mail on commit
5. The two track model: development and live catalogs
5.1. When to branch
5.2. Which way to branch
5.3. Performing the branch
5.4. Setup the development catalog
5.5. Splitting updates on commit by tag
5.6. Using new branches
5.7. Merging
6. Tools of the trade
6.1. Workstation Interchange installation
6.2. CVSIGNORE
6.3. Mailserver for CVS updates
6.4. Locally mapped source code for a network IC server
6.5. jEdit - a good editor with Interchange/HTML/Perl colorization and CVS
6.6. Separate servers for development and live catalogs
C. Resources
C.1. CVS Documentation
C.2. CVS Server Software
C.3. CVS Client Software
( all in one file )
1. Introduction
1.1. Preamble
1.2. Purpose
1.3. Audience
1.4. Contact the authors
1.5. What it does
( all in one file )
1. Introduction
1.1. Summary Description
1.2. Audience
1.3. Contact the author
1.4. Version
4. Installation
4.1. Terms and locations
4.2. Create and copy directories and files
4.3. Quick Installation Script
4.4. Admin UI Usage
4.5. Additional database fields -- userdb
4.6. Additional database fields -- inventory
4.7. Modify catalog.cfg with additions:
4.8. Add quickbooks order route
4.9. Additional Variables
4.10. Restart the catalog
4.11. Export the items
4.12. Test
5. Usage
5.1. Accessing Admin UI Features
5.2. Generating IIF Files
6. Discussion
6.1. Sales Tax
6.2. Shipping
6.3. Customer Imports
6.4. IIF generation at time of order
( all in one file )
1. Internationalization
1.1. Configuring the Locale
1.2. Setting the Locale
1.3. Interchange Locale Settings
1.4. Special Locale Keys for Price Representation
1.5. Dynamic Locale Directive Changes
1.6. Sorting Based on Locale
1.7. Placing Locale Information in a Database
( all in one file )
1. Advanced Interchange Topics
2. Maintaining Interchange
2.1. Starting, Stopping, and Re-starting the Servers
2.2. UNIX and INET modes
2.3. User Reconfiguration
2.4. Expiring Sessions
2.5. My session files change to owner root every day!
3. Interchange Components
3.1. Content -> Page Edit
3.2. Custom Admin UI Options
4. Administrative Pages
4.1. Controlling Access to Certain Pages
4.2. display tag and mv_metadata
6. Admin Tool Database Tables
6.1. mv_metadata.asc
7. makecat - Set Up a Catalog from a Template
7.1. Catalog Skeletons
7.2. Manual Installation of Catalogs
8. Link Programs
8.1. UNIX-Domain Sockets
8.2. INET-Domain Sockets
8.3. Internal HTTP Server
8.4. Setting Up VLINK and TLINK
8.5. Compiling VLINK and TLINK
8.6. Manually Compiling VLINK and TLINK
8.7. VLINK or TLINK Compile Problems
9. Installing Perl Modules without Root Access
( all in one file )
2. Before you begin
2.1. Install Interchange and the demo catalog
2.2. The Interchange operating system user
2.3. Important directories
2.4. Your catalog URL
2.5. Starting or restarting Interchange
2.6. Tutorial assumptions
3. Building Your Catalog
3.1. Create the link program
3.2. Create the tutorial catalog directory
3.3. Become the Interchange user
3.4. Go to the tutorial catalog directory
3.5. Create the session directory
4. Configuration files
4.1. interchange.cfg
4.2. catalog.cfg
5. The products database table
5.1. products/products.txt
6. Page templates
6.1. top
6.2. left
6.3. bottom
6.4. The Interchange Tag Language
7. Creating a welcome page
7.1. pages/index.html
9. Displaying products
9.1. Listing all products
9.2. pages/flypage.html
9.3. special_pages/missing.html
10. The shopping basket
10.1. A link for ordering
10.2. pages/ord/basket.html
11. Order checkout
11.1. pages/checkout.html
11.2. etc/profiles.order
11.3. special_pages/needfield.html
11.4. Credit card processing
11.5. etc/report
11.6. special_pages/receipt.html
12. Enhancing the catalog
12.1. Price pictures
12.2. Catalog variables
12.3. A more interesting page footer
12.4. Advanced credit card expiration date selection
12.5. Sorting the product list
12.6. Adding a search box
12.7. The default catalog page
12.8. High-traffic changes
12.9. High traffic mode
13. Ideas for further enhancements
( all in one file )
1. Interchange Configuration Files
1.1. Directive syntax
2. interchange.cfg
2.1. AcceptRedirect *global*
2.2. ActionMap *global*
2.3. AddDirective *global*
2.4. AllowGlobal *global*
2.5. AutoVariable *global*
2.6. Capability *global*
2.7. Catalog *global*
2.8. CheckHTML *global*
2.9. CodeDef *global*
2.10. ConfigAllAfter *global*
2.11. ConfigAllBefore *global*
2.12. ConfigParseComments *global*
2.13. Database *global*
2.14. DataTrace *global*
2.15. DebugFile *global*
2.16. DeleteDirective *global*
2.17. DisplayErrors *global*
2.18. DomainTail *global*
2.19. DumpStructure *global*
2.20. EncryptProgram *global*
2.21. Environment *global*
2.22. ErrorFile *global*
2.23. FormAction *global*
2.24. FullUrl *global*
2.25. GlobalSub *global*
2.26. HammerLock *global*
2.27. HitCount *global*
2.28. HouseKeeping *global*
2.29. Inet_Mode *global*
2.30. IpHead *global*
2.31. IpQuad *global*
2.32. Locale *global*
2.33. LockoutCommand *global*
2.34. LockType *global*
2.35. Mall *global*
2.36. MaxRequestsPerChild *global*
2.37. MaxServers *global*
2.38. NoAbsolute *global*
2.39. PIDcheck *global*
2.40. PIDfile *global*
2.41. PreFork *global*
2.42. Profiles *global*
2.43. RobotIP *global*
2.44. RobotUA *global*
2.45. SafeUntrap *global*
2.46. SendMailProgram *global*
2.47. SOAP *global*
2.48. SOAP_Host *global*
2.49. SOAP_MaxRequests *global*
2.50. SOAP_Perms *global*
2.51. SOAP_Socket *global*
2.52. SOAP_StartServers *global*
2.53. SocketFile *global*
2.54. SocketPerms *global*
2.55. StartServers *global*
2.56. SubCatalog *global*
2.57. SysLog *global*
2.58. TagDir *global*
2.59. TagGroup *global*
2.60. TagInclude *global*
2.61. TcpHost *global*
2.62. TcpMap *global*
2.63. TemplateDir *global*
2.64. TolerateGet *global*
2.65. TrustProxy *global*
2.66. UrlSepChar *global*
2.67. Unix_Mode *global*
2.68. UserTag *global*
2.69. Variable *global*
2.70. VarName *global*
3. catalog.cfg
3.1. Programming Watch Points in catalog.cfg
3.2. Configuration Directives in catalog.cfg
3.3. ActionMap
3.4. AlwaysSecure
3.5. AsciiTrack
3.6. AutoEnd
3.7. Autoload
3.8. AutoModifier
3.9. AutoVariable
3.10. CommonAdjust
3.11. ConfigDir
3.12. CookieDomain
3.13. CookieLogin
3.14. Cookies
3.15. CreditCardAuto
3.16. Cron *5.0 and up*
3.17. CustomShipping
3.18. Database
3.19. DatabaseDefault
3.20. DefaultShipping
3.21. DescriptionField
3.22. DirConfig
3.23. DirectoryIndex
3.24. DisplayErrors
3.25. DynamicData
3.26. EncryptProgram
3.27. ErrorFile
3.28. ExtraSecure
3.29. Filter
3.30. FormAction
3.31. FormIgnore
3.32. FractionalItems
3.33. Glimpse
3.34. History
3.35. HTMLsuffix
3.36. ImageAlias
3.37. ImageDir
3.38. ImageDirInternal
3.39. ImageDirSecure
3.40. Locale
3.41. LocaleDatabase
3.42. MailOrderTo
3.43. NoCache
3.44. NoImport
3.45. NoImportExternal
3.46. NonTaxableField
3.47. NoSearch
3.48. OfflineDir
3.49. OnFly
3.50. OrderCounter
3.51. OrderLineLimit
3.52. OrderProfile
3.53. OrderReport
3.54. PageDir
3.55. PageSelectField
3.56. ParseVariables
3.57. Password
3.58. PGP
3.59. Pragma
3.60. PriceCommas
3.61. PriceDivide
3.62. PriceField
3.63. ProductDir
3.64. ProductFiles
3.65. ReadPermission and WritePermission
3.66. RemoteUser
3.67. Replace
3.68. Require
3.69. RobotLimit
3.70. Route
3.71. SalesTax
3.72. SalesTaxFunction
3.73. SaveExpire
3.74. ScratchDefault
3.75. ScratchDir
3.76. SearchProfile
3.77. SecureURL
3.78. SendMailProgram
3.79. SeparateItems
3.80. SessionDatabase
3.81. SessionDB
3.82. SessionExpire
3.83. SessionLockFile
3.84. SessionType
3.85. SpecialPage
3.86. SpecialPageDir
3.87. Static
3.88. StaticAll
3.89. StaticDepth
3.90. StaticDir
3.91. StaticFly
3.92. StaticPage
3.93. StaticPath
3.94. StaticPattern
3.95. StaticSuffix
3.96. Sub
3.97. Suggests
3.98. TableRestrict
3.99. TaxShipping
3.100. TemplateDir
3.101. TrackFile
3.102. UpsZoneFile
3.103. UseModifier
3.104. UserDB
3.105. UserTag
3.106. ValuesDefault
3.107. Variable
3.108. VariableDatabase
3.109. VendURL
3.110. WideOpen
( all in one file )
1. Interchange UI -- Content Editor
1.1. Content management concept
1.2. A typical page
( all in one file )
1. Databases and Interchange
1.1. Text Source Files
1.2. Interchange Database Conventions
1.3. The Product Database
1.4. Multiple Database Tables
1.5. Character Usage Restrictions
1.6. Database Attributes
1.7. Dictionary Indexing With INDEX
1.8. MEMORY for Memory-Only Databases
1.9. IMPORT_ONCE
1.10. MIRROR
1.11. SQL/DBI parameters
1.12. Importing in a Page
1.13. Exporting from a Database
1.14. Write Control
1.15. Global Databases
2. SQL Support
2.1. SQL Support via DB
2.2. SQL Access Methods
2.3. Importing from an ASCII File
3. Managing DBM Databases
3.1. Making the Database
3.2. Updating Individual Records
4. Other Database Capabilities
4.1. Search Modification
4.2. Indexing
5. The Search Engine
5.1. The Search Form
5.2. Glimpse
5.3. Fast Binary Search
5.4. Coordinated and Joined Searching
5.5. Custom search operators
5.6. Specifying a Text-Based Search with SQL Syntax
5.7. One-Click Searches
5.8. Setting Display Options with mv_value
5.9. In-Page Searches
5.10. Search Profiles
5.11. Search Reference
5.12. The Results Page
7. Shipping
7.1. Shipping Cost Database
7.2. Criteria Determination
7.3. Shipping Calculation Modes
7.4. How Shipping is Calculated
7.5. More On UPS-Style Lookup
7.6. Geographic Qualification
7.7. Handling Charges
7.8. Default Shipping Mode
8. User Database
8.1. The [userdb ...] Tag
8.2. Setting Defaults with the UserDB Directive
8.3. User Database Functions
8.4. Address Book
8.5. Accounts Book
8.6. Preferences
8.7. Carts
8.8. Controlling Page Access With UserDB
8.9. Using more than one table
9. Tracking and Back-End Order Entry
9.1. ASCII Backup Order Tracking
9.2. Database Tracking
9.3. Order Routing
11. Frequently Asked Questions
11.1. I can't get SQL to work: Undefined subroutine &Vend::Table::DBI::create ...
11.2. How can I use Interchange with Microsoft Access?
( all in one file )
1. How does Interchange work?
1.1. Where are the pages?
1.2. Where are the images?
2. INSTALLATION
2.1. Configuration Problems
2.2. Error -- the Interchange server was not running...
2.3. I get messages like 'Config.pm not found.' What does it mean?
2.4. Can't locate lib.pm in @INC. BEGIN failed--compilation aborted.
2.5. Segmentation fault or other core dump.
2.6. Configuring catalog whatever...Use of uninitialized value at Config.pm line 1614, <CONFIG> chunk 322.
2.7. Why isn't the above error more enlightening?
2.8. XXXXXX.pm does not match executable version.
2.9. Can I run Interchange on the Macintosh or Windows?
2.10. Error -- 'make: command not found'
2.11. Templates aren't showing, only the center content of the page itself
2.12. When I try to install the RPM, I get "failed dependencies" errors
3. SSL problems
3.1. Shopping cart is dropped when using SSL.
3.2. I have a different secure server domain. Why does the shopping cart get dropped?
3.3. My images aren't there on the secure server!!!
3.4. My secure pages fail when the browser is MSIE.
4. ISP Problems
4.1. No shell access allowed on my ISP.
4.2. We're sorry, the Interchange server is unavailable...
4.3. Document contains no data or premature end of script headers (especially on BSDI or FreeBSD).
4.4. Interchange server only runs for a while, then dies.
4.5. My entire home directory is in HTML document space.
5. SYSTEM CONFIGURATION
5.1. Can I run multiple catalogs on one server?
5.2. How do I start Interchange when I reboot?
5.3. I installed the Interchange RPM, and I can't restart.
5.4. How do I set up a mall?
6. PRODUCT OPTIONS
6.1. Can I attach a size or color to a product?
6.2. Can I change the price based on size or color (or other attribute)?
6.3. How are simple product options structured?
6.4. But what do these options do? Where do they live?
7. ENCRYPTION
7.1. PGP encryption -- Server Error
7.2. PGP encryption -- What do I do now that it is working?
8. How do I....
8.1. How do I get the number of items in a shopping cart?
8.2. How do I delete an item from the cart in Perl?
8.3. The demo doesn't do ... (pick one)
8.4. How can I trace the source of a purchase and run a partners program?
8.5. How can I send an email copy of the receipt to a user?
8.6. How do I display Euro pricing?
8.7. How do I empty the shopping cart?
8.8. How do I e-mail credit card numbers in plain text?
8.9. How do I setup multiple shipping addresses?
8.10. How do I change the order number from TEST0001, TEST0002 to something else?
8.11. How do I move a catalog from a test server to a production server?
8.12. How do I access the raw match count?
8.13. How do I add the thumbnail to the results page?
8.14. How do I do a random display of items?
8.15. How do I setup a new real time payment processor that isn't yet supported by Interchange?
8.16. How do I modify orders after they are placed, change items, shipping, etc.?
8.17. How do I make or get a certificate for SSL?
8.18. How do I perform multi-table SQL queries and/or joins using dot notation?
8.19. How do I modify the Save Cart and Recurring Cart feature? How do they work?
9. Errors
9.1. Sorting doesn't work across multiple pages.
9.2. I am searching for a string and it is not found. I know it is there!
10. Performance Issues
10.1. Interchange runs, but it's sooo sllooowww...
10.2. Interchange slows down over time.
10.3. I am using SQL, and Interchange is slow ...
11. Using Interchange with Apache and SUEXEC
13. Tips and tricks
13.1. Locking down your system
13.2. Optimizing lists
14. Using Interchange with Oracle
15. Using Interchange with PostgreSQL
16. Using Interchange with MySQL
17. Using Interchange with Apache
18. Perl/Interchange FAQ
18.1. Cameron Prince's local Perl installation how-to
19. Other / Miscellaneous Questions
19.1. What does the "mv_pc" variable added to every URL mean?
19.2. Where is process.html?
19.3. What PGP / GPG encryption software is available for Windows?
19.4. When are the results_big.html or results_either.html files called/used?
( all in one file )
1. The Foundation Store
1.1. Customizing Foundation
4. Page Templates
4.1. Template File Locations
4.2. Themes
4.3. Template Definition Files
4.4. Edit Page Function
4.5. Region Templates
4.6. Template Page List
4.7. Special Page List
4.8. Components
5. The Database Tables
5.1. 2ndDayAir.csv
5.2. 450.csv
5.3. Ground.csv
5.4. NextDayAir.csv
5.5. access.asc
5.6. affiliate
5.7. area
5.8. banner
5.9. cat
5.10. country
5.11. downloadable
5.12. files
5.13. inventory.txt
5.14. locale.txt
5.15. merchandising.txt
5.16. mv_metadata
5.17. options
5.18. order_returns.txt
5.19. orderline.txt
5.20. pricing
5.21. products
5.22. route.txt
5.23. salestax.asc
5.24. shipping.asc
5.25. state.txt
5.26. transactions.txt
5.27. userdb.txt
5.28. variable.txt
( all in one file )
1. Introduction
1.1. Software installation
1.2. Software prerequisites
1.3. Audience
2. Overview of Interchange
2.1. Catalogs
2.2. Hacking
2.3. ITL -- Interchange Tag Language
2.4. Talking to Interchange via socket
2.5. Talking to Interchange over the command line
2.6. Data structure overview
2.7. Session data structure
3. Tour the source
3.1. From startup to serving content
3.2. Notes about databases
( all in one file )
1. Interchange Table Editor
1.1. Calling the table editor
1.2. Attributes and attribute quoting
1.3. Templating
1.4. Metadata
1.5. Extended settings
( all in one file )
2. Tag Syntax
2.1. Standard Syntax
2.2. HTML-Comment
2.3.
Named vs. Positional Parameters
2.4.
Universal Attributes
2.5. Tag-specific Attributes
2.6.
Attribute Arrays and Hashes
3. Looping tags and Sub-tags
3.1. PREFIX-accessories
3.2. PREFIX-alternate
3.3. PREFIX-calc
3.4. PREFIX-change
3.5. PREFIX-code
3.6. PREFIX-data
3.7. PREFIX-description
3.8. PREFIX-discount
3.9. PREFIX-discount-subtotal
3.10. PREFIX-field
3.11. PREFIX-increment
3.12. PREFIX-last
3.13. PREFIX-line
3.14. PREFIX-modifier
3.15. PREFIX-next
3.16. PREFIX-param
3.17. PREFIX-pos
3.18. PREFIX-price
3.19. PREFIX-quantity
3.20. PREFIX-subtotal
3.21. if-PREFIX-data
3.22. if-PREFIX-field
3.23. PREFIX-modifier-name
3.24. PREFIX-quantity-name
4. Tags
4.1. accessories
4.2. and
4.3. area
4.4. assign
4.5. attr-list
4.6. banner
4.7. bounce
4.8. calc
4.9. calcn
4.10. cart
4.11. catch
4.12. cg
4.13. checked
4.14. control
4.15. control_set
4.16. counter
4.17. currency
4.18. data
4.19. default
4.20. description
4.21. discount
4.22. dump
4.23. ecml
4.24. either
4.25. error
4.26. export
4.27. field
4.28. file
4.29. filter
4.30. flag
4.31. fly-list
4.32. fly-tax
4.33. goto
4.34. handling
4.35. harness
4.36. href
4.37. html-table
4.38. if
4.39. import
4.40. include
4.41. index
4.42. item-list
4.43. label
4.44. log
4.45. loop
4.46. mail
4.47. mvasp
4.48. nitems
4.49. options
4.50. or
4.51. order
4.52. page
4.53. perl
4.54. price
4.55. process
4.56. process-search
4.57. query
4.58. read-cookie
4.59. restrict
4.60. row
4.61. salestax
4.62. scratch
4.63. scratchd
4.64. search-list
4.65. search-region
4.66. selected
4.67. set
4.68. set-cookie
4.69. set
4.70. setlocale
4.71. shipping
4.72. shipping-desc
4.73. soap
4.74. strip
4.75. subtotal
4.76. tag
4.77. time
4.78. timed-build
4.79. tmp
4.80. tmpn
4.81. total-cost
4.82. tree
4.83. try
4.84. update
4.85. userdb
4.86. value
4.87. value-extended
5. User-defined Tags
5.1. Alias
5.2. attrAlias
5.3. CanNest
5.4. HasEndTag
5.5. Implicit
5.6. Interpolate
5.7. InvalidateCache
5.8. Order
5.9. PosRoutine
5.10. Routine
6. Standard Usertags
6.1. bar_button
6.2. button
6.3. convert_date
6.4. db_date
6.5. delete_cart
6.6. email
6.7. email_raw
6.8. fedex_query
6.9. formel
6.10. fortune
6.11. get-url
6.12. load_cart
6.13. loc
6.14. rand
6.15. reconfig
6.16. reconfig_time
6.17. reconfig_wait
6.18. save_cart
6.19. summary
6.20. table_organize
6.21. title_bar
6.22. ups_query
6.23. usertrack
6.24. var
6.25. xml-generator
A. Template Parsing Order
A.1. Standard Parsing
A.2. Nonstandard parsing within the admin interface
A.3. Nonstandard parsing of Subtags
B. Search and Form Variables
B.1. Variable Names
B.2. Abbreviations
( all in one file )
3. Using Interchange Template Tags
3.1. Understanding Tag Syntax
3.2. data and field
3.3. set, seti, tmp, tmpn scratch and scratchd
3.4. loop
3.5. if
4. Programming
4.1. Overriding Interchange Routines
4.2. Embedding Perl Code
4.3. ASP-Like Perl
4.4. Error Reporting
5. Interchange Perl Objects
5.1. A note about Safe
5.2. Standard objects and variables
6. Debugging
6.1. Export
6.2. Time
6.3. Import
6.4. Log
6.5. Header
6.6. price, description, accessories
6.7. FILE and INCLUDE
6.8. Banner/Ad rotation
6.9. Tags for Summarizing Shopping Basket/Cart
6.10. Item Lists
7. Interchange Page Display
7.1. On-the-fly Catalog Pages
7.2. Special Pages
7.3. Checking Page HTML
8. Forms and Interchange
8.1. Special Form Fields
8.2. Form Actions
8.3. Profile checking
8.4. Profile examples
8.5. User defined check routines
8.6. One-click Multiple Variables
8.7. Checks and Selections
8.8. Integrated Image Maps
8.9. Setting Form Security
8.10. Stacking Variables on the Form
8.11. Extended Value Access and File Upload
8.12. Updating Interchange Database Tables with a Form
( all in one file )
2. Interchange 4.8 Deprecated Features
2.1. Deprecated Features Previous to Interchange 4
2.2. Interchange 4 Deprecated Features
3. Upgrading from Minivend 4.0 to Interchange 4.6
3.1. minivend.cfg
3.2. Access Manager
3.3. Database Editing
3.4. Order Manager
3.5. Affiliates
3.6. Page Editor
3.7. Item Editor
3.8. Preferences Editor (KNAR)
3.9. Route Editor
3.10. Transactions database
4. Upgrading from Minivend 3 to Minivend 4
4.1. Nested [loop]s
4.2. All frame features removed
4.3. Tags removed
4.4. Directives removed
4.5. Minor operations removed
4.6. Search lists
4.7. Search conditionals
4.8. Form data updates
4.9. Checkout changes
4.10. [if-field] etc.
4.11. [search-list]
4.12. Global subs