text:
Talk:Micronations/Starting your own micronation

Is there a way to rename this page ? 68.13.29.96 (discuss) 17:14, 10 February 2021 (UTC)
 * You need an account and be autoconfirmed (4 days old) to do that. Alternatively another user can move (rename) it on your behalf. Leaderboard (discuss • contribs) 17:26, 10 February 2021 (UTC)

ok can this page be renamed "the start of a micronation" to make it more neutral? 68.13.29.96 (discuss) 17:40, 10 February 2021 (UTC)
 * Would like to see consensus from other users before making this change, considering the number of subpages that would be affected. Leaderboard (discuss • contribs) 17:46, 10 February 2021 (UTC)

Discussion about WB:OR
I do not think the WB:OR redirect was necessary 68.13.29.96 (discuss) 21:08, 11 March 2021 (UTC)
 * for reference. Leaderboard (discuss • contribs) 21:38, 11 March 2021 (UTC)
 * @68.13.29.96: I'm sorry but at the discussion at Requests_for_deletion there was strong consensus that at least some of the content is problematic. There was basically a choice: should the book be deleted, or should the problematic material be removed? Now I've removed the material the book so it can conform with our policies. WB:OR is a fundamental policy here that can't be ignored. But if you can show me that you have adequate references for the content then this can reversed. But note that a major part of OR is that it disallows intellectual synthesis of material, you need to reference direct sources on micronations. This is explained in much more detail at w:Wikipedia:No original research, as Wikipedia also has this principle. Note that Wikiversity might be better suited for this content. -- Jules (Mrjulesd) 22:32, 11 March 2021 (UTC)

you are correct that most of the pages did not have proper references and should have been deleted. can the pages on creating and island be restored? these pages contained detailed, neutral, information with substantial references.68.13.29.96 (discuss) 23:07, 11 March 2021 (UTC)

 * Some of the pages did have references. But you can't just have references about island construction. You need to have references over island construction for the creation of micronations. Otherwise it doesn't conform to synthesis, which is "any analysis or synthesis of published material that serves to reach or imply a conclusion not stated by the sources.". See w:WP:SYN which might help you understand this. -- Jules (Mrjulesd) 23:18, 11 March 2021 (UTC)

I do not recall any of the pages making conclusions about creating islands for the creation of micronations because this would violate the information neutrality but if the pages are restored I will attempt to correct this error.68.13.29.96 (discuss) 00:08, 12 March 2021 (UTC)

 * Well one solution would have island creation as a separate book. i could probably help you get going in this regard. I don't believe this would violate OR since islands are created all the time. So it would be a reasonable subject I feel. It would avoid the intellectual synthesis problem that we have here. -- Jules (Mrjulesd) 00:20, 12 March 2021 (UTC)

that is an great idea thanks. 68.13.29.96 (discuss) 00:25, 12 March 2021 (UTC)
 * It has been recreated at Making an Island. -- Jules (Mrjulesd) 09:05, 12 March 2021 (UTC)


text:
User:Laceymwes/modern.css

 * root {

background-color: black; }

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

title: User:Laceymwes/modern.css


text:
User:LilHelpa

Veteran gnome who mostly works Wikipedia.

Thanks for your work on the project(s).

title: User:LilHelpa


text:
Oberon/V2/OCT

MODULE OCT; (*NW 28.5.87 / 5.3.91*) IMPORT Files, OCS; CONST maxImps = 24; SFtag = 0FAX; firstStr = 16; maxStr = 80; maxUDP = 16; maxMod = 24; maxParLev = 6; PtrSize = 4; ProcSize = 4; NotYetExp = 0; (*object modes*) Var = 1; Ind = 3; Con = 8; Fld = 12; Typ = 13; XProc = 15; SProc = 16; CProc = 17; Mod = 19; Head = 20; (*structure forms*) Undef = 0; Byte = 1; Bool = 2; Char = 3; SInt = 4; Int = 5; LInt = 6; Real = 7; LReal = 8; Set = 9; String = 10; NilTyp = 11; NoTyp = 12; Pointer = 13; ProcTyp = 14; Array = 15; DynArr = 16; Record = 17; TYPE Object* = POINTER TO ObjDesc; Struct* = POINTER TO StrDesc; ObjDesc* = RECORD dsc*, next*: Object; typ*: Struct; a0*, a1*: LONGINT; a2*: INTEGER; mode*: SHORTINT; marked*: BOOLEAN; name*: ARRAY 32 OF CHAR; END ; StrDesc* = RECORD form*, n*, mno*, ref*: INTEGER; size*, adr*: LONGINT; BaseTyp*: Struct; link*, strobj*: Object END ; Item* = RECORD mode*, lev*: INTEGER; a0*, a1*, a2*: LONGINT; typ*: Struct; obj*: Object END ; VAR topScope*: Object; undftyp*, bytetyp*, booltyp*, chartyp*, sinttyp*, inttyp*, linttyp*, realtyp*, lrltyp*, settyp*, stringtyp*, niltyp*, notyp*: Struct; nofGmod*: INTEGER; (*nof imports*) GlbMod*: ARRAY maxImps OF Object; universe, syslink: Object; strno, udpinx: INTEGER; (*for export*) nofExp: SHORTINT; SR: Files.Rider; undPtr: ARRAY maxUDP OF Struct; PROCEDURE Init*; BEGIN topScope := universe; strno := 0; udpinx := 0; nofGmod := 0 END Init; PROCEDURE Close*; VAR i: INTEGER; BEGIN Files.Set(SR, NIL, 0); i := 0; WHILE i < maxImps DO GlbMod[i] := NIL; INC(i) END END Close; PROCEDURE FindImport*(mod: Object; VAR res: Object); VAR obj: Object; BEGIN obj := mod.dsc; WHILE (obj # NIL) & (obj.name # OCS.name) DO obj := obj.next END ; IF (obj # NIL) & (obj.mode = Typ) & ~obj.marked THEN obj := NIL END ; res := obj END FindImport; PROCEDURE Find*(VAR res: Object; VAR level: INTEGER); VAR obj, head: Object; BEGIN head := topScope; LOOP obj := head.next; WHILE (obj # NIL) & (obj.name # OCS.name) DO obj := obj.next END ; IF obj # NIL THEN level := SHORT(head.a0); EXIT END ; head := head.dsc; IF head = NIL THEN level := 0; EXIT END END ; res := obj END Find; PROCEDURE FindField*(typ: Struct; VAR res: Object); VAR obj: Object; BEGIN (*typ.form = Record*) LOOP obj := typ.link; WHILE (obj # NIL) & (obj.name # OCS.name) DO obj := obj.next END ; IF obj # NIL THEN EXIT END ; typ := typ.BaseTyp; IF typ = NIL THEN EXIT END END ; res := obj END FindField; PROCEDURE Insert*(VAR name: ARRAY OF CHAR; VAR res: Object); VAR obj, new: Object; BEGIN obj := topScope; WHILE (obj.next # NIL) & (obj.next.name # name) DO obj := obj.next END ; IF obj.next = NIL THEN NEW(new); new.dsc := NIL; new.next := NIL; COPY(name, new.name); obj.next := new; res := new ELSE res := obj.next; IF obj.next.mode # Undef THEN OCS.Mark(1) END END END Insert; PROCEDURE OpenScope*(level: INTEGER); VAR head: Object; BEGIN NEW(head); head.mode := Head; head.a0 := level; head.typ := NIL; head.dsc := topScope; head.next := NIL; topScope := head END OpenScope; PROCEDURE CloseScope*; BEGIN topScope := topScope.dsc END CloseScope; (*-- import *) PROCEDURE ReadInt(VAR i: INTEGER); BEGIN Files.ReadBytes(SR, i, 2) END ReadInt; PROCEDURE ReadXInt(VAR k: LONGINT); VAR i: INTEGER; BEGIN Files.ReadBytes(SR, i, 2); k := i 	END ReadXInt; PROCEDURE ReadLInt(VAR k: LONGINT); BEGIN Files.ReadBytes(SR, k, 4) END ReadLInt; PROCEDURE ReadId(VAR id: ARRAY OF CHAR); VAR i: INTEGER; ch: CHAR; BEGIN i := 0; REPEAT Files.Read(SR, ch); id[i] := ch; INC(i) UNTIL ch = 0X END ReadId; PROCEDURE Import*(VAR name, self, FileName: ARRAY OF CHAR); VAR i, j, m, s, class: INTEGER; k: LONGINT; nofLmod, strno, parlev, fldlev: INTEGER; obj, ob0: Object; typ: Struct; ch, ch1, ch2: CHAR; si: SHORTINT; xval: REAL; yval: LONGREAL; SymFile: Files.File; modname: ARRAY 32 OF CHAR; LocMod: ARRAY maxMod OF Object; struct: ARRAY maxStr OF Struct; lastpar, lastfld: ARRAY maxParLev OF Object; PROCEDURE reversedList(p: Object): Object; VAR q, r: Object; BEGIN q := NIL; WHILE p # NIL DO 				r := p.next; p.next := q; q := p; p := r 			END ; RETURN q 		END reversedList; BEGIN nofLmod := 0; strno := firstStr; parlev := -1; fldlev := -1; IF FileName = "SYSTEM.Sym" THEN Insert(name, obj); obj.mode := Mod; obj.dsc := syslink; obj.a0 := 0; obj.typ := notyp ELSE SymFile := Files.Old(FileName); IF SymFile # NIL THEN Files.Set(SR, SymFile, 0); Files.Read(SR, ch); IF ch = SFtag THEN struct[Undef] := undftyp; struct[Byte] := bytetyp; struct[Bool] := booltyp; struct[Char] := chartyp; struct[SInt] := sinttyp; struct[Int] := inttyp; struct[LInt] := linttyp; struct[Real] := realtyp; struct[LReal] := lrltyp; struct[Set] := settyp; struct[String] := stringtyp; struct[NilTyp] := niltyp; struct[NoTyp] := notyp; LOOP (*read next item from symbol file*) Files.Read(SR, ch); class := ORD(ch); IF SR.eof THEN EXIT END ; CASE class OF 							0: OCS.Mark(151) | 1..7: (*object*) NEW(obj); m := 0; Files.Read(SR, ch); s := ORD(ch); obj.typ := struct[s]; CASE class OF 								1: obj.mode := Con; CASE obj.typ.form OF 										2,4: Files.Read(SR, si); obj.a0 := si 									| 1,3: Files.Read(SR, ch); obj.a0 := ORD(ch) | 5: ReadXInt(obj.a0) | 6,7,9: ReadLInt(obj.a0) | 8: ReadLInt(obj.a0); ReadLInt(obj.a1) | 10: ReadId(obj.name); OCS.Mark(151) | 11: (*NIL*) END |2,3: obj.mode := Typ; Files.Read(SR, ch); m := ORD(ch); IF obj.typ.strobj = NIL THEN obj.typ.strobj := obj END; obj.marked := class = 2 |4: obj.mode := Var; ReadLInt(obj.a0) |5,6,7: IF class # 7 THEN obj.mode := XProc; Files.Read(SR, ch) ELSE obj.mode := CProc; Files.Read(SR, ch); Files.Read(SR, ch); Files.Read(SR, ch) END ; obj.a0 := ORD(ch); obj.a1 := 0; (*link adr*) obj.dsc := reversedList(lastpar[parlev]); DEC(parlev) END ; ReadId(obj.name); ob0 := LocMod[m]; WHILE (ob0.next # NIL)&(ob0.next.name # obj.name) DO 								ob0 := ob0.next END ; IF ob0.next = NIL THEN ob0.next := obj; obj.next := NIL (*insert object*) ELSIF obj.mode = Typ THEN struct[s] := ob0.next.typ END | 8..12: (*structure*) NEW(typ); typ.strobj := NIL; typ.ref := 0; Files.Read(SR, ch); typ.BaseTyp := struct[ORD(ch)]; Files.Read(SR, ch); typ.mno := SHORT(LocMod[ORD(ch)].a0); CASE class OF 								8: typ.form := Pointer; typ.size := PtrSize; typ.n := 0 | 9: typ.form := ProcTyp; typ.size := ProcSize; typ.link := reversedList(lastpar[parlev]); DEC(parlev) | 10: typ.form := Array; ReadLInt(typ.size); ReadXInt(typ.adr); ReadLInt(k); typ.n := SHORT(k) | 11: typ.form := DynArr; ReadLInt(typ.size); ReadXInt(typ.adr) | 12: typ.form := Record; ReadLInt(typ.size); typ.n := 0; typ.link := reversedList(lastfld[fldlev]); DEC(fldlev); IF typ.BaseTyp = notyp THEN typ.BaseTyp := NIL; typ.n := 0 ELSE typ.n := typ.BaseTyp.n + 1 END ; ReadXInt(typ.adr) (*of descriptor*) END ; struct[strno] := typ; INC(strno) | 13: (*parameter list start*) IF parlev < maxParLev-1 THEN INC(parlev); lastpar[parlev] := NIL ELSE OCS.Mark(229) END | 14, 15: (*parameter*) NEW(obj); IF class = 14 THEN obj.mode := Var ELSE obj.mode := Ind END ; Files.Read(SR, ch); obj.typ := struct[ORD(ch)]; ReadXInt(obj.a0); ReadId(obj.name); obj.dsc := NIL; obj.next := lastpar[parlev]; lastpar[parlev] := obj | 16: (*start field list*) IF fldlev < maxParLev-1 THEN INC(fldlev); lastfld[fldlev] := NIL ELSE OCS.Mark(229) END | 17: (*field*) NEW(obj); obj.mode := Fld; Files.Read(SR, ch); obj.typ := struct[ORD(ch)]; ReadLInt(obj.a0); ReadId(obj.name); obj.marked := TRUE; obj.dsc := NIL; obj.next := lastfld[fldlev]; lastfld[fldlev] := obj | 18: (*hidden pointer field*) NEW(obj); obj.mode := Fld; ReadLInt(obj.a0); obj.name := ""; obj.typ := notyp; obj.marked := FALSE; obj.dsc := NIL; obj.next := lastfld[fldlev]; lastfld[fldlev] := obj | 19: (*hidden procedure field*) ReadLInt(k) | 20: (*fixup pointer typ*) Files.Read(SR, ch); typ := struct[ORD(ch)]; Files.Read(SR, ch1); IF typ.BaseTyp = undftyp THEN typ.BaseTyp := struct[ORD(ch1)] END | 21, 23, 24: OCS.Mark(151); EXIT | 22: (*module anchor*) ReadLInt(k); ReadId(modname); IF modname = self THEN OCS.Mark(49) END; i := 0; WHILE (i < nofGmod) & (modname # GlbMod[i].name) DO INC(i) END ; IF i < nofGmod THEN (*module already present*) IF k # GlbMod[i].a1 THEN OCS.Mark(150) END ; obj := GlbMod[i] ELSE NEW(obj); IF nofGmod < maxImps THEN GlbMod[nofGmod] := obj; INC(nofGmod) ELSE OCS.Mark(227) END ; obj.mode := NotYetExp; COPY(modname, obj.name); obj.a1 := k; obj.a0 := nofGmod; obj.next := NIL END ; IF nofLmod < maxMod THEN LocMod[nofLmod] := obj; INC(nofLmod) ELSE OCS.Mark(227) END END END (*LOOP*) ; Insert(name, obj); obj.mode := Mod; obj.dsc := LocMod[0].next; obj.a0 := LocMod[0].a0; obj.typ := notyp ELSE OCS.Mark(151) END ELSE OCS.Mark(152) (*sym file not found*) END END END Import; (*-- export *) PROCEDURE WriteByte(i: INTEGER); BEGIN Files.Write(SR, CHR(i)) END WriteByte; PROCEDURE WriteInt(i: LONGINT); BEGIN Files.WriteBytes(SR, i, 2) END WriteInt; PROCEDURE WriteLInt(k: LONGINT); BEGIN Files.WriteBytes(SR, k, 4) END WriteLInt; PROCEDURE WriteId(VAR name: ARRAY OF CHAR); VAR ch: CHAR; i: INTEGER; BEGIN i := 0; REPEAT ch := name[i]; Files.Write(SR, ch); INC(i) UNTIL ch = 0X END WriteId; PROCEDURE^ OutStr(typ: Struct); PROCEDURE OutPars(par: Object); BEGIN WriteByte(13); WHILE (par # NIL) & (par.mode <= Ind) & (par.a0 > 0) DO 			OutStr(par.typ); IF par.mode = Var THEN WriteByte(14) ELSE WriteByte(15) END ; WriteByte(par.typ.ref); WriteInt(par.a0); WriteId(par.name); par := par.next END END OutPars; PROCEDURE OutFlds(fld: Object; adr: LONGINT; visible: BOOLEAN); BEGIN IF visible THEN WriteByte(16) END ; WHILE fld # NIL DO 			IF fld.marked & visible THEN OutStr(fld.typ); WriteByte(17); WriteByte(fld.typ.ref); WriteLInt(fld.a0); WriteId(fld.name) ELSIF fld.typ.form = Record THEN OutFlds(fld.typ.link, fld.a0 + adr, FALSE) ELSIF (fld.typ.form = Pointer) OR (fld.name = "") THEN WriteByte(18); WriteLInt(fld.a0 + adr) END ; fld := fld.next END END OutFlds; PROCEDURE OutStr(typ: Struct); VAR m, em, r: INTEGER; btyp: Struct; mod: Object; BEGIN IF typ.ref = 0 THEN m := typ.mno; btyp := typ.BaseTyp; IF m > 0 THEN mod := GlbMod[m-1]; em := mod.mode; IF em = NotYetExp THEN GlbMod[m-1].mode := nofExp; m := nofExp; INC(nofExp); WriteByte(22); WriteLInt(mod.a1); WriteId(mod.name) ELSE m := em 				END END; CASE typ.form OF Undef .. NoTyp: | Pointer: WriteByte(8); IF btyp.ref > 0 THEN WriteByte(btyp.ref) ELSE WriteByte(Undef); IF udpinx < maxUDP THEN undPtr[udpinx] := typ; INC(udpinx) ELSE OCS.Mark(224) END END ; WriteByte(m) | ProcTyp: OutStr(btyp); OutPars(typ.link); WriteByte(9); WriteByte(btyp.ref); WriteByte(m) | Array: OutStr(btyp); WriteByte(10); WriteByte(btyp.ref); WriteByte(m); WriteLInt(typ.size); WriteInt(typ.adr); WriteLInt(typ.n) 			| DynArr: OutStr(btyp); WriteByte(11); WriteByte(btyp.ref); WriteByte(m); WriteLInt(typ.size); WriteInt(typ.adr) | Record: IF btyp = NIL THEN r := NoTyp ELSE OutStr(btyp); r := btyp.ref END ; OutFlds(typ.link, 0, TRUE); WriteByte(12); WriteByte(r); WriteByte(m); WriteLInt(typ.size); WriteInt(typ.adr) END ; IF typ.strobj # NIL THEN IF typ.strobj.marked THEN WriteByte(2) ELSE WriteByte(3) END; WriteByte(strno); WriteByte(m); WriteId(typ.strobj.name) END ; typ.ref := strno; INC(strno); IF strno > maxStr THEN OCS.Mark(228) END END END OutStr; PROCEDURE OutObjs; VAR obj: Object; f: INTEGER; xval: REAL; yval: LONGREAL; BEGIN obj := topScope.next; WHILE obj # NIL DO 			IF obj.marked THEN IF obj.mode = Con THEN WriteByte(1); f := obj.typ.form; WriteByte(f); CASE f OF 						Undef: | Byte, Bool, Char, SInt: WriteByte(SHORT(obj.a0)) | Int: WriteInt(SHORT(obj.a0)) | LInt, Real, Set: WriteLInt(obj.a0) | LReal: WriteLInt(obj.a0); WriteLInt(obj.a1) | String: WriteByte(0); OCS.Mark(221) | NilTyp: END; WriteId(obj.name) ELSIF obj.mode = Typ THEN OutStr(obj.typ); IF (obj.typ.strobj # obj) & (obj.typ.strobj # NIL) THEN WriteByte(2); WriteByte(obj.typ.ref); WriteByte(0); WriteId(obj.name) END ELSIF obj.mode = Var THEN OutStr(obj.typ); WriteByte(4); WriteByte(obj.typ.ref); WriteLInt(obj.a0); WriteId(obj.name) ELSIF obj.mode = XProc THEN OutStr(obj.typ); OutPars(obj.dsc); WriteByte(5); WriteByte(obj.typ.ref); WriteByte(SHORT(obj.a0)); WriteId(obj.name) ELSIF obj.mode = CProc THEN OutStr(obj.typ); OutPars(obj.dsc); WriteByte(7); WriteByte(obj.typ.ref); WriteByte(2); WriteByte(226); WriteByte(SHORT(obj.a0)); WriteId(obj.name) END END ; obj := obj.next END END OutObjs; PROCEDURE Export*(VAR name, FileName: ARRAY OF CHAR; 			VAR newSF: BOOLEAN; VAR key: LONGINT); VAR i: INTEGER; ch0, ch1: CHAR; oldkey: LONGINT; typ: Struct; oldFile, newFile: Files.File; oldSR: Files.Rider; BEGIN newFile := Files.New(FileName); IF newFile # NIL THEN Files.Set(SR, newFile, 0); Files.Write(SR, SFtag); strno := firstStr; WriteByte(22); WriteLInt(key); WriteId(name); nofExp := 1; OutObjs; i := 0; WHILE i < udpinx DO 				typ := undPtr[i]; OutStr(typ.BaseTyp); undPtr[i] := NIL; INC(i); WriteByte(20); (*fixup*) WriteByte(typ.ref); WriteByte(typ.BaseTyp.ref) END ; IF ~OCS.scanerr THEN oldFile := Files.Old(FileName); IF oldFile # NIL THEN (*compare*) Files.Set(oldSR, oldFile, 2); Files.ReadBytes(oldSR, oldkey, 4); Files.Set(SR, newFile, 6); REPEAT Files.Read(oldSR, ch0); Files.Read(SR, ch1) UNTIL (ch0 # ch1) OR SR.eof; IF oldSR.eof & SR.eof THEN (*equal*) newSF := FALSE; key := oldkey ELSIF newSF THEN Files.Register(newFile) ELSE OCS.Mark(155) END ELSE Files.Register(newFile); newSF := TRUE END ELSE newSF := FALSE END ELSE OCS.Mark(153) END END Export; (* initialization *) PROCEDURE InitStruct(VAR typ: Struct; f: INTEGER); BEGIN NEW(typ); typ.form := f; typ.ref := f; typ.size := 1 END InitStruct; PROCEDURE EnterConst(name: ARRAY OF CHAR; value: INTEGER); VAR obj: Object; BEGIN Insert(name, obj); obj.mode := Con; obj.typ := booltyp; obj.a0 := value END EnterConst; PROCEDURE EnterTyp(name: ARRAY OF CHAR; form, 			size: INTEGER; VAR res: Struct); VAR obj: Object; typ: Struct; BEGIN Insert(name, obj); NEW(typ); obj.mode := Typ; obj.typ := typ; obj.marked := TRUE; typ.form := form; typ.strobj := obj; typ.size := size; typ.mno := 0; typ.ref := form; res := typ END EnterTyp; PROCEDURE EnterProc(name: ARRAY OF CHAR; num: INTEGER); VAR obj: Object; BEGIN Insert(name, obj); obj.mode := SProc; obj.typ := notyp; obj.a0 := num END EnterProc; BEGIN topScope := NIL; InitStruct(undftyp, Undef); InitStruct(notyp, NoTyp); InitStruct(stringtyp, String); InitStruct(niltyp, NilTyp); OpenScope(0); (*initialization of module SYSTEM*) EnterProc("LSH", 22); EnterProc("ROT", 23); EnterProc("ADR", 9);EnterProc("OVFL",15); EnterProc("GET", 24); EnterProc("PUT", 25); EnterProc("BIT", 26); EnterProc("VAL", 27); EnterProc("NEW", 28); EnterProc("MOVE",30); EnterProc("CC", 2); EnterTyp("BYTE", Byte, 1, bytetyp); syslink := topScope.next; universe := topScope; topScope.next := NIL; EnterTyp("CHAR", Char, 1, chartyp); EnterTyp("SET", Set, 4, settyp); EnterTyp("REAL", Real, 4, realtyp); EnterTyp("INTEGER", Int, 2, inttyp); EnterTyp("LONGINT", LInt, 4, linttyp); EnterTyp("LONGREAL", LReal, 8, lrltyp); EnterTyp("SHORTINT", SInt, 1, sinttyp); EnterTyp("BOOLEAN", Bool, 1, booltyp); EnterProc("INC", 16); EnterProc("DEC", 17); EnterConst("FALSE", 0); EnterConst("TRUE", 1); EnterProc("HALT", 0); EnterProc("NEW", 1); EnterProc("ABS", 3); EnterProc("CAP", 4); EnterProc("ORD", 5); EnterProc("ENTIER", 6); EnterProc("SIZE", 7); EnterProc("ODD", 8); EnterProc("MIN", 10); EnterProc("MAX", 11); EnterProc("CHR", 12); EnterProc("SHORT", 13); EnterProc("LONG", 14); EnterProc("INCL", 18); EnterProc("EXCL", 19); EnterProc("LEN", 20); EnterProc("ASH", 21); EnterProc("COPY", 29) END OCT.

title: Oberon/V2/OCT


text:
Abstract Algebra/2x2 real matrices

The associative algebra of 2×2 real matrices is denoted by M(2, R). Two matrices p and q in M(2, R) have a sum p + q given by matrix addition. The product matrix p q is formed through matrix multiplication. For
 * $$q = \begin{pmatrix} a & b \\ c & d \end{pmatrix}, $$ let
 * $$q^* = \begin{pmatrix} d & -b \\ -c & a \end{pmatrix}. $$

Then q q$$ = q$$ q = (ad − bc) I, where I is the 2×2 identity matrix. The real number ad − bc  is called the determinant of q. When ad − bc ≠ 0, then q is an invertible matrix, and
 * $$q^{-1} = \frac{q^*}{ad - bc}.$$

The collection of all such invertible matrices constitutes the general linear group GL(2, R). In the terms of abstract algebra, M(2, R) with the associated addition and multiplication operations forms a ring, and GL(2, R) is its group of units. M(2, R) is also a four-dimensional vector space, so it is also an associative algebra.

The 2×2 real matrices are in one-one correspondence with the linear mappings of the two-dimensional Cartesian coordinate system into itself by the rule
 * $$(x,\ y) \mapsto (x,\ y) \begin{pmatrix}a & c \\ b & d\end{pmatrix} = (ax + by,\ cx + dy).$$

M(2,R) is where all three types of planar angle come to common expression in terms of area. M(2,R) is described as a pencil on a real line that is shared by three types of 2-algebras appearing as subalgebras of M(2,R). They are the division binarions, split-binarions, and dual numbers which use circular angle, hyperbolic angle, and slope, respectively.

The hyperbolic angle is defined in terms of area under y=1/x. The circular angle equals the area of the corresponding sector of a circle of radius √2. Likewise, the slope equals the area of a triangle with base on a line and apex at a point √2 distance from the line.

The angles have the feature of invariance under motion, according to the type of plane. Either a rotation, a squeeze, or a shear as the case may be. Generalization of the notion of imaginary unit in M(2,R) is addressed first. It is matrix multiplication that produces the group action on a plane, so the characteristic of matrices that makes them preservers of area is addressed next.

Pencil of planar subalgebras
In synthetic geometry, the term pencil is used for the set of lines on a given point, and axial pencil for the set of planes on a given line. Here the axis is the set of multiples of the identity matrix I by real numbers. Every matrix that is not in this set is contained in a unique planar subalgebra. These subalgebras are division-binarions, split-binarions, or dual numbers.

Given a matrix m with m2 in {I, 0, −I}, there is a subalgebra
 * $$P_m = \{x I + y m : x, y \in \real \} .$$

Then Pm is a commutative subalgebra and M(2, R) = ⋃Pm where the union is over all m such that m2 ∈ {−I, 0, I }.

To identify such m, first square the generic matrix:
 * $$\begin{pmatrix}aa + bc & ab + bd \\ ac + cd & bc + dd \end{pmatrix}.$$

When a + d = 0 this square is a diagonal matrix.

Thus one assumes d = −a when looking for m to form commutative subalgebras. When mm = −I, then bc = −1 − aa, an equation describing a hyperbolic paraboloid in the space of parameters (a,b,c). Such an m serves as an imaginary unit. In this case Pm is isomorphic to the division binarions, also known as the field of (ordinary) complex numbers.

When mm = +I, m is an involutory matrix. Then bc = +1 − aa, also giving a hyperbolic paraboloid. If a matrix is an idempotent matrix, it must lie in such a Pm and in this case Pm is ring isomorphic to split-binarions.

The case of a nilpotent matrix, mm = 0, arises when only one of b or c is non-zero, and the commutative subalgebra Pm is then a copy of the dual number plane.

When M(2, R) is reconfigured with a change of basis, this pencil is seen in split-quaternions where the sets of square roots of I and −I take a symmetrical shape as hyperboloids.

Equi-areal mapping
First transform one differential vector into another:
 * $$(du,\ dv) = (dx,\ dy) \begin{pmatrix}p & q\\ r & s \end{pmatrix} = (p \ dx + r \ dy,\ \ q \ dx + s \ dy).$$

Areas are measured with density $$dx \wedge dy$$, an exterior product for which $$dx \wedge dx = 0 = dy \wedge dy .$$ In linear mapping this differential 2-form is transformed:
 * $$\begin{align}

du \wedge dv &= (p \ dx + r \ dy) \wedge (q \ dx + s \ dy) \\ &= 0 + ps\ dx \wedge dy + qr\ dy \wedge dx + 0 \\ &= (ps - qr)\ dx \wedge dy \\ &= \det(g)\ dx \wedge dy. \end{align}$$

Area is preserved when the determinant is one. Thus the equi-areal mappings are identified with $$SL(2,\reals) = \{g \in M(2,\reals) : \det(g) = 1 \} ,$$ the special linear group. Given the profile above, every such g lies in a commutative subring Pm representing a type of complex plane according to the square of m. Since g g* = I, one of the following three alternatives occurs: The preservation of area provides a common foundation for study of conformal mapping in a plane. In fact, there are three species of angle used in analysis, circular and hyperbolic angle and slope as an expression of angle in the dual number plane.
 * mm = −I and g is a Euclidean rotation, or
 * mm = I and g is a hyperbolic rotation, or
 * mm = 0 and g is a shear mapping.

Functions of 2 × 2 real matrices
The commutative subalgebras of M(2, R) determine the function theory; in particular the three types of subalgebras each have their own algebraic structures which set the value of algebraic expressions. Consideration of the square root function and the logarithm function serves to illustrate the constraints implied by the special properties of each type of subalgebra Pm in the above pencil.

First note that the invertible elements, the units, of each plane form a topological group with one, two, or four components. The component that contains 1 is called the component of the identity. The polar coordinates of an element include an angle factor:

 * If mm = −I, then z = ρ exp(θm) where θ is a circular angle.
 * If mm = 0, then z = ρ exp(sm) or z = −ρ exp(sm) where s is a slope.
 * If mm = I, then z = ρ exp(a m) or z = −p exp(a m) or
 * z = m ρ exp(a m) or z = −m ρ exp(a m) where a is a hyperbolic angle.

In the first case exp(θ m) = cos(θ) + m sin(θ), known as Euler's formula.

In the case of the dual numbers exp(s m) = 1 + s m. Finally, in the case of split-binarions there are four components in the group of units. The identity component is parameterized by ρ and exp(a m) = cosh(a) + m sinh(a). Now $$\sqrt{\rho\ \exp(am)} = \sqrt{\rho}\ \exp\left(\frac{1}{2}am\right)$$ regardless of the subalgebra Pm, but the argument of the function must be taken from the identity component of its group of units. Half the plane is lost in the case of the dual number structure; three-quarters of the plane must be excluded in the case of the split-binarions.

Similarly, if ρ exp(a m) is an element of the identity component of the group of units of a plane associated with 2×2 matrix m, then the logarithm function results in a value log ρ+ a m. The domain of the logarithm function suffers the same constraints as does the square root function described above: half or three-quarters of Pm must be excluded in the cases mm = 0 or mm = I.

2 × 2 real matrices as species of complex numbers
Every 2×2 real matrix can be interpreted as one of three species of (generalized ) complex number: a division binarion, a dual number, or a split-binarion. Above, the algebra of 2×2 matrices is profiled as a union of subalgebras Pm, all sharing the same real axis. One can determine to which type of subalgebra a given 2×2 matrix belongs as follows:

Consider the 2×2 matrix
 * $$z = \begin{pmatrix} a & b \\ c & d \end{pmatrix}.$$

The subalgebra Pm containing z is found by projections:

As noted above, the square of the matrix z is diagonal when a + d = 0. The matrix z must be expressed as the sum of a multiple of the identity matrix I and a matrix in the hyperplane a + d = 0. Projecting z alternately onto these subspaces of R4 yields
 * $$z = xI + n ,\quad x = \frac{a + d}{2}, \quad n = z - xI.$$

Furthermore,
 * $$n^2 = pI$$ where $$p = \frac{(a - d)^2}{4} + bc$$.

Now z is n one of three species of subalgebra:
 * If p < 0, then it is a division binarion:
 * Let $$q = 1/\sqrt{-p}, \quad m = qn$$. Then $$m^2 = -I, \quad z = xI + m\sqrt{-p}$$.
 * If p = 0, then it is the dual number:
 * $$z = xI + n$$.
 * If p > 0, then z is a split-binarion:
 * Let $$q = 1/\sqrt{p}, \quad m = qn$$. Then $$m^2 = +I, \quad z = xI + m\sqrt{p}$$.

Similarly, a 2×2 matrix can also be expressed in polar coordinates with the caveat that there are two connected components of the group of units in the dual number plane, and four components in the split-binarion plane.

Projective group
A given 2 × 2 real matrix with ad ≠ bc acts on projective coordinates [x : y] of the real projective line P(R) as a linear fractional transformation:
 * $$[x : y] \begin{pmatrix}a & c \\ b & d \end{pmatrix} \ = \ [ax + by: \ cx + dy].$$ When cx + dy = 0, the image point is the point at infinity, otherwise
 * $$[ax + by:\ cx + dy] \ \thicksim \left[\frac{ax + by} {cx + dy} : \ 1\right] .$$

Rather than acting on the plane as in the section above, a matrix acts on the projective line P(R), and all proportional matrices act the same way.

Let p = ad – bc ≠ 0. Then
 * $$\begin{pmatrix}a & c \\ b & d \end{pmatrix} \times \begin{pmatrix} d & -c \\ -b & a \end{pmatrix} \ = \ \begin{pmatrix} p & 0 \\ 0 & p \end{pmatrix} .$$

The action of this matrix on the real projective line is
 * $$[x : y] \begin{pmatrix}p & 0 \\ 0 & p \end{pmatrix} \ = \ [px : py] \thicksim [x : y] $$ because of projective coordinates,

so that the action is that of the identity mapping on the real projective line. Therefore,
 * $$\begin{pmatrix}a & c \\ b & d \end{pmatrix} \ \text{and} \ \begin{pmatrix} d & -c \\ -b & a \end{pmatrix} $$ act as multiplicative inverses.

The projective group starts with the group of units GL(2,R) of M(2,R), and then relates two elements if they are proportional, since proportional actions on P(R) are identical: PGL(2,R) = GL(2,R)/~ where ~ relates proportional matrices. Every element of the projective linear group PGL(2,R) is an equivalence class under ~ of proportional 2 × 2 real matrices.

Autonomous differential equation
The differential equation $$f^\prime =a f$$ has solution $$f(t) = \exp(at) + C,$$ where a is a given constant and C is an arbitrary constant.

Using division binarions, the equation $$f^\prime =a f$$ may be interpreted as a tangent slope to a curve parametrized by t : for i2 = − 1, the differential equation $$f^\prime =ai f$$ has solution $$f(t) = \exp(a i t) + C.$$

Similarly, for j2 = +1, the differential equation $$f^\prime =a j f$$ has solution $$f(t) = \exp(a j t) = \cosh at + j \sinh at ,$$ a branch of the unit hyperbola.

In the autonomous differential equation $$f^\prime =A f ,$$ the matrix A corresponds to a constant binarion that relates the slope of the tangent and the curve. The solution of the matrix differential equation is given by the exponential function, using this constant as a cofactor in the argument. The solution is periodic when the constant is a division binarion, and not when it is a split-binarion. Evidently the constant also determines which subalgebra of M(2,R) contains the solution curve.

Whereas linear algebra is premised on simultaneous linear equations, there is the existence theorem for solution of a system of differential equations
 * $$\frac{du_i}{dt} = \sum_{k=1}^{p} c_{ik} u_k \quad (i = 1,... p)\quad \text{where the}\quad c_{ik}$$ are continuous functions.

Here p = 2, the matrix is constant, and the solution is exhibited. However, some notational gymnastics are expected of the mathematical reader. Following tradition, the matrix is written to the left and function notation is employed. So rather than row vectors fed into the matrix in previous sections, the function is read as a column vector, which the reader must reconstruct from a binarion:

title: Abstract Algebra/2x2 real matrices


text:
User talk:The Bellair Plug

Hello, please see how I've changed your pages. Individual books sections should be indented under a main page. E.g., named Book/Page1 and not Page1. Please make sure you create new pages in this structure to avoid someone having to fix it for you later. Also, when creating new pages it is a good idea to add to each page to automatically catalogue them into the structure used at Wikibooks. Thanks. QuiteUnusual (discuss • contribs) 09:19, 12 February 2021 (UTC)

Blocked
You cannot edit indefinitely due to disruptive editing. You may appeal this action with a reasonable argument by adding the text below.

Hi, I've blocked you since it appears that you are trying to promote a service or entity of yours (or yourself), and this is corroborated with the title of your wikibook, your username, and similar contributions on other projects (see the blocking policy). This needs to be explained. Leaderboard (discuss • contribs) 15:44, 13 February 2021 (UTC)

title: User talk:The Bellair Plug


text:
Understanding Air Safety in the Jet Age/Fire Down Below - ValuJet Flight 592

Fires can occur anywhere. The most common, perhaps unsurprisingly, are engine fires. But bad decisions and bad practice can put a plane at risk from fire in more unusual ways. ValuJet Flight 592 was a DC-9 on a domestic passenger flight between Miami International Airport, in Florida, and Hartsfield-Jackson Atlanta International Airport in Georgia. It disappeared over the Florida Everglades on 11 May 1996. There were 105 passengers on board, as well as a crew of two pilots and three flight attendants, bringing the total number of people on board to 110. At 2:04 pm, 10 minutes before the disaster, the DC-9 took off from runway 9L and began a normal climb.

At 2:10 pm, Captain Candalyn Kubeck and First Officer Richard Hazen heard a loud bang in their headphones, and noticed the plane was losing electrical power. Seconds later, flight attendant Mandy Summers entered the cockpit and advised the flight crew of a fire in the passenger cabin. Passengers' shouts of "fire, fire, fire" were recorded on the plane's cockpit voice recorder when the cockpit door was opened. Though the ValuJet flight attendant manual stated that the cockpit door should not be opened when smoke or other harmful gases might be present in the cabin, the intercom was disabled and there was no other way to inform the pilots of what was happening.

Kubeck and Hazen immediately asked air traffic control for a return to Miami due to smoke in the cockpit and cabin, and were given instructions for a return to the airport. One minute later, Hazen requested the nearest available airport. Kubeck began to turn the plane left in preparation for the return to Miami.

Flight 592 disappeared from radar at 2:13:42 pm. It rolled onto its side and crashed to the ground nose-first in the Francis S. Taylor Wildlife Management Area in the Everglades, a few miles west of Miami, at a speed in excess of 500 mph. The crew continued to fly the plane until about seven seconds before impact, likely until the front left floor beams collapsed and caused failure of the flight controls. Everyone on board was killed. Recovery of the aircraft and victims was made extremely difficult by the location of the crash. The nearest road of any kind was more than a quarter of a mile away from the crash scene, and the location of the crash itself was a deep-water swamp. The DC-9 shattered on impact leaving very few large portions of the plane intact. Sawgrass, alligators, and risk of bacterial infection from cuts plagued searchers involved in the recovery effort. No intact bodies were ever recovered, only human remains.

Investigation
The NTSB investigation eventually determined that the fire that downed Flight 592 began in a cargo compartment below the passenger cabin. The cargo compartment was of a Class D design, in which fire suppression is accomplished by sealing off the hold from outside air. Any fire in such an airtight compartment will in theory quickly exhaust all available oxygen and then burn itself out. As the fire suppression is accomplished without any intervention by the crew, such holds are not equipped with smoke detectors. However, the NTSB determined that just before takeoff, expired chemical oxygen generators were placed in the cargo compartment in five boxes marked COMAT (Company-Owned MATerial) by ValuJet's maintenance contractor, SabreTech, in contravention of FAA regulations forbidding the transport of hazardous materials in aircraft cargo holds. Failure to cover the firing pins for the generators with the prescribed plastic caps made an accidental activation much more likely. Rather than covering the firing pins, the SabreTech workers simply taped the cords around the cans, or cut them, and used tape to stick the ends down. It is also possible that the cylindrical, tennis ball can-sized generators were loaded on board in the mistaken belief that they were just empty canisters, thus being certified as safe to transport in an aircraft cargo compartment. SabreTech employees indicated on the cargo manifest that the "oxy canisters" were "empty" instead of being expired oxygen generators. ValuJet employees interpreted this to mean that they were empty oxygen canisters, when in fact they were neither simple oxygen canisters, nor empty.

Chemical oxygen generators, when activated, produce oxygen. As a byproduct of the exothermic chemical reaction, they also produce a great quantity of heat. These two together were sufficient not only to start an accidental fire, but also to produce enough oxygen to keep the fire burning. The fire risk was made much worse by the presence of combustible aircraft wheels in the hold. Two main tyres and wheels and a nose tyre and wheel were also included in the COMAT. NTSB investigators theorized that when the plane experienced a slight jolt while taxiing on the runway, an oxygen generator activated, producing oxygen and heat. Laboratory testing showed that canisters of the same type could heat nearby materials up to 250C, enough to ignite a smouldering fire. The oxygen from the generators fed the resulting fire in the cargo hold without any need for outside air, defeating the airtight fire suppression design. A pop and jolt heard on the cockpit voice recorder and correlated with a brief and dramatic spike in the altimeter reading in the flight data recorder were attributed to the sudden cabin pressure change caused by a semi-inflated aircraft wheel in the cargo hold exploding in the fire.

Smoke detectors in the cargo holds can alert the flight crew of a fire long before the problem becomes apparent in the cabin, and a fire suppression system buys valuable time to land the plane safely. In February 1998, the FAA issued revised standards requiring all Class D cargo holds to be converted by early 2001 to Class C or E; these types of holds have additional fire detection and suppression equipment. For the victims it was far too late.

The NTSB report placed responsibility for the accident on three parties:
 * SabreTech, for improperly packaging and storing hazardous materials,
 * ValuJet, for not supervising SabreTech, and
 * the FAA, for not mandating smoke detection and fire suppression systems in cargo holds.

ValuJet was grounded by the FAA on June 16, 1996. It was allowed to resume flying again on September 30, but never recovered from the crash. In 1997, the company merged with AirTran Airways. Although ValuJet was the nominal survivor, the ValuJet name was so tarnished by this time that it was scrapped in favor of the AirTran name. In 2006, AirTran did not make any major announcements on the crash's 10th anniversary out of respect for the victims' families.

Many families of the Flight 592 victims were outraged that ValuJet was not prosecuted, given the airline's poor safety record. ValuJet's accident rate was not only one of the highest in the low-fare sector, but 14 times higher than those of the major airlines. In the aftermath of the accident, an internal FAA memo surfaced questioning whether ValuJet should have been allowed to stay in the air. The victims' families also point to statements made by ValuJet officials immediately after the crash that appeared to indicate the company knew the generators were on the plane, and in fact had ordered them returned to Atlanta rather than properly disposed of in Miami.


text:
User talk:Lirazelf

Welcome, Lirazelf!

If you have any questions, you can ask in the assistance reading room or possibly contact me personally. Thank you for encouraging us to be creative and artistic. I especially liked "Scribbling On Regardless/Making a sketchbook". --DavidCary (discuss • contribs) 17:58, 12 February 2021 (UTC)

title: User talk:Lirazelf


text:
Oberon/V2/OCC

MODULE OCC; (*NW 30.5.87 / 16.3.91*) IMPORT Files, OCS, OCT; CONST CodeLength = 18000; LinkLength = 250; ConstLength = 3500; EntryLength = 64; CodeLim = CodeLength - 100; MaxPtrs = 64; MaxRecs = 32; MaxComs = 40; MaxExts = 7; (*instruction format prefixes*) F6 = 4EH; F7 = 0CEH; F9 = 3EH; F11 = 0BEH; (*object and item modes*) Var = 1; VarX = 2; Ind = 3; IndX = 4; RegI = 5; RegX = 6; Abs = 7; Con = 8; Stk = 9; Coc = 10; Reg = 11; Fld = 12; Typ = 13; LProc = 14; XProc = 15; SProc = 16; CProc = 17; IProc = 18; Mod = 19; Head = 20; (*structure forms*) Undef = 0; Byte = 1; Bool = 2; Char = 3; SInt = 4; Int = 5; LInt = 6; Real = 7; LReal = 8; Set = 9; String = 10; NilTyp = 11; NoTyp = 12; Pointer = 13; ProcTyp = 14; Array = 15; DynArr = 16; Record = 17; TYPE Argument = RECORD form, gen, inx: INTEGER; d1, d2: LONGINT END ; VAR pc*, level*: INTEGER; wasderef*: OCT.Object; typchk*: BOOLEAN; RegSet*, FRegSet: SET; lnkx, conx, nofptrs, nofrec: INTEGER; PtrTab: ARRAY MaxPtrs OF LONGINT; RecTab: ARRAY MaxRecs OF OCT.Struct; constant: ARRAY ConstLength OF CHAR; code: ARRAY CodeLength OF CHAR; link: ARRAY LinkLength OF INTEGER; entry: ARRAY EntryLength OF INTEGER; PROCEDURE GetReg*(VAR x: OCT.Item); VAR i: INTEGER; BEGIN i := 7; x.mode := Reg; LOOP IF ~(i IN RegSet) THEN x.a0 := i; INCL(RegSet,i); EXIT END ; IF i = 0 THEN x.a0 := 0; OCS.Mark(215); EXIT ELSE DEC(i) END ; END END GetReg; PROCEDURE GetFReg*(VAR x: OCT.Item); VAR i: INTEGER; BEGIN i := 6; x.mode := Reg; LOOP IF ~(i IN FRegSet) THEN x.a0 := i; INCL(FRegSet,i); EXIT END ; IF i = 0 THEN x.a0 := 0; OCS.Mark(216); EXIT ELSE i := i-2 END END END GetFReg; PROCEDURE FreeRegs*(r: SET); BEGIN RegSet := r; FRegSet := {} END FreeRegs; PROCEDURE AllocInt*(k: INTEGER); BEGIN IF conx < ConstLength-1 THEN constant[conx] := CHR(k); INC(conx); constant[conx] := CHR(k DIV 100H); INC(conx) ELSE OCS.Mark(230); conx := 0 END END AllocInt; PROCEDURE AllocString*(VAR s: ARRAY OF CHAR; VAR x: OCT.Item); VAR i: INTEGER; ch: CHAR; BEGIN INC(conx, (-conx) MOD 4); i := 0; REPEAT ch := s[i]; INC(i); IF conx >= ConstLength THEN OCS.Mark(230); conx := 0 END ; constant[conx] := ch; INC(conx) UNTIL ch = 0X; x.lev := 0; x.a0 := conx - i; x.a1 := i 	END AllocString; PROCEDURE AllocBounds*(min, max: INTEGER; VAR adr: LONGINT); BEGIN INC(conx, (-conx) MOD 4); adr := conx; AllocInt(max); AllocInt(min) END AllocBounds; PROCEDURE PutByte*(x: LONGINT); BEGIN code[pc] := CHR(x); INC(pc) END PutByte; PROCEDURE PutWord*(x: LONGINT); BEGIN code[pc] := CHR(x DIV 100H); INC(pc); code[pc] := CHR(x); INC(pc) END PutWord; PROCEDURE PutDbl(x: LONGINT); VAR i: INTEGER; BEGIN i := -32; REPEAT INC(i, 8); code[pc] := CHR(ASH(x, i)); INC(pc) UNTIL i = 0 END PutDbl; PROCEDURE PutDisp*(x: LONGINT); BEGIN IF x < 0 THEN IF x >= -40H THEN code[pc] := CHR(x+80H); INC(pc) ELSIF x >= -2000H THEN PutWord(x+0C000H) ELSE PutDbl(x) END ELSIF x < 40H THEN code[pc] := CHR(x); INC(pc) ELSIF x < 2000H THEN PutWord(x+8000H) ELSE PutDbl(x - 40000000H) END END PutDisp; PROCEDURE PutArg(VAR z: Argument); BEGIN CASE z.form OF 			0: IF z.inx = 1 THEN code[pc] := CHR(z.d1); INC(pc) ELSIF z.inx = 2 THEN PutWord(z.d1) ELSIF z.inx = 4 THEN PutDbl(z.d1) ELSE PutDbl(z.d2); PutDbl(z.d1) END | 1: PutDisp(z.d1) | 2, 5: 		| 3, 6: PutDisp(z.d1) | 4, 7: PutDisp(z.d1); PutDisp(z.d2) END END PutArg; PROCEDURE PutF3*(op: INTEGER); BEGIN code[pc] := CHR(op); INC(pc); code[pc] := CHR(op DIV 100H); INC(pc) END PutF3; PROCEDURE Operand(VAR x: OCT.Item; VAR z: Argument); VAR F: INTEGER; PROCEDURE downlevel(VAR gen: INTEGER); VAR n, op: INTEGER; b: OCT.Item; BEGIN GetReg(b); n := level - x.lev; gen := SHORT(b.a0) + 8; op := SHORT(b.a0)*40H - 3FE9H; IF n = 1 THEN PutF3(op); PutDisp(8); (*MOVD 8(FP) Rb*) ELSE PutF3(op - 4000H); PutDisp(8); PutDisp(8); (*MOVD 8(8(FP)) Rb*) WHILE n > 2 DO DEC(n); PutF3((SHORT(b.a0)*20H + SHORT(b.a0))*40H + 4017H); PutDisp(8) END END ; END downlevel; PROCEDURE index; VAR s: LONGINT; BEGIN s := x.typ.size; IF s = 1 THEN z.gen := 1CH ELSIF s = 2 THEN z.gen := 1DH ELSIF s = 4 THEN z.gen := 1EH ELSIF s = 8 THEN z.gen := 1FH ELSE z.gen := 1CH; PutByte(F7); PutByte(x.a2 MOD 4 * 40H + 23H); PutByte(x.a2 DIV 4 + 0A0H); PutWord(0); PutWord(s) (*MUL r s*) END ; END index; BEGIN F := x.mode; CASE x.mode OF 			Var: IF x.lev = 0 THEN z.gen := 1AH; z.d1 := x.a0; z.form := 3 ELSIF x.lev < 0 THEN (*EXT*) z.gen := 16H; z.d1 := -x.lev; z.d2 := x.a0; z.form := 4 ELSIF x.lev = level THEN z.gen := 18H; z.d1 := x.a0; z.form := 3 ELSIF x.lev+1 = level THEN z.gen := 10H; z.d1 := 8; z.d2 := x.a0; z.form := 4 ELSE downlevel(z.gen); z.d1 := x.a0; z.form := 3 END | Ind: IF x.lev = 0 THEN z.gen := 12H; z.d1 := x.a0; z.d2 := x.a1; z.form := 4 ELSIF x.lev = level THEN z.gen := 10H; z.d1 := x.a0; z.d2 := x.a1; z.form := 4 ELSE downlevel(z.gen); PutF3((z.gen*20H + z.gen-8)*40H + 17H); PutDisp(x.a0); z.d1 := x.a1; z.form := 3 END | RegI: z.gen := SHORT(x.a0)+8; z.d1 := x.a1; z.form := 3 | VarX: index; IF x.lev = 0 THEN z.inx := 1AH; z.d1 := x.a0; z.form := 6 ELSIF x.lev < 0 THEN (*EXT*) z.inx := 16H; z.d1 := -x.lev; z.d2 := x.a0; z.form := 7 ELSIF x.lev = level THEN z.inx := 18H; z.d1 := x.a0; z.form := 6 ELSIF x.lev+1 = level THEN z.inx := 10H; z.d1 := 8; z.d2 := x.a0; z.form := 7 ELSE downlevel(z.inx); z.d1 := x.a0; z.form := 6 END ; z.inx := z.inx*8 + SHORT(x.a2) | IndX: index; IF x.lev = 0 THEN z.inx := 12H; z.d1 := x.a0; z.d2 := x.a1; z.form := 7 ELSIF x.lev = level THEN z.inx := 10H; z.d1 := x.a0; z.d2 := x.a1; z.form := 7 ELSE downlevel(z.inx); PutF3((z.inx*20H + z.inx-8)*40H + 17H); PutDisp(x.a0); z.d1 := x.a1; z.form := 6 END ; z.inx := z.inx * 8 + SHORT(x.a2) | RegX: index; z.inx := SHORT((x.a0+8)*8 + x.a2); z.d1 := x.a1; z.form := 6 | Con: CASE x.typ.form OF 				Undef, Byte, Bool, Char, SInt: z.gen := 14H; z.inx := 1; z.d1 := x.a0; z.form := 0 | Int: z.gen := 14H; z.inx := 2; z.d1 := x.a0; z.form := 0 | LInt, Real, Set, Pointer, ProcTyp, NilTyp: z.gen := 14H; z.inx := 4; z.d1 := x.a0; z.form := 0 | LReal: z.gen := 14H; z.inx := 8; z.d1 := x.a0; z.d2 := x.a1; z.form := 0 | String: z.gen := 1AH; z.d1 := x.a0; z.form := 3 END | Reg: z.gen := SHORT(x.a0); z.form := 2 | Stk: z.gen := 17H; z.form := 2 | Abs: z.gen := 15H; z.form := 1; z.d1 := x.a0 | Coc, Fld .. Head: OCS.Mark(126); x.mode := Var; z.form := 0 END END Operand; PROCEDURE PutF0*(cond: LONGINT); BEGIN code[pc] := CHR(cond*10H + 10); INC(pc) END PutF0; PROCEDURE PutF1*(op: INTEGER); BEGIN code[pc] := CHR(op); INC(pc) END PutF1; PROCEDURE PutF2*(op: INTEGER; short: LONGINT; VAR x: OCT.Item); VAR dst: Argument; BEGIN Operand(x, dst); code[pc] := CHR(SHORT(short) MOD 2 * 80H + op); INC(pc); code[pc] := CHR(dst.gen*8 + SHORT(short) MOD 10H DIV 2); INC(pc); IF dst.form > 4 THEN code[pc] := CHR(dst.inx); INC(pc) END ; PutArg(dst) END PutF2; PROCEDURE PutF4*(op: INTEGER; VAR x, y: OCT.Item); VAR dst, src: Argument; BEGIN Operand(x, dst); Operand(y, src); code[pc] := CHR(dst.gen MOD 4 * 40H + op); INC(pc); code[pc] := CHR(src.gen*8 + dst.gen DIV 4); INC(pc); IF src.form > 4 THEN code[pc] := CHR(src.inx); INC(pc) END ; IF dst.form > 4 THEN code[pc] := CHR(dst.inx); INC(pc) END ; PutArg(src); PutArg(dst) END PutF4; PROCEDURE Put*(F, op: INTEGER; VAR x, y: OCT.Item); VAR dst, src: Argument; BEGIN Operand(x, dst); Operand(y, src); code[pc] := CHR(F); INC(pc); code[pc] := CHR(dst.gen MOD 4 * 40H + op); INC(pc); code[pc] := CHR(src.gen*8 + dst.gen DIV 4); INC(pc); IF src.form > 4 THEN code[pc] := CHR(src.inx); INC(pc) END ; IF dst.form > 4 THEN code[pc] := CHR(dst.inx); INC(pc) END ; PutArg(src); PutArg(dst) END Put; PROCEDURE AllocTypDesc*(typ: OCT.Struct); (* typ.form = Record *) BEGIN INC(conx, (-conx) MOD 4); typ.mno := 0; typ.adr := conx; IF typ.n > MaxExts THEN OCS.Mark(233) ELSIF nofrec < MaxRecs THEN PtrTab[nofptrs] := conx; INC(nofptrs); RecTab[nofrec] := typ; INC(nofrec); AllocInt(0); AllocInt(0) ELSE OCS.Mark(223) END END AllocTypDesc; PROCEDURE InitTypDescs*; VAR x, y: OCT.Item; i: INTEGER; typ: OCT.Struct; BEGIN x.mode := Ind; x.lev := 0; y.mode := Var; i := 0; WHILE i < nofrec DO typ := RecTab[i]; INC(i); x.a0 := typ.adr; WHILE typ.BaseTyp # NIL DO (*initialization of base tag fields*) x.a1 := typ.n * 4; y.lev := -typ.mno; y.a0 := typ.adr; PutF4(17H, x, y); typ := typ.BaseTyp END END END InitTypDescs; PROCEDURE SaveRegisters*(VAR gR, fR: SET; VAR x: OCT.Item); VAR i, r, m: INTEGER; t: SET; BEGIN t := RegSet; IF x.mode IN {Reg, RegI, RegX} THEN EXCL(RegSet, x.a0) END ; IF x.mode IN {VarX, IndX, RegX} THEN EXCL(RegSet, x.a2) END ; gR := RegSet; fR := FRegSet; IF RegSet # {} THEN i := 0; r := 1; m := 0; REPEAT IF i IN RegSet THEN INC(m, r) END ; INC(r, r); INC(i) UNTIL i = 8; PutF1(62H); PutByte(m) END ; RegSet := t - RegSet; i := 0; WHILE FRegSet # {} DO 			IF i IN FRegSet THEN PutF1(F11); PutF3(i*800H + 5C4H); EXCL(FRegSet, i) 			END ; INC(i, 2) END END SaveRegisters; PROCEDURE RestoreRegisters*(gR, fR: SET; VAR x: OCT.Item); VAR i, r, m: INTEGER; y: OCT.Item; BEGIN RegSet := gR; FRegSet := fR; i := 8; (*set result mode*) x.mode := Reg; x.a0 := 0; IF (x.typ.form = Real) OR (x.typ.form = LReal) THEN IF 0 IN fR THEN GetFReg(y); Put(F11, 4, y, x); x.a0 := y.a0 END ; INCL(FRegSet, 0) ELSE IF 0 IN gR THEN GetReg(y); PutF4(17H, y, x); x.a0 := y.a0 END ; INCL(RegSet, 0) END ; WHILE fR # {} DO 			DEC(i, 2); IF i IN fR THEN PutF1(F11); PutF3(i*40H - 47FCH); EXCL(fR, i) 			END END ; IF gR # {} THEN i := 8; r := 1; m := 0; REPEAT DEC(i); IF i IN gR THEN INC(m, r) END ; INC(r, r) 			UNTIL i = 0; PutF1(72H); PutF1(m) END END RestoreRegisters; PROCEDURE DynArrAdr*(VAR x, y: OCT.Item); (* x := ADR(y) *) VAR l, z: OCT.Item; BEGIN WHILE y.typ.form = DynArr DO					(* index with 0 *) IF y.mode = IndX THEN l.mode := Var; l.a0 := y.a0 + y.typ.adr; l.lev := y.lev; (* l = actual dimension length - 1 *) z.mode := Con; z.a0 := 0; z.typ := OCT.inttyp; Put(2EH, SHORT(y.a2)*8+5, z, l) (* INDEXW inxreg, l, 0 *) END; y.typ := y.typ.BaseTyp END; IF (y.mode = Var) OR (y.mode = Ind) & (y.a1 = 0) THEN y.mode := Var; PutF4(17H, x, y)				(* MOVD *) ELSE PutF4(27H, x, y); x.a1 := 0						(* ADDR *) END END DynArrAdr; PROCEDURE Entry*(i: INTEGER): INTEGER; BEGIN RETURN entry[i] END Entry; PROCEDURE SetEntry*(i: INTEGER); BEGIN entry[i] := pc 	END SetEntry; PROCEDURE LinkAdr*(m: INTEGER; n: LONGINT): INTEGER; BEGIN IF lnkx >= LinkLength THEN OCS.Mark(231); lnkx := 0 END ; link[lnkx] := m*100H + SHORT(n); INC(lnkx); RETURN lnkx-1 END LinkAdr; PROCEDURE SetLinkTable*(n: INTEGER); BEGIN (*base addresses of imported modules*) lnkx := 0; WHILE lnkx < n DO link[lnkx] := lnkx*100H + 255; INC(lnkx) END END SetLinkTable; PROCEDURE fixup*(loc: LONGINT); (*enter pc at loc*) VAR x: LONGINT; BEGIN x := pc - loc + 8001H; code[loc] := CHR(x DIV 100H); code[loc+1] := CHR(x) END fixup; PROCEDURE fixupC*(loc: LONGINT); VAR x: LONGINT; BEGIN x := pc+1 - loc; IF x > 3 THEN IF x < 2000H THEN364 code[loc] := CHR(x DIV 100H + 80H); code[loc+1] := CHR(x) ELSE OCS.Mark(211) END ELSE DEC(pc, 3) END END fixupC; PROCEDURE fixupL*(loc: LONGINT); VAR x: LONGINT; BEGIN x := pc+1 - loc; IF x > 5 THEN code[loc+2] := CHR(x DIV 100H); code[loc+3] := CHR(x) ELSE DEC(pc, 5) END END fixupL; PROCEDURE FixLink*(L: LONGINT); VAR L1: LONGINT; BEGIN WHILE L # 0 DO 			L1 := ORD(code[L])*100H + ORD(code[L+1]); fixup(L); L := L1 		END END FixLink; PROCEDURE FixupWith*(L, val: LONGINT); VAR x: LONGINT; BEGIN x := val MOD 4000H + 8000H; IF ABS(val) >= 2000H THEN OCS.Mark(208) END ; code[L] := CHR(x DIV 100H); code[L+1] := CHR(x) END FixupWith; PROCEDURE FixLinkWith*(L, val: LONGINT); VAR L1: LONGINT; BEGIN WHILE L # 0 DO 			L1 := ORD(code[L])*100H + ORD(code[L+1]); FixupWith(L, val+1 - L); L := L1 		END END FixLinkWith; PROCEDURE MergedLinks*(L0, L1: LONGINT): LONGINT; VAR L2, L3: LONGINT; BEGIN (*merge chains of the two operands of AND and OR *) IF L0 # 0 THEN L2 := L0; LOOP L3 := ORD(code[L2])*100H + ORD(code[L2+1]); IF L3 = 0 THEN EXIT END ; L2 := L3 			END ; code[L2] := CHR(L1 DIV 100H); code[L2+1] := CHR(L1); RETURN L0 		ELSE RETURN L1 		END END MergedLinks; PROCEDURE Init*; VAR i: INTEGER; BEGIN pc := 0; level := 0; lnkx := 0; conx := 0; nofptrs := 0; nofrec := 0; RegSet := {}; FRegSet := {}; i := 0; REPEAT entry[i] := 0; INC(i) UNTIL i = EntryLength END Init; PROCEDURE OutCode*(VAR name, progid: ARRAY OF CHAR; 							key: LONGINT; entno: INTEGER; datasize: LONGINT); CONST ObjMark = 0F8X; VAR ch: CHAR; f, i, m: INTEGER; K, s, s0, refpos: LONGINT; nofcom, comsize, align: INTEGER; obj: OCT.Object; typ: OCT.Struct; ObjFile: Files.File; out: Files.Rider; ComTab: ARRAY MaxComs OF OCT.Object; PROCEDURE W(n: INTEGER); BEGIN Files.Write(out, CHR(n)); Files.Write(out, CHR(n DIV 100H)) END W; 		PROCEDURE WriteName(VAR name: ARRAY OF CHAR; n: INTEGER); VAR i: INTEGER; ch: CHAR; BEGIN i := 0; REPEAT ch := name[i]; Files.Write(out, ch); INC(i) UNTIL ch = 0X; WHILE i < n DO Files.Write(out, 0X); INC(i) END END WriteName; PROCEDURE FindPtrs(typ: OCT.Struct; adr: LONGINT); VAR fld: OCT.Object; btyp: OCT.Struct; i, n, s: LONGINT; BEGIN IF typ.form = Pointer THEN IF nofptrs < MaxPtrs THEN PtrTab[nofptrs] := adr; INC(nofptrs) ELSE OCS.Mark(222) END ELSIF typ.form = Record THEN btyp := typ.BaseTyp; IF btyp # NIL THEN FindPtrs(btyp, adr) END ; fld := typ.link; WHILE fld # NIL DO 					IF fld.name # "" THEN FindPtrs(fld.typ, fld.a0 + adr) ELSIF nofptrs < MaxPtrs THEN PtrTab[nofptrs] := fld.a0 + adr; INC(nofptrs) ELSE OCS.Mark(222) END ; fld := fld.next END ELSIF typ.form = Array THEN btyp := typ.BaseTyp; n := typ.n; 				WHILE btyp.form = Array DO n := btyp.n * n; btyp := btyp.BaseTyp END ; IF (btyp.form = Pointer) OR (btyp.form = Record) THEN i := 0; s := btyp.size; WHILE i < n DO FindPtrs(btyp, i*s + adr); INC(i) END END END END FindPtrs; PROCEDURE PtrsAndComs; VAR obj, par: OCT.Object; u: INTEGER; BEGIN obj := OCT.topScope.next; WHILE obj # NIL DO 				IF obj.mode = XProc THEN par := obj.dsc; IF entry[SHORT(obj.a0)] = 0 THEN OCS.Mark(129) ELSIF (obj.marked) & (obj.typ = OCT.notyp) & ((par = NIL) OR (par.mode > 3) OR (par.a0 < 0)) THEN (*command*) u := 0; WHILE obj.name[u] > 0X DO INC(comsize); INC(u) END ; INC(comsize, 3); IF nofcom < MaxComs THEN ComTab[nofcom] := obj; INC(nofcom) ELSE OCS.Mark(232); nofcom := 0; comsize := 0 END END ELSIF obj.mode = Var THEN FindPtrs(obj.typ, obj.a0) END ; obj := obj.next END END PtrsAndComs; PROCEDURE OutRefBlk(first: OCT.Object; pc: INTEGER; name: ARRAY OF CHAR); VAR obj: OCT.Object; BEGIN obj := first; WHILE obj # NIL DO 				IF obj.mode IN {LProc, XProc, IProc} THEN OutRefBlk(obj.dsc, obj.a2, obj.name) END ; obj := obj.next END ; Files.Write(out, 0F8X); Files.WriteBytes(out, pc, 2); WriteName(name, 0); obj := first; WHILE obj # NIL DO 				IF (obj.mode = Var) OR (obj.mode = Ind) THEN f := obj.typ.form; IF (f IN {Byte .. Set, Pointer}) OR (f = Array) & (obj.typ.BaseTyp.form = Char) THEN Files.Write(out, CHR(obj.mode)); Files.Write(out, CHR(f)); Files.WriteBytes(out, obj.a0, 4); WriteName(obj.name, 0) END END ; obj:= obj.next END END OutRefBlk; BEGIN (*OutCode*) ObjFile := Files.New(name); IF ObjFile # NIL THEN Files.Set(out, ObjFile, 0); WHILE pc MOD 4 # 0 DO PutF1(0A2H) END ; (*NOP*) INC(conx, (-conx) MOD 4); nofcom := 0; comsize := 1; PtrsAndComs; align := comsize MOD 2; INC(comsize, align); (*header block*) Files.Write(out, ObjMark); Files.Write(out, "6"); W(0); W(0); W(entno); W(comsize); W(nofptrs); W(OCT.nofGmod); W(lnkx); Files.WriteBytes(out, datasize, 4); W(conx); W(pc); Files.WriteBytes(out, key, 4); WriteName(progid, 20); (*entry block*) Files.Write(out, 82X); Files.WriteBytes(out, entry, 2*entno); (*command block*) Files.Write(out, 83X); i := 0; (*write command names and entry addresses*) WHILE i < nofcom DO 				obj := ComTab[i]; WriteName(obj.name, 0); W(entry[obj.a0]); INC(i) END ; Files.Write(out, 0X); IF align > 0 THEN Files.Write(out, 0FFX) END ; (*pointer block*) Files.Write(out, 84X); i := 0; WHILE i < nofptrs DO 				IF PtrTab[i] < -4000H THEN OCS.Mark(225) END ; Files.WriteBytes(out, PtrTab[i], 2); INC(i) END ; (*import block*) Files.Write(out, 85X); i := 0; WHILE i < OCT.nofGmod DO 				obj := OCT.GlbMod[i]; Files.WriteBytes(out, obj.a1, 4); WriteName(obj.name, 0); Files.Write(out, 0X); INC(i) END ; (*link block*) Files.Write(out, 86X); Files.WriteBytes(out, link, 2*lnkx); (*data block*) Files.Write(out, 87X); Files.WriteBytes(out, constant, conx); (*code block*) Files.Write(out, 88X); Files.WriteBytes(out, code, pc); (*type block*) Files.Write(out, 89X); i := 0; WHILE i < nofrec DO 				typ := RecTab[i]; s := typ.size + 4; m := 4; s0 := 16; WHILE (m > 0) & (s > s0) DO INC(s0, s0); DEC(m) END ; IF s > s0 THEN s0 := (s+127) DIV 128 * 128 END ; nofptrs := 0; FindPtrs(typ, 0); s := nofptrs*2 + (MaxExts+1)*4; Files.WriteBytes(out, s, 2); (*td size*) Files.WriteBytes(out, typ.adr, 2); (*td adr*) K := LONG(nofptrs)*1000000H + s0; Files.WriteBytes(out, K, 4); K := 0; m := 0; REPEAT Files.WriteBytes(out, K, 4); INC(m) UNTIL m = MaxExts; m := 0; WHILE m < nofptrs DO 					Files.WriteBytes(out, PtrTab[m], 2); INC(m) END ; INC(i) END ; (*ref block*) refpos := Files.Pos(out); Files.Write(out, 8AX); OutRefBlk(OCT.topScope.next, pc, "$$"); Files.Set(out, ObjFile, 2); Files.WriteBytes(out, refpos, 4); IF ~OCS.scanerr THEN Files.Register(ObjFile) END ELSE OCS.Mark(153) END END OutCode; PROCEDURE Close*; VAR i: INTEGER; BEGIN i := 0; WHILE i < MaxRecs DO RecTab[i] := NIL; INC(i) END END Close; BEGIN NEW(wasderef) END OCC.

title: Oberon/V2/OCC


text:
User talk:71.224.193.74

Thanks for your contributions, Klaas `Z4␟` V: 17:47, 13 February 2021 (UTC)

title: User talk:71.224.193.74


text:
Brief History of Europe/Early modern period part 2

The early modern period was circa 1500–1750 AD, or ending at the French Revolution (1789), or at 1800. This second chapter on the early modern period discusses the Age of Discovery and colonial empires, Reformation and religious turmoil (including the Thirty Years' War), religious tensions in England and Scotland, and aspects of modernity.

Age of Discovery and colonial empires

Age of Discovery was from circa 1400 to 1800. Lands include the Americas (the New World); southern Africa; Congo River; West Indies; India; Maluku Islands (Spice Islands); Australasia; New Zealand; Antarctica; and Hawaii. Largely coincided with the Age of Sail (1571–1862).

Spanish and Portuguese empires
Spanish Empire (1492–1975) began when Christopher Columbus landed in the New World in 1492. This was followed by La Conquista, the Spanish colonization of the Americas by the conquistadores. Cortes conquered the Aztecs after the Spanish–Aztec War (1519–21). In 1532 Pizarro conquered the Inca empire in Peru. The Maya and many other peoples were also conquered. Ferdinand Magellan was a Portuguese explorer that organised the Spanish expedition that achieved the first global circumnavigation, 1519–1522, which was completed after his death by Juan Sebastián Elcano.

The Spanish Empire would be mostly divided into viceroyalties:

 * Viceroyalty of the Indies (1492–1526)
 * Viceroyalty of New Spain (1535–1821)
 * Viceroyalty of Peru (1542–1824)
 * Viceroyalty of New Granada (1717–1819)
 * Viceroyalty of the Río de la Plata (1776–1814)

The Viceroyalty of New Spain would include the Spanish East Indies (the Philippine Islands, the Mariana Islands, the Caroline Islands, parts of Taiwan, and parts of the Moluccas), and the Spanish West Indies (Cuba, Hispaniola, Puerto Rico, Jamaica, the Cayman Islands, Trinidad, and the Bay Islands). It also included a substantial portion of mainland Americas, including Spanish Louisiana.

The Portuguese Empire began in 1415. The Portuguese explorer Vasco da Gama, during his voyage to India (1497–1499), performed the first navigation around South Africa, to connect the Atlantic and the Indian oceans. This would contribute to Portuguese dominance in trade routes around Africa, particularly in the spice trade for around a century.

The Treaty of Tordesillas (1494) split the world between regions of Spanish and Portuguese influence, but this was ignored by other nations. This resulted in the Spanish being particularly active in Americas, while Portuguese influence in the Americas was limited to Brazil. The Portuguese established a large number of trading posts around the coasts of India, the East Indies, Africa and Arabia.

During the Iberian Union (1580-1640) the empires of Portugal and Spain were combined. With the Dutch–Portuguese War (1601–1663), Dutch attempts to secure Brazil and Angola from Portugal failed; the Dutch were the victors in the Cape of Good Hope and the East Indies, capturing Malacca, Ceylon, the Malabar Coast, and the Moluccas from the Portuguese, but not Macau.

Other empires
Major European colonial empires that followed the Spanish and Portuguese included:

 * English Empire, from 1583, which in 1707 became British.
 * French Empire, 1534–1980.
 * Dutch Empire, from 1581.

Other European colonial empires included the Danish overseas colonies and Swedish overseas colonies, and Russia greatly expanded in the early modern period. Non-European empires included the Great Qing Empire of China (1636–1912); the Ashanti Empire (1701–1896, a West African state of the Ashanti); and the Sikh Empire (1799–1846) and Maratha Empire (1674–1818) in India; and the Turkish Ottoman Empire around the Mediterranean and Black Sea. The Omani Empire (1696–1856) was a maritime empire in the Persian Gulf and Indian Ocean.

Dutch colonies were split between the Dutch East India Company (particularly in the East Indies and South Africa) and Dutch West India Company (mainly on the east coast of the Americas). The Dutch discovered Australia in 1606, and New Zealand in 1642; both of these would later colonised by the British. Anglo-Dutch Wars: were a series of four wars fought in the 17th and 18th centuries; largely a result of English and Dutch rivalry, mainly over trade and overseas colonies; most battles were fought at sea.

In North America, the British, French and Spanish dominated. South and Central America was mainly Spanish, with the Portuguese in Brazil. The Danish empire (1536–1953) included Norway, Iceland and Greenland. The Swedish empire (1638–1663 and 1784–1878) mainly consisted of Finland and the Baltic states.

In the late modern period (19th and early 20th centuries), Italy, Germany, Belgium, Japan and the USA established empires. The British Empire rapidly expanded in this period, and eventually included India, Australia and much of Africa. France colonized much of North Africa, and French Indochina (today Vietnam, Laos and Cambodia).

Slavery and piracy
Atlantic slave trade was a major source of wealth to Europe and its colonies; beginning with the Portuguese in 1526, it reached a zenith between 1780 and 1800.

In many cases it was a triangular trade; manufactured goods from Europe would be exchanged on the western coats of Africa for slaves; these slaves would be exported to North and South America, and the West Indies; and raw goods would be exported back to Europe. By volume, the empires trading slaves were the Portuguese, British, French, Spanish, and Dutch Empires. It is estimated that over 12 million Africans were shipped across the Atlantic, until it started being outlawed, firstly by Denmark in 1803, and then Britain in 1807. In 1888 Brazil became the last Western country to abolish slavery.

Golden Age of Piracy: spans the 1650s to the late 1720s. Main seas of piracy were the Caribbean Sea, the Atlantic Ocean, the Indian Ocean, and the Red Sea. It includes colorful pirates of the Caribbean such as Henry Morgan, William 'Captain' Kidd, 'Calico' Jack Rackham, Bartholomew Roberts and Blackbeard (Edward Teach).

Proto-Protestantism and earlier movements
The Roman Catholic religion has been challenged throughout its history. For example, in the High Middle Ages the Cathars of southern France had broken with Catholic doctrine; this led to the Albigensian Crusade (1209–1229) and genocide of the Cathars.

Proto-Protestantism were movements that challenged Catholicism, and influenced the Protestant Reformation; these included:

 * Hussites
 * A Christian movement of the pre-Protestant Bohemian Reformation. They followed Jan Hus, who was burnt at the stake in 1415. The Hussite Wars (1419–1434), resulted in victory for the Moderate Hussites, but defeat for the Radical Hussites; the Hussite religion was thus established in Bohemia for two centuries. After the Bohemian Revolt (1618–1620), the first phase of the Thirty Years' War, they were suppressed.

 * Waldensians
 * Founded in the 1170s by Peter Waldo, they would come to influence Anabaptism in particular.

 * Lollards
 * Founded by John Wycliffe, a 14th century English theologian, they played a part in the English Reformation.

Protestant Reformation
The Protestant Reformation was the establishment of Protestantism in a 16th-century western Europe, whose religion was dominated by the Roman Catholic Church.

The Protestant Reformation began in 1517, at Wittenberg, Saxony, when Martin Luther sent his Ninety-Five Theses to the Archbishop of Mainz; these protested against the sale of plenary (meaning unqualified) indulgences, which were sold by the clergy, and thought to remit the soul from punishment by God. Following the Diet of Worms of 1521 (an assembly of the Holy Roman Empire in the Imperial Free City of Worms), Luther was excommunication by Pope Leo X, and condemned as an outlaw by the Holy Roman Emperor Charles V.

Early Protestant movements included:

 * Lutheranism
 * Was based on the teachings of Martin Luther; Lutheran churches became dominant especially in the north of Germany and in the Scandinavian countries.

 * Calvinism, or the Reformed tradition
 * Was based on teachings which included those of Huldrych Zwingli and John Calvin. Calvinism spread to the Dutch Republic, Scotland (Presbyterians), and southern France (Huguenots), and to a lesser extent Germany, Hungary, and England (Puritans).

 * Anglicanism
 * Was created by Henry VIII, and became the dominant religion of England as the Church of England; it incorporated aspects from the Reformed and Lutheran churches. The Anglican Communion would spread to become the third largest Christian communion (after Catholicism and Eastern Orthodoxy).

 * Anabaptism
 * Was an early offshoot of Protestantism, and Anabaptist churches would include the Amish, Hutterites, and Mennonites fellowships.

 * Unitarianism
 * Is an nontrinitarian theological movement, and Unitarian churches began in the Polish–Lithuanian Commonwealth and Transylvania.

The Peace of Augsburg (1555) of Charles V, Holy Roman Emperor, and the Schmalkaldic League (of Lutheran princes within the Holy Roman Empire) allowed rulers within the Holy Roman Empire to choose either Lutheranism or Roman Catholicism as the official confession. Calvinism was not allowed in the Holy Roman Empire until the Peace of Westphalia (1648).

Counter-Reformation

Counter-Reformation: was a period of Catholic resurgence in response to the Reformation. It began with the 25 sessions of the Council of Trent (1545–1563), which led to reform of Church doctrines and teachings; the next ecumenical council was the First Vatican Council (1869).

There was also the formation of seminaries for the training of priests; the Jesuits, a new religious order, began missionary work, as well as the Augustinians, Franciscans, and Dominicans.

The Inquisition. which had started in 12th-century France, was used to enforce the Counter-Reformation and suppress heresy; it included the Spanish Inquisition, the Roman Inquisition, and the Portuguese Inquisition.

European wars of religion
European wars of religion of the 16th, 17th and early 18th centuries, were largely a result of the religious differences stemming from reform. They included the Thirty Years' War (see below),

The French Wars of Religion (1562–1598) were especially notable, with Roman Catholics against the Huguenots (French Protestants) following the death of Henry II of France; three millions deaths can be attributed to them. The Bartholomew's Day massacre (1572) was the massacre of between 30,000 and 100,000 Huguenots across France. Henry IV, a former Huguenot, issued the Edict of Nantes (1598) assuring conditional religious freedom. Later on, Huguenot rebellions (1621–1629) erupted after intolerance by Louis XIII. Louis XIV's Edict of Fontainebleau (1685) revoked the Edict of Nantes, and resulted in further persecution.

Other major European wars of religion include:
 * War of the Three Kingdoms (1639–1651) of England, Scotland, and Ireland;
 * Eighty Years' War (1568–1648) resulting in independence of the Dutch Republic from Spain;
 * German Peasants' War (1524–1525) of the Holy Roman Empire.

There was also a rise in witch trials between 1580 and 1630; over 50,000 people, mostly women, lost their lives, and religious tensions may have been a factor.

Thirty Years' War

The Thirty Years' War (1618–1648) was an especially devastating European war of religion. It was fought roughly between two factions (although some allegiances would change during it). These included:

 * The Catholic Habsburg states and allies, which included the Habsburg Austrian Monarchy and Habsburg Spain, and the Catholic League (mainly southern states of the Holy Roman Empire). The Holy Roman Emperors Ferdinand II and Ferdinand III, who reigned 1619–1637 and 1637–1657, spearheaded the Catholics; the Count of Tilly, and Albrecht von Wallenstein, were successful generals for the Catholic forces.
 * The anti-Habsburg states were mainly Protestant, with the notable exception of Catholic France. It also included the Scandinavian states of Denmark–Norway and Sweden; the Dutch Republic; and England and Scotland. It included some Holy Roman Empire states (like Bohemia, Electoral Palatinate, Saxony, and Brandenburg-Prussia), although some would join the fight against France. France was ruled by Louis XIII (1610–1643) and Louis XIV (1643–1715), and Cardinal Richelieu was First Minister of State (1624–1642).

There were many aspects to the war, but important ones include:

 * Bohemian Revolt (1618–1620): A revolt of the mainly Hussite population of Bohemia (see Proto-Protestant movements above) against the Catholic rule of the Habsburg Holy Roman Emperor Ferdnand II, who became King of Bohemia (1617–1619 and 1620 –1637). The 1618 Defenestration of Prague was when two Catholic nobleman and their secretary, who represented Ferdinand II, were thrown out of a window of Prague Castle by protesting Hussites; all three survived the fall. It ended in success for Ferdinand II, with the decisive Battle of White Mountain (1620), and many Bohemian nobles were executed.
 * Palatinate campaign (1620–1623): Frederick V of the Palatinate was a Calvinist, and had attempted to usurp Ferdinand II's rule of Bohemia, temporarily becoming King of Bohemia (1619–1620). An Austrian and Spanish Habsburg army invaded Electoral Palatinate to oust Frederick V; the conquest was successful, but the campaign widened the conflict.
 * Danish involvement (1625–1629): Christian IV of Denmark, King of Denmark–Norway, was a Lutheran, and invaded the Holy Roman Empire to support the Protestants; but he was soon forced to retreat. With the Treaty of Lübeck (1929), Denmark–Norway participation ended, and their nation would then decline.
 * Swedish involvement (1630–1648): Protestant Gustavus Adolphus of Sweden invaded the Holy Roman Empire with considerable success, with battles such as the Battle of Breitenfeld (1631). During this time, the Sack of Magdeburg (1631) was the destruction of the Protestant city of Magdeburg by Catholic forces. Adolphus was killed at the Battle of Lützen (1632), and succeeded by Christina, Queen of Sweden. After a crushing defeat at the Battle of Nördlingen (1634), Swedish military involvement ended for two years.
 * French involvement (1635–1648): Bourbon France, whose allies included Sweden and the Dutch Republic, fought against Habsburg Spain, allied with Habsburg Austria and the Holy Roman Empire; this began the Franco-Spanish War (1635–1659), and was despite the Bourbons and Habsburgs being Catholic. The Peace of Prague (1635) more or less ended Holy Roman Empire civil war aspects. The French had a great general in the Viscount of Turenne. It included the Battle of Rocroi (1643), a decisive French victory over the Spanish. There were important Swedish victories against the Holy Roman Empire at the Battle of Wittstock (1636) and Battle of Jankau (1645).

Other aspects of the Thirty Years' War, and parallel conflicts, included:

 * Involvement of Calvinist Transylvania (under Gabriel Bethlen), supported by the Ottomans, from 1619.
 * From 1619 the Dutch Republic became involved, despite the Twelve Years' Truce (1609–1621) between the Dutch Republic and Spain.
 * Protestant Huguenot rebellions in France, sporadically between 1621 and 1629, which were unsuccessful.
 * The Peasants' War in Upper Austria (1626), the unsuccessful attempt to free Upper Austria from Bavarian rule.
 * The War of the Mantuan Succession in northern Italy (1628–1631), a success for the French against the Habsburgs.
 * From 1940, the Reapers' War (or Catalan Revolt), and Portuguese Restoration War (see below).

Peace of Westphalia (1648) ended the Thirty Years' War. There were agreements between the Holy Roman Empire and France and Sweden, and between the Dutch and Spanish. But the Franco-Spanish War continued (see below).

 * There were a roughly eight million fatalities, including soldiers (700,000–1,800,000, mostly from disease) and civilians (3,500,000–6,500,000, mostly from disease and starvation). There was widespread famine and devastation of the Holy Roman Empire as a result of the war.
 * The war weakened the Holy Roman Emperor and the Habsburgs, with power returned to the Imperial Estates.
 * There was formal independence for the Dutch Republic with the end of the Eighty Years' War (the Dutch War of Independence, 1568–1648); and also for Switzerland.
 * Territorial changes included gains by France, Sweden, and Brandenburg-Prussia.
 * Princes within the Holy Roman Empire could determine their state's religion from Catholicism and Lutheranism, and now Calvinism was also acceptable.

Franco-Spanish War and Portuguese Restoration War
After 1648, the Franco-Spanish War (1635–1659) continued in Italy, the Low Countries, and Catalonia; the Portuguese Restoration War (1640–1668) in Portugal and Spain also continued. The Anglo-Spanish War (1654–1660) was related to the Franco-Spanish War.

 * The Reapers' War (1640–1659), or the Catalan Revolt, was a part of the Franco-Spanish War (1635–1659). It included the French occupation of Roussillon in the Eastern Pyrenees (1642). The Franco-Spanish War concluded with the Treaty of the Pyrenees (1659), and the Spanish ceded Northern Catalonia and other border territories to France; France also gained French Flanders.
 * The Portuguese Restoration War (1640–1668) resulted in the breaking up of the Iberian Union of Spain and Portugal, with England and France helping Portugal defeat Spain. With the Treaty of Lisbon (1668), Spain lost Portugal.

Conflict between France and Habsburg Spain would continue with later wars, the War of Devolution (1667–68), the Franco-Dutch War (1672–1678), the War of the Reunions (1683–1684), and the Nine Years' War (1688–1697).

Religious tensions in England and Scotland

Henry VIII of England (who reigned 1509–1547) was the second Tudor king after his father Henry VII. He oversaw the English Reformation, with the establishment of the Anglican faith and Church of England, and the Dissolution of the Monasteries. He also began the Tudor conquest of Ireland (1529–1603), which expanded English rule to all of Ireland; he also oversaw the legal union of England and Wales. Henry VIII was succeeded by three of his children:

 * Edward VI (who reigned 1547–1553), a Protestant Tudor king like his father; he died at the age of 15.
 * Mary I (who reigned 1553–1558), a Catholic Tudor queen. She was married to Philip II of Spain, and she attempted to reverse the English Reformation. Her persecution of Protestants gave her the nickname Bloody Mary.
 * Elizabeth I (who reigned 1558–1603), a Protestant and the last Tudor monarch. Her reign included the defeat of the Spanish Armada (1588), an attempted invasion by Philip II of Spain, who was a staunch Catholic. Unmarried, she was succeeded by James I of England.

The Scottish Reformation resulted in the establishment of Church of Scotland (or the Kirk), which is Presbyterian and predominantly Calvinist; John Knox was one of the leaders. The Catholic rule of Mary, Queen of Scots was followed by her son James VI of Scotland (1567–1625), a Protestant Stuart.

James VI of Scotland would become James I of England (1603–1625), the first Stuart monarch of England, and subsequent monarchs would rule Scotland, England, Wales, and Ireland. He survived an early attempted assassination by Catholics with the Gunpowder Plot (1605). James I was succeeded by his son Charles I.

Wars of the Three Kingdoms, Commonwealth, and Restoration
Charles I (who reigned 1625–1649) was a Protestant Stuart king. But he married a Catholic and had Catholic sympathies, which caused Parliamentary concerns, as did his outspoken belief in the "Divine Right of Kings". The Eleven Years' Tyranny (1629–1640) was when Charles I ruled under the Royal Prerogative, without recourse to Parliament. Puritans were English Protestants in the 16th and 17th centuries who sought to purify the Church of England of Roman Catholic practices, and the Eleven Years' Tyranny was a peak time for them leaving for New England.

Charles I's reign resulted in the Wars of the Three Kingdoms (1639–1651), and his execution in 1649. The "Three Kingdoms" were England (and Wales), Ireland, and Scotland, and the wars were partly religious in origin; they included the English Civil Wars (1642–1651). Parliamentarians ("Roundheads") would defeat the Royalists ("Cavaliers"). Thomas Fairfax was the Parliamentary commander-in-chief, replacing the Earl of Essex Robert Devereux; he led Parliament to many victories, including the crucial Battle of Naseby (1645), but he would be politically out-maneuvered by his subordinate Oliver Cromwell.

England then entered the Commonwealth of England (1649–1660), with Oliver Cromwell becoming Lord Protector (1653–1658). During the Commonwealth, Scotland lost some of its independence, which was reversed during the Restoration in Scotland (1660). Cromwell was a Puritan, and Puritans became especially significant during the Protectorate (1653–1659, the period with a Lord Protector). The ineffectual rule of Richard Cromwell, Oliver's son and Lord Protector (1658–1659), would eventually lead to the downfall of the Commonwealth.

The Restoration was the return of the monarchy, with Charles II (who reigned 1660–1685), a Protestant Stuart king with Catholic sympathies, and the son of Charles I. Anti-Catholic hysteria resulted in the Popish Plot (1678–81), an invented Catholic conspiracy to dethrone Charles II, perpetrated by Titus Oates; nine Jesuits were executed and twelve died in prison, and other Catholic religious orders were repressed. Charles dissolved the Parliament in 1681, ruling as a absolute monarch until his death. Having only had illegitimate children, Charles II was succeeded by his brother James II of England.

Glorious Revolution, and the last Stuarts
James II of England (VII of Scotland), who reigned 1685–1688, was the Stuart brother of Charles II. His reign ended with the Glorious Revolution (1688), his ousting by Parliament and the army of William of Orange, mainly over his Catholic religion.

After the Glorious Revolution, all further monarchs were Protestant. James II was succeeded by his Stuart daughters:

 * Mary II (who reigned 1689–1694), who had married to William of Orange (who reigned 1689–1702), who was William III of England and II of Scotland, and Stadtholder of the Dutch Republic.
 * Anne of Great Britain (who reigned 1702–1714) was the last Stuart monarch. During her reign the Acts of Union (1707) united the government of Scotland with England (and Wales), as the Kingdom of Great Britain (1707–1801); the Parliament of England became the Parliament of Great Britain; in 1801 it became the Parliament of the United Kingdom.

The Stuart dynasty (monarchs of Great Britain and Ireland 1603–1649 and 1660–1714) was succeeded by:

 * House of Hanover (1714–1901), which included the Georgian (1714–1830 or 1837) and Victorian (1837–1901) eras.
 * House of Saxe-Coburg and Gotha (1901–1917), which was renamed the House of Windsor (1917–present day).

Williamite War and Jacobite risings
During the Williamite War in Ireland (1689–1691), which took place in Ireland, James II was defeated by William of Orange. James left Ireland after a reverse at the Battle of the Boyne in 1690.

The Jacobite risings were failed Catholic uprisings that sought to instate James II and his descendants; they are named after Jacobus, which is Latin for James. Since 1603 Scotland had shared the same monarch as England (and Wales and Ireland). They took place mainly in Scotland, with the backing of Catholic Scottish Highlander clansmen.

The most important risings were:

 * Jacobite rising of 1689 (first rising) was a failed attempt to reinstate James II. It was followed by the Massacre of Glencoe (1692), the massacre of about 30 unarmed members of Clan MacDonald of Glencoe, allegedly for failing to pledge allegiance to William III and Mary II.
 * Jacobite rising of 1715 (the '15) was a failed attempt to instate James Edward Stuart ("the Old Pretender"), the son of James II. England was then ruled by the Hanoverian King George I.
 * Jacobite Rising of 1719 (the '19) was a smaller uprising of James Edward Stuart with the support of Spain.
 * Jacobite rising of 1745 (the '45) was a failed attempt to instate Charles Edward Stuart ("the Young Pretender" or "Bonnie Prince Charlie"), the son of James Edward Stuart. The Battle of Culloden (1746) ended the rising with a decisive government victory, whose army was commanded by the Duke of Cumberland; the English king at the time was the Hanoverian George II.

The Renaissance
The Renaissance (circa 1300 to circa 1600) began with the Italian Renaissance. Borrowed from French word "renaissance", it literally meant "rebirth", as it was seen as a rebirth of Classical learning and culture. There were developments in philosophy (particularly humanism), science, technology, and warfare. There were also artistic developments, including architecture, dance, fine arts, literature and music. There was renewed interest in Classical Roman and Greek texts, but also translations of Arabic texts. The invention of the printing press, which was greatly improved by the German Johannes Gutenberg circa 1439, helped in the dissemination of learning.

Proto-Renaissance in Italy (circa 1280-1400) writers included Dante Alighieri, who wrote the Divine Comedy (c. 1308 to 1320). Petrarch (1304–1374) was an early proponent of humanism. Giotto was an early artist. Early Renaissance in Italy (circa 1400-1495) artists included the sculptor Donatello; and the painters Masaccio, Sandro Botticelli, Giovanni Bellini, Filippo Lippi, and Paolo Uccello. Filippo Brunelleschi was one of the foremost architects and engineers.

The High Renaissance in Italy (circa 1495–1520) included Leonardo da Vinci, early Michelangelo, Raphael, and the architect Bramante, It also included Antonio da Correggio. It ended with the death of Raphael. Later painters included Titian, Tintoretto, and Paolo Veronese.

The House of Medici ruled Florence (as the Republic then Duchy of Florence, and as the Grand Duchy of Tuscany), for most of the period from 1434 to the early 18th century. They patronized many intellectuals associated with the Renaissance; these included Leonardo da Vinci, Michelangelo, Niccolò Machiavelli, Galileo Galilei and Sandro Botticelli. Lorenzo de’ Medici is particularly associated with this patronage.

The Roman Inquisition began in 1542, and suppressed some aspects of the Renaissance. It made some books forbidden, such as On the Revolutions of the Heavenly Sphere by Polish scientist Nicolaus Copernicus; first printed in 1543, it promoted the heliocentric theory of the Solar System. It also held trials against intellectuals; Galileo Galilei, who supported the work of Copernicus in his Dialogue Concerning the Two Chief World Systems (1632), was put on trial.

Outside of Italy, Renaissance ideas soon spread across Europe to countries such as England, France, Germany, Hungary, the Low Countries, Poland, Portugal, Russia, Spain, Croatia, and Scotland. In the English Renaissance, the works of William Shakespeare (1564–1616) are often regarded as the greatest in English literature. Other notable artists included: the German artists Hans Holbein the Younger, Hans Holbein the Elder, and Albrecht Dürer; the Dutch artists Hieronymus Bosch, Pieter Brueghel the Elder, Pieter Brueghel the Younger, and Jan van Eyck; and the Greek artist El Greco.

Baroque Period and Age of Enlightenment
Baroque Period (17th and 18th centuries) was characterised by highly ornate styles in architecture, music, painting, and sculpture. Artists included Velázquez, Caravaggio, Rembrandt, Rubens, Poussin, and Vermeer. Baroque composers included Johann Sebastian Bach, Antonio Vivaldi, George Frideric Handel, Claudio Monteverdi, and Henry Purcell. It was followed by the Classical period of music; roughly between 1730 and 1820, it included Joseph Haydn, Wolfgang Amadeus Mozart, Ludwig van Beethoven, and Franz Schubert. Rococo, or "Late Baroque", spread across Europe in the mid-18th century.

Age of Enlightenment or Age of Reason, was during the 17th and 18th centuries. Ideas that were developed were characterised by being secular, pluralistic, rule-of-law-based, with an emphasis on individual rights and freedoms. There was also an emphasis on science. Prominent scientists included Isaac Newton (1642–1727) and Gottfried Leibniz (1646–1716), who built on the earlier work of Francis Bacon (1561–1626), the father of empiricism. Prominent philosophers included:

 * French philosophers René Descartes (who contributed to rationalism), Voltaire (a particular advocate of freedom of speech and religion), Denis Diderot (and his Encyclopédie), and Montesquieu (and his theory of separation of powers).
 * English philosophers John Locke and Thomas Hobbes, who both contributed to empiricism and social contract theory.
 * Prussian-German philosopher Immanuel Kant, and the doctrine of transcendental idealism.
 * Dutch-Portuguese philosopher Baruch Spinoza, a rationalist.

Voltaire and Benjamin Franklin greatly influenced the French Revolution and the American Revolution. The encyclopedia Encyclopédie (1751–72), edited by Denis Diderot, was a great success of the period.

Enlightened absolutism, the use of the Enlightenment to espouse absolute monarchy, was a curious side effect; much later it was followed by the concept of the benevolent dictatorship. Joseph II, the Holy Roman Emperor 1765–1790, was a prominent monarch of the Enlightenment and enlightened absolutism, along with Catherine the Great of Russia, and Frederick the Great of Prussia.

Capitalism and mercantilism
 Rise of capitalism: capitalism became a dominant force in the sixteenth century, with the abolition of feudalism. It took its name from capital, defined by Adam Smith as "that part of man's stock which he expects to afford him revenue". The investment of capital became the primary factor in the accumulation of wealth.

Mercantilism, the exporting goods from countries, also rose in importance, particularly as a result of colonialism, with the trade of slaves and goods across the Atlantic Ocean being particularly important.


text:
User:Simulator-master/sandbox

This will be a article idea/draft/whatever page

=Magic or dunder methods(Object oriented programming)=

Introduction
The dunder or magic methods are useful when you call a instance of a class/object using certain functions,others are needed for other things

__init__ method
The  method is used to initialize the object, it is also the place where you can add arguments to the class, as shown:

The output is: foo How this works it that in ,there is   and   in the parenthesis,self "binds" it to the class,and foo,is an argument

title: User:Simulator-master/sandbox


text: Template:Color box

title: Template:Color box


text:
Template:Legend/styles.css

/* */

.legend { page-break-inside: avoid; break-inside: avoid-column; }

.legend-color { display: inline-block; min-width: 1.25em; height: 1.25em; line-height: 1.25; margin: 1px 0; text-align: center; border: 1px solid black; background-color: transparent; color: black; }

.legend-text {/*empty for now, but part of the design!*/}

title: Template:Legend/styles.css


text:
User:ErinAnnMcC

I am a literary historian and lecturer in digital humanities at the University of Newcastle, Australia. I am also the author of Doubtful Readers: Print, Poetry, and the Reading Public in Early Modern England (Oxford University Press, 2020). This is my first time using WikiBooks in a class, so please bear with me while we all learn together.

title: User:ErinAnnMcC