Links are in the head.
"); fclose ($f); } closedir ($dir); //----- /* * load the navigation data */ require $navdata_file; /* * determine the group num and item number that corresponds to the requested item * also determine the requested items information * note the use of class=. CSS lets us alter rendering style * without changing anything in this script. */ $item_found = 0; $info = ""; if ($item_nam != "") { $groups = array_keys($navdata); for ($i=0;$iPurpose:
" .$iteminfo['purpose']."<="" p="">"; if ($iteminfo['notes'] != '') $info .= "\n
Notes:
".$iteminfo['notes']."
"; $item_found = 1; } } } /* * if item not found, perhaps the request was of the deprecated construct groupNum.itemNum * if not of such construct, group and item number are set to invalid values */ if (! $item_found) { $group_num += 0; if ($group_num<0 || $group_num>=count($navdata)) { $group_num = 0; $item_num = -1; } else if (isset($item_num)) { $groups = array_keys($navdata); $group = $groups[$group_num]; $items = $navdata[$group]; $item_num += 0; if ($item_num<0 || $item_num>=count($items)) $item_num = -1; } else $item_num = -1; } } else { $group_num = 0; $item_num = -1; } /* * this function generates the html lists that enumerate the groups and items in the groups * at client browse time, careful dhtml manipulation will give the effect of things opening and closing * blank items at the end of short lists causes the 'cool bar' effect, that of thing X opening to * reveal its innards, while the thing Y which the thing X is in does not change size */ function selection_menu () { global $navdata, $group_num, $item_num; //----- determine max number of items in a group $maxi = 0; foreach ($navdata as $group => $items) { $maxi = max ($maxi, count($items)); } //----- generate html that functions like a cool bar $groupCount = 0; foreach ($navdata as $group => $items) { print "\nPurpose:
"+P[x][y]+"
" if (N[x][y] != "") html += "Notes:
"+N[x][y]+"
" return html } function mover(e){var tg=e?e.target?e.target:this:this document.getElementById('info').innerHTML = infoHTML (tg.id.split('_'),'h3') document.getElementById('info').style.display='block' } function mout(e){var tg=e?e.target?e.target:this:this document.getElementById('info').style.display='none' if(moff)mover(moff) } function grover(e){var tg=e?e.target?e.target:this:this;if(tg!=gropen)tg.style.backgroundColor="#ccc"} function grout (e){var tg=e?e.target?e.target:this:this;if(tg!=gropen)tg.style.backgroundColor="#ddd"} function grick (e){var tg=e?e.target?e.target:this:this if (typeof gropen != 'undefined' && tg != gropen) { gropen.style.backgroundColor='#ddd' gropen.style.fontWeight='normal' gropen.style.borderColor='#888' itopen.style.display='none' } gropen = tg gropen.style.backgroundColor='#88BBFF' gropen.style.fontWeight='bold' gropen.style.borderColor='#6699FF' var itgid = gropen.id.replace(/group/,'items') itopen = document.getElementById(itgid) itopen.style.display='block' } function load(x,y) { // hash part of url (stuff after #) is for positioning web page to a named A tag // hash part is not available to web server side // it is strictly client side, thus process hash requests here // while setting up event handlers, check if the hash part matches a known macro var hash = location.hash.substring(1) var re = new RegExp (); re.compile ("^"+hash+"[.]", "i") var obj1, obj2 for (var i=0;iby Richard A. DeVenezia
This collection of SAS macros is part of my SAS programming toolbox. They have been categorized into groups based on typical usage.
They have not been peer tested for quality assurance and are presented as-is. Some macros may rely on host specific features. Use at your own risk.
Send questions or feedback to Richard A. DeVenezia.
How to use this page:
In the selection zone on the left side, a series of category headers are displayed. Each header lists how many items it contains. Click on a header to open the category and see its items.
When you roll the mouse over an item, some information about the item (purpose and notes) will appear in an information zone beneath the selection zone.
Click on an item to see the source code of the item. There will also be a download link.
What if the information zone contains a link you want to follow? Click on the item to lock the information. Then you can follow the links if desired.
The original index page is still available, but will not be updated.
This page generator last updated 08 December 2003. DEFAULT; if ($search_term != "") { /* * perform searh and display the results */ print "No macros"; } else if ($n_found==1) { print "
One macro"; } else { print "
$n_found macros"; } print " matched the regular expression pattern.
"; print "$1%macro ', $pre); } /* * embolden the macro name in it's declaration */ $pre = preg_replace ('/(%macro\s+)(\w+)(\s+|\(|\s*;)/', '$1$2$3', $pre); /* * render a download icon */ print ""; /* * render the macro soure */ print $pre; } ?>
$file