SDLTRSFeaturesIntroduction | Features | Options | Text GUI | Known Bugs | Release History | Credits |
SDLTRS is built on top of a Z80 emulator, with added routines to support keyboard and video I/O through a SDL interface. The hardware emulation can operate as a TRS-80 Model I, Model III, Model 4, or Model 4P.
SDLTRS supports 48K of RAM in Model I or Model III mode, 128K in Model 4 or Model 4P mode. Some memory expansions like Alpha Technology's "SuperMem" and "HyperMem" from Anitek, Dave Huffman's (and others), "Selector" from the Dutch TRS-80 Users Society, are also supported (to a total of 2 MB). Floppy disks and hard disks are emulated using files to store the data; under Linux only, real floppy drives can be used.
A printer is emulated by sending its output to a text file. A serial port is emulated using a host serial port. Cassette I/O is emulated using files to store the cassette data. Game sound and music output are also supported. Though the cassette port, through the Model 4 sound option, and through the optional Orchestra-85/90 music synthesizer card are all emulated. In Model I mode, the HRG1B graphics card is emulated. The Lowe Electronics LE18 graphics adapter is also supported. In Model III and 4/4P mode, you can select whether the Radio Shack Graphics Card or Micro-Labs Grafyx Solution is emulated. There is also a mouse driver for model 4/4P mode. Several common time-of-day clock cards are emulated on all models. The Alpha Products joystick is emulated using the numeric keypad, or through a SDL compatible joystick.
Because SDLTRS emulates the hardware, all known TRS-80 Model I/III/4/4P operating systems should run on it, including all flavors of TRSDOS, LDOS/LS-DOS, NEWDOS, DOSPLUS, MultiDOS, and TRS-80 CP/M. However, the emulator also includes some extensions to the standard hardware, and the special drivers, utilities, and instructions needed for these are not provided for all operating systems.
The Z80 emulator has an optional debugger called zbx. If SDLTRS was
compiled with this feature, you can enter the debugger either by starting
SDLTRS with the -debug
flag or by pressing F9 or
Alt-Z while SDLTRS is running. The debugger runs in the command line
terminal window that you started SDLTRS from. Once you are in the debugger,
type help
for more information.
The following keys have special meanings to SDLTRS:
| Host Key | Function |
| F1 | TRS-80 Model 4/4P F1 key (address bit 7, data bits 4) or F1 key on Genie II, System 80 Mark II and PMC-81 |
| F2 | TRS-80 Model 4/4P F2 key (address bit 7, data bits 5) or F2 key on Genie II, System 80 Mark II and PMC-81 |
| F3 | TRS-80 Model 4/4P F3 key (address bit 7, data bits 6) or F3 key on Genie II, System 80 Mark II and PMC-81 |
| F4 | TRS-80 Model 4/4P Caps Lock key (address bit 7, data bit 3) or F4 key on Genie II, System 80 Mark II and PMC-81 |
| F5 or ScrollLock | TRS-80 @ key |
| F6 | TRS-80 '0' key (so that a shifted 0 can be obtained) |
| F7 | Main Menu |
| Shift-F7 | Emulator Settings |
| F8 | Quit SDLTRS |
| Shift-F8 | Abort SDLTRS without confirmation |
| F9 | Enter zbx debugger or toggle fullscreen mode |
| Shift-F9 | Toggle CPU panel in window title bar |
| F10 | Warm Reset |
| Shift-F10 | Power on Reset (reboot) |
| F11 | Show key bindings |
| Shift-F11 or PrintScreen | Save screenshot as BMP file |
| F12 | Switch Turbo Mode on or off |
| Shift-F12 | Reset the Z80 CPU clock rate to default |
| NumLock | Toggle numeric keypad as joystick emulation |
| ESC | TRS-80 Break key |
| Left Arrow or Backspace or Delete | TRS-80 Left Arrow key |
| Right Arrow or Tab | TRS-80 Right Arrow key |
| Up Arrow | TRS-80 Up Arrow key (caret for exponent) |
| Down Arrow | TRS-80 Down Arrow key |
| Home or Clear | TRS-80 Clear key |
| End | TRS-80 shifted down arrow key (used as a control key with some TRS-80 software) |
| Control | TRS-80 Model 4 Ctrl key (address bit 7, data bit 2) |
| Page Up | TRS-80 Left Shift key (address bit 7, data bit 0) |
| Page Down | TRS-80 Right Shift key (address bit 7, data bit 1) |
| Insert | TRS-80 Underscore key (address bit 3, data bit 7) |
| Shift-Up Arrow | TRS-80 ESC key |
| Alt-Delete | Warm Reset |
| Alt-Enter | Switch from Windowed to Fullscreen mode and back |
| Alt-Home | Set windowed mode scaling to lowest size |
| Alt-Page Down | Set windowed mode scaling to next higher size (1x, 2x, 3x, and then wraps) |
| Alt-Page Up | Set windowed mode scaling to next lower size (3x, 2x, 1x and then wraps) |
| Alt-'-' or Alt-8 | Decrease the clock rate of the Z80 CPU (USE WITH CAUTION) |
| Alt-'+' or Alt-9 | Increase the clock rate of the Z80 CPU (USE WITH CAUTION) |
| Alt-'.' | Show or hide the mouse pointer in the Emulator window |
| Alt-0...7 | Insert Floppy disk into drive 0...7 |
| Shift-Alt-0...7 | Remove Floppy disk from drive 0...7 |
| Alt-A | Select All on TRS-80 Emulator screen |
| Alt-B | Toggle LED Display at bottom of the Emulator screen |
| Alt-C | Copy from TRS-80 Emulator to clipboard |
| Alt-D or Alt-F | Floppy Disk Management |
| Alt-E | Emulator Settings |
| Alt-G | Stringy Floppy Wafer Management |
| Alt-H | Hard Disk Management |
| Alt-I | Display (Interface) Settings |
| Alt-J | Joystick GUI |
| Alt-K | Show key bindings |
| Alt-L | Load Emulator State |
| Alt-M | Main Menu |
| Alt-N | Switch Turbo Mode on or off |
| Alt-O | Miscellaneous (Other) Settings |
| Alt-P or Pause | Pause Emulator (and then unpause) |
| Alt-Q or Alt-End | Quit SDLTRS |
| Alt-R | Read Configuration |
| Alt-S | Save Emulator State |
| Alt-T | Cassette (Tape) Management |
| Alt-U | Toggle Sound Output (mUte/Unmute) |
| Alt-V or Alt-Insert | Paste from clipboard to TRS-80 Emulator |
| Alt-W | Write Configuration |
| Alt-X | Execute selected CMD file in the Emulator |
| Alt-Y | Switch Scanlines in the Emulator window on or off |
| Alt-Z | Enter zbx debugger or toggle fullscreen mode |
In Model III, 4, and 4P modes, the left and right shift keys are distinct;
in Model I mode, they are the same. The keys [, \, ], ^, _, {, |, }, and ~
also activate unused positions in the keyboard matrix (address bit 3, data
bits 3-7). With many TRS-80 keyboard drivers, these keys map to the
corresponding ASCII characters; with others, they do nothing. In some cases
you may find the shift state is reversed from what it should be; if you press
[ but { is displayed instead (etc.), see the -shiftbracket
and
-noshiftbracket
options below to correct the problem. The Insert
key maps to the same position as underscore (address bit 3, data bit 7), so
that this key can be used both with and without shift pressed; with many
TRS-80 keyboard drivers one of these maps to ASCII code 0x7f.
Pressing a key on a numeric keypad with NumLock disengaged emulate the Alpha Products joystick. Keys 2, 4, 6, 8 (KP_Down, KP_Left,KP_Right, KP_Up) are the main directions; keys 1, 3, 7, and 9 (KP_End,KP_Page_Down, KP_Home, KP_Page_Up) work as diagonal directions by activating two main directions at once; and key 0 (KP_Insert) or 5 (KP_Begin) is the fire button.
In addition to command line options to set the emulator options (most of which are also settable in
the Text GUI), SDLTRS allows the use of
Configuration Files. On UNIX like systems, if no configuration file is
specified, it will use (or create if it doesn't exist) one hidden in the users
home directory named .sdltrs.t8c
. On Windows, if no configuration
file is specified, it will use (or create if it doesn't exist) one in the same
directory as the executable named sdltrs.t8c
.
SDLTRS provides a Text based menuing system that allows you to most aspect of emulator operation (more info on the Text GUI page). The Text GUI is entered by pressing F7 or Alt-M, and exited by using the ESC key.
A picture of the top level menu of the GUI is below:
To control the emulated cassette, a file for the loaded tape is controlled
by the -cassette
option or the cassette option in the menu system.
There is also a menu option to control the cassette position in the file.
For printer support, any text sent to the TRS-80's printer (using
LPRINT
or LLIST
, for example) may be sent to a text file.
In Model I mode, SDLTRS emulates a Radio Shack Expansion Interface with the Percom Doubler or Radio Shack Doubler installed. The Doubler provides double-density disk access by allowing either the stock WD1771 FDC chip or a WD1791 chip to be selected under program control. At powerup the 1771 is selected, so operating systems with no Doubler driver see a stock system. By default, the emulator pretends to be both a Percom and Radio Shack Doubler at the same time -- it responds to the special commands of both -- so a driver for either should work. Under LDOS, use the command "FDUBL" (newer versions of LDOS), or "PDUBL" or "RDUBL" (older versions) to install the driver. Software that tries to detect which doubler you have (such as Super Utility) may be confused by the emulation of both at once, so you can choose to emulate only one with a command line option or text GUI control.
In Model III, 4, or 4P mode, SDLTRS emulates the stock floppy controller, which uses a WD1793 chip (software-compatible with the WD1791) to provide both single and double density.
Four 5.25-inch floppy drives are emulated. Disk image files may be inserted into the emulated drives with command line options or text GUI controls. If the user does not have write permission for a floppy file, and/or the file has an internal write protect flag set, a write-protect tab is emulated. The write protect flag can be changed in the Text GUI.
If you try to boot an emulated Model I, III, or 4 with no emulated disk (that is, no disk in drive 0), SDLTRS emulates having no floppy disk controller. The behavior of a real machine with a disk controller in this case didn't seem useful to emulate faithfully: A real Model I hangs with a screen full of garbage; a real Model III or 4 goes into a retry loop printing "Diskette?" on the screen and rechecking if you've inserted one. A real Model 4P always has a floppy controller, however, so SDLTRS always emulates one.
Due to a limitation of the original Model I hardware, drive :3
cannot be double-sided in Model I mode. In the original Model I, you could not
have a drive :3
at all if any drive in the system was
double-sided, but the emulator is able to be more forgiving.
Emulated floppy image files can be of any of three types: JV1, compatible with Jeff Vavasour's popular freeware Model I emulator for MS-DOS; JV3, a compatible extension of a format first used in Vavasour's commercial Model III/4 emulator; or DMK, compatible with David Keil's Model 4 emulator. All threetypes work in SDLTRS regardless of what model it is emulating. A heuristic is used to decide which type of image is in a drive, as none of the types has a magic number or signature.
JV1 supports only single density, single sided, with directory on track 17.
Sectors must be 256 bytes long. Use FORMAT (DIR=17)
if you want
to format JV1 disks with more (or less) than 35 tracks under LDOS.
JV3 is much more flexible, though it still does not support everything the real controllers could do. It is probably best to use JV3 for all the disk images you create, since it is the most widely implemented by other emulators, unless you have a special reason to use one of the others. A JV3 disk can be formatted with 128, 256, 512, or 1024-byte sectors, 1 or 2 sides, single or double density, with either FB (normal) or F8 (deleted) data address mark on any sector. In single density the nonstandard data address marks FA and F9 are also available. You cannot format a sector with an incorrect track number or head number. You can format a sector with an intentional CRC error in the data field. SDLTRS supports at most 5802 total sectors on a JV3 image.
The original Vavasour JV3 format supported only 256-byte sectors, and had a limit of 2901 total sectors. If you use sector sizes other than 256 bytes or format more than 2901 sectors on a disk image, emulators other than SDLTRS may be unable to read it. Note that an 80 track, double-sided, double-density (18 sector) 5.25-inch floppy will fit within the original 2901 sector limit; the extension to 5802 is primarily for emulation of 8-inch drives (discussed below).
The DMK format is the most flexible. It supports essentially every thing that the original hardware could do, including all "protected" disk formats. However, a few protected disks still may not work with SDLTRS due to limitations in SDLTRS's floppy disk controller emulation rather than limitations of the DMK format; see the LIMITATIONS section below.
Blank disks may be created from the Text GUI.
Early Model I operating systems used an FA data address mark for the
directory on single density disks, while later ones wrote F8 but would accept
either upon reading. The change was needed because FA is a nonstandard DAM
that is fully supported only by the WD1771 floppy disk controller used in the
Model I; the controllers in the Model III and 4 cannot distinguish between FA
and FB (which is used for non-directory sectors) upon reading, and cannot
write FA. To deal nicely with this problem, SDLTRS implements the following
kludge. On writing in single density, an F8 data address mark is recorded as
FA. On reading with an emulated WD1771 (available in Model I mode only), FA
is returned as FA; on reading with a WD179x, FA is returned as F8. This trick
makes the different operating systems perfectly compatible with each other,
which is better than on a real Model I! You can use the -truedam
flag to turn off this kludge if you need to; in that case the original
hardware is emulated exactly.
TRS-80 programs that attempt to measure the rotational speed of their floppy disk drives using timing loops will get the answers they expect, even when SDLTRS does not emulate instructions at the same speed as the original machines. This works because SDLTRS keeps a virtual clock (technically, a T-state counter), which measures how much time it should have taken to execute the instruction stream on a real machine, and it ties the emulation of floppy disk index holes to this clock, not to real time.
In addition to the four standard 5.25-inch drives, SDLTRS also emulates four 8-inch floppy drives. There is no widely-accepted standard hardware interface for 8-inch floppies on the TRS-80, so SDLTRS emulates a pseudo-hardware interface of its own and provides an LDOS/LS-DOS driver for it.
The only difference between 5.25-inch and 8-inch emulated drives is that
the emulator allows you to format more bytes per track in the latter. A new
JV3 floppy can be formatted as either 5.25-inch or 8-inch depending on whether
you initially put it into a 5.25-inch or 8-inch emulated drive. A new DMK
floppy, however, must be created as an 8 inch image in order to be large
enough for use in an 8-inch emulated drive. JV1 floppies cannot be used in
8-inch drives. Be careful not to put an emulated floppy into a 5.25-inch
emulated drive after it has been formatted in an 8-inch emulated drive or vice
versa; the results are likely to be confusing. Consider using different file
extensions for the two types; say, .dsk
for 5.25-inch and
.8in
for 8-inch.
To use the emulated 8-inch drives, you'll need a driver. Under LDOS or LS-DOS, use the program XTRS8/DCT supplied on the emulated floppy utility.dsk. This driver is a very simple wrapper around the native LDOS/LS-DOS floppy driver. Here are detailed instructions.
First, make sure an appropriate version of LDOS is in emulated floppy drive 0, and the supplied file utility.dsk is in another emulated floppy drive. Boot LDOS. If you are using Model I LDOS, be sure FDUBL is running.
Second, type the following commands. Here d is the LDOS drive number you want to use for the 8-inch drive and u is the unit number you chose when naming the file. Most likely you will choose d and u to be equal to reduce confusion.
SYSTEM (DRIVE=d,DRIVER="XTRS8",ENABLE)
Enter unit number ([4]-7): u
You can repeat these steps with different values of d and u to have more than one 8-inch drive. You might want to repeat four times using 4, 5, 6, and 7, or you might want to save some drive numbers for hard drives (see below).
Finally, it's a good idea to give the SYSTEM (SYSGEN)
command
(Model I/III) or SYSGEN
command (Model 4/4P). This command saves
the SYSTEM settings, so the 8-inch drives will be available again the next
time you reboot or restart the emulator. If you need to access an 8-inch
drive after booting from a disk that hasn't been SYSGENed, simply use the
same SYSTEM command again.
In case you want to write your own driver for another TRS-80 operating
system, here are details on the emulated pseudo-hardware. The 8-inch drives
are accessed through the normal floppy disk controller, exactly like
5.25-inch drives. The four 5.25-inch drives have hardware select codes 1, 2,
4, and 8. The four 8-inch drives have hardware select codes 3, 5, 6, and 7,
corresponding respectively to files. (See also the -sizemap
option below, however.)
Under Linux only, you can load a real floppy disk drive, typically
/dev/fd0
or /dev/fd1
in one of the emulated drives.
Most PCs should be able to read and write TRS-80 compatible floppies in this
way. Many PC floppy controllers cannot handle single density, however, and
some may have problems even with double density disks written on a real
TRS-80, especially disks formatted by older TRS-80 operating systems. Use the
-doublestep
flag if you need to read 35-track or 40-track media
in an 80-track drive. If you need to write 35-track or 40-track media in an
80-track drive, bulk-erase the media first and format it in the 80-track
drive. Don't write to a disk in an 80-track drive if it has ever been written
to in a 40-track drive. The narrower head used in an 80-track drive cannot
erase the full track width written by the head in a 40-track drive.
If you load one of the emulated 5.25-inch floppy drives with a real floppy drive filename, TRS-80 programs will see it as a 5.25-inch drive, but the actual drive can be either 3.5-inch or 5.25-inch. The drive will be operated in double density (or single density), not high density, so be sure to use the appropriate media.
If you load one of the emulated 8-inch floppy drives with a real floppy drive, TRS-80 programs will see it as an 8-inch drive. Again, you need to use the XTRS8/DCT driver described above to enable LDOS/LS-DOS to access an 8-inch drive. The real drive can be either 3.5-inch, 5.25-inch, or 8-inch. A 3.5-inch or 5.25-inch drive will be operated in high-density mode, using MFM recording if the TRS-80 is trying to do double density, FM recording if the TRS-80 is trying to do single density. In this mode, these drives can hold as much data as a standard 8-inch drive. In fact, a 5.25-inch HD drive holds exactly the same number of bits per track as an 8-inch drive; a 3.5-inch HD drive can hold 20% more, but we waste that space when using one to emulate an 8-inch drive. In both cases we also waste the top three tracks, since an 8-inch drive has only 77 tracks, not 80.
The nonstandard FA and F9 data address marks available in single density
on a real Model I with the WD1771 controller also need special handling. A
PC-style floppy disk controller can neither read nor write sectors with such
DAMs at all. This raises three issues: (1) It will be impossible for you to
read some Model I disks on your PC even if your PC otherwise supports single
density. In particular, Model I TRSDOS 2.3 directory tracks will be
unreadable. (2) On writing in single density, SDLTRS silently records a F9
or FA DAM as F8. (3) On reading in single density with an emulated WD1771
(Model I mode only), F8 is returned as FA. If you need more accurate
behavior, the -truedam
flag will turn on error messages on
attempts to write F9 or FA DAMs and will turn off translation of F8 to FA on
reading.
Hint: Be sure to set the drive type correctly in your PC's BIOS. Linux and SDLTRS rely on this information to know how fast your drives are spinning and hence what data rate to use when reading and writing. All 3.5-inch drives spin at 300 RPM. Newer 5.25-inch high-density capable drives ("1.2MB" drives) normally always spin at 360 RPM. (Some can be jumpered to slow down to 300 RPM when in double-density mode, but you should not do that when plugging one into a PC.) Older 5.25-inch drives that cannot do high density ("180KB", "360KB" or "720KB" 5.25-inch drives) always spin at 300 RPM. All 8-inch drives spin at 360 RPM. If you plug an 8-inch drive into a PC (this requires a 50-pin to 34-pin adaptor cable), tell your BIOS that it is a 5.25-inch 1.2MB drive.
SDLTRS can emulate a hard disk in a file in one of two ways: it can use a special, SDLTRS-specific LDOS driver called XTRSHARD/DCT, or it can emulate the Radio Shack hard drive controller (based on the Western Digital WD1010) and use the native drivers for the original hardware.
The XTRSHARD/DCT driver has been tested and works under both LDOS 5.3.1 for Model I or III and TRSDOS/LS-DOS 6.3.1 for Model 4/4P. It may or may not work under earlier LDOS versions. It definitely will not work under other TRS-80 operating systems or with emulators other than SDLTRS or xtrs. The hard disk format was designed by Matthew Reed for his Model I/III and Model 4 emulators; SDLTRS duplicates the format so that users can exchange hard drive images across the emulators.
To use XTRSHARD/DCT, first create a blank hard drive file using the Text GUI.
Second, load the file into one of the emulated hard drives using a command line option or the Text GUI.
Third, make sure an appropriate version of LDOS is in emulated floppy
drive 0, and the supplied file utility.dsk is in another emulated floppy
drive. Boot LDOS. If you are using Model I LDOS 5.3.1, patch a bug in the
FORMAT command by typing PATCH FORMAT/CMD.UTILITY M1FORMAT/FIX
.
You need to apply this patch only once. It must not be applied to Model III
or Model 4/4P LDOS.
Fourth, type the following commands. Here d
is the LDOS drive
number you want to use for the hard drive (a typical choice would be 4) and
u
is the unit number you chose when naming the file (most likely
0).
SYSTEM (DRIVE=d,DRIVER="XTRSHARD",ENABLE)
Enter unit number ([0]-7): u
FORMAT d (DIR=1)
Answer the questions asked by FORMAT as you prefer. The DIR=1
parameter to FORMAT is optional; it causes the hard drive's directory to be
on track 1, making the initial size of the image smaller. You can repeat
these steps with different values of d and u to have more than one hard
drive.
Finally, it's a good idea to give theSYSTEM (SYSGEN)
command
(Model I/III) or SYSGEN command (Model 4/4P). This command saves the SYSTEM
settings, so the drive will be available again the next time you reboot or
restart the emulator. If you need to access the hard disk file after
booting from a floppy that hasn't been SYSGENed, simply use the same SYSTEM
command(s) again, but don't FORMAT. You can freely use a different drive
number or (if you renamed the hard disk file) a different unit number.
Technical note: XTRSHARD/DCT is a small Z80 program that implements all the required functions of an LDOS disk driver. Instead of talking to a real (or emulated) hard disk controller, however, it uses special support in SDLTRS that allows Z80 programs to open, close, read, and write host files directly. This support is described further in the Data import and export section below.
SDLTRS also emulates the Radio Shack hard disk controller (based on the Western Digital WD1010) and will work with the native drivers for this hardware. This emulation uses the same hard drive (.hdv) file format that XTRSHARD/DCT does. With LDOS/LS-DOS, the RSHARDx/DCT and TRSHD/DCT drivers are known to work. With Montezuma CP/M 2.2, the optional Montezuma hard disk drivers are known to work. The hard disk drivers for NEWDOS/80 and for Radio Shack CP/M 3.0 should work, but they have not yet been tested at this writing. Any bugs should be reported.
First create a blank hard drive file using the Text GUI.
Second, load the file into one of the emulated hard drives using a command line option or the Text GUI.
Note that if hard drive unit 0 is loaded on a Model 4P, the Radio Shack boot ROM will always try to boot from it, even if the operating system does not support booting from a hard drive. If you have this problem, either hold down F2 while booting to force the ROM to boot from floppy, or simply avoid using unit number 0. Stock TRSDOS/LS-DOS 6 systems do not support booting from a hard drive; M.A.D. Software's HBUILD6 add-on to LS-DOS for hard drive booting should work, but is untested. Montezuma CP/M 2.2 does boot from the emulated hard drive.
Finally, obtain the correct driver for the operating system you will be using, read its documentation, configure the driver, and format the drive. Detailed instructions are beyond the scope of this manual page.
SDLTRS can emulate up to 8 drives for the Exatron Stringy Floppy (ESF) in
Model I mode. The emulation can be activated with the -stringy
option on the command line or in the "Emulator Settings Menu". The built-in
ROM for ESF will be loaded. To initialize the ESF firmware in BASIC, type:
SYSTEM
*? /12345
and press Enter. Stringy Floppys (Wafers) can be inserted into a drive using the "Stringy Wafer Management" with Alt-G.
Several Z80 programs for data import and export from various TRS-80 operating systems are included with SDLTRS on two emulated floppy images. These programs use special support in the emulator to read and write external host files, discussed further at the end of this section.
The emulated floppy utility.dsk
contains some programs for
transferring data between the emulator and ordinary Unix files. IMPORT/CMD,
IMPORT/BAS, EXPORT/CMD, EXPORT/BAS, and SETTIME/CMD run on the emulator under
Model I/III TRSDOS, Model I/III LDOS, Model I/III NEWDOS/80, and Model 4/4P
TRSDOS/LS-DOS 6; they may also work under other TRS-80 operating systems.
Model III TRSDOS users will have to use TRSDOS's CONVERT command to read
utility.dsk
.
IMPORT/CMD imports a host file and writes it to an emulated disk:
IMPORT [-lne] hostfile [trsfile]
The -n
flag converts Unix newlines (\n)
to TRS-80
newlines (\r)
. The -l
flag converts the Unix
filename to lowercase, to compensate for TRS-80 operating systems such as
NEWDOS/80 that convert all command-line arguments to uppercase. When using
the -l
flag, you can put a [ or up-arrow in front of a character
to keep it in uppercase. Give the -e
flag if your TRS-80
operating system uses the NEWDOS/80 convention for representing the ending
record number in an open file control block. This should be detected
automatically for NEWDOS/80 itself and for TRSDOS 1.3, but you'll need to give
the flag for DOSPLUS and possibly other non-LDOS operating systems. If you
need the flag but don't give it (or vice versa), imported files will come out
the wrong length. If the destination file is omitted, IMPORT uses the last
component of the Unix pathname, but with any "." changed to "/" to match
TRS-80 DOS file extension syntax.
IMPORT/BAS is a much slower program that performs the same function as IMPORT/CMD but may work under more operating systems. Simply run it under Disk Basic and answer the prompts.
EXPORT/CMD reads a file from an emulated disk and exports it to a host file:
EXPORT [-lne] trsfile [unixfile]
The -n
flag converts TRS-80 newlines (\r)
to Unix
newlines (\n)
. The -l
flag converts the Unix
filename to lowercase. When using the -l
flag, you can put a [ or
up-arrow in front of a character to keep it in uppercase. Give the
-e
flag if your TRS-80 operating system uses the NEWDOS/80
convention for representing the ending record number in an open file control
block. This should be detected automatically for NEWDOS/80 itself and for
TRSDOS 1.3, but you'll need to give the flag for DOSPLUS and possibly other
non-LDOS operating systems. If you need the flag but don't give it (or vice
versa), imported files will come out the wrong length. If the destination file
is omitted, EXPORT uses the TRS-80 filename, but with any "/" changed to "."
to match Unix file extension syntax.
EXPORT/BAS is a much slower program that performs the same function as EXPORT/CMD but may work under more operating systems. Simply run it under Disk Basic and answer the prompts.
Note: The export of files from SDLTRS may be prohibited by the
-emtsafe
flag.
SETTIME/CMD reads the date and time from the host computer and sets the TRS-80 DOS's date and time accordingly.
The next several programs were written in Misosys C and exist in two versions on utility.dsk. The one whose name ends in "6" runs on Model 4 TRSDOS/LS-DOS 6.x; the other runs on LDOS 5.x and most other Model I/III operating systems.
CD/CMD (or CD6/CMD) changes SDLTRS's host working directory:
CD [-l] hostdir
The -l
flag converts the host directory name to lower case.
When using the -l
flag, you can put a [ or up-arrow in front of
a character to keep it in upper case. Running CD/CMD will change the
interpretation of any relative pathnames given to IMPORT or EXPORT. It will
also change the interpretation of disk names at the next disk change, unless
you specified an absolute pathname for SDLTRS's -diskdir
parameter.
Note: The change of SDLTRS's current working directory may be
prohibited by the -emtsafe
flag.
PWD/CMD (or PWD6/CMD) prints SDLTRS's host working directory.
UNIX/CMD (or UNIX6/CMD) runs a host shell command:
UNIX [-l] host command line.
The -l
flag converts the Unix command line to lower case.
When using the -l
flag, you can put a [ or up-arrow in front of
a character to keep it in upper case. Standard I/O for the command uses the
SDLTRS program's standard I/O descriptors; it does not go to the TRS-80
screen or come from the TRS-80 keyboard.
Note: The execution of Unix shell commands may be prohibited by the
-emtsafe
flag.
MOUNT/CMD (or MOUNT6/CMD) is a convenience program that switches emulated floppy disks with xtrs. It does not work with SDLTRS.
UMOUNT/CMD (or UMOUNT6/CMD) is a convenience program that removes an emulated floppy disk with xtrs. It does not work with SDLTRS.
The emulated floppy cpmutil.dsk contains import and export programs for Montezuma CP/M, written by Roland Gerlach. It was formatted as a "Montezuma Micro Standard DATA disk (40T, SS, DD, 200K)," with 512-byte sectors. Be careful to configure your CP/M to the proper disk format and drive parameters (40 track, not 80), or you will have confusing problems reading this disk. Source code is included on the floppy.
The emulator implements a set of pseudo-instructions (emulator traps) that
give TRS-80 programs access to Unix files. The programs listed above use
them. If you would like to write your own such programs, the traps are
documented in the file trs_imp_exp.h
. Assembler source code for
the existing programs is supplied in xtrshard.z80, import.z80,
export.z80
, and settime.z80
. You can also write programs
that use the traps in Misosys C, using the files xtrsemt.h
and
xtrsemt.ccc
as an interface; a simple example is in
settime.ccc
. The BASIC programs IMPORT.BAS and EXPORT.BAS should
not be used as a basis for further development, however; they use an old,
slow mechanism in the emulator that may be removed in a future release rather
than the emulator traps.
The emulator supports only interrupt mode 1 of the Z80. It will complain if your program enables interrupts after powerup without executing an IM 1 instruction first. All Model I/III/4/4P software does this, as the built-in peripherals in these machines support only IM 1.
The Model I has a 40 Hz heartbeat clock interrupt, while the Model III uses 30 Hz, and the Model 4/4P can run at either 30 Hz or 60 Hz. The emulator approximates this rather well even on a system where clock ticks come at some frequency that isn't divisible by the emulated frequency (e.g., 100 Hz on Intel Linux), as long as the true frequency is not slower than the emulated frequency. The emulator has a notion of the absolute time at which each tick is supposed to occur, and it asks the host system to wake it up at each of those times. The net result is that some ticks may be late, but there are always the proper number of ticks per second. For example, running in Model I mode on Intel Linux you'd see this pattern: (tick, 30ms, tick, 20ms,...) instead of seeing ticks every 25ms.
A standard Model 4 has a software-controlled switch to select operation at either 4.05504 MHz (with heartbeat clock at 60 Hz) or 2.02752 MHz (with heartbeat clock at 30 Hz). SDLTRS emulates this feature.
Model I's were often modified to operate at higher speeds than the standard
1.77408 MHz. With one common modification ("Archbold Electronics Speed-Up
Board"), writing a 1 to port 0xFE
would double the speed to
3.54816 MHz, while writing a 0 would set the speed back to normal. The
heartbeat clock runs at 40 Hz in either case.
The "Holmes Engineering Sprinter II" speed-up kit for the TRS-80 Model I uses the following values:
| COMMAND | CLOCK DIVISION | CLOCK FREQUENCY | % SPEED CHANGE |
|---|---|---|---|
| OUT 254, 0 | 1/6 | 1.77 MHz | 0% |
| OUT 254, 1 | 1/7 | 1.52 MHz | -14% |
| OUT 254, 2 | 1/8 | 1.33 MHz | -25% |
| OUT 254, 3 | 1/9 | 1.19 MHz | -33% |
| OUT 254, 4 | 1/2 | 5.32 MHz | +200% |
| OUT 254, 5 | 1/3 | 3.55 MHz | +100% |
| OUT 254, 6 | 1/4 | 2.66 MHz | +50% |
| OUT 254, 7 | 1/5 | 2.13 MHz | +23% |
The clock speed-up board "Sprinter III" for the TRS-80 Model III from
"Holmes Engineering" uses port 0x5F
to select the speed: writing
even numbers to the port sets the speed back to normal, odd numbers sets the
clock frequency to 5.07 MHz.
The "Seatronics Super Speed-Up" uses port 0xEC
on all TRS-80
Models to select the Z80 CPU speed:
| COMMAND | CLOCK FREQUENCY |
|---|---|
| OUT 236, 0 | 2.02 MHz |
| OUT 236, 64 | 4.05 MHz |
| OUT 236, 128 | 5.06 MHz |
| OUT 236, 192 | 8.11 MHz |
Note: The "Lowe LE18 Graphics" also uses I/O port 0xEC
on Model I and so the "Seatronics Super Speed-Up" will not be activated.
The speed (clock rate) of the Z80 CPU can be adjusted on the fly with Alt-'-' or Alt-'+', but use this with CAUTION: overclocking the Z80 will result in all forms of "timing errors"!
Sound support uses the sound capabilities of libSDL.
The Orchestra-85 music synthesis software will run under SDLTRS's Model I
emulation, and the Orchestra-90 software will run with Model III operating
systems under SDLTRS's Model III, 4, or 4P emulation. For best results, use
Orchestra-90 and the Model 4 emulation, as this lets the software run at
the highest emulated clock rate (4 MHz) and thus generate the best sound. If
you want to run Orchestra-85 instead, you can tell it that you have a 3.5 MHz
clock speedup with enable sequence 3E01D3FE
and disable
sequence 3E00D3FE
; this will let the software run twice as fast
as on an unmodified Model I and generate better sound.
A few Model 4 programs could use a mouse, such as the shareware hi-res
drawing program MDRAW-II. The program XTRSMOUS/CMD on the utility disk
(utility.dsk
) is a mouse driver for Model 4/4P mode that should
work with most such programs. SDLTRS does not emulate the actual mouse
hardware (a serial mouse plugged into the Model 4 RS-232 port), so the
original mouse drivers will not work under SDLTRS. Instead, XTRSMOUS accesses
the host mouse pointer using an emulator trap. XTRSMOUS implements the same
TRSDOS/LS-DOS 6 SVC interface as the David Goben and Matthew Reed mouse
drivers. (It does not implement the interface of the older Scott McBurney
mouse driver, which may be required by some programs.)
By default XTRSMOUS installs itself in high memory. This is done because
MDRAW-II tests for the presence of a mouse by looking to see whether the
mouse SVC is vectored to high memory. If the driver is installed in low
memory, MDRAW thinks it is not there at all. If you use mouse-aware
programs that don't have this bug, or if you edit the first line of MDRAW to
remove the test, you can install XTRSMOUS in low memory using the syntax
XTRSMOUS (LOW)
.
Several battery-backed time of day clocks were sold for the various TRS-80
models, including the TimeDate80, TChron1, TRSWatch, and T-Timer. They are
essentially all the same hardware, but reside at a few different port ranges.
SDLTRS currently emulates them at port ranges 0x70-0x7C
and
0xB0-0xBC
. The T-Timer port range at 0xC0-0xCC
conflicts with the Radio Shack hard drive controller and is not
emulated.
These clocks return only a 2-digit year, and it is unknown what their driver software will do in the year 2000 and beyond. If you have software that works with one of them, please send email to report what happens when it is used with SDLTRS.
Also see SETTIME/CMD in the "Data import and export" section above for another way to get the correct time into a Z80 operating system running under SDLTRS.
Finally, you might notice that LDOS/LS-DOS always magically knows the correct date when you boot it (but not the time). When you first power up the emulated TRS-80, SDLTRS dumps the date into the places in memory where LDOS and LS-DOS normally save it across reboots, so it looks to the operating system as if you rebooted after setting the date.
The numeric keypad can be used to emulate the Alpha Products joystick. The emulated joystick is mapped only at port 0, to avoid conflicts with other devices. Standard USB joysticks and gamepads will work as well, and may be selected from the Text GUI.
The joystick emulation is enabled by default but can be toggled with the NumLock key or in the GUI Joystick Setting Menu.
SDLTRS allows the user to copy text from the TRS-80 to the host, and paste text from the host to the TRS-80. Copy is only available when the host mouse is not being used for Mouse emulation in the emulator.
To paste text from the host to the TRS-80, simple use the Alt-V or Alt-Insert shortcut. The pasted text is entered into the emulator as keystrokes. This should allow paste to work with any program that accepts keystroke input. As the keys must be entered at a normal typing pace, pasting a large buffer may take some time. Should you wish to interrupt a Paste in process, simply hit any key and the Paste will be terminated.
To copy text from the TRS-80 to the Host, first it must be selected. This can happen in two ways. First, you can use the Select All shortcut Alt-A. This will select the entire TRS-80 screen, and you will see the selection rectangle around the edge of the screen. The second selection method is by clicking and dragging on the main TRS-80 screen, which will draw the selection rectangle. If you change your mind, simply click or hit a key, and the selection will be canceled.
Once the text is selected, then you can use the Alt-C shortcut. All text mode text will be copied to the paste buffer. If the selection area is more than one line high, a line break will be inserted at the end of each line in the selection rectangle.
SDLTRS allows you to save the state of the emulator, so that it may be
loaded later with the Load State command. Location of Disk and cassette image
and inserted into the computer are stored in the state file. The state is
stored in a .t8s
file that may be saved using the Alt-S
key binding. The Alt-L key binding will allow you to load a state file
that has been saved.
SDLTRS provides optional LED indicators at the bottom of the emulated
screen. You can turn these on or off with the -showled
and
-hideled
options, through "Display Settings" in the Text GUI,
or with the Alt-B key binding.
The following picture illustrates the LED's:
The LED's for the 8 floppy drives are on the left bottom of the screen, and in this case the first drive is active, and the other seven are not. The LED's for the 4 hard drives are on the right bottom of the screen, and in this case none of the drives are active.
The LED in the middle lights up orange on active Turbo Mode.


If you were following closely in the previous section, you may have noticed that a decorator’s render() method takes a single argument, $content. This is expected to be a string. render() will then take this string and decide to either replace it, append to it, or prepend it. This allows you to have a chain of decorators – which allows you to create decorators that render only a subset of the element’s metadata, and then layer these decorators to build the full markup for the element.
Let’s look at how this works in practice.
For most form element types, the following decorators are used:
You’ll notice that each of these decorators does just one thing, and operates on one specific piece of metadata stored in the form element: the Errors decorator pulls validation errors and renders them; the Label decorator pulls just the label and renders it. This allows the individual decorators to be very succinct, repeatable, and, more importantly, testable.
It’s also where that $content argument comes into play: each decorator’s render() method is designed to accept content, and then either replace it (usually by wrapping it), prepend to it, or append to it.
So, it’s best to think of the process of decoration as one of building an onion from the inside out.
To simplify the process, we’ll take a look at the example from the previous section. Recall:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class My_Decorator_SimpleInput extends Zend\Form\Decorator\Abstract
{
protected $_format = '%s'
. '<input id="%s" name="%s" type="text" value="%s"/>';
public function render($content)
{
$element = $this->getElement();
$name = htmlentities($element->getFullyQualifiedName());
$label = htmlentities($element->getLabel());
$id = htmlentities($element->getId());
$value = htmlentities($element->getValue());
$markup = sprintf($this->_format, $id, $label, $id, $name, $value);
return $markup;
}
}
|
Let’s now remove the label functionality, and build a separate decorator for that.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | class My_Decorator_SimpleInput extends Zend\Form\Decorator\Abstract
{
protected $_format = '<input id="%s" name="%s" type="text" value="%s"/>';
public function render($content)
{
$element = $this->getElement();
$name = htmlentities($element->getFullyQualifiedName());
$id = htmlentities($element->getId());
$value = htmlentities($element->getValue());
$markup = sprintf($this->_format, $id, $name, $value);
return $markup;
}
}
class My_Decorator_SimpleLabel extends Zend\Form\Decorator\Abstract
{
protected $_format = '%s';
public function render($content)
{
$element = $this->getElement();
$id = htmlentities($element->getId());
$label = htmlentities($element->getLabel());
$markup = sprintf($this->_format, $id, $label);
return $markup;
}
}
|
Now, this may look all well and good, but here’s the problem: as written currently, the last decorator to run wins, and overwrites everything. You’ll end up with just the input, or just the label, depending on which you register last.
To overcome this, simply concatenate the passed in $content with the markup somehow:
1 | return $content . $markup;
|
The problem with the above approach comes when you want to programmatically choose whether the original content should precede or append the new markup. Fortunately, there’s a standard mechanism for this already; Zend\Form\Decorator\Abstract has a concept of placement and defines some constants for matching it. Additionally, it allows specifying a separator to place between the two. Let’s make use of those:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | class My_Decorator_SimpleInput extends Zend\Form\Decorator\Abstract
{
protected $_format = '<input id="%s" name="%s" type="text" value="%s"/>';
public function render($content)
{
$element = $this->getElement();
$name = htmlentities($element->getFullyQualifiedName());
$id = htmlentities($element->getId());
$value = htmlentities($element->getValue());
$markup = sprintf($this->_format, $id, $name, $value);
$placement = $this->getPlacement();
$separator = $this->getSeparator();
switch ($placement) {
case self::PREPEND:
return $markup . $separator . $content;
case self::APPEND:
default:
return $content . $separator . $markup;
}
}
}
class My_Decorator_SimpleLabel extends Zend\Form\Decorator\Abstract
{
protected $_format = '%s';
public function render($content)
{
$element = $this->getElement();
$id = htmlentities($element->getId());
$label = htmlentities($element->getLabel());
$markup = sprint($this->_format, $id, $label);
$placement = $this->getPlacement();
$separator = $this->getSeparator();
switch ($placement) {
case self::APPEND:
return $markup . $separator . $content;
case self::PREPEND:
default:
return $content . $separator . $markup;
}
}
}
|
Notice in the above that I’m switching the default case for each; the assumption will be that labels prepend content, and input appends.
Now, let’s create a form element that uses these:
1 2 3 4 5 6 7 8 9 10 11 12 | $element = new Zend\Form\Element('foo', array(
'label' => 'Foo',
'belongsTo' => 'bar',
'value' => 'test',
'prefixPath' => array('decorator' => array(
'My_Decorator' => 'path/to/decorators/',
)),
'decorators' => array(
'SimpleInput',
'SimpleLabel',
),
));
|
How will this work? When we call render(), the element will iterate through the various attached decorators, calling render() on each. It will pass an empty string to the very first, and then whatever content is created will be passed to the next, and so on:
But wait a second! What if you wanted the label to come after the input for some reason? Remember that “placement” flag? You can pass it as an option to the decorator. The easiest way to do this is to pass an array of options with the decorator during element creation:
1 2 3 4 5 6 7 8 9 10 11 12 | $element = new Zend\Form\Element('foo', array(
'label' => 'Foo',
'belongsTo' => 'bar',
'value' => 'test',
'prefixPath' => array('decorator' => array(
'My_Decorator' => 'path/to/decorators/',
)),
'decorators' => array(
'SimpleInput'
array('SimpleLabel', array('placement' => 'append')),
),
));
|
Notice that when passing options, you must wrap the decorator within an array; this hints to the constructor that options are available. The decorator name is the first element of the array, and options are passed in an array to the second element of the array.
The above results in the markup <input id=”bar-foo” name=”bar[foo]” type=”text” value=”test”/>n.
Using this technique, you can have decorators that target specific metadata of the element or form and create only the markup relevant to that metadata; by using multiple decorators, you can then build up the complete element markup. Our onion is the result.
There are pros and cons to this approach. First, the cons:
The advantages are compelling, though:
While the above examples are the intended usage of decorators within Zend_Form, it’s often hard to wrap your head around how the decorators interact with one another to build the final markup. For this reason, some flexibility was added in the 1.7 series to make rendering individual decorators possible – which gives some Rails-like simplicity to rendering forms. We’ll look at that in the next section.
The source code of this file is hosted on GitHub. Everyone can update and fix errors in this document with few clicks - no downloads needed.


Last update: {{updateDate}}
The pages of the wishlist can be accessed from the navigation panel.
If on mobile, tap the icon at the top-right of this page to open the panel.
An option is to make a donation in my name to any LGBTQ+ friendly charity. A few are listed on the money page.
If you have any questions, feel free to email me<EMAIL_ADDRESS>This is a general idea of what I would like. I like things that are useful.
Anything in text like this is a note.
Anything in text like this is important.


| DOSE: |
repeated |
smoked |
Products - Smoking Blends - Cannabis-Like |
I stumbled upon 'Genie' herbal smoking mixture in a local head shop, and decided to buy a 3g packet for £20 (approx $35). At this price, it's more expensive than normal grass, but with my supply of MaryJane drying up, I thought I'd take a chance.
It comes in a little foil packet and looks just like rolling tobacco. The ingredients on the back contain the ambigious term '..a blend of herbs and extracts including Galanga, Alchemilla, etc'. This implies to me that it contains other, unknown ingredients, and there doesn't seem to be much information about it online. It also smells of pot-pouri.
My flatmate and I are both experienced smokers and immediately built a joint each, putting in slightly less of the Genie than we would have grass. It tastes and smells different from grass, but not in an unpleasant way. We were slightly skeptical of its effects, but after one joint both concurred that this stuff is very very similar in effect to grass, providing that familiar red eyed feeling and subtle head buzz. Great!
Over the course of the next few hours, we smoked perhaps two or three joints each, which would be standard for us both, being daily heavy cannabis smokers. I began to notice that I felt much more stoned that I would if it were just cannabis we were smoking - perhaps as if I'd smoked twice the number of joints that I had actually smoked. Whilst it wasn't bad, it certainly wasn't a comfortable feeling. Much like the feeling I get when I've smoked more than I should. Sweating, being aware of increased heart rate (nothing serious or intense), etc.
My flatmate confirmed the same feelings. Whatever's in this stuff, I don't think it's entirely 'herbal'. Amongst the various snippets of information I could find online, there are rumours of similar substances containing synthetic cannabinoids. From what I can make out, Genie is manufactured by the same people who make the Spice range of smoking mixtures.
The effects wore off within a few hours, but the potency of this stuff took me by surprise. Worth noting, also, is that it's officially sold as an incense, which makes me more wary of its actual active ingredients.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


| Address | {{row.address}} | Address Type | {{row.addresstype}} | Country | {{row.country}} | State | {{row?.state}} | City | {{row?.city}} | Zip Code | {{row?.zipcode}} | Land Mark | {{row?.landmark}} | Contact no. | {{row?.contectnum}} | Action |
|
|---|
** No data found **


Welcome To Bus Mall
Please Choose Your Favorite Item Of the 3 Shown For Every 3 Shown.
Bag
Chair
Bathroom
VIEW RESULTS
RESET


© Copyright 2017 - Coding with Marty - Providing the best coding content for you. As an Amazon Associate I earn from qualifying purchases.


{% extends "base.html" %} {% block main %}
You are attempting to view volunteers for an event that does not exist.
{% endif %} {% if wronguser %}You do not have permission to view volunteers for the specified event. Only the event administrator can view volunteers.
{% endif %} {% if people %}Event: {{ event.name }}
| Name (Last, First) | Email Address |
| {{ person.last_name }}, {{ person.first_name }} | {{ person.email }} |
There are no volunteers for this event yet.
{% endif %}


TEK Society welcomes and supports people of all backgrounds and identities. This includes, but is not limited to members of any sexual orientation, gender identity and expression, ethnicity, national origin, social and economic class, educational
level, field of education, color, immigration status, sex, age, political belief, religion, and mental and physical ability.
TEK Society depends on each other to produce the best work we can as a community. Your decisions will affect clients and colleagues, and you should take all consequences into account while making decisions.
TEK Society won't agree all the time, but disagreement is no excuse for disrespectful behavior. We will all experience frustration from time to time, but we cannot allow frustration to lead to personal attacks. An environment where people feel
uncomfortable or threatened is not a productive or creative one.
Always conduct yourself professionally. Be kind to others. Do not insult or put down others. Harassment and exclusionary behavior aren't acceptable. This includes, but is not limited to: - Threats of violence. - Discriminatory jokes and language.
- Sharing sexually explicit or violent material via electronic devices or other means.  - Unwelcome sexual attention. - Advocating for, or encouraging, any of the above behavior.
In general, if someone asks you to stop something, then stop. When we disagree, try to understand why. Differences of opinion and disagreements are mostly unavoidable. What is important is that we resolve disagreements and differing views constructively.
TEK Society can find strength in diversity. Different people have different perspectives on issues, and that can be valuable for solving problems or generating new ideas. Being unable to understand why someone holds a viewpoint doesn’t mean that
they’re wrong. Don’t forget that we all make mistakes, and blaming each other doesn’t get us anywhere.
Instead, focus on resolving issues and learning from mistakes.


A multiple switch argument. More...
#include <MultiSwitchArg.h>
Public Member Functions | |
| MultiSwitchArg (const std::string &flag, const std::string &name, const std::string &desc, int init=0, Visitor *v=NULL) | |
| MultiSwitchArg constructor. | |
| MultiSwitchArg (const std::string &flag, const std::string &name, const std::string &desc, CmdLineInterface &parser, int init=0, Visitor *v=NULL) | |
| MultiSwitchArg constructor. | |
| virtual bool | processArg (int *i, std::vector< std::string > &args) |
| Handles the processing of the argument. | |
| int | getValue () |
| Returns int, the number of times the switch has been set. | |
| std::string | shortID (const std::string &val) const |
| Returns the shortID for this Arg. | |
| std::string | longID (const std::string &val) const |
| Returns the longID for this Arg. | |
| void | reset () |
| Clears the Arg object and allows it to be reused by new command lines. | |
Protected Attributes | |
| int | _value |
| The value of the switch. | |
| int | _default |
| Used to support the reset() method so that ValueArg can be reset to their constructed value. |
A multiple switch argument.
If the switch is set on the command line, then the getValue method will return the number of times the switch appears.
Definition at line 39 of file MultiSwitchArg.h.
| TCLAP::MultiSwitchArg::MultiSwitchArg | ( | const std::string & | flag, | |
| const std::string & | name, | |||
| const std::string & | desc, | |||
| int | init = 0 , |
|||
| Visitor * | v = NULL | |||
| ) | [inline] |
MultiSwitchArg constructor.
| flag | - The one character flag that identifies this argument on the command line. | |
| name | - A one word name for the argument. Can be used as a long flag on the command line. | |
| desc | - A description of what the argument is for or does. | |
| init | - Optional. The initial/default value of this Arg. Defaults to 0. | |
| v | - An optional visitor. You probably should not use this unless you have a very good reason. |
Definition at line 130 of file MultiSwitchArg.h.
| TCLAP::MultiSwitchArg::MultiSwitchArg | ( | const std::string & | flag, | |
| const std::string & | name, | |||
| const std::string & | desc, | |||
| CmdLineInterface & | parser, | |||
| int | init = 0 , |
|||
| Visitor * | v = NULL | |||
| ) | [inline] |
MultiSwitchArg constructor.
| flag | - The one character flag that identifies this argument on the command line. | |
| name | - A one word name for the argument. Can be used as a long flag on the command line. | |
| desc | - A description of what the argument is for or does. | |
| parser | - A CmdLine parser object to add this Arg to | |
| init | - Optional. The initial/default value of this Arg. Defaults to 0. | |
| v | - An optional visitor. You probably should not use this unless you have a very good reason. |
Definition at line 140 of file MultiSwitchArg.h.
References TCLAP::CmdLineInterface::add().
| int TCLAP::MultiSwitchArg::getValue | ( | ) | [inline] |
Returns int, the number of times the switch has been set.
Reimplemented from TCLAP::SwitchArg.
Definition at line 153 of file MultiSwitchArg.h.
References _value.
| std::string TCLAP::MultiSwitchArg::longID | ( | const std::string & | val | ) | const [inline, virtual] |
Returns the longID for this Arg.
Reimplemented from TCLAP::Arg.
Definition at line 199 of file MultiSwitchArg.h.
| bool TCLAP::MultiSwitchArg::processArg | ( | int * | i, | |
| std::vector< std::string > & | args | |||
| ) | [inline, virtual] |
Handles the processing of the argument.
This re-implements the SwitchArg version of this method to set the _value of the argument appropriately.
| i | - Pointer the the current argument in the list. | |
| args | - Mutable list of strings. Passed in from main(). |
Reimplemented from TCLAP::SwitchArg.
Definition at line 155 of file MultiSwitchArg.h.
References TCLAP::Arg::_alreadySet, TCLAP::Arg::_checkWithVisitor(), TCLAP::Arg::_ignoreable, _value, TCLAP::Arg::argMatches(), TCLAP::SwitchArg::combinedSwitchesMatch(), and TCLAP::Arg::ignoreRest().
| void TCLAP::MultiSwitchArg::reset | ( | ) | [inline, virtual] |
Clears the Arg object and allows it to be reused by new command lines.
Reimplemented from TCLAP::SwitchArg.
Definition at line 205 of file MultiSwitchArg.h.
| std::string TCLAP::MultiSwitchArg::shortID | ( | const std::string & | val | ) | const [inline, virtual] |
Returns the shortID for this Arg.
Reimplemented from TCLAP::Arg.
Definition at line 193 of file MultiSwitchArg.h.
int TCLAP::MultiSwitchArg::_default [protected] |
Used to support the reset() method so that ValueArg can be reset to their constructed value.
Reimplemented from TCLAP::SwitchArg.
Definition at line 52 of file MultiSwitchArg.h.
Referenced by reset().
int TCLAP::MultiSwitchArg::_value [protected] |
The value of the switch.
Reimplemented from TCLAP::SwitchArg.
Definition at line 46 of file MultiSwitchArg.h.
Referenced by getValue(), processArg(), and reset().


TITAN A.E. A film review by Steve Rhodes Copyright 2000 Steve Rhodes RATING (0 TO ****): **
Don Bluth's TITAN A.E. is an expensive Saturday morning cartoon masquerading as a motion picture. Although the film contains some impressive special effects and awesome sound effects, they serve mainly to call attention to how flat and unappealing most of the remaining animation is.
But the real problem with TITAN A.E. is the lifeless script by Ben Edlund, Randall McCormick and Joss Whedon. Unable to fashion characters with any depth or interest and unable to come up with any meaningful or humorous dialog (the movie has exactly one funny scene), the writers create a script so weak that it is almost non-existent, as if the characters just tried to ad lib their lines. Maybe if the studio had brought in a fourth or fifth writer to work on the screenplay, someone would have finally found something to say worth hearing.
The story concerns life after earth, hence "A.E." An evil alien race, the Drej, have blown our poor planet to smithereens. As "humanity's last great hope," Matt Damon plays the initially reluctant hero known as Cale. Drew Barrymore plays Cale's sidekick, a tough pilot named Akima. Bill Pullman is the mysterious Captain Korso, and John Leguizamo is his navigator, Gune. None of the voice talent is used properly. The only reason to have them onboard is to add the marquee value of their names to the production. For an infinitely better animated adventure film see last year's PRINCESS MONONOKE.
There are a few nice moments in TITAN A.E. The best sequence calls to mind the sub chase from THE HUNT FOR RED OCTOBER. As the ships chase each other through the tight confines of large floating ice crystals, the effect is that of a hall of mirrors at an amusement park.
"My scanners are picking up a veritable cornucopia of nothing," Gune tells Korso, which is exactly how I felt watching the movie.  Maybe it would be fun to play with a joy stick, but observing it passively provides little enjoyment.
TITAN A.E. runs a very long 1:30. It is rated PG for action violence, mild sensuality and brief language and would be acceptable for kids around 10 and up. This is an animated film with blood, which may scare younger viewers.
My son Jeffrey, age 11, gave the film ****, praising particularly the film's computer graphic sequences. There with 8 other buddies of his (all in the prime demographic range for movie, age 11-12), they all agreed that the graphics were impressive. About half of them, however, complained about the weakness of the storyline, but the all of boys' ratings were pretty high, ranging from *** to ****.
Email<EMAIL_ADDRESS>The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


| DOSE: |
repeated |
|
Cannabis |
(plant material) |
This is a recap of my first marijuana use, my gradual habituation and addiction, and my sober reflections as to why things went the way they did. The key word here is gradual as my addiction really snuck up on me through forces I didn't even understand at the time. For all I know, I knew them all too well but refused to acknowledge them. I don't want to preach and I can't pretend I know other people's tendency with marijuana and other drugs. I can only tell my story with the expectation that some one will reject it or find that they can relate.
I've always had a sort of curiosity and interest in drug usage all my life. I didn't necessarily think that drugs were bad as I had been taught in school but I rather always wondered what the truth about drug usage was from a more experiential point of view. I also always had an interest in psychedelics because they were always mentioned as the ones that make people see things and the idea of one's imagination taking over the senses always intrigued me as an artist.
Despite all of this moral leeway with drugs on my part, I never used drugs while I was in high school because I didn't see what good they could possibly do me. I also felt a sense of pride about not doing drugs. Something about that feeling of virginity from a potentially dangerous experience always felt good to me. It wasn't until one of my friends told me that I should try smoking pot that I decided to go through with it. I trusted him then and he was my best friend.
Mike took me to some guy's house and I smoked weed there for the first time. I remember feeling like, though I was concious, that I was literally nodding off with my eyes open. I felt disoriented and I honestly did not enjoy my first experience. I told Mike that I would never smoke pot again after that.
Soon after that Mike and I went to college. He jumped into the drug scene head-first. I soon realized that I was seeing him less and less as time went on. I started figuring out that I wouldn't see him as much if I didn't follow him into the woods with other stoners to smoke pot and do drugs. I started off with making very ocassional visits to the woods with Mike but I remained conciously irregular with this. At this point there were even times when I would initially say yes to a trip to the woods and then, three seconds later, realize that I didn't actually want to smoke weed, and say no.
It wasn't until I had been in a very traumatizing situation with this girl I had a sort of relationship with that I started using pot regularly. I was in a newly formed band with some class mates and our drummer always rolled spliffs after practice (Not before! We played techy death metal and hardcore.). It became a ritual to smoke, cook pasta, and watch a movie after practice. I participated with this ritual religiously. I didn't think about it at all. I didn't wonder about whether it was good for me, whether it was a good way to spend my time, or if I was even really enjoying it that much at all. I just did my work after classes, went to band-practice, joined the ritual, and went to bed. I didn't have a girlfriend at this time so I made the above mentioned routine my daily schedule.
I tried some other drugs around this time. Among these were mushrooms, DXM, LSD, Salvia, and many sorts of downers. I also drank occasionaly but I always kept that under strict control because a.) I'm such a light-weight, and b.) Alcoholic tendencies run in my family. Though I used these drugs more than once in a manner that qualified as being more than just experimentation, I was always very careful because I viewed psychidelics, alcohol, and downers as dangerous drugs if abused. Thus, I kept my use of these drugs very sparse, always waiting AT THE VERY LEAST two weeks between trips with only one exception where I Dexed two nights in a row and vowed never to do that again, not because I didn't like it, but because I knew how bad that was in terms of potential brain damage.
Despite my very carefully regulated use of these drugs, however, my marijuana usage was on the up and my use of that drug was very regular at that point already as I was smoking at least one or two monster spliffs a day. I never regulated my marijuana usage because I had convinced myself that it was not a problem, that there were no effects, and, most importantly, that it was not an addiction. I really just treated it as a ritual and didn't think at all about why I was smoking so much so regularly.
Things happened. I got into a couple of relationships that honestly were about as unhealthy as the traumatizing one I mentioned before which was my first, I kept smoking pot, and I managed to improve my grades over time though they were still not incredibly stellar. After my first year of college, Mike had to leave because of a drug-related burn out, a financial dip, sagging grades, and because his parents were worried about him. All this kind of came to me as a shock simply because I wasn't seeing him that often because my druggy circle didn't associate with his and I wasn't fully aware of his situation. I was admittedly half-expecting this to happen to him but I could never bring myself to believe it. I tried to help him at times and would try to help him get back on track but it was all for naught.
I did another year at school which went much like the previous year although this time a couple of things went different. For one, I felt much more alienated than I did before, as though everyone was constantly judging me even if they weren't. I also had a mild panic attack from smoking too much weed. Though this scared me and I initially promised myself that I'd 'stop smoking for awhile,' later that day I took fewer hits than usual and weened myself back into regular marijuana usage rather than actually taking a break. If anything I was just strengthening my tolerance so that I could continue smoking.
Later that year I graduated with my A.A. and no plan in life. I was unfocused. I wanted to be an ethnomusicologist and my professors were trying to set up a trip to South East Asia for me but I wasn't actually ready for any of that and I started to freak out. I had talked with a druggy friend of mine soon before then and we were both freaking out.  At that point, we both agreed that we needed to give up on our current situations for now, rest up, and return when we each felt ready. Thus, against the wishes of my teachers, I left school for what I thought would be one semester so as to gather myself.
This semester turned into a year. Now I was smoking weed more than ever before. I was doing it at least three times a day usually by myself. It didn't matter how I felt or if I truly felt like smoke. I had ritualized it so much that I just smoked when ever I felt like 'doing something' without thinking about it. I probably could have spent this time actually doing something if I'd bothered to motivate myself. Instead, I smoked a lot of pot, joined a band with my other stoner friends including Mike that left me feeling rather uninspired, and I worked at a dollar store for minimum wage. I also began to find myself depressed whenever I didn't smoke weed which fuelled my regular usage. I started out with little rules like 'no smoking before work' and such but all these restrictions were broken one by one as I started accompanying everything I did with pot smoking.
As I smoked more and more, I started entertaining delusional views as part of my daily experience. I was always tripping a little during my daily life from all the cannabis in my system and I just figured I was like that inherently because I didn't want to admit that I was addicted. My feelings of alienation also grew stronger as time went on and I gradually weakened my self-esteem through this sort of thinking which made even more miserable.
I also noticed something about my friend Mike who I entered college with. I respected him when I knew him in high school. He was smart, funny, charming, and incredibly eloquent and charismatic. As he went to school and his drug usage increased, however, I noticed that he gradually became more and more zany and incoherent over time. After he left school, he came back for a few visits during the year that I was still going there and he used every visit as an excuse to trip sack. He ended up freaking out really bad on about 50% of these visits and everyone he knew on campus which was an impressive number would always have to come to his rescue. Whenever I was present for these occasions, I was always in the front lines with these other guys and girls, combing the campus looking for him or trying to comfort him while he was still in the grip of some paranoid delusion.
I remember he tripped sack on 2CE the night before my graduation and I ended up staying up all night with him, part of me pissed off that he wouldn't take my advice and enjoy this one night with me sober, and part of me following him because I was worried he'd do something crazy. This behavior on his part only got worse with time and his decline became more and more of a sore spot for me because he was my good friend and I cared about him a lot.
 I had tried before then in a gradual fashion but that never worked because my gradual drop-off would always turn into a gradual increase in the end. This time, however, I just stopped smoking weed because I realized that I honestly didn't want to.
This sobriety lasted a few months. During this time I noticed a few interesting things. For one, I felt inspired again.  I quit the band with my druggy friends and found that I felt uninspired with them because, honestly, they were not as skilled musicians as I was and I was dumbing down my riffs to suit them. When I parted ways with them musically I suddenly felt free to write whatever I wanted without having to dumb it down and I felt so inspired. To put it straight, the only symptom of my weed withdrawal was that I didn't feel depressed all the time anymore!
There was something else I noticed, though, something that made me feel very uneasy. My friends tried to hide it and pass it off like it was natural and nothing to be spoken about but I could see it clear as day. All my druggy friends were judging me. They assumed that I thought I was superior to them because I had stopped using drugs. Honestly, I respected all of them for their own gifts and persuasions and I didn't judge them. I felt very awkward and uncomfortable about all of this. Once my life was on track and school was set up and I felt ready to pursue my future, I was at this party and I finally just broke down and took a hit so that all my druggy 'friends' wouldn't look at me with that judging eye. This worked like magic and they suddenly stopped judging me which was a little strange to me.
So I went back to school once again as a stoner. I rejoined the old band which was still there and I went right back to smoking with the drummer all the time as before. This time, however, I was actually smoking twice as much as my first two years at this college because my drummer had befriended a big pot-head at this point and they would always collaborate so we'd smoke TWO big joints instead of just one for every trip to the woods.
This went on for awhile and during this time I finally found a girl and we fell in love with each other and formed what was the first good relationship for either of us. She actually cared about me and we were always considerate of each other which is more than can be said about my previous relationships. She made me think about so many things I had never thought about before such as my alienation, depression, and my addiction to weed that I still refused to consider an addiction ever though, in retrospect, it TOTALLY was, no question. For once I actually had to question a lot of the things I was doing including smoking weed and many things inextricably connected with it.
One night when I was smoking weed, something happened to me. I was puffing on a big, powerful joint when, suddenly, I started to hallucinate, and I mean REALLY hallucinate. The usual open eye pattern visuals soon gave way to the feeling that ants were crawling up my legs. I got scared and then the buddha of wisdom shoved his sword down my spine and told me to keep it together. I felt fine for a moment until I realized that I was totally just hallucinating a moment ago.
Then the pattern visuals got denser, and denser, and DENSER. After a few seconds, I couldn't see anything other than the pattern visuals. Then I couldn't hear anymore. Then I couldn't feel anything. I was completely out but not exactly unconcious because I could still see the pattern visuals and I could tell that I wasn't asleep. Even though my comprehension of time was pretty fucked at this point, I think it was about a minute before my hearing came back. After another minute or so my sight returned to normal and I could see that my drummer and stoner friend were holding me by my armpits and that I had fallen to my knees. A few minutes later I regained enough feeling in my body to use my legs again. A minute later I could walk and then a few moments later I felt totally fine again, you know, apart from being a bit freaked out about what I had just experienced.
I had never felt this before but it made me realize a few things about my marijuana usage. For one, this moment was a cumulative process. Long after this happened I heard a Terrence McKenna spoken word where he said that if one smokes a LOT A LOT of strong cannabis in one sitting then this sort of fast-acting, salvia-like trip likely to happen. I thought for a moment. When this happened to me, I hadn't smoked a ton of weed at once. I was smoking the same amount I was usually smoking during that general span of time. The only way I could figure this had happened was that the large amounts THC I'd been smoking regularly were collecting in my brain and that the one night I tripped hard must have just been the tipping point.
I also realized something else. I had regulated all my other drug usage except for weed because I assumed that a.) marijuana doesn't have any physically addictive properties, and b.) marijuana doesn't pose any long-term risks of abundant usage. I think I was wrong about these premises because I noticed that long-term usage was exactly what had incited the panic attack from my second year at college and my power-trip that I just described. I stopped smoking weed again intially for this reason and, while sober, I realized that the alienation, the feelings that I was just a strange guy with odd views, and the depression and aimlessness were all directly proportional to how much weed I smoked. In other words, the more I smoked, the more alienated, worthless, and depressed I would feel. This proved true to me as I quit smoking and felt the effects of the cannabis disapating over time.
After all of this, I still smoked on rare occasions to test myself and make sure I wasn't just blaming all of my problems on the drug.  Also, the night after the trip, I smoked one hit and got a headache which made it clear to me that my brain was in no shape to handle any more THC.
After quitting weed and all other drugs with the exception of the occasional beer (just one please, thank you), I noticed just how energetic and inspired I suddenly felt.  Feeling incapable made me feel useless because it made me feel like I was unable to strive for my goals with enough vigor. Whenever I'd quite smoking I'd suddenly have energy again and feel able to work towards my goals which took a huge bite out of my depression.
After quitting smoking weed, I had much more energy indeed. I started my Senior year a semester early, I finally went on that trip to South East Asia from which I returned probably a week ago, and I'm writing my final thesis project. To top it off, I no longer feel so depressed about my future because I have had the energy and focus to consider my options and I realize that I have all sorts of options and enough drive to pursue these different paths and maybe even enough foresight to make a living which is always nice.
That's my four year-or-so journey with weed in a nutshell. I am not attempting to demonize marijuana and stoners with this writing. This is just my true and honest account of what happened to me and my life when I smoked cannabis. All I can say is that I used weed so I that I wouldn't think about my problems and that only fuelled these problems as they grew more powerful and more out of my control. This doesn't mean that everyone gets this from it.
I only wish to posit the following things. These are my views that I believe, not a priori facts. I habituated weed without thinking about it, made myself believe I wasn't addicted which became harder with time as my usage increased, and I felt the inspiration to get my shit together when I quit smoking. If anyone, especially drug-users, who has read my submission can relate to anything I have said then all I ask is that you sincerely think about your own drug usage and try to truly understand why you do drugs. If it is honestly for experimentation or a fun day (but not several in a row!), then that is fine. If, however, these reasons are actually just excuses for explaining away an underlying addiction then I highly reccomend that you deeply consider the full implications of your drug usage.
Also, peer pressure is not as simple and quantified as those anti-drug fools would like you to believe. Peer pressure does not just come from other people telling you to do drugs. For me peer pressure was a purely personal reaction to friends' drug usage and I even thought that doing drugs with friends was a good way to form or even preserve connections with them. All I can say is that, personally, I don't think that the drug-usage connection can ever be as strong as a true, emotional connection with that person.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


MONSTA X continues hashtag campaign as #ChangeForWonho trends worldwide
by sl278MONSTA X fans are continuing their hashtag campaign after the departure of Wonho from the group.
Fans are now trending #ChangeForWonho and #IdolsAreHumansToo as they continue to call for his readmittance into MONSTA X.
What do you think will happen?


public class ConstantColour extends java.lang.Object implements IDynXmlObject, INamedObject, IRtBackground
The constant colour background is specified as a node in an XML file as:
<DynamicallyLoadedObject class="cip.raytrace.background.ConstantColour" name="backgroundName"> <colour RGBf_attributes/> </DynamicallyLoadedObject>
|
Example of XML Specification
The following specifies a gray constant colour background:
<DynamicallyLoadedObject class="cip.raytrace.background.ConstantColour" name="background"> <colour rgb="0.25,0.25,0.25"/> </DynamicallyLoadedObject>
| Constructor and Description |
|---|
ConstantColour()
Creates a new instance of a ConstantColour background.
|
ConstantColour(RGBf rgb)
Creates a new instance of a ConstantColour background initialized to a color.
|
| Modifier and Type | Method and Description |
|---|---|
void |
getColor(RGBf rgb,
Line3f ray,
AngleF aSample)
Gets the colour for a ray directed into the background.
|
void |
getColour(RGBf rgbIntensity) |
@NotNull java.lang.String |
getName()
Get the name of this object.
|
void |
loadFromXml(@NotNull org.w3c.dom.Element xmlElement,
java.util.LinkedList<INamedObject> refObjectList)
Loads this object from an XML DOM Document element.
|
void |
setColour(RGBf rgbIntensity) |
void |
setName(@NotNull java.lang.String strName)
Set the name of the object.
|
void |
toChildXmlElement(@NotNull org.w3c.dom.Element parentEl)
Add this object as a <DynamicallyLoadedObject> DOM element that is a child of some parent element.
|
public ConstantColour()
public ConstantColour(RGBf rgb)
rgb
- (RGBf, readonly) The background colour.public final void getColour(RGBf rgbIntensity)
public final void setColour(RGBf rgbIntensity)
public void loadFromXml(@NotNull @NotNull org.w3c.dom.Element xmlElement, java.util.LinkedList<INamedObject> refObjectList) throws DynXmlObjParseException
IDynXmlObject
DynXmlObjLoader
has
parsed the element and attributes to determine that this is a dynamically loaded object, found
and instantiated the class, and is now sending the node to the object so it can initialize
itself based on the contents of the node.loadFromXml
in interface IDynXmlObject
xmlElement
- The dynamically loaded object DOM Document element.refObjectList
- A linked list if named objects (implementing the INamedObject
interface)
that have already been loaded and can be used to resolve object references.DynXmlObjParseException
- Thrown if there was an error parsing the object. If this exception is
thrown it should be assumed that this object was incorrectly initialized,
is invalid, and should not be used in any further operations.public void toChildXmlElement(@NotNull @NotNull org.w3c.dom.Element parentEl)
IDynXmlObject
toChildXmlElement
in interface IDynXmlObject
parentEl
- The parent element.@NotNull public @NotNull java.lang.String getName()
INamedObject
getName
in interface INamedObject
public void setName(@NotNull @NotNull java.lang.String strName)
INamedObject
setName
in interface INamedObject
strName
- The name of the object.public void getColor(RGBf rgb, Line3f ray, AngleF aSample)
IRtBackground
getColor
in interface IRtBackground
rgb
- The rgb of the background.ray
- The ray directed into the background. This may be null in which
case a non-directional "average" background will be returned.aSample
- The field-of-view describing the area of the background we are interested in.
The field-of-view is the angle from the ray describing a cone within which we are interested
in a area sample of the background. This is useful for getting the reflection from a rough
surface.


percolate
Businessmodel of Percolate
Customer Segments
Percolate has a mass market business model, with no significant differentiation between customer segments. The company targets its offering at firms of all industries and sizes that have social media platforms.
Value Proposition
Percolate offers three primary value propositions: convenience, performance, and brand/status.
The company offers convenience by making operations simpler for clients. Its platform is an end-to-end solution that helps marketing professionals plan, create, and execute all of their marketing activities. It makes their lives easier in the following ways:
- Enables them to coordinate marketng campaigns and activities on a single calendar; tasks can be seen together or filtered by topic, channel, team, and location
- Provides brief templates they can use to organize their marketing ideas and collaborate on content, events, and campaigns
- Provides a mobile format they can use to obtain real-time updates and share media
- Provides an integrated task management tool they can use to track work from beginning to end, and an enterprise-grade approvals system to conduct oversight over all content
-
Streamlines tasks by integrating existing client systems for budgeting, CRM, marketing automation, and enterprise resource planning The company demonstrates strong performance through tangible results. High-profile examples of positive outcomes for specific clients include the following:
- Unilever used Percolate’s solution to reduce the amount of time spent developing and approving content, resulting in a decreased cost per social post and annual savings of over $10 million
- Amtrak used Percolate’s solution to make its marketing more customer-centric, resulting in the collection of 329 images of fans‘ experiences and a 110% increase in fan engagement
- General Electric used Percolate’s solution to plan, store, and distribute content through a single platform, resulting in a higher publishing rate – more than 950 posts in one month alone
- MasterCard used Percolate’s solution to brief its marketers and agency partners, enabling it to create and share six campaigns with more than 150 users across the U.S. and UK
- Freshpet used Percolate’s solution to provide a real-time view into consumer reception of its content, resulting in the saving of several hours a day and the publishing of pieces once a week The company has established a strong brand due to its success. It is used by over 800 brands worldwide, including Fortune 500 firms such as Marriott, IBM, adidas, Anheuser-Busch InBev, and Levi’s. It has also won a number of honors, including recognition as a “Leader“ in the Onboarding and Support category in The Forrester Wave Social Relationship Platforms report for 2015.
Channels
Percolate’s main channel is its business development team. The company promotes its offering through its website, social media pages, and participation in conferences.
Customer Relationships
Percolate’s customer relationship is primarily of a personal assistance nature. The company provides general phone and e-mail support. It also assigns clients an engagement manager that provides regular assistance, and offers a wide variety of support services through partners, such as implementation, onboarding, training, and campaign development.
Key Activities
Percolate’s business model entails maintaining a robust cloud platform for its clients.
Key Partners
Percolate maintains the following partnership programs:
Alliance Partner Program – Includes the following types of partnerships:
- Consultants and System Integration Partners – Service providers who offer implementation, change management, technical, and content support to its customers.
- Agency Partners – Creative, digital, and media agencies that assist in campaign development.
- Technology Partners – Tech firms in the content publishing, social connectivity, and software-as-a-service realms that extend Percolate’s platform with distribution channels and third-party applications in order to provide an enhanced offering for its customers.
- Marketplace Partners – Content fulfillment firms that supply licensed and on-demand content via the company’s in-app marketplace portal to help clients communicate more effectively. Program benefits include training programs, certification and accreditation paths, go-to-market collaboration efforts, and dedicated relationship support.
Affiliate Partner Program – Invites trusted third parties to promote the company’s offerings through their platforms (websites, mobile apps, etc.). Leads that result in new customers earn the parties referral fees totaling 10% of the customer’s first-year license cost. Many partners obtain additional earnings by providing services to clients.
Key Resources
Percolate’s main resource is its proprietary software platform, which serves over 800 brands.
It depends on human resources in the form of engineers to maintain and update the platform, consultants to provide training and advisory services, and customer service personnel to provide support.
As a relatively new startup it has relied heavily on funding from outside parties, raising $74.5 million from 14 investors as of May 2015.
Cost Structure
Percolate has a value-driven structure, aiming to provide a premium proposition through significant personal service and frequent service enhancements.
Its biggest cost driver is likely cost of services, a variable expense. Other major drivers are in the areas of customer support/operations and administration, both fixed costs.
Revenue Streams
Percolate has one revenue stream: revenues it generates from the subscription fees it charges for regular access to its software-as-a-service platform. Its staff must be contacted directly for pricing.


Welcome to the HTML Club website!
What is HTML?
HTML is the abbreviation for HyerText Markup Language. It is the programming language that makes webpages work.
What does HTML Club do?
We build websites after school on certain Fridays. Visit our about page for more information.


Demonstrates how an app that integrates with the Cached File Updater contract can
receive a new version of the file that was changed by the calling app. In this example
we assume a conflict exists and the Cached File Updater contract app can either
overwrite their version of the file or fork by creating new file.
Note: For apps that integrate with Cached File Updater contract, don't display UI
unless necessary. For example, a version conflict exists or the user credentials
are required.


Cure Alzheimer's Fund Citations
Export Google Scholars Data to CSV
Export NIH Data to CSV
Url
Title
Citations
Abstract
Journal
Volume
Issue
Year
Authors
ID
Url
Title
Researcher
Funding Amount
Year
ID


| Common/Math2D.hpp | 2D Math objects |
| Framework/CgContext.cpp | Implementation of Cg context object |
| Framework/CgContext.hpp | Interface of Cg context object |
| Framework/CgProgram.cpp | Implementation of Cg program |
| Framework/CgProgram.hpp | Interface of Cg program |
| Framework/CgProgramManager.cpp | Implementation of Cg program manager |
| Framework/CgProgramManager.hpp | Interface of Cg program manager |
| Framework/FontManager.hpp | Interface font manager |
| Framework/HardwareArrayManager.cpp | Implementation of hardware array manager |
| Framework/HardwareArrayManager.hpp | Interface hardware array manager |
| Framework/ILoader.hpp | Abstract Interface for loader of many model formats |
| Framework/RendererWrapper.hpp | Renderer constants and enumerations wrapper |


The UC Davis Digital Collections is a locally developed digital repository that was designed to store and manage the digital assets of UC Davis. These Digital Collections are intended to increase access to previously undiscoverable digital assets held by the University Library.
Initially launched in 2018, the repository currently stores 14,000 digital assets.
The Digital Asset Management System is built on the Fedora Linked Data Platform. Custom services are implemented using a Fedora (APIX) extension method as a general methodology. The User Interface was built with web-components anticipating a need for UI flexibility as the digital collection grows. For a more detailed explanation of the development, see our Fin Server Overview.
The UC Davis Library DAMS was a project of the Library's Online Strategy team.


Outlier detection¶
{
"consecutive_5xx": "...",
"consecutive_gateway_failure": "...",
"interval_ms": "...",
"base_ejection_time_ms": "...",
"max_ejection_percent": "...",
"enforcing_consecutive_5xx" : "...",
"enforcing_consecutive_gateway_failure" : "...",
"enforcing_success_rate" : "...",
"success_rate_minimum_hosts" : "...",
"success_rate_request_volume" : "...",
"success_rate_stdev_factor" : "..."
}
- consecutive_5xx
- (optional, integer) The number of consecutive 5xx responses before a consecutive 5xx ejection occurs. Defaults to 5.
- consecutive_gateway_failure
- (optional, integer) The number of consecutive “gateway errors” (502, 503 and 504 responses), including those raised by Envoy for connection errors, before a consecutive gateway failure ejection occurs. Defaults to 5.
- interval_ms
- (optional, integer) The time interval between ejection analysis sweeps. This can result in both new ejections as well as hosts being returned to service. Defaults to 10000ms or 10s.
- base_ejection_time_ms
- (optional, integer) The base time that a host is ejected for. The real time is equal to the base time multiplied by the number of times the host has been ejected. Defaults to 30000ms or 30s.
- max_ejection_percent
- (optional, integer) The maximum % of hosts in an upstream cluster that can be ejected due to outlier detection. Defaults to 10%.
- enforcing_consecutive_5xx
- (optional, integer) The % chance that a host will be actually ejected when an outlier status is detected through consecutive 5xx. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100 with 1% granularity.
- enforcing_consecutive_gateway_failure
- (optional, integer) The % chance that a host will be actually ejected when an outlier status is detected through consecutive gateway failure. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 0 with 1% granularity.
- enforcing_success_rate
- (optional, integer) The % chance that a host will be actually ejected when an outlier status is detected through success rate statistics. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100 with 1% granularity.
- success_rate_minimum_hosts
- (optional, integer) The number of hosts in a cluster that must have enough request volume to detect success rate outliers. If the number of hosts is less than this setting, outlier detection via success rate statistics is not performed for any host in the cluster. Defaults to 5.
- success_rate_request_volume
- (optional, integer) The minimum number of total requests that must be collected in one interval (as defined by interval_ms above) to include this host in success rate based outlier detection. If the volume is lower than this setting, outlier detection via success rate statistics is not performed for that host. Defaults to 100.
- success_rate_stdev_factor
- (optional, integer) This factor is used to determine the ejection threshold for success rate outlier ejection.
The ejection threshold is used as a measure to determine when a particular host has fallen below an acceptable
success rate.
The ejection threshold is the difference between the mean success rate, and the product of
this factor and the standard deviation of the mean success rate:
mean - (stdev * success_rate_stdev_factor)
. This factor is divided by a thousand to get adouble
. That is, if the desired factor is1.9
, the runtime value should be1900
. Defaults to 1900.
Each of the above configuration values can be overridden via runtime values.


Tim Skipper
Sr. SAP Program Manager
Tim has over 15 years of successful program and project leadership experience across hi-tech, pharmaceuticals, cosmetics, food, chemical and numerous other industries. Over 20 years of operations leadership allows Tim to truly understand the impact of technology decisions on operations. When not leading projects, Tim rides bicycles across the USA to raise money for disadvantaged people.