text:
Calling convention

In computer science, a calling convention is an implementation-level (low-level) scheme for how subroutines or functions receive parameters from their caller and how they return a result. When some code calls a function, design choices have been taken for where and how parameters are passed to that function, and where and how results are returned from that function, with these transfers typically done via certain registers or within a stack frame on the call stack. There are design choices for how the tasks of preparing for a function call and restoring the environment after the function has completed are divided between the caller and the callee. Some calling convention specifies the way every function should get called. The correct calling convention should be used for every function call, to allow the correct and reliable execution of the whole program using these functions.

Introduction
Calling conventions are usually considered part of the application binary interface (ABI). They may be considered a contract between the caller and the called function.

Related concepts
The names or meanings of the parameters and return values are defined in the application programming interface (API, as opposed to ABI), which is a separate though related concept to ABI and calling convention. The names of members within passed structures and objects would also be considered part of the API, and not ABI. Sometimes APIs do include keywords to specify the calling convention for functions.

Calling conventions do not typically include information on handling lifespan of dynamically-allocated structures and objects. Other supplementary documentation may state where the responsibility for freeing up allocated memory lies.

Calling conventions are unlikely to specify the layout of items within structures and objects, such as byte ordering or structure packing.

For some languages, the calling convention includes details of error or exception handling, (e.g. Go, Java) and for others, it does not (e.g. C++).

For Remote procedure calls, there is an analogous concept called Marshalling.

Calling conventions may be related to a particular programming language's evaluation strategy, but most often are not considered part of it (or vice versa), as the evaluation strategy is usually defined on a higher abstraction level and seen as a part of the language rather than as a low-level implementation detail of a particular language's compiler.

Different calling conventions
Calling conventions may differ in:
 * Where parameters are placed. Options include registers, on the call stack, a mix of both, or in other memory structures.
 * The order in which parameters are passed. Options include left-to-right order, or right-to-left, or something more complex.
 * How functions that take a variable number of arguments (variadic functions) are handled. Options include just passed in order (presuming the first parameter is in an obvious position) or the variable parts in an array.
 * How return values are delivered from the callee back to the caller. Options include on the stack, in a register, or reference to something allocated on the heap.
 * How long or complex values are handled, perhaps by splitting across multiple registers, within the stack frame, or with reference to memory.
 * Which registers are guaranteed to have the same value when the callee returns as they did when the callee was called. These registers are said to be saved or preserved, so they are not volatile.
 * How the task of setting up for and cleaning up after a function call is divided between the caller and the callee. In particular, how the stack frame is restored so the caller may continue after the callee has finished.
 * Whether and how metadata describing the arguments is passed
 * Where the previous value of the frame pointer is stored, which is used to restore the stack frame when the subroutine ends. Options include within the call stack, or in a specific register.  Sometimes frame pointers are not used at all.
 * Where any static scope links for the routine's non-local data access are placed (typically at one or more positions in the stack frame, but sometimes in a general register, or, for some architectures, in special-purpose registers)
 * For object-oriented languages, how the function's object is referenced

Calling conventions within one platform
Sometimes multiple calling conventions appear on a single platform; a given platform and language implementation may offer a choice of calling conventions. Reasons for this include performance, adaptation of conventions of other popular languages, and restrictions or conventions imposed by various "computing platforms".

Many architectures only have one widely-used calling convention, often suggested by the architect. For RISCs including SPARC, MIPS, and RISC-V, registers names based on this calling convention are often used. For example, MIPS registers $4 through $7 have "ABI names" $a0 through $a3, reflecting their use for parameter passing in the standard calling convention. (RISC CPUs have many equivalent general-purpose registers so there's typically no hardware reason for giving them names other than numbers.)

The calling convention of a given program's language may differ from the calling convention of the underlying platform, OS, or of some library being linked to. For example, on 32-bit Windows, operating system calls have the stdcall calling convention, whereas many C programs that run there use the cdecl calling convention. To accommodate these differences in calling convention, compilers often permit keywords that specify the calling convention for a given function. The function declarations will include additional platform-specific keywords that indicate the calling convention to be used. When handled correctly, the compiler will generate code to call functions in the appropriate manner.

Some languages allow the calling convention for a function to be explicitly specified with that function; other languages will have some calling convention but it will be hidden from the users of that language, and therefore will not typically be a consideration for the programmer.

x86 (32-bit)
The 32-bit version of the x86 architecture is used with many different calling conventions. Due to the small number of architectural registers, and historical focus on simplicity and small code-size, many x86 calling conventions pass arguments on the stack. The return value (or a pointer to it) is returned in a register. Some conventions use registers for the first few parameters which may improve performance, especially for short and simple leaf-routines very frequently invoked (i.e. routines that do not call other routines).

Example call:

Typical callee structure: (some or all (except ret) of the instructions below may be optimized away in simple procedures). Some conventions leave the parameter space allocated, using plain ret instead of ret imm16. In that case, the caller could add esp,12 in this example, or otherwise deal with the change to ESP.

x86-64
The 64-bit version of the x86 architecture, known as x86-64, AMD64, and Intel 64, has two calling sequences in common use. One calling sequence, defined by Microsoft, is used on Windows; the other calling sequence, specified in the AMD64 System V ABI, is used by Unix-like systems and, with some changes, by OpenVMS. As x86-64 has more general-purpose registers than does 16-bit x86, both conventions pass some arguments in registers.

ARM (A32)
The standard 32-bit ARM calling convention allocates the 16 general-purpose registers as:

 * r15: Program counter (as per the instruction set specification).
 * r14: Link register. The BL instruction, used in a subroutine call, stores the return address in this register.
 * r13: Stack pointer. The Push/Pop instructions in "Thumb" operating mode use this register only.
 * r12: Intra-Procedure-call scratch register.
 * r4 to r11: Local variables.
 * r0 to r3: Argument values passed to a subroutine and results returned from a subroutine.

If the type of value returned is too large to fit in r0 to r3, or whose size cannot be determined statically at compile time, then the caller must allocate space for that value at run time, and pass a pointer to that space in r0.

Subroutines must preserve the contents of r4 to r11 and the stack pointer (perhaps by saving them to the stack in the function prologue, then using them as scratch space, then restoring them from the stack in the function epilogue). In particular, subroutines that call other subroutines must save the return address in the link register r14 to the stack before calling those other subroutines. However, such subroutines do not need to return that value to r14—they merely need to load that value into r15, the program counter, to return.

The ARM calling convention mandates using a full-descending stack. In addition, the stack pointer must always be 4-byte aligned, and must always be 8-byte aligned at a function call with a public interface.

This calling convention causes a "typical" ARM subroutine to:
 * In the prologue, push r4 to r11 to the stack, and push the return address in r14 to the stack (this can be done with a single STM instruction);
 * Copy any passed arguments (in r0 to r3) to the local scratch registers (r4 to r11);
 * Allocate other local variables to the remaining local scratch registers (r4 to r11);
 * Do calculations and call other subroutines as necessary using BL, assuming r0 to r3, r12 and r14 will not be preserved;
 * Put the result in r0;
 * In the epilogue, pull r4 to r11 from the stack, and pull the return address to the program counter r15. This can be done with a single LDM instruction.

ARM (A64)
The 64-bit ARM (AArch64) calling convention allocates the 31 general-purpose registers as:

 * x31 (SP): Stack pointer or a zero register, depending on context.
 * x30 (LR): Procedure link register, used to return from subroutines.
 * x29 (FP): Frame pointer.
 * x19 to x28: Callee-saved.
 * x18 (PR): Platform register. Used for some operating-system-specific special purpose, or an additional caller-saved register.
 * x16 (IP0) and x17 (IP1): Intra-Procedure-call scratch registers.
 * x9 to x15: Local variables, caller saved.
 * x8 (XR): Indirect return value address.
 * x0 to x7: Argument values passed to and results returned from a subroutine.

All registers starting with x have a corresponding 32-bit register prefixed with w. Thus, a 32-bit x0 is called w0.

Similarly, the 32 floating-point registers are allocated as:

 * v0 to v7: Argument values passed to and results returned from a subroutine.
 * v8 to v15: callee-saved, but only the bottom 64 bits need to be preserved.
 * v16 to v31: Local variables, caller saved.

RISC-V ISA
RISC-V has a defined calling convention with two flavors, with or without floating point. It passes arguments in registers whenever possible.

POWER, PowerPC, and Power ISA
The POWER, PowerPC, and Power ISA architectures have a large number of registers so most functions can pass all arguments in registers for single level calls. Additional arguments are passed on the stack, and space for register-based arguments is also always allocated on the stack as a convenience to the called function in case multi-level calls are used (recursive or otherwise) and the registers must be saved. This is also of use in variadic functions, such as printf, where the function's arguments need to be accessed as an array. A single calling convention is used for all procedural languages.

Branch-and-link instructions store the return address in a special link register separate from the general-purpose registers; a routine returns to its caller with a branch instruction that uses the link register as the destination address. Leaf routines do not need to save or restore the link register; non-leaf routines must save the return address before making a call to another routine and restore it before it returns, saving it by using the Move From Special Purpose Register instruction to move the link register to a general-purpose register and, if necessary, then saving it to the stack, and restoring it by, if it was saved to the stack, loading the saved link register value to a general-purpose register, and then using the Move To Special Purpose Register instruction to move the register containing the saved link-register value to the link register.

MIPS
The O32 ABI is the most commonly-used ABI, owing to its status as the original System V ABI for MIPS. It is strictly stack-based, with only four registers $a0-$a3 available to pass arguments. This perceived slowness, along with an antique floating-point model with 16 registers only, has encouraged the proliferation of many other calling conventions. The ABI took shape in 1990 and was never updated since 1994. It is only defined for 32-bit MIPS, but GCC has created a 64-bit variation called O64.

For 64-bit, the N64 ABI (not related to Nintendo 64) by Silicon Graphics is most commonly used. The most important improvement is that eight registers are now available for argument passing; It also increases the number of floating-point registers to 32. There is also an ILP32 version called N32, which uses 32-bit pointers for smaller code, analogous to the x32 ABI. Both run under the 64-bit mode of the CPU.

A few attempts have been made to replace O32 with a 32-bit ABI that resembles N32 more. A 1995 conference came up with MIPS EABI, for which the 32-bit version was quite similar. EABI inspired MIPS Technologies to propose a more radical "NUBI" ABI that additionally reuses argument registers for the return value. MIPS EABI is supported by GCC but not LLVM; neither supports NUBI.

For all of O32 and N32/N64, the return address is stored in a $ra register. This is automatically set with the use of the JAL (jump and link) or JALR (jump and link register) instructions. The stack grows downwards.

SPARC
The SPARC architecture, unlike most RISC architectures, is built on register windows. There are 24 accessible registers in each register window: 8 are the "in" registers (%i0-%i7), 8 are the "local" registers (%l0-%l7), and 8 are the "out" registers (%o0-%o7). The "in" registers are used to pass arguments to the function being called, and any additional arguments need to be pushed onto the stack. However, space is always allocated by the called function to handle a potential register window overflow, local variables, and (on 32-bit SPARC) returning a struct by value. To call a function, one places the arguments for the function to be called in the "out" registers; when the function is called, the "out" registers become the "in" registers and the called function accesses the arguments in its "in" registers. When the called function completes, it places the return value in the first "in" register, which becomes the first "out" register when the called function returns.

The System V ABI, which most modern Unix-like systems follow, passes the first six arguments in "in" registers %i0 through %i5, reserving %i6 for the frame pointer and %i7 for the return address.

IBM System/360 and successors
The IBM System/360 is another architecture without a hardware stack. The examples below illustrate the calling convention used by OS/360 and successors prior to the introduction of 64-bit z/Architecture; other operating systems for System/360 might have different calling conventions.

Calling program:  LA 1,ARGS      Load argument list address L  15,=A(SUB)  Load subroutine address BALR 14,15     Branch to called routine1 ... ARGS DC A(FIRST)    Address of 1st argument DC A(SECOND) ...     DC A(THIRD)+X'80000000' Last argument2 Called program:  SUB EQU *            This is the entry point of the subprogram Standard entry sequence:  USING *,153 STM 14,12,12(13) Save registers4 ST 13,SAVE+4    Save caller's savearea addr LA 12,SAVE      Chain saveareas ST 12,8(13) LR 13,12 ... Standard return sequence:  L  13,SAVE+45 LM 14,12,12(13) L  15,RETVAL6 BR 14          Return to caller SAVE DS 18F         Savearea7

Notes:
 * 1) The BALR instruction stores the address of the next instruction (return address) in the register specified by the first argument—register 14—and branches to the second argument address in register 15.
 * 2) The caller passes the address of a list of argument addresses in register 1. The last address has the high-order bit set to indicate the end of the list. This limits programs using this convention to 31-bit addressing.
 * 3) The address of the called routine is in register 15. Normally this is loaded into another register and register 15 is not used as a base register.
 * 4) The STM instruction saves registers 14, 15, and 0 through 12 in a 72-byte area provided by the caller called a save area pointed to by register 13. The called routine provides its own save area for use by subroutines it calls; the address of this area is normally kept in register 13 throughout the routine. The instructions following STM update forward and backward chains linking this save area to the caller's save area.
 * 5) The return sequence restores the caller's registers.
 * 6) Register 15 is usually used to pass a return value.
 * 7) Declaring a   statically in the called routine makes it non-reentrant and non-recursive; a reentrant program uses a dynamic , acquired either from the operating system and freed upon returning, or in storage passed by the calling program.

In the System/390 ABI and the z/Architecture ABI, used in Linux:

 * Registers 0 and 1 are volatile
 * Registers 2 and 3 are used for parameter passing and return values
 * Registers 4 and 5 are also used for parameter passing
 * Register 6 is used for parameter passing, and must be saved and restored by the callee
 * Registers 7 through 13 are for use by the callee, and must be saved and restored by them
 * Register 14 is used for the return address
 * Register 15 is used as the stack pointer
 * Floating-point registers 0 and 2 are used for parameter passing and return values
 * Floating-point registers 4 and 6 are for use by the callee, and must be saved and restored by them
 * In z/Architecture, floating-point registers 1, 3, 5, and 7 through 15 are for use by the callee
 * Access register 0 is reserved for system use
 * Access registers 1 through 15 are for use by the callee

Additional arguments are passed on the stack.

SuperH
Note: "preserved" reserves to callee saving; same goes for "guaranteed".

68k
The most common calling convention for the Motorola 68000 series is:

 * d0, d1, a0 and a1 are scratch registers
 * All other registers are callee-saved
 * a6 is the frame pointer, which can be disabled by a compiler option
 * Parameters are pushed onto the stack, from right to left
 * Return value is stored in d0

IBM 1130
The IBM 1130 was a small 16-bit word-addressable machine. It had only six registers plus condition indicators, and no stack. The registers are Instruction Address Register (IAR), Accumulator (ACC), Accumulator Extension (EXT), and three index registers X1–X3. The calling program is responsible for saving ACC, EXT, X1, and X2. There are two pseudo-operations for calling subroutines, CALL to code non-relocatable subroutines directly linked with the main program, and LIBF to call relocatable library subroutines through a transfer vector. Both pseudo-ops resolve to a Branch and Store IAR (BSI) machine instruction that stores the address of the next instruction at its effective address (EA) and branches to EA+1.

Arguments follow the BSI—usually these are one-word addresses of arguments—the called routine must know how many arguments to expect so that it can skip over them on return. Alternatively, arguments can be passed in registers. Function routines returned the result in ACC for real arguments, or in a memory location referred to as the Real Number Pseudo-Accumulator (FAC). Arguments and the return address were addressed using an offset to the IAR value stored in the first location of the subroutine.

*                 1130 subroutine example ENT SUB        Declare "SUB" an external entry point SUB DC  0          Reserved word at entry point, conventionally coded "DC *-*" *                  Subroutine code begins here *                  If there were arguments the addresses can be loaded indirectly from the return address LDX I 1 SUB    Load X1 with the address of the first argument (for example) ... *                  Return sequence LD     RES     Load integer result into ACC *                  If no arguments were provided, indirect branch to the stored return address B  I   SUB     If no arguments were provided END SUB

Subroutines in IBM 1130, CDC 6600 and PDP-8 (all three computers were introduced in 1965) store the return address in the first location of a subroutine.

Threaded code
Threaded code places all the responsibility for setting up for and cleaning up after a function call on the called code. The calling code does nothing but list the subroutines to be called. This puts all the function setup and clean-up code in one place—the prologue and epilogue of the function—rather than in the many places that function is called. This makes threaded code the most compact calling convention.

Threaded code passes all arguments on the stack. All return values are returned on the stack. This makes naive implementations slower than calling conventions that keep more values in registers. However, threaded code implementations that cache several of the top stack values in registers—in particular, the return address—are usually faster than subroutine calling conventions that always push and pop the return address to the stack.

PL/I
The default calling convention for programs written in the PL/I language passes all arguments by reference, although other conventions may optionally be specified. The arguments are handled differently for different compilers and platforms, but typically the argument addresses are passed via an argument list in memory. A final, hidden, address may be passed pointing to an area to contain the return value. Because of the wide variety of data types supported by PL/I a data descriptor may also be passed to define, for example, the lengths of character or bit strings, the dimension and bounds of arrays (dope vectors), or the layout and contents of a data structure. Dummy arguments are created for arguments which are constants or which do not agree with the type of argument the called procedure expects.

title: Calling convention


text: Talk:Doowon Technical University College

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/


text:
User talk:Angeleyes328

Hey! My name is Tyne Beasley and I live in Celina TN! I am in the TN Army National Guard and I am a senior at Clay County High School. I graduate this year and then I go to basic at Fort Jackson, SC, and AIT at Fort Lee Virginia. After that I start college at ETSU in Johnson City, TN.

title: User talk:Angeleyes328


text:
Byker Wall

The Byker Wall is a long, unbroken block of 620 maisonettes in the Byker district of Newcastle upon Tyne, England. They were designed by Ralph Erskine and constructed in the 1970s. The wall is just part of the estate, which in total covers 200 acre.

Design and construction
The Wall, along with the low-rise dwellings built to its south, replaced Victorian slum terraced housing. There were nearly 1200 houses on the site at Byker. They had been condemned as unfit for human habitation in 1953, and demolition began in 1966.

The new housing block was designed by Ralph Erskine, assisted by Vernon Gracie. Design began in 1968 and construction took place between 1969 and 1982. The architects opened an office on site to develop communication and trust between the existing residents. Existing buildings were to be demolished as the new accommodation was built.

The new high-rise block was designed to shield the site from an intended motorway, which was never built. Construction materials for Byker Wall were relatively cheap, concrete, brick and timber. Surfaces were treated with bright colours, while brick bandings were used on the 'Wall' to indicate floor levels.

Its Functionalist Romantic styling with textured, complex facades, colourful brick, wood and plastic panels, attention to context, and relatively low-rise construction represented a major break with the Brutalist high-rise architectural orthodoxy of the time.

Following completion, fewer than 20% of the original local residents were housed at Byker Wall.

Refurbishment
Refurbishment of the whole estate was commenced in partnership with Your Homes Newcastle (YHN), the social housing arm of Newcastle City Council. The work was undertaken by Mansell, a division of Balfour Beatty. The work involved careful reinstatement of original features and colour schemes, using modernised materials where possible, while retaining the look and feel of the 1970s design scheme. For example, a new coloured aluminium window frame was designed to allow for improved security and insulation, without compromising the visual impact of the buildings. The most recent phase of this was completed in June 2008. A bid for PFI funding from the Homes and Communities Agency (to the value of £80 million) was sought in June 2009 to fund the project, which was estimated to cost £210 million, but was rejected as it did not meet the criteria; subsequent negotiations with the Department for Communities and Local Government led to the creation of the Byker Community Trust in 2012.

A two-year refurbishment programme with a budget of £26 million began in April 2014. New roofs, doors and windows will be installed and the estate will be repainted in line with the original colour scheme.

In February 2019 local company JDDK were appointed to undertake further upgrades to the estate on a £4 million contract.

The Byker Community Trust (‘BCT’) was incorporated in September 2011 under the Industrial and Provident Society Act 1965 with charitable objectives. BCT is also a ‘registered provider’ of social housing.

In July 2012, a stock transfer from Newcastle City Council was completed and BCT became the owner of 1,800 properties.

Awards and recognition
In 2013, Bolam Coyne won the Royal Institute Chartered Surveyors award for Best North East Regeneration Project of the Year.

In 2003 the Department for Culture, Media and Sport announced a proposal to award the Byker estate, of which the Wall forms a part, a Grade II listed rating as an example of outstanding architecture. In January 2007, the Estate became a grade II* listed building (grade two star).

Its innovative and visionary design has earned it the Civic Trust Awards, the Eternit Award, the Ambrose Congreve Award for Housing (in 1980), and the Veronica Rudge Green Prize for Urban Design from Harvard University. The Wall has also been placed on UNESCO's list of outstanding twentieth century buildings.

In 1988 Byker Wall was featured in an episode of Building Sights presented by writer Beatrix Campbell, who compared the development to a pomegranate.

title: Byker Wall


text:
Talk:Mavis Beacon Teaches Typing

untitled comment
This page needs a refrence on how the typing program has become a cultural icon of children of the 90's. In the same way telivison shows such as the numerious Nicktoons of the 90's have become icons. —Preceding unsigned comment added by 169.139.115.67 (talk) 22:35, 20 September 2007 (UTC)

 * A new documentary, Seeking Mavis Beacon, explores this subject. (COI disclosure: I am a co-author of Mavis Beacon Teaches Typing 1.0, and am interviewed in the film.) Bilofsky (talk) 19:29, 7 May 2024 (UTC)

Certainly worthy of inclusion here, although this article needs to be fleshed out. Mavis Beacon was one of the premier typing instruction programs for years. --Heah 17:29, 25 Apr 2005 (UTC)

The woman who 'plays' Mavis Beacon is not the first MB. Who is she? Who was the first Mavis Beacon, the model/actress, that is? --rand (services@commoffice.com)

My recollection is, that the woman who appeared on the first Mavis Beacon box was just a saleswoman at a department store that Les Crane asked to pose for us. She was not a professional model. We didn't have the money to pay for a pro model in the early days. Capmango 16:48, 12 September 2007 (UTC)

 * The article cited says:

 * "As for the sleek, confidence-oozing African-American woman whose photograph has graced 4 million copies of the software, she's a retired Caribbean-born fashion model named Renee Lesperance, discovered - so the story goes - shopping in a department store.
 * "The model, Duffy said, was discovered in 1985 by Les Crane, the former talk-show host, while he shopped at Saks Fifth Avenue in Beverly Hills.
 * Meeting Lesperance, Duffy said, was "like Lana Turner being discovered at Schwab's (drugstore)."

 * http://community.seattletimes.nwsource.com/archive/?date=19951119&slug=2153259

 * DavidRavenMoon (talk) 03:54, 10 February 2009 (UTC)

I'm curious about when this product was first released.--Brokenchairs 12:49, 19 September 2007 (UTC)
 * Mavis Beacon 1.0 for PC, Apple II, Apple IIGS, Atari ST, Atari 400/800, Amiga and Commodore 64 first hit the store shelves Christmas of 1987. The Macintosh version was released in Spring of '88.  I can't put this in the actual article because I'm a primary source, but there is your answer. Capmango 04:13, 23 September 2007 (UTC)

Thanks :) --Brokenchairs 18:27, 26 September 2007 (UTC)

Dating
The 1993 date mentioned in the article (or at least implied by the article) simply can't be right. Putting aside my own recollection of using Mavis Beacon well before that, most of the computer systems mentioned three sentences later (including Apple II, Atari, Commodore 64) were not produced anymore anywhere near 1993.

The wording in the article—"the program has been published regularly since 1993"—leaves a loophole, that it was published irregularly prior to that for some period. But that's a rather bizarre interpretation.

I think if no one can substantiate an actual date for Mavis Beacon's release, that the entire sentence should be removed.

--TreyHarris 14:31, 30 October 2007 (UTC)

As I mentioned above, Mavis Beacon was initially developed in the summer and fall of 1987 and released Christmas of that year. To the best of my knowledge, it continued to be published regularly. It seems unlikely to me that anybody has been paid money to report this fact, so what you want to put in the article depends on whether you want the article to be a) accurate and informative or b) "verifiable". I was the developer of the original Apple IIGS and Macintosh versions of Mavis Beacon, and I can attest to those dates. I think if any reader wants to know the dates, they will just have to look at the discussion section. Capmango 00:47, 31 October 2007 (UTC) P.S. I will correct the sentence in the article, but leave the Fact tag. Capmango 00:49, 31 October 2007 (UTC)

Found some contemporary references for the Atari ST version. A new product announcement from July 1988: http://www.atarimagazines.com/v7n3/stnewproducts.html And a review from November 1989: http://www.atarimagazines.com/startv4n4/mavisbeacon.html 71.87.54.184 (talk) 04:47, 3 October 2008 (UTC)

Hrm, there's a copyright date of 1987 right there in the title screen of the original DOS version. Is referencing the software itself original research? :) http://www.mobygames.com/game/dos/mavis-beacon-teaches-typing/screenshots/gameShotId,226718/ 71.87.54.184 (talk) 21:31, 5 November 2008 (UTC)

SHOCKED!
I for one am shocked, SHOCKED! that Mavis Beacon is not a real person 198.6.46.11 (talk) 17:22, 28 November 2007 (UTC)

Move
There is another article called Mavis BeaconThat should either be redirected to this article, or merged with it. --水の男の子 (talk) 14:58, 17 May 2010 (UTC)
 * I'm pulling the merge template down for three reasons: A) it was proposed in the wrong direction, to merge this article into Mavis Beacon 2) there's been no discussion to support the proposal for the ~2 years it's been up and d) the Mavis Beacon article is suitably well-cited in its own right and there's no apparent reason to merge/delete it. Rob T Firefly (talk) 02:33, 3 April 2013 (UTC)

Secretary-General?
It's stated that "the original photo of Mavis Beacon was of Caribbean-born Secretary-General of the Caribbean Community Renee L'Esperance", yet if you go to the link for Secretary-General of the Caribbean Community, the list there, which dates from 1973 to present, does not include her name. 69.253.39.117 (talk) 09:51, 21 August 2011 (UTC)

Minigame redirects listed at Redirects for discussion
An editor has asked for a discussion to address redirects from Mavis Beacon minigames. Please participate in the redirect discussion if you wish to do so. --BDD (talk) 19:30, 28 August 2019 (UTC)

Edit request - Remove bogus author
I am Walt Bilofsky, one of the three authors of the original 1.0 version of Mavis Beacon Teaches Typing.

I request the deletion of the second sentence in History, referencing a purported author Charles Haymond.

Les Crane created the name Mavis Beacon Teaches Typing in 1987. Norm Worthington, Mike Duffy and I wrote the 1.0 version that year. The supporting reference for my authorship is an article in the New York Times. The article also names Les Crane, the producer, and Joe Abrams, marketing and sales.

Neither Mike nor I have ever heard of Charles Haymond and he was not an author of this program. He was first edited into the page on 2 Sept. 2009 by an unidentified author, with no supporting reference. He was added back on 31 Oct. 2019, again by an unidentified author, supported only by a circular reference to a website that repeats verbatim an earlier version of this Wikipedia article.

Bilofsky (talk) 22:15, 30 January 2022 (UTC)

 * Done: Thank you for your request! casualdejekyll  02:42, 2 February 2022 (UTC)

Release timeline
Was thinking about adding a release timeline for Mavis Beacon, but information seems pretty scattered. If there are better sources out there, I couldn't find them, but based on what I could find, here's the best I could create:

https://www.grouvee.com/games/?sort_by=date&dir=asc&franchise=2378&dateFrom=&dateTo=

https://store.steampowered.com/search/?sort_by=Released_DESC&term=mavis+beacon&supportedlang=english

https://www.abebooks.com/servlet/BookDetailsPL?bi=31350083138&searchurl=an%3Dmavis%2Bbeacon%26sortby%3D17&cm_sp=snippet-_-srp1-_-title1

https://www.amazon.com/Marvis-Beacon-Teaches-Typing-Verson/dp/B003KFG0CE

https://archive.org/search?query=subject%3A%22Mavis+Beacon%22&sort=-date&and%5B%5D=subject%3A%22Mavis+Beacon%22

https://www.matthewdean.com/mavis-beacon

Electricmastro (talk) 20:27, 22 March 2023 (UTC)

 * I worked on Mavis 3 for DOS/Windows and can confirm it was released in 1994. Myrddin111 (talk) 23:09, 22 March 2023 (UTC)

 * Thanks! Would you be able to corroborate on the other release years?Electricmastro (talk) 21:35, 11 April 2023 (UTC)

The "Science" Behind It?
I'm deep into the program now, averaging around 60 wpm, and this is the 3rd or 4th period of my life where I have spent significant time doing the exercises, etc... of this software. So, from that perspective, as a User of the software, I'd like to know something about the "science" behind it. I misspell certain words frequently, and I'd like to know things like whether or not Mavis stores those frequently f-ed up words in a file somewhere. Or whatever. Anything really. What's going on behind the scenes? What's under the hood? Who made the decisions to do this or that? Why does the chameleon and ant game aggravate me so much? How come I keep drilling the same passages over & over again? Is that a good thing, or a bad thing. It says you can "import" your own customized tests. Does Mavis have downloadable tests somewhere on the naked internet? Are there forums for wingnuts like myself to collaborate and gossip about important trivia like where is Mavis from, what's her "orientation", is she married.

Is there a Mavis Beacon Fan Club? Mavis Beacon PORN? What about that song in my head with that GREAT, hard-hitting upright bass? What is it, and who wrote it? Why no tick-tock metronome? I have a zillion questions.

I gotta know these things. 2603:8081:3A00:30DF:BDE5:F114:F0BA:1988 (talk) 20:34, 8 April 2024 (UTC)

Correction suggestion
COI disclosure: I am Walt Bilofsky, co-author of Mavis Beacon Teaches Typing 1.0.

The phrase "Founded by Norm Worthington, Walt Bilofsky, and Mike Duffy," and the subsequent reference to Norm as a co-founder, are incorrect.

Norm, Mike and I were co-authors of the first version of Mavis. However, the founder(s) of The Software Toolworks, depending on context, were either myself in 1980, or Les Crane, Joe Abrams and myself when Toolworks merged with Les's Software Country in 1986. See The Software Toolworks. Bilofsky (talk) 19:51, 7 May 2024 (UTC)

 * I've removed Worthington and Duffy from the opening sentence and added Crane and Abrams names as per the source already used at the end of the paragraph. I searched but was unable to find a reliable source for Worthington and Duffy's involvement with the program as the articles I found that mentioned them didn't discuss their specific roles. I've moved the reference to make it clear what information it covers and added a citation needed tag to the end of the paragraph as another editor may be able to find a reference for the information. If you know of a source which we could use let me know and I can add it. For sources which are considered reliable please see WP:RELIABLE. Suonii180 (talk) 22:30, 7 May 2024 (UTC)
 * @Suonii180: Thanks. To clarify - Mike Duffy wasn't a founder of Toolworks.
 * The facts for this article are: Norm Worthington, Mike Duffy and myself wrote the first version of Mavis. Les Crane didn't "play a role" in creating the persona; he created the persona.
 * If I were able to edit this I would remove any reference to founders, both because of the ambiguity of who was a founder (I was the founder of Toolworks; Les, Joe and I were the founders of "the company" post-merger) and its irrelevance to this article.
 * Rambling on - apart from the question of authors and founders, a key moment in the program's history was Peter Lewis' review in the New York Times, which contributed significantly to its early success. Although the Mavis personality is culturally significant, it often overshadows the teaching software, quite advanced for 1987, whose responsiveness and interactions with the user did more to create the feeling of personality than Mavis herself, who was not an element of the first version beyond the packaging and splash screen. Later versions incorporated Mavis in the software.
 * Bierdsdorfer's article quotes Joe Abrams at length about the Lewis Review's significance for the initial reception of the product. Both are referenced in this article.
 * Bilofsky (talk) 06:15, 8 May 2024 (UTC)

title: Talk:Mavis Beacon Teaches Typing


text: Category:Sha Tin District

title: Category:Sha Tin District


text:
Mouila

Mouila is the capital of the Ngounié region of Gabon. It lies on the Ngounié River and the N1 road and has a population of about 20,000 people. Its main sight is Lac Bleu, a lake known for its bright blue water.

Mouila is very spread out and has several markets and commercial centers. A taxi service runs in Mouila. Taxis are green and white and cost 200–500 Central African CFA francs depending on the distance traveled.

Mouila is home to a huge range of Gabonese ethnic groups and is a major hub of commerce and travel. It is served by Mouila Airport. From Mouila, bush taxis may be obtained traveling to Ndende, Tchibanga, Lambaréné, Libreville and Lebamba.

Climate
Mouila has a tropical savanna climate (Köppen climate classification Aw).

Notable people

 * François Bozizé a former president of the Central African Republic, is from Mouila.
 * Joseph Owondault Berre, Vice President of Gabon
 * Pierre Mamboundou, politician
 * André Raponda Walker, the anthropologist and priest worked near here at a place called Sainte-Martin.

title: Mouila


text: Category:Ngau Tau Kok

title: Category:Ngau Tau Kok


text:
Oyem

Oyem is the capital of Woleu-Ntem province in northern Gabon, lying on the N2 road and the River Ntem.

Geography
The town lies on a plateau at an elevation of about 3000 ft. It is the administrative and transport center for the surrounding agricultural area. Oyem is located 411 kilometers away from the national capital, Libreville.

History
Oyem is named after a large tree that grows around the town. In the 1990s, there were several female Peace Corps officers raped and murdered in Gabon, stirring controversy over the safety of its locations.

The town was sieged by rabid dogs in March 2004, who killed three of five residents infected. The town council was forced to shoot 50 strays.

In October 2004, Oyem was affected by water and power cuts. In December of that year, it was severely affected by a rare typhoid fever outbreak which spread across northern Gabon. About 50 cases were reported in Oyem.

A small Jewish community composed of former Christians has developed in Oyem. The community practices Jewish customs, but does not yet have a synagogue.

Economy
Cocoa and coffee are the most important cash crops in Oyem and are trucked to the Cameroon ports of Kribi and Douala for export. Rubber and potatoes are also farmed. The town has an airport, Oyem Airport.

Facilities
Within the town is a hospital, two churches, an agricultural school, a government secondary school, and a customs station.

Twin towns – sister cities
Oyem is twinned with:

 * 🇫🇷 Clermont-Ferrand, France

Notable people

 * Daniel Ona Ondo - Gabonese prime minister
 * Guélor Kanga - Gabonese football player

title: Oyem


text: User talk:66.154.186.24

title: User talk:66.154.186.24


text:
Talk:Calling convention

AMD64 / x86_64
This article lists some uncommon architecture but the probably second most used architecture (after ARM when counting phones) is missing.

46.5.255.82 (talk) 22:41, 11 March 2022 (UTC)
 * I added a section that mostly relies on x86 calling conventions (just as the section on 32-bit x86 relies on x86 calling conventions). Guy Harris (talk) 06:58, 20 December 2022 (UTC)

"Volatile" registers

 * Unless I'm missing something, it appears that there are multiple terms for the same types of registers. Microsoft's "Overview of x64 ABI conventions" page says that

"Volatile registers are scratch registers presumed by the caller to be destroyed across a call. Nonvolatile registers are required to retain their values across a function call and must be saved by the callee if used."

and the "Caller/callee saved registers" section of Microsoft's "x64 calling convention" page also uses the terms "volatile" and "non-volatile".

So it appears that "volatile" and "caller-save" mean the same thing, and "non-volatile" and "callee-save" mean the same thing, if "caller-save" means "if the caller needs the value in this register after a procedure call returns, it must save it before the procedure call and restore it after the call", not "the caller must save and restore this register across procedure calls even if the value in that register is dead at the point where the procedure call is made".

The terms I was used to are "caller-save" and "callee-save"; perhaps "volatile" and "non-volatile" were picked because they avoid the problem of "so does 'caller-save' mean I have to save and restore it even if I don't need it?", but they don't avoid the problem of "'volatile' is used with multiple other meanings, so which of them is intended here?" then

Note that, if "volatile" means "not preserved by a call", then

 * If there is more than one calling sequence for a given architecture, they may differ in:
 * Conventions on which registers may be directly used by the callee, without being preserved
 * Which registers are considered to be volatile and, if volatile, need not be restored by the callee

is a bit redundant. It's also not clear why it says "and, if volatile, need not be restored by the callee" - at least as I see it, "not preserved by a call" implies "not required to be saved by or restored by the callee if it modifies the register", so I'd expect that all volatile registers need not be restored by the callee. Guy Harris (talk) 06:52, 4 January 2023 (UTC)

 * Thank you for this clear explanation of this use of the term volatile.   It would seem that volatile in this context is also mentioned in RISC-V calling convention, although only once.  Preserve likewise gets a single mention.  RISC-V prefers the word save.  But de gustibus - we should make it obvious that the different terminology resolves on to clear concepts.
 * As you identify, the section If there is more than one calling sequence ... without being prserved ... if volatile does indeed seem pleonastic, since volatile == not preserved. But IMHO that section in its entirety is concerning, since several other differentiators listed above do appear in calling conventions within the same architecture.  There is already a paragraph The calling convention of a given program's language may differ from the calling convention of the underlying platform, OS, or of some library being linked to... which perhaps covers this concept of different calling conventions within the same architecure.  Many of the differentiators can appear within the same OS: far pascal is differs from cdecl in many ways.
 * So perhaps an appropriate way forward is have additional bullets in the existing list, along the lines of: :* Which registers get saved buy the caller, and which saved by the callee.
 * which registers are not preserved, and therefore considered volatile and available for free use by the callee
 * and remove the paragraph . What do you reckon?  Chumpih  t 21:30, 4 January 2023 (UTC)
 * I see the types of registers being:
 * registers that the callee must ensure that, when it returns, the register has the value that it had when the callee received control;
 * all other registers, which the caller cannot assume will have the same value when the callee returns that it had when the callee received control.
 * The callee does not need to save or restore the values of registers of the second type. It must save and restore the values of registers of the first type if and only if it modifies them, so that's "callee-save", but not "callee must save".
 * The caller does not need to save or restore the value of registers of the first type across a call. It must save and restore the value of registers of the second type if and only if it needs the original value of that register after the callee returns and it's not stored anywhere else, so that's "caller-save", but not "caller must save".
 * So the types are:
 * "callee-must-save-if-it-modifies-it", which is what "callee-save" presumably is intended to mean;
 * "caller-must-save-if-it-cares", which is what "caller-save" presumably is intended to mean;
 * with the second type being "volatile".
 * I.e., caller-save register is volatile and a callee-save register isn't, so only one bullet point:
 * which registers are guaranteed to have the same value when the callee returns as they did when the callee was called;
 * is necessary.
 * And, yes, that bullet point should be in the "Calling conventions may differ in" list, and the "If there is more than one calling sequence for a given architecture, they may differ in" item, and its list, whould be removed. Guy Harris (talk) 10:43, 5 January 2023 (UTC)
 * Sounds good. Less is more, etc.  Changes made.   Chumpih  t 18:45, 5 January 2023 (UTC)

Server / Routing level calling conventions
I got to this page from WSGI, which describes itself as well as CGI, FastCGI, etc. etc as calling conventions.

these seem somewhat distinct from the lower/compiler level calling conventions described in this page, as they they're somewhat higher level, mapping routes to functions rather than dealing with registers and the actual stack. However, they still deal with how to pass input to functions, what output should be expected and parsed.

I don't actually know enough about the subject to say for sure, but perhaps a section could be added in this article, or a separate article made on these kinds of calling conventions? 31.193.185.15 (talk) 14:24, 6 April 2023 (UTC)

 * Unsure if it's appropriate to call the mechanism for remote invocation a 'calling convention'. Microsoft referred to the address-binding-contract in WCF, and there's the notion of marshalling for data in other phraseologies.  There's a bunch of stuff over at Remote procedure call, with dozens of related terms for different languages and frameworks, but 'calling convention' is conspicuous by its absence.  Chumpih  t 18:03, 6 April 2023 (UTC)

Languages
Originally this article was only about various architectures. With the edit of 15:00, 23 April 2018 (UTC), an IP user created a section on Threaded code. Later a section was added on PL/I and these two were made subsections of "Calling conventions outside machine architectures". Now it is time to do it right. "Calling conventions outside machine architectures" should be renamed "Languages", which pairs with "Architectures". Languages should start with Fortran and should include at least Pascal and C. Fortran is important because it was first and influenced everything else. Pascal is important because it emphasizes the distinction between pass by value and pass by reference and makes both available. C is important because so much is written in C and its variants, and for other reasons. Perhaps ALGOL, COBOL, Forth, Lisp and APL also need sections, but having PL/I as the only actual programming language is wrong. —Anomalocaris (talk) 07:49, 27 June 2023 (UTC)
 * The opening paragraph says
 * "In computer science, a calling convention is an implementation-level (low-level) scheme for how subroutines or functions receive parameters from their caller and how they return a result."
 * "Are arguments passed by name, by value, or by reference?" is, to some degree, a matter of the language specification rather than of a low-level scheme. In C, all arguments are passed by value (pass-by-reference is done by passing a pointer to a data element), so that's not a low-level question implementation question.
 * So either "call by name, by value, or by reference" belongs here, or the lede shouldn't claim that a calling convention is just an implementation-level scheme. What do various reliable sources say about what a calling convention is? Guy Harris (talk) 19:29, 27 June 2023 (UTC)
 * Renaming to some Languages section seems sensible. I suspect the choice of languages should be at least partially driven by what is currently popular.  (There are several programming language popularity resources that can help, although they clearly don't use consistent methodologies and therefore only partially agree.)  Your suggestion of choice by legacy definitely has merit.  It may also make sense to group languages, or have one language refer to another: C and C++ have many similarities, as do Java and C#.
 * For some compile-to-native languages, the calling convention will often follow those of the target platform, unless overridden. For compile-to-vm, there will be more consistency, but calls to native will be interesting.
 * So I reckon partial support, and let each language's section stand or fall by the quality, significance and relevance of the content therein. It's OK if we're not comprehensive here. Chumpih  t 05:37, 28 June 2023 (UTC)
 * The source you added indicates says that
 * "A calling convention governs how functions on a particular architecture and operating system interact. This includes rules about includes how function arguments are placed, where return values go, what registers functions may use, how they may allocate local variables, and so forth. Calling conventions ensure that functions compiled by different compilers can interoperate, and they ensure that operating systems can run code from different programming languages and compilers. Some aspects of a calling convention are derived from the instruction set itself, but some are conventional, meaning decided upon by people (for instance, at a convention).Calling conventions constrain both callers and callees. A caller is a function that calls another function; a callee is a function that was called. The currently-executing function is a callee, but not a caller."
 * although it links "calling convention" to... this article, so that runs the risk of this turning into a case of citogenesis. A reference that doesn't point to Wikipedia (and maybe even predates Wikipedia) would be preferable, to make it less likely that they're saying "it's about low-level details" because the Wikipedia article about calling conventions says it's about low-level details.
 * But if we do find such references, that means that issues such as call by name vs. call by value vs. call by reference (whether a "reference" to an array is a pointer or a dope vector containing array bounds) vs. ... aren't part of a calling convention (they're part of the language specification). A platform's calling sequence may specify how those forms of argument passing are implemented on the architecture in question, but they don't dictate which form should be used - the language specification dictates that.
 * The evaluation strategy page discusses various forms of call-by-XXX (although its lede points to this page, which perhaps it shouldn't). Guy Harris (talk) 07:18, 28 June 2023 (UTC)
 * Take your point re. the risk of citogenesis - perhaps it's permissible here given that the source page is from a reliable academic institute. The Evaluation strategy page is really good stuff, but it's debateable if 'calling convention' applies as richly to those languages that would permit parameter passing by name, with lazy evaluation.  Sure, if we view this as part of computer science, through the lens SICP etc, then the imperative languages are part of a larger mathematical endeavour that yields computation, and a calling convention should fit within that taxonomy.  But then again, there's the more practical, engineering aspect with 'convention' and choice of registers or stack, etc.  and this is independent of the taxonomy.  This  page should (and currently does) make reference to evaluation strategy and identifies it as a related though different concept, which seems about right.  It's reasonable likewise for evaluation strategy to link to here, although the current 6-word sentence at the end of the lede there isn't super helpful IMHO, and it's rightly tagged for further clarification.    I'm still OK with 's suggestion of renaming the outside architectures section to Languages, and for those languages that support lazy evaluation, etc, references to evaluation strategy would be very appropriate.  Chumpih  t 08:10, 30 June 2023 (UTC)

title: Talk:Calling convention


text:
Rafael Sánchez Ferlosio

Rafael Sánchez Ferlosio (4 December 1927 – 1 April 2019) was a Spanish writer. In 2004 he was awarded the Premio Cervantes for his literary oeuvre.

He was married to fellow writer Carmen Martín Gaite.

Writing
Sánchez Ferlosio was born in Rome, Italy. His father, Rafael Sánchez Mazas, a minor writer, was a founder and leader of Falange. Sánchez Ferlosio won the Nadal Award for his novel El Jarama, a realistic depiction of a weekend party. He contributed to the awakening of Spanish literature after the end of the Civil War, working alongside young writers such as Juan Goytisolo and Ana María Matute.

After the success of his first book, he renounced writing for twenty years. He never gave the reason for his silence, but many critics assumed it was a form of silent opposition to the Francoist State.

He came back to writing with essays on cultural issues. He returned to fiction in 1986 with El testimonio de Yarfoz, which is set in an imaginary land.

He died in Madrid, aged 91.

Works

 * Industrias y andanzas de Alfanhuí (1951)
 * El Jarama (1955)
 * Las semanas del jardín (1974)
 * Mientras no cambien los dioses, nada ha cambiado (1986)
 * El testimonio de Yarfoz (1986)
 * Vendrán más años malos y nos harán más ciegos (1992)
 * Non Olet (2002)
 * El Geco (2005)
 * Sobre la guerra (2007)
 * God & Gun. Apuntes de polemología (2008)
 * Guapo y sus isótopos (2009)
 * Campo de retamas (2015)

title: Rafael Sánchez Ferlosio


text:
Norman Evans

Norman Evans (11 June 1901 – 25 November 1962) was an English stage and radio comedian, best remembered for his sketches and programmes entitled "Over the Garden Wall".

Biography
He was born in Rochdale, Lancashire, and started his working life as a commercial traveller, while also taking part in amateur dramatic groups. He gained a local reputation for his after-dinner speeches, and decided to become an entertainer, initially appearing at local functions and concert parties. In 1934 he was reportedly discovered by fellow Rochdale entertainer Gracie Fields, though in fact he had already been seen by impresario Oswald Stoll. He had his first London appearance alongside a young Betty Driver, and gained a place on national variety tours, where he was an immediate success. According to writer Michael Kilgarriff, his "broad boisterous comedy and warmth of personality swiftly elevated him to lasting stardom."

The act for which he is best remembered was "Over the Garden Wall", in which he played Fanny Fairbottom, a toothless hatchet-faced Lancastrian housewife gossiping over a garden wall. The caricature was reportedly based on his mother. The one-sided conversations would embrace local gossip, including scandal about the neighbours and personal medical complaints, including silently mouthing words deemed too rude to be spoken out loud, and accompanied with a range of facial contortions and glances round for supposed eavesdroppers.

The routine provided the basis for a BBC radio series, Over the Garden Wall (at first called Meet Our Joe), broadcast in three series, in 1942, 1948, and 1949/50, in which Betty Jumel played the part of his neighbour, and for several films including one of the same title in which Jimmy James played the part of Evans' husband. It was also the inspiration for Les Dawson and Roy Barraclough's later Cissie and Ada characters. Another famous stage sketch was "The Dentist" in which Evans played both patient and dentist, and in which he employed a large screen through which only silhouettes could be seen.

Evans became a very popular pantomime dame, considered to be "the greatest... since Dan Leno", and was the only one in that role to receive top billing at the London Palladium. He also toured with a stage show, "Good Evans", and made the first of a successful series of U.S. appearances in New York in 1949, followed by a season at the El Capitan Theatre in Hollywood the following year and an appearance on the Ed Sullivan Show. He made three appearances in Royal Variety Performances, in 1937, 1947, and 1951.

In May 1955, he lost his right eye in a serious car accident while driving near Preston. The accident was caused after he swerved trying to avoid a black cat. Despite the accident, he had his first television series, Saturday Comedy Hour, in 1956. His final summer season was at Butlin's Holiday Camp, Pwllheli in 1962. He wrote to Clarkson Rose, another top pantomime dame: "Working in a Butlin theatre is a terrific experience, and although I've not been too well, I've never been happier in my life".

Norman Evans died in November 1962, in Blackpool, and is buried in Carleton Cemetery. The headstone of his grave is a low wall built from natural gritstone blocks. His epitaph (preceding birth and death dates) reads "His last garden wall".

Filmography

 * Demobbed (1944)
 * Under New Management (1946)
 * The Calendar (1948)
 * Over the Garden Wall (1950)

title: Norman Evans


text:
User:Nolose

Hello, I live in the center of the world , Benajarafe.

title: User:Nolose


text:
Franceville

Franceville is one of the four largest cities in Gabon, with a population of 110,568 at the 2013 census. It lies on the Mpassa River and at the end of the Trans-Gabon Railway and the N3 road. It grew from a village named Masuku.

Overview
Pierre Savorgnan de Brazza chose the village of Masuku to resettle former slaves and renamed it Francheville (meaning "city of the freed") in 1880. This name later was modified to Franceville, after the country’s former ruler (meaning "city of France").

Features of the town include St Hilaire's Church (built in 1899), a large statue of President Omar Bongo (who was born in Franceville), a primate medical research institute, and a golf course. Its airport is 20 km west, in Mvengué. Bongo was buried in Franceville on June 18, 2009.

There is a market where numerous items can be purchased, including clothing, fruit and vegetables, electronics, meats, and the market also sells bushmeat, which includes Central African rock python, monkey and local species of animals.

There are a few hotels, of which the best known is the Hôtel Poubara, overlooking the president's holiday home.

Franceville also has many waterfalls. One of the best known is the Poubara Falls, which is co-located with a hydroelectric plant that provides the area with constant electricity.

Population
The population was 31,183 in 1993. The 2010 population was approximated at 56,000. Another population number is 42,967, possibly retrieved following the disputed census of 2003 (alternately a 2004 estimate ). Another recent estimate gives the population as 75,000.

Climate
Franceville has a tropical savanna climate (Köppen climate classification Aw). There are a lot of thunderstorms in the city.

Education
Franceville is home to the University of Science and Technology of Masuku (USTM), Gabon's hard sciences university, with the other subjects being taught in Libreville. It welcomes students from all African countries. It is home to the Canadian-sponsored Polytechnic and Faculty of Science and the National Higher Institute of Agronomy and Biotechnology, which trains agricultural engineers. The city is also home to a doctoral school in the 2nd arrondissement. Schools include École publique conventionnée de Franceville.

Twin towns – sister cities
Franceville is twinned with:
 * 🇫🇷 Vire, France (since 1983)

title: Franceville


text:
Trans-Gabon Railway

The Trans-Gabon Railway (Transgabonais) is the only railway in Gabon. It runs 670 km east from Owendo port station in Libreville to Franceville via numerous stations, the main ones being Ndjolé, Lopé, Booué, Lastoursville and Moanda.

History
A railway was first planned in 1885. Investigations into the line were conducted in 1968, funding was agreed in 1973, and construction began the following year. The first section, from Owendo to Ndjolé, opened in 1978, with the remaining sections opening in stages until December 1986. Costs were well over budget and almost bankrupted the country.

The Trans-Gabon Railway is overall adjacent the Ogooue River until Ndjolé. The most important constructions are the Juckville Tunnel, the viaduct over the Abanga swamp, and the bridge over the confluence between the Ogooue and the Ivindo Rivers.

The line to Franceville was completed in 1987.

Originally intended to reach Makokou and carry iron ore, its route was changed for political reasons, namely to keep within national borders manganese ore traffic from COMILOG that went on the COMILOG Cableway via the Republic of Congo. When the railway reached the manganese mine at Moanda, the Cableway was closed.

The railway was privatised in 1999. Plans regularly surface proposing an extension to Brazzaville in the Republic of the Congo.

Construction and specifications
Because the line was built well into the era of earthmoving machinery, the need to choose a narrow gauge to save costs was no longer important. As well, the choice of standard gauge took advantage of off-the-shelf equipment. It was constructed by a consortium of Impregilo, Astaldi, Philipp Holzmann, Constructions et entreprises industrielles and Entreprise de construction franco-africaine.

The discovery of uranium helped to secure British interest in the project, and led to the injection of funds by the Conservative government under prime minister Margaret Thatcher. Many UK expatriates took the place of French workers and the building of the railway progressed rapidly from that point. About May 1983, CCI Eurotrag (a consortium of British, Italian and German interests) took over funding. British firms involved included Wimpey International, who seconded staff to Taylor Woodrow.

The building of the initial 182 kilometres of the line from Owendo to Ndjole took over 10 years to complete. The remaining 400-plus kilometres took only five years.

Recent history
In 2003 Hughes Network Systems (see Hughes Communications) installed a satellite-based telephony system into all the railway stations of the railway.

In June 2006 a new line for iron ore from Belinga to port was announced. It is unclear if it will use part of the existing line. The track will be standard gauge. This line was supposed to open in 2012, but in 2014 completion is still awaited.

Two EMD JT42CWR locomotives shipped September 2011. A further 4 locomotives and 10 passenger coaches were also ordered.

On 18 May 2019 three workers were killed in an accident on the line.

In February 2023 Fortescue Metals Group inked in an agreement to develop iron ore at Belinga with a road and railway haulage to an existing port.

Network
There are no links with the adjacent states of Equatorial Guinea, Cameroon, or the Republic of the Congo. The railway is important for transporting timber and uranium in addition to being the only important public transport route in the nation. In 1996, the railway carried freight and 190,000 passengers. The Trans-Gabon Railway, 669 km has 23 stations.

Trivia

 * The Trans-Gabon Railway crosses the Ogooué River five times, at Franceville, at Ndjolé, and three times around Booué, also at Lastoursville, where one girder bridge crosses the river to the east of Lastoursville. The Italians were responsible for the actual bridge building from Lastoursville heading East toward the Congo.

Literature

 * Minko Monique. 1983. Les communications Terrestres. in Geographie et Cartographie du Gabon, Atlas Illustré led by The Ministère de l'Education Nationale de la Republique Gabonaise. Pg 86-87. Paris, France: Edicef

title: Trans-Gabon Railway


text:
Acetone

Acetone (2-propanone or dimethyl ketone) is an organic compound with the formula (CH3)2CO. It is the simplest and smallest ketone (>C\dO). It is a colorless, highly volatile, and flammable liquid with a characteristic pungent odour, very reminiscent of the smell of pear drops.

Acetone is miscible with water and serves as an important organic solvent in industry, home, and laboratory. About 6.7 million tonnes were produced worldwide in 2010, mainly for use as a solvent and for production of methyl methacrylate and bisphenol A, which are precursors to widely used plastics. It is a common building block in organic chemistry. It serves as a solvent in household products such as nail polish remover and paint thinner. It has volatile organic compound (VOC)-exempt status in the United States.

Acetone is produced and disposed of in the human body through normal metabolic processes. It is normally present in blood and urine. People with diabetic ketoacidosis produce it in larger amounts. Ketogenic diets that increase ketone bodies (acetone, β-hydroxybutyric acid and acetoacetic acid) in the blood are used to counter epileptic attacks in children who suffer from refractory epilepsy.

Name
From the 17th century, and before modern developments in organic chemistry nomenclature, acetone was given many different names. They included "spirit of Saturn", which was given when it was thought to be a compound of lead and, later, "pyro-acetic spirit" and "pyro-acetic ester".

Prior to the name "acetone" being coined by the French chemist Antoine Bussy, it was named "mesit" (from the Greek μεσίτης, meaning mediator) by Carl Reichenbach, who also claimed that methyl alcohol consisted of mesit and ethyl alcohol. Names derived from mesit include mesitylene and mesityl oxide which were first synthesised from acetone.

Unlike many compounds with the acet- prefix which have a 2-carbon chain, acetone has a 3-carbon chain. That has caused confusion because there cannot be a ketone with 2 carbons. The prefix refers to acetone's relation to vinegar (acetum in Latin, also the source of the words "acid" and "acetic"), rather than its chemical structure.

History
Acetone was first produced by Andreas Libavius in 1606 by distillation of lead(II) acetate.

In 1832, French chemist Jean-Baptiste Dumas and German chemist Justus von Liebig determined the empirical formula for acetone. In 1833, French chemists Antoine Bussy and Michel Chevreul decided to name acetone by adding the suffix -one to the stem of the corresponding acid (viz, acetic acid) just as a similarly prepared product of what was then confused with margaric acid was named margarone. By 1852, English chemist Alexander William Williamson realized that acetone was methyl acetyl; the following year, the French chemist Charles Frédéric Gerhardt concurred. In 1865, the German chemist August Kekulé published the modern structural formula for acetone. Johann Josef Loschmidt had presented the structure of acetone in 1861, but his privately published booklet received little attention. During World War I, Chaim Weizmann developed the process for industrial production of acetone (Weizmann Process).

Production
In 2010, the worldwide production capacity for acetone was estimated at 6.7 million tonnes per year. With 1.56 million tonnes per year, the United States had the highest production capacity, followed by Taiwan and mainland China. The largest producer of acetone is INEOS Phenol, owning 17% of the world's capacity, with also significant capacity (7–8%) by Mitsui, Sunoco and Shell in 2010. INEOS Phenol also owns the world's largest production site (420,000 tonnes/annum) in Beveren (Belgium). Spot price of acetone in summer 2011 was 1100–1250 USD/tonne in the United States.

Current method
Acetone is produced directly or indirectly from propene. Approximately 83% of acetone is produced via the cumene process; as a result, acetone production is tied to phenol production. In the cumene process, benzene is alkylated with propylene to produce cumene, which is oxidized by air to produce phenol and acetone:
 * Cumene-process-overview-2D-skeletal.png

Other processes involve the direct oxidation of propylene (Wacker-Hoechst process), or the hydration of propylene to give 2-propanol, which is oxidized (dehydrogenated) to acetone.

Older methods
Previously, acetone was produced by the dry distillation of acetates, for example calcium acetate in ketonic decarboxylation.

After that time, during World War I, acetone was produced using acetone-butanol-ethanol fermentation with Clostridium acetobutylicum bacteria, which was developed by Chaim Weizmann (later the first president of Israel) in order to help the British war effort, in the preparation of Cordite. This acetone-butanol-ethanol fermentation was eventually abandoned when newer methods with better yields were found.

Chemical properties
The flame temperature of pure acetone is 1980 °C.

Like most ketones, acetone exhibits the keto–enol tautomerism in which the nominal keto structure (CH3)2C\dO of acetone itself is in equilibrium with the enol isomer (CH3)C(OH)\d(CH2) (prop-1-en-2-ol). In acetone vapor at ambient temperature, only 2.4% of the molecules are in the enol form.
 * Acetone KetoEnol.svg

In the presence of suitable catalysts, two acetone molecules also combine to form the compound diacetone alcohol (CH3)C\dO(CH2)C(OH)(CH3)2, which on dehydration gives mesityl oxide (CH3)C\dO(CH)\dC(CH3)2. This product can further combine with another acetone molecule, with loss of another molecule of water, yielding phorone and other compounds.

Acetone is a weak Lewis base that forms adducts with soft acids like I2 and hard acids like phenol. Acetone also forms complexes with divalent metals.

Polymerisation
One might expect acetone to also form polymers and (possibly cyclic) oligomers of two types. In one type, units could be acetone molecules linked by ether bridges \sO\s derived from opening of the double bond, to give a polyketal-like (PKA) chain [\sO\sC(CH3)2\s]_{n}. The other type could be obtained through repeated aldol condensation, with one molecule of water removed at each step, yielding a poly(methylacetylene) (PMA) chain [\sCH\dC(CH3)\s]_{n}.

The conversion of acetone to a polyketal (PKA) would be analogous to the formation of paraformaldehyde from formaldehyde, and of trithioacetone from thioacetone. In 1960, Soviet chemists observed that the thermodynamics of this process is unfavourable for liquid acetone, so that it (unlike thioacetone and formol) is not expected to polymerise spontaneously, even with catalysts. However, they observed that the thermodynamics became favourable for crystalline solid acetone at the melting point (−96 °C). They claimed to have obtained such a polymer (a white elastic solid, soluble in acetone, stable for several hours at room temperature) by depositing vapor of acetone, with some magnesium as a catalyst, onto a very cold surface. In 1962, Wasaburo Kawai reported the synthesis of a similar product, from liquid acetone cooled to −70 to −78 °C, using n-butyllithium or triethylaluminium as catalysts. He claimed that the infrared absorption spectrum showed the presence of \sO\s linkages but no C\dO groups. However, conflicting results were obtained later by other investigators.

The PMA type polymers of acetone would be equivalent to the product of polymerisation of propyne, except for a keto end group.

Natural occurrence
Humans exhale several milligrams of acetone per day. It arises from decarboxylation of acetoacetate. Small amounts of acetone are produced in the body by the decarboxylation of ketone bodies. Certain dietary patterns, including prolonged fasting and high-fat low-carbohydrate dieting, can produce ketosis, in which acetone is formed in body tissue. Certain health conditions, such as alcoholism and diabetes, can produce ketoacidosis, uncontrollable ketosis that leads to a sharp, and potentially fatal, increase in the acidity of the blood. Since it is a byproduct of fermentation, acetone is a byproduct of the distillery industry.

Metabolism
Acetone can then be metabolized either by CYP2E1 via methylglyoxal to D -lactate and pyruvate, and ultimately glucose/energy, or by a different pathway via propylene glycol to pyruvate, lactate, acetate (usable for energy) and propionaldehyde.

Industrial
About a third of the world's acetone is used as a solvent, and a quarter is consumed as acetone cyanohydrin, a precursor to methyl methacrylate.

Solvent
Acetone is a good solvent for many plastics and some synthetic fibers. It is used for thinning polyester resin, cleaning tools used with it, and dissolving two-part epoxies and superglue before they harden. It is used as one of the volatile components of some paints and varnishes. As a heavy-duty degreaser, it is useful in the preparation of metal prior to painting or soldering, and to remove rosin flux after soldering (to prevent adhesion of dirt and electrical leakage and perhaps corrosion or for cosmetic reasons), although it may attack some electronic components, such as polystyrene capacitors.

Although itself flammable, acetone is used extensively as a solvent for the safe transportation and storage of acetylene, which cannot be safely pressurized as a pure compound. Vessels containing a porous material are first filled with acetone followed by acetylene, which dissolves into the acetone. One litre of acetone can dissolve around 250 litres of acetylene at a pressure of 10 bar.

Acetone is used as a solvent by the pharmaceutical industry and as a denaturant in denatured alcohol. Acetone is also present as an excipient in some pharmaceutical drugs.

Chemical intermediate
Acetone is used to synthesize methyl methacrylate. It begins with the initial conversion of acetone to acetone cyanohydrin via reaction with hydrogen cyanide (HCN):

In a subsequent step, the nitrile is hydrolyzed to the unsaturated amide, which is esterified:

The third major use of acetone (about 20%) is synthesizing bisphenol A. Bisphenol A is a component of many polymers such as polycarbonates, polyurethanes, and epoxy resins. The synthesis involves the condensation of acetone with phenol:

Many millions of kilograms of acetone are consumed in the production of the solvents methyl isobutyl alcohol and methyl isobutyl ketone. These products arise via an initial aldol condensation to give diacetone alcohol.

Condensation with acetylene gives 2-methylbut-3-yn-2-ol, precursor to synthetic terpenes and terpenoids.

Chemistry
A variety of organic reactions employ acetone as a polar, aprotic solvent. It is critical in the Jones oxidation. Because acetone is cheap, volatile, and dissolves or decomposes with most laboratory chemicals, an acetone rinse is the standard technique to remove solid resides from laboratory glassware before a final wash. Despite common desiccatory use, acetone dries only via bulk displacement and dilution. It forms no azeotropes with water (see azeotrope tables).

Acetone freezes well below −78 °C. An acetone/dry ice mixture cools many low-temperature reactions.

Physics
Under ultraviolet light, acetone fluoresces. Fluid flow experiments use its vapor as a tracer.

Biology
Proteins precipitate in acetone. The chemical modifies peptides, both at α- or ε-amino groups, and in a poorly understood but rapid modification of certain glycine residues.

In pathology, acetone helps find lymph nodes in fatty tissues (such as the mesentery) for tumor staging. The liquid dissolves the fat and hardens the nodes, making them easier to find.

Acetone also removes certain stains from microscope slides.

Medical
Dermatologists use acetone with alcohol for acne treatments to chemically peel dry skin. Common agents used today for chemical peeling are salicylic acid, glycolic acid, azelaic acid, 30% salicylic acid in ethanol, and trichloroacetic acid (TCA). Prior to chemexfoliation, the skin is cleaned and excess fat removed in a process called defatting. Acetone, hexachlorophene, or a combination of these agents was used in this process.

Acetone has been shown to have anticonvulsant effects in animal models of epilepsy, in the absence of toxicity, when administered in millimolar concentrations. It has been hypothesized that the high-fat low-carbohydrate ketogenic diet used clinically to control drug-resistant epilepsy in children works by elevating acetone in the brain. Because of their higher energy requirements, children have higher acetone production than most adults – and the younger the child, the higher the expected production. This indicates that children are not uniquely susceptible to acetone exposure. External exposures are small compared to the exposures associated with the ketogenic diet.

Domestic and other niche uses
Make-up artists use acetone to remove skin adhesive from the netting of wigs and mustaches by immersing the item in an acetone bath, then removing the softened glue residue with a stiff brush. Acetone is a main ingredient in many nail polish removers because it breaks down nail polish. It is used for all types of nail polish removal, like gel nail polish, dip powder and acrylic nails.

Acetone is often used for vapor polishing of printing artifacts on 3D-printed models printed with ABS plastic. The technique, called acetone vapor bath smoothing, involves placing the printed part in a sealed chamber containing a small amount of acetone, and heating to around 80 degrees Celsius for ten minutes. This creates a vapor of acetone in the container. The acetone condenses evenly all over the part, causing the surface to soften and liquefy. Surface tension then smooths the semi-liquid plastic. When the part is removed from the chamber, the acetone component evaporates leaving a glassy-smooth part free of striation, patterning, and visible layer edges, common features in untreated 3D printed parts.

Acetone efficiently removes felt-tipped pen marks from glass and metals.

Safety
Acetone's most hazardous property is its extreme flammability. In small amounts, acetone burns with a dull blue flame; in larger amounts, fuel evaporation causes incomplete combustion and a bright yellow flame. When hotter than acetone's flash point of -20 C, air mixtures of 2.512.8% acetone (by volume) may explode or cause a flash fire. Vapors can flow along surfaces to distant ignition sources and flash back.

Static discharge may also ignite acetone vapors, though acetone has a very high ignition initiation energy and accidental ignition is rare. Acetone's auto-ignition temperature is the relatively high 465 C; moreover, auto-ignition temperature depends upon experimental conditions, such as exposure time, and has been quoted as high as 535 °C. Even pouring or spraying acetone over red-glowing coal will not ignite it, due to the high vapour concentration and the cooling effect of evaporation.

Acetone should be stored away from strong oxidizers, such as concentrated nitric and sulfuric acid mixtures. It may also explode when mixed with chloroform in the presence of a base. When oxidized without combustion, for example with hydrogen peroxide, acetone may form acetone peroxide, a highly unstable primary explosive. Acetone peroxide may be formed accidentally, e.g. when waste peroxide is poured into waste solvents.

Toxicity
Acetone occurs naturally as part of certain metabolic processes in the human body, and has been studied extensively and is believed to exhibit only slight toxicity in normal use. There is no strong evidence of chronic health effects if basic precautions are followed. It is generally recognized to have low acute and chronic toxicity if ingested and/or inhaled. Acetone is not currently regarded as a carcinogen, a mutagen, or a concern for chronic neurotoxicity effects.

Acetone can be found as an ingredient in a variety of consumer products ranging from cosmetics to processed and unprocessed foods. Acetone has been rated as a generally recognized as safe (GRAS) substance when present in drinks, baked foods, desserts, and preserves at concentrations ranging from 5 to 8 mg/L.

Acetone is however an irritant, causing mild skin and moderate-to-severe eye irritation. At high vapor concentrations, it may depress the central nervous system like many other solvents. Acute toxicity for mice by ingestion (LD50) is 3 g/kg, and by inhalation (LC50) is 44 g/m3 over 4 hours.

Environmental effects
Although acetone occurs naturally in the environment in plants, trees, volcanic gases, forest fires, and as a product of the breakdown of body fat, the majority of the acetone released into the environment is of industrial origin. Acetone evaporates rapidly, even from water and soil. Once in the atmosphere, it has a 22-day half-life and is degraded by UV light via photolysis (primarily into methane and ethane. ) Consumption by microorganisms contributes to the dissipation of acetone in soil, animals, or waterways.

EPA classification
In 1995, the United States Environmental Protection Agency (EPA) removed acetone from the list of volatile organic compounds. The companies requesting the removal argued that it would "contribute to the achievement of several important environmental goals and would support EPA's pollution prevention efforts", and that acetone could be used as a substitute for several compounds that are listed as hazardous air pollutants (HAP) under section 112 of the Clean Air Act. In making its decision EPA conducted an extensive review of the available toxicity data on acetone, which was continued through the 2000s. It found that the evaluable "data are inadequate for an assessment of the human carcinogenic potential of acetone".

Extraterrestrial occurrence
On 30 July 2015, scientists reported that upon the first touchdown of the Philae lander on comet 67P surface, measurements by the COSAC and Ptolemy instruments revealed sixteen organic compounds, four of which were seen for the first time on a comet, including acetamide, acetone, methyl isocyanate, and propionaldehyde.

title: Acetone


text:
Gun laws in the United States by state

Gun laws in the United States regulate the sale, possession, and use of firearms and ammunition. State laws (and the laws of the District of Columbia and of the U.S. territories) vary considerably, and are independent of existing federal firearms laws, although they are sometimes broader or more limited in scope than the federal laws.

Forty-four states have a provision in their state constitutions similar to the Second Amendment of the U.S. Constitution, which protects the right to keep and bear arms. The exceptions are California, Maryland, Minnesota, New Jersey, and New York. In New York, however, the statutory civil rights laws contain a provision virtually identical to the Second Amendment. Additionally, the U.S. Supreme Court held in McDonald v. Chicago that the protections of the Second Amendment to keep and bear arms for self-defense in one's home apply against state governments and their political subdivisions.

Firearm owners are subject to the firearm laws of the state they are in, and not exclusively their state of residence. Reciprocity between states exists in certain situations, such as with regard to concealed carry permits. These are recognized on a state-by-state basis. For example, Idaho recognizes an Oregon permit, but Oregon does not recognize an Idaho permit. Florida issues a license to carry both concealed weapons and firearms, but others license only the concealed carry of firearms. Some states do not recognize out-of-state permits to carry a firearm at all, so it is important to understand the laws of each state when traveling with a handgun.

In many cases, state firearms laws can be considerably less restrictive than federal firearms laws. This does not confer any de jure immunity against prosecution for violations of the federal laws. However, state and local police departments are not legally obligated to enforce federal gun law as per the U.S. Supreme Court's ruling in Printz v. United States.

Common subjects of state laws
Firearm related matters that are often regulated by state or local laws include the following:
 * Some states and localities require that a person obtain a license or permit in order to purchase or possess firearms.
 * Some states and localities require that individual firearms be registered with the police or with another law enforcement agency.
 * All states allow some form of concealed carry, the carrying of a concealed firearm in public.
 * Many states allow some form of open carry, the carrying of an unconcealed firearm in public on one's person or in a vehicle.
 * Some states have state preemption for some or all gun laws, which means that only the state can legally regulate firearms. In other states, local governments can pass their own gun laws more restrictive than those of the state.
 * Some states and localities place additional restrictions on certain semi-automatic firearms that they have defined as assault weapons, or on magazines that can hold more than a certain number of rounds of ammunition.
 * NFA weapons are weapons that are heavily restricted at a federal level by the National Firearms Act of 1934 and the Firearm Owners Protection Act of 1986. These include automatic firearms (such as machine guns), short-barreled shotguns, and short-barreled rifles. Some states and localities place additional restrictions on such weapons.
 * Some states have enacted castle doctrine or stand-your-ground laws, which provide a legal basis for individuals to use deadly force in self-defense in certain situations, without a duty to flee or retreat if possible.
 * In some states, peaceable journey laws give additional leeway for the possession of firearms by travelers who are passing through to another destination.
 * Some states require a background check of the buyer when a firearm is sold by a private party. (Federal law requires background checks for sales by licensed gun dealers, and for any interstate sales.)
 * Some states have enacted red flag laws that enable a judge to issue an order to temporarily confiscate the firearms of a person who presents an imminent threat to others or to themselves.

title: Gun laws in the United States by state