summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--080_blog/00040_Haskell/00010_Links-and-Notes-and-Literature/index.md57
-rw-r--r--080_blog/00040_Haskell/00065_Base64-Encoder/base64.cast314
-rw-r--r--080_blog/00040_Haskell/00065_Base64-Encoder/index.md16
-rw-r--r--080_blog/00040_Haskell/00200_Estatico-Page-Maker/index.md14
-rw-r--r--080_blog/00110_Fool-Operating-System/index.md76
-rw-r--r--pandoc.css65
-rw-r--r--pandoc_breezedark.css64
-rw-r--r--pandoc_espresso.css60
-rw-r--r--pandoc_haddock.css56
-rw-r--r--pandoc_kate.css64
-rw-r--r--pandoc_monochrome.css43
-rw-r--r--pandoc_pygments.css61
-rw-r--r--pandoc_tango.css60
-rw-r--r--pandoc_zenburn.css60
14 files changed, 711 insertions, 299 deletions
diff --git a/080_blog/00040_Haskell/00010_Links-and-Notes-and-Literature/index.md b/080_blog/00040_Haskell/00010_Links-and-Notes-and-Literature/index.md
index 6e82b3b..2eb1215 100644
--- a/080_blog/00040_Haskell/00010_Links-and-Notes-and-Literature/index.md
+++ b/080_blog/00040_Haskell/00010_Links-and-Notes-and-Literature/index.md
@@ -6,29 +6,62 @@
* **Real World Haskell** by Bryan O'Sullivan, Don Stewart, and John Goerzen
* **Parallel and Concurrent Programming in Haskell** by Simon Marlow
-* **Haskell Wiki** https://wiki.haskell.org
-* **UPENN CIS 194** https://www.seas.upenn.edu/~cis194/spring13/
-* **What I Wish I Knew When Learning Haskell** by Stephen Diehl
-* **Data61 Course** https://github.com/data61/fp-course
+* **Haskell Wiki** <https://wiki.haskell.org>
+* **UPENN CIS 194** <https://www.seas.upenn.edu/~cis194/spring13/>
+* **What I Wish I Knew When Learning Haskell** by Stephen Diehl <http://dev.stephendiehl.com/hask/>
+* **Data61 Course** <https://github.com/data61/fp-course>
* **Monads for functional programming (paper)** by Philip Wadler
* **Functional Pearl (paper)**
* **Why Functional Programming Matters (paper)**
-* **Mailing Lists** https://www.haskell.org/mailing-lists/
+* **Mailing Lists** <https://www.haskell.org/mailing-lists/>
* **IRC** #haskell at chat.freenode.at
-* **Monadic Warsaw**
+* **Monadic Warsaw**
-## Xmonad
+## xmonad-contrib contribution
-My little contribution to xmonad-contrib:
+Added a pretty printer for empty visible workspaces\
+<https://github.com/xmonad/xmonad-contrib/pull/241>
-* Added pretty printer for empty visible workspaces (wrapped in Maybe)
- https://github.com/xmonad/xmonad-contrib/pull/241
+## Some GHC Flags
-## GHC Flags (TODO: put here all the other flags I have documentend in this Makefile somweher :P )
- -gq ?
+ -v verbose mode
+ -O2 level 2 optimizations
+ -rtsopts allow +RTS flags
+ -prof enable basic time and allocation profiling
+ -auto-all cost centers on all top level functions
+ (you can also add them via the SCC pragma)
+ -caf-all generate data for CAFs (constant applicative forms)
+ -fforce-recomp force recompilation
+ -threaded Use threaed runtime
+ -eventlog enables +RTS -l flag
+
+ -Wall
+ -Werror
+
+ Notes: you will obtain the profiling versions of dependancies via:
+ stack install --profile [libraryname]
+
+ -fprof-auto replaced -auto-all
+ -fprof-cafs replaced -caf-all
+
+## Some +RTS flags
+
+ -K set stack limit
+ -s statistic reporting
+ -p profiling
+ -hc extract heap profile
+ -hy allocation by type
+ -hd allocation by constructor
+ -ix x is sampling frequency in seconds. e.g. 0.01)
+ -Nx x is number of cores to utilize
+ -l emit log file (can be used threadscope)
+ -ddump-simpl generate core
+
+ Note: render the heap profile as graph with: hp2ps -e8in -c file.hp
+ show eventlog with: threadscope file.eventlog
## monad transformers in action
diff --git a/080_blog/00040_Haskell/00065_Base64-Encoder/base64.cast b/080_blog/00040_Haskell/00065_Base64-Encoder/base64.cast
index 63fece1..54f3ab5 100644
--- a/080_blog/00040_Haskell/00065_Base64-Encoder/base64.cast
+++ b/080_blog/00040_Haskell/00065_Base64-Encoder/base64.cast
@@ -1,322 +1,226 @@
{
- "duration": 14.820928,
+ "command": null,
+ "width": 101,
"title": null,
+ "height": 6,
"env": {
"SHELL": "/bin/bash",
"TERM": "screen-256color"
},
- "width": 106,
"stdout": [
[
- 0.019966,
- "miguel@megaloman:~$ "
- ],
- [
- 1.524665,
- "t"
- ],
- [
- 0.08111,
- "h"
- ],
- [
- 0.095838,
- "i"
- ],
- [
- 0.118019,
- "s"
- ],
- [
- 0.086883,
- " "
- ],
- [
- 0.089573,
- "i"
- ],
- [
- 0.134283,
- "s"
- ],
- [
- 0.096031,
- " "
- ],
- [
- 0.114016,
- "a"
- ],
- [
- 0.166151,
- " "
- ],
- [
- 0.319094,
- "l"
- ],
- [
- 0.195916,
- "o"
- ],
- [
- 0.142042,
- "c"
+ 0.020042,
+ "miguel@megaloman:~/git/haskell/base64$ "
],
[
- 0.139961,
- "a"
+ 0.972847,
+ "cat /dev/urandom | pv | ./base64 > /dev/null "
],
[
- 0.07801,
- "l"
+ 0.43902,
+ "\r\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[1Pecho \"Welcome to Base64 encoding\" | ./base64"
],
[
- 0.081012,
- " "
- ],
- [
- 0.094941,
- "a"
- ],
- [
- 0.120898,
- "s"
- ],
- [
- 0.107959,
- "c"
- ],
- [
- 0.115993,
- "i"
- ],
- [
- 0.137871,
- "i"
+ 0.83889,
+ "\r\n"
],
[
- 0.205335,
- "n"
+ 0.001251,
+ "V2VsY29tZSB0byBCYXNlNjQgZW5jb2RpbmcK\r\n"
],
[
- 0.108673,
- "e"
+ 0.000356,
+ "miguel@megaloman:~/git/haskell/base64$ "
],
[
- 0.127436,
- "m"
+ 1.151505,
+ "echo \"Welcome to Base64 encoding\" | ./base64"
],
[
- 0.123916,
- "a"
+ 0.328933,
+ "\r\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[Ccat /dev/urandom | pv | ./base64 > /dev/null "
],
[
- 0.244565,
+ 0.833,
"\r\n"
],
[
- 0.000482,
- "bash: this: command not found\r\n"
+ 1.001665,
+ " 253MiB 0:00:01 [ 253MiB/s] [ <=> ]\r"
],
[
- 0.000346,
- "miguel@megaloman:~$ "
+ 0.999837,
+ " 500MiB 0:00:02 [ 247MiB/s] [ <=> ]\r"
],
[
- 1.012884,
- "this is a local asciinema"
+ 1.000048,
+ " 753MiB 0:00:03 [ 252MiB/s] [ <=> ]\r"
],
[
- 0.230737,
- "\r\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C"
+ 1.000117,
+ "1001MiB 0:00:04 [ 247MiB/s] [ <=> ]\r"
],
[
- 0.140235,
- "\u001b[1@e"
+ 0.999649,
+ "1.22GiB 0:00:05 [ 251MiB/s] [ <=> ]\r"
],
[
- 0.097927,
- "\u001b[1@c"
+ 1.000026,
+ "1.47GiB 0:00:06 [ 250MiB/s] [ <=> ]\r"
],
[
- 0.188824,
- "\u001b[1@j"
+ 1.000236,
+ "1.72GiB 0:00:07 [ 253MiB/s] [ <=> ]\r"
],
[
- 0.000974,
- "\u001b[1@o"
+ 1.000056,
+ "1.96GiB 0:00:08 [ 252MiB/s] [ <=> ]\r"
],
[
- 0.421424,
- "\b\u001b[1P"
+ 0.999645,
+ " 2.2GiB 0:00:09 [ 244MiB/s] [ <=> ]\r"
],
[
- 0.117902,
- "\b\u001b[1P"
+ 1.000274,
+ "2.45GiB 0:00:10 [ 253MiB/s] [ <=> ]\r"
],
[
- 0.208192,
- "\u001b[1@h"
+ 0.999751,
+ "2.69GiB 0:00:11 [ 244MiB/s] [ <=> ]\r"
],
[
- 0.115112,
- "\u001b[1@ "
+ 1.000191,
+ "2.93GiB 0:00:12 [ 252MiB/s] [ <=> ]\r"
],
[
- 0.012814,
- "\u001b[1@o"
+ 0.999772,
+ "3.18GiB 0:00:13 [ 248MiB/s] [ <=> ]\r"
],
[
- 0.295287,
- "\r\n"
+ 1.000312,
+ "3.43GiB 0:00:14 [ 257MiB/s] [ <=> ]\r"
],
[
- 0.000755,
- "bash: ech: command not found\r\n"
+ 0.999856,
+ "3.68GiB 0:00:15 [ 254MiB/s] [ <=> ]\r"
],
[
- 0.000509,
- "miguel@megaloman:~$ "
+ 1.000239,
+ "3.93GiB 0:00:16 [ 253MiB/s] [ <=> ]\r"
],
[
- 0.480858,
- "ech othis is a local asciinema"
+ 0.99986,
+ "4.17GiB 0:00:17 [ 248MiB/s] [ <=> ]\r"
],
[
- 0.192018,
- "\r\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C\u001b[C"
+ 0.999739,
+ " 4.4GiB 0:00:18 [ 242MiB/s] [ <=> ]\r"
],
[
- 0.237975,
- "\u001b[C"
+ 1.000023,
+ "4.65GiB 0:00:19 [ 252MiB/s] [ <=> ]\r"
],
[
- 0.118994,
- "\u001b[C"
+ 1.000103,
+ "4.89GiB 0:00:20 [ 245MiB/s] [ <=> ]\r"
],
[
- 0.146091,
- "\u001b[1P"
+ 1.000106,
+ "5.14GiB 0:00:21 [ 255MiB/s] [ <=> ]\r"
],
[
- 0.348015,
- "\u001b[1P"
+ 1.000102,
+ "5.38GiB 0:00:22 [ 246MiB/s] [ <=> ]\r"
],
[
- 0.562446,
- "\u001b[1@h"
+ 1.000042,
+ "5.63GiB 0:00:23 [ 252MiB/s] [ <=> ]\r"
],
[
- 0.437804,
- "\u001b[C"
+ 0.999787,
+ "5.87GiB 0:00:24 [ 250MiB/s] [ <=> ]\r"
],
[
- 0.219332,
- "\u001b[1@ "
+ 1.000079,
+ "6.11GiB 0:00:25 [ 248MiB/s] [ <=> ]\r"
],
[
- 0.220637,
- "\r\n"
+ 1.000035,
+ "6.36GiB 0:00:26 [ 247MiB/s] [ <=> ]\r"
],
[
- 0.000486,
- "this is a local asciinema\r\n"
+ 0.999929,
+ " 6.6GiB 0:00:27 [ 250MiB/s] [ <=> ]\r"
],
[
- 0.000206,
- "miguel@megaloman:~$ "
+ 0.999966,
+ "6.84GiB 0:00:28 [ 244MiB/s] [ <=> ]\r"
],
[
- 1.218406,
- "m"
+ 1.000047,
+ "7.09GiB 0:00:29 [ 252MiB/s] [ <=> ]\r"
],
[
- 0.079499,
- "c"
+ 0.999829,
+ "7.33GiB 0:00:30 [ 250MiB/s] [ <=> ]\r"
],
[
- 0.170894,
- "\r\n"
+ 0.99996,
+ "7.57GiB 0:00:31 [ 245MiB/s] [ <=> ]\r"
],
[
- 0.00735,
- "\u001b[?1049h\u001b[?1h\u001b="
+ 1.000063,
+ "7.81GiB 0:00:32 [ 248MiB/s] [ <=> ]\r"
],
[
- 0.000586,
- "\u001b[1;9r\u001b[4l\u001b(B\u001b)0\u001b[9;1H\u001b[m\u000f\u001b[37m\u001b[40m\u001b[m\u000f\u001b[39;49m\r \r\u001b[?1l\u001b>\u001b[?1049l\u001b[?1049h\u001b[?1h\u001b="
+ 0.999947,
+ "8.06GiB 0:00:33 [ 251MiB/s] [ <=> ]\r"
],
[
- 0.021657,
- "\u001b[?1001s\u001b[?1002h\u001b[?1006h\u001b[?2004h"
+ 1.000249,
+ " 8.3GiB 0:00:34 [ 246MiB/s] [ <=> ]\r"
],
[
- 0.000429,
- "\u001b[1;9r\u001b[4l\u001b(B\u001b)0\u001b[?1h\u001b=\u001b[m\u000f\u001b[39m\u001b[49m\u001b[1;9r\u001b[H\u001b[J\u001b[2;105H\u001b[1K \u001b[37m\u001b[40m|\u001b[2;106H"
+ 1.000158,
+ "8.55GiB 0:00:35 [ 253MiB/s] [ <=> ]\r"
],
[
- 0.000193,
- "\b\u001b[39m\u001b[49m\u001b[1K \u001b[37m\u001b[40m╗\u001b[2;106H"
+ 0.999634,
+ "8.79GiB 0:00:36 [ 254MiB/s] [ <=> ]\r"
],
[
- 0.000114,
- "\b\u001b[39m\u001b[49m\u001b[1K \u001b[37m\u001b[40m/\u001b[2;106H"
+ 1.000289,
+ "9.04GiB 0:00:37 [ 251MiB/s] [ <=> ]\r"
],
[
- 0.000129,
- "\b\u001b[39m\u001b[49m\u001b[1K \u001b[37m\u001b[40m╗\u001b[2;106H"
+ 0.99977,
+ "9.29GiB 0:00:38 [ 251MiB/s] [ <=> ]\r"
],
[
- 0.000156,
- "\u001b]0;mc [miguel@megaloman]:~\u0007\u001b>"
+ 1.000013,
+ "9.53GiB 0:00:39 [ 248MiB/s] [ <=> ]\r"
],
[
- 0.000337,
- "\u001b[7;1H\u001b[39m\u001b[49mHint: Want your plain shell? Press C-o, and get back to MC with C-o again.\u001b[7;106H"
+ 1.000045,
+ "9.77GiB 0:00:40 [ 247MiB/s] [ <=> ]\r"
],
[
- 0.000251,
- "\u001b]0;mc [miguel@megaloman]:~\u0007\u001b>"
+ 0.999859,
+ " 10GiB 0:00:41 [ 248MiB/s] [ <=> ]\r"
],
[
- 0.000102,
- "\u001b[1;1H\u001b[30m\u001b[47m Left File Command Options Right \u001b[2;1H\u001b[37m\u001b[40m╔«═\u001b[97m\u001b[105m ~ \u001b[37m\u001b[40m═════════════════════════════════════════⋅[^]»╗╔«═ ~ ═════════════════════════════════════════⋅[^]»\r\n║\u001b[97m↑n Name \u001b[37m│\u001b[97m Size \u001b[37m│\u001b[97mModify time \u001b[37m║║\u001b[97m↑n Name \u001b[37m│\u001b[97m Size \u001b[37m│\u001b[97mModify time \u001b[37m║\u001b[4;1H╟───────────────────────────────────────────────────╢╟───────────────────────────────────────────────────╢\u001b[5;1H║UP--DIR ║║"
+ 0.760304,
+ "^C\r\n"
],
[
- 1e-05,
- "UP--DIR ║\u001b[6;1H╚═════════════════════════════════ 158G/234G (67%) ═╝╚═════════════════════════════════ 158G/234G (67%) ═╝\u001b[8;1H\u001b[39m\u001b[49mmiguel@megaloman:~$\u001b[84C\u001b[31m[^]\u001b[9;1H 1\u001b[97mHelp \u001b[31m 2\u001b[97mMenu \u001b[31m 3\u001b[97mView \u001b[31m 4\u001b[97mEdit \u001b[31m 5\u001b[97mCopy \u001b[31m 6\u001b[97mRenMov \u001b[31m 7\u001b[97mMkdir \u001b[31m 8\u001b[97mDelete \u001b[31m 9\u001b[97mPullDn \u001b[31m10\u001b[97mQuit \u001b[9;105H \b\u001b[4h \u001b[4l\u001b[8;21H"
- ],
- [
- 1.221371,
- "\u001b[1;1H\u001b[39m \u001b[2;1H \u001b[3;1H \u001b[4;1H \u001b[5;1H \u001b[6;1H \u001b[7;1H \u001b[8;1H \u001b[9;1H \u001b[1;106H\u001b[?2"
- ],
- [
- 4.5e-05,
- "004l\u001b[?1006l\u001b[?1002l\u001b[?1001r"
- ],
- [
- 0.000416,
- "\u001b[?1l\u001b>\u001b[9;1H\u001b[m\u000f\u001b[39;49m\r \r\u001b[?1l\u001b>\u001b[?1049l\u001b[39;49m"
- ],
- [
- 0.000319,
+ 0.000409,
"\r\n"
],
[
- 0.001118,
- "miguel@megaloman:~$ "
- ],
- [
- 0.791031,
- "e"
- ],
- [
- 0.62602,
- "\b\u001b[K"
+ 0.000128,
+ "miguel@megaloman:~/git/haskell/base64$ "
]
],
- "height": 9,
- "command": null,
- "version": 1
+ "version": 1,
+ "duration": 46.348438
} \ No newline at end of file
diff --git a/080_blog/00040_Haskell/00065_Base64-Encoder/index.md b/080_blog/00040_Haskell/00065_Base64-Encoder/index.md
index 0ede6cf..3fd87ee 100644
--- a/080_blog/00040_Haskell/00065_Base64-Encoder/index.md
+++ b/080_blog/00040_Haskell/00065_Base64-Encoder/index.md
@@ -2,18 +2,22 @@ Miguel's Base64 Encoder
=======================
February 19, 2018
-Coded on a winter afternoon to fully understand **base64 encoding** and play with
+Initially coded on a cold winter afternoon to fully understand **base64 encoding** and play with
**Haskell**, which is always an indisputable pleasure.
-Coded in _big anger_, due to Nick's fairy tales about saving his encrypted binary
-data in plain ASCII configuration files, featuring strange letters and
-non-printable characters. :P
+Coded in _big anger_, due to my friend Nick's fairy tales about saving his encrypted binary
+data in plain _ASCII_ configuration files, featuring strange letters and non-printable characters. :smile:
-<asciinema-player cols="106" rows="9" preload="true" theme="solarized-dark" autoplay="true" src="base64.cast"></asciinema-player>
+_EDIT_: After optimizing my naive implementation, the encoder now reaches speeds
+of around **240MB/s** on a single core of my _i7-4790K_.
+
+<asciinema-player loop="1" preload="true" theme="solarized-dark" autoplay="true" src="base64.cast"></asciinema-player>
+
+The source code below was auto-fetched from:
+<https://gitweb.softwarefools.com/?p=miguel/haskell.git;a=blob;f=base64/base64.hs>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ {.haskell .numberLines}
{BEGIN:EMBED}
https://gitweb.softwarefools.com/?p=miguel/haskell.git;a=blob_plain;f=base64/base64.hs
{END:EMBED}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-The above code was auto-fetched from: <https://gitweb.softwarefools.com/?p=miguel/haskell.git;a=blob_plain;f=base64/base64.hs>
diff --git a/080_blog/00040_Haskell/00200_Estatico-Page-Maker/index.md b/080_blog/00040_Haskell/00200_Estatico-Page-Maker/index.md
index 63f9816..279c721 100644
--- a/080_blog/00040_Haskell/00200_Estatico-Page-Maker/index.md
+++ b/080_blog/00040_Haskell/00200_Estatico-Page-Maker/index.md
@@ -14,13 +14,13 @@ I use **pandoc** et al. for most of the work anyway.
## Features
* **No** Database
-* Input with Simple **Markdown** Files
-* Generates **Static HTML** Content
-* Embedding data **fetched** via **http/https**
-* Embedding self-hosted **asciinema** casts
-* Embedding Latex formulas via **MathJx**
-* Image Scaling with **ImageMagick**
-* Syntax **Highlighting**
+* Generate HTML from **Markdown** with **pandoc**
+* **Highlight** source-code with **pandoc**
+* Embed data **fetched** from the web with **http-conduit**
+* Embed **screen-casts** with **asciinema**
+* Embed Latex formulas with **MathJx**
+* Scale Images with **ImageMagick**
+* Generate MP4 from OGG **Videos** with **ffmpeg**
## Try It
You can find the most recent version following the links below.
diff --git a/080_blog/00110_Fool-Operating-System/index.md b/080_blog/00110_Fool-Operating-System/index.md
index 765b33d..a8fac68 100644
--- a/080_blog/00110_Fool-Operating-System/index.md
+++ b/080_blog/00110_Fool-Operating-System/index.md
@@ -1,7 +1,52 @@
Fool OS
=======
-My little buggy toy operating system is a never ending work in progress...
+Welcome to my little buggy **x86 toy operating** system.
+This is a never ending work in progress, motivated solely by my
+bottomless curiosity.
+
+Be warned that most features are unstable and in development.
+
+## Features v0.2
+
+* Booting with Multiboot (Spec. 0.6.96) (e.g. GRUB 2)
+* Rudimentary POSIX compilance
+* 32-bit protected mode
+* Logging to COM1
+* Parsing ACPI (incomplete) and Multiboot Data
+* Symmetrical Multiprocessing with LAPIC and IOAPIC
+* CMOS Clock/ PIT Timer / APIC Timer
+* Seperate GDT and IVT for each CPU
+* Paging / Virtual Memory
+* Ext2 RAM Disk
+* Pipes
+* Standard streams (stdin/stdout/stderr)
+* PS2 Mouse/Keyboard support
+* Multi-threading & Multitasking
+* Kernel and Userspace Tasks
+* CPU Private Memory
+* Support for ELF binaries.
+* IRQ Handling Framework
+* Finegrained Spinlocks
+* Superfast Task Scheduler
+* PCI Bus scanning
+* Ethernet E1000 PCI Driver
+* VESA Framebuffer with fallback to a text-only terminal
+* C-library for Userspace (Newlib)
+* Simple Network Stack (ARP, IPv4, ICMP, UDP)
+* Compositing Window Manager
+
+## Userspace Ports and Programs
+
+* Simple Fool-Shell
+* Snake Game
+* Newlib C library
+* ncurses
+* ncurses-examples
+* vim
+* zlib
+* libpng
+* many more to come...
## Screenshots
@@ -14,7 +59,7 @@ My little buggy toy operating system is a never ending work in progress...
![](scale_foolos2.png){.img-fluid}\
[click here for full-resolution version of pic above.](foolos2.png)\
My **Compositing** Window Manager in action. As you see **Fool-OS** ships
-with **vim** and some little **ncurses** programms as well as a
+with **vim** and some little **ncurses-examples** as well as a
**Brainfuck** interpreter.
## Videos
@@ -33,11 +78,28 @@ Demonstrating the Kernel's **piping** functionality, inside the shell.
Your browser does not support the video tag.
</video>
-Some random **ncurses** programms running in the **Window Manager**.
+Some random **ncurses** programs (from ncurses-examples) running inside **Terminal Emulators**.
+
+## Git Repository
+
+* [Fool OS - Git Repository](https://gitweb.softwarefools.com/?p=miguel/fool-os.git)
+
+## Disclaimer
+
+ THIS IS A NEVER ENDING WORK IN PROGRESS.
-## Links
+ This is a simple and useless "operating system", with a very basic
+ set of features. It is the fruit of my fundamental explorations of
+ the x86 architecture and operating system design.
-* [reference](https://www.idziorek.net/~miguel/fool-os-ref/)
-* [git](https://gitweb.softwarefools.com/?p=miguel/fool-os.git)
+ Copyright 2014,2015,2018 M.Idziorek <m.i@gmx.at>, unless stated
+ otherwise or forgotten.
-The ref and readme are of course outdated ...
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
diff --git a/pandoc.css b/pandoc.css
index 3f99c9d..c377f3e 100644
--- a/pandoc.css
+++ b/pandoc.css
@@ -1,66 +1,7 @@
/*
- hack to obtain this css file: file.md needs to have some source-code for pandoc.
+ hack to obtain pandoc css files: file.md needs to have some source-code for pandoc.
extract css from result:
stack exec pandoc -- -s file.md --highlight-style pygments
*/
-a.sourceLine { display: inline-block; line-height: 1.25; }
-a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }
-a.sourceLine:empty { height: 1.2em; }
-.sourceCode { overflow: visible; }
-code.sourceCode { white-space: pre; position: relative; }
-div.sourceCode { margin: 1em 0; }
-pre.sourceCode { margin: 0; }
-@media screen {
-div.sourceCode { overflow: auto; }
-}
-@media print {
-code.sourceCode { white-space: pre-wrap; }
-a.sourceLine { text-indent: -1em; padding-left: 1em; }
-}
-pre.numberSource a.sourceLine
- { position: relative; left: -4em; }
-pre.numberSource a.sourceLine::before
- { content: attr(title);
- position: relative; left: -1em; text-align: right; vertical-align: baseline;
- border: none; pointer-events: all; display: inline-block;
- -webkit-touch-callout: none; -webkit-user-select: none;
- -khtml-user-select: none; -moz-user-select: none;
- -ms-user-select: none; user-select: none;
- padding: 0 4px; width: 4em;
- color: #aaaaaa;
- }
-pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
-div.sourceCode
- { }
-@media screen {
-a.sourceLine::before { text-decoration: underline; }
-}
-code span.al { color: #ff0000; font-weight: bold; } /* Alert */
-code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
-code span.at { color: #7d9029; } /* Attribute */
-code span.bn { color: #40a070; } /* BaseN */
-code span.bu { } /* BuiltIn */
-code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
-code span.ch { color: #4070a0; } /* Char */
-code span.cn { color: #880000; } /* Constant */
-code span.co { color: #60a0b0; font-style: italic; } /* Comment */
-code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
-code span.do { color: #ba2121; font-style: italic; } /* Documentation */
-code span.dt { color: #902000; } /* DataType */
-code span.dv { color: #40a070; } /* DecVal */
-code span.er { color: #ff0000; font-weight: bold; } /* Error */
-code span.ex { } /* Extension */
-code span.fl { color: #40a070; } /* Float */
-code span.fu { color: #06287e; } /* Function */
-code span.im { } /* Import */
-code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
-code span.kw { color: #007020; font-weight: bold; } /* Keyword */
-code span.op { color: #666666; } /* Operator */
-code span.ot { color: #007020; } /* Other */
-code span.pp { color: #bc7a00; } /* Preprocessor */
-code span.sc { color: #4070a0; } /* SpecialChar */
-code span.ss { color: #bb6688; } /* SpecialString */
-code span.st { color: #4070a0; } /* String */
-code span.va { color: #19177c; } /* Variable */
-code span.vs { color: #4070a0; } /* VerbatimString */
-code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
+
+@import "pandoc_haddock.css"
diff --git a/pandoc_breezedark.css b/pandoc_breezedark.css
new file mode 100644
index 0000000..9582310
--- /dev/null
+++ b/pandoc_breezedark.css
@@ -0,0 +1,64 @@
+a.sourceLine { display: inline-block; line-height: 1.25; }
+a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }
+a.sourceLine:empty { height: 1.2em; }
+.sourceCode { overflow: visible; }
+code.sourceCode { white-space: pre; position: relative; }
+div.sourceCode { margin: 1em 0; }
+pre.sourceCode { margin: 0; }
+@media screen {
+div.sourceCode { overflow: auto; }
+}
+@media print {
+code.sourceCode { white-space: pre-wrap; }
+a.sourceLine { text-indent: -1em; padding-left: 1em; }
+}
+pre.numberSource a.sourceLine
+ { position: relative; left: -4em; }
+pre.numberSource a.sourceLine::before
+ { content: attr(title);
+ position: relative; left: -1em; text-align: right; vertical-align: baseline;
+ border: none; pointer-events: all; display: inline-block;
+ -webkit-touch-callout: none; -webkit-user-select: none;
+ -khtml-user-select: none; -moz-user-select: none;
+ -ms-user-select: none; user-select: none;
+ padding: 0 4px; width: 4em;
+ background-color: #232629;
+ color: #7a7c7d;
+ }
+pre.numberSource { margin-left: 3em; border-left: 1px solid #7a7c7d; padding-left: 4px; }
+div.sourceCode
+ { color: #cfcfc2; background-color: #232629; }
+@media screen {
+a.sourceLine::before { text-decoration: underline; }
+}
+code span. { color: #cfcfc2; } /* Normal */
+code span.al { color: #95da4c; } /* Alert */
+code span.an { color: #3f8058; } /* Annotation */
+code span.at { color: #2980b9; } /* Attribute */
+code span.bn { color: #f67400; } /* BaseN */
+code span.bu { color: #7f8c8d; } /* BuiltIn */
+code span.cf { color: #fdbc4b; } /* ControlFlow */
+code span.ch { color: #3daee9; } /* Char */
+code span.cn { color: #27aeae; } /* Constant */
+code span.co { color: #7a7c7d; } /* Comment */
+code span.cv { color: #7f8c8d; } /* CommentVar */
+code span.do { color: #a43340; } /* Documentation */
+code span.dt { color: #2980b9; } /* DataType */
+code span.dv { color: #f67400; } /* DecVal */
+code span.er { color: #da4453; } /* Error */
+code span.ex { color: #0099ff; } /* Extension */
+code span.fl { color: #f67400; } /* Float */
+code span.fu { color: #8e44ad; } /* Function */
+code span.im { color: #27ae60; } /* Import */
+code span.in { color: #c45b00; } /* Information */
+code span.kw { color: #cfcfc2; } /* Keyword */
+code span.op { color: #cfcfc2; } /* Operator */
+code span.ot { color: #27ae60; } /* Other */
+code span.pp { color: #27ae60; } /* Preprocessor */
+code span.re { color: #2980b9; } /* RegionMarker */
+code span.sc { color: #3daee9; } /* SpecialChar */
+code span.ss { color: #da4453; } /* SpecialString */
+code span.st { color: #f44f4f; } /* String */
+code span.va { color: #27aeae; } /* Variable */
+code span.vs { color: #da4453; } /* VerbatimString */
+code span.wa { color: #da4453; } /* Warning */
diff --git a/pandoc_espresso.css b/pandoc_espresso.css
new file mode 100644
index 0000000..b85a63a
--- /dev/null
+++ b/pandoc_espresso.css
@@ -0,0 +1,60 @@
+a.sourceLine { display: inline-block; line-height: 1.25; }
+a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }
+a.sourceLine:empty { height: 1.2em; }
+.sourceCode { overflow: visible; }
+code.sourceCode { white-space: pre; position: relative; }
+div.sourceCode { margin: 1em 0; }
+pre.sourceCode { margin: 0; }
+@media screen {
+div.sourceCode { overflow: auto; }
+}
+@media print {
+code.sourceCode { white-space: pre-wrap; }
+a.sourceLine { text-indent: -1em; padding-left: 1em; }
+}
+pre.numberSource a.sourceLine
+ { position: relative; left: -4em; }
+pre.numberSource a.sourceLine::before
+ { content: attr(title);
+ position: relative; left: -1em; text-align: right; vertical-align: baseline;
+ border: none; pointer-events: all; display: inline-block;
+ -webkit-touch-callout: none; -webkit-user-select: none;
+ -khtml-user-select: none; -moz-user-select: none;
+ -ms-user-select: none; user-select: none;
+ padding: 0 4px; width: 4em;
+ background-color: #2a211c;
+ color: #bdae9d;
+ }
+pre.numberSource { margin-left: 3em; border-left: 1px solid #bdae9d; padding-left: 4px; }
+div.sourceCode
+ { color: #bdae9d; background-color: #2a211c; }
+@media screen {
+a.sourceLine::before { text-decoration: underline; }
+}
+code span.al { color: #ffff00; } /* Alert */
+code span.an { color: #0066ff; font-weight: bold; font-style: italic; } /* Annotation */
+code span.at { } /* Attribute */
+code span.bn { color: #44aa43; } /* BaseN */
+code span.bu { } /* BuiltIn */
+code span.cf { color: #43a8ed; font-weight: bold; } /* ControlFlow */
+code span.ch { color: #049b0a; } /* Char */
+code span.cn { } /* Constant */
+code span.co { color: #0066ff; font-weight: bold; font-style: italic; } /* Comment */
+code span.do { color: #0066ff; font-style: italic; } /* Documentation */
+code span.dt { text-decoration: underline; } /* DataType */
+code span.dv { color: #44aa43; } /* DecVal */
+code span.er { color: #ffff00; font-weight: bold; } /* Error */
+code span.ex { } /* Extension */
+code span.fl { color: #44aa43; } /* Float */
+code span.fu { color: #ff9358; font-weight: bold; } /* Function */
+code span.im { } /* Import */
+code span.in { color: #0066ff; font-weight: bold; font-style: italic; } /* Information */
+code span.kw { color: #43a8ed; font-weight: bold; } /* Keyword */
+code span.op { } /* Operator */
+code span.pp { font-weight: bold; } /* Preprocessor */
+code span.sc { color: #049b0a; } /* SpecialChar */
+code span.ss { color: #049b0a; } /* SpecialString */
+code span.st { color: #049b0a; } /* String */
+code span.va { } /* Variable */
+code span.vs { color: #049b0a; } /* VerbatimString */
+code span.wa { color: #ffff00; font-weight: bold; } /* Warning */
diff --git a/pandoc_haddock.css b/pandoc_haddock.css
new file mode 100644
index 0000000..f8d434d
--- /dev/null
+++ b/pandoc_haddock.css
@@ -0,0 +1,56 @@
+a.sourceLine { display: inline-block; line-height: 1.25; }
+a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }
+a.sourceLine:empty { height: 1.2em; }
+.sourceCode { overflow: visible; }
+code.sourceCode { white-space: pre; position: relative; }
+div.sourceCode { margin: 1em 0; }
+pre.sourceCode { margin: 0; }
+@media screen {
+div.sourceCode { overflow: auto; }
+}
+@media print {
+code.sourceCode { white-space: pre-wrap; }
+a.sourceLine { text-indent: -1em; padding-left: 1em; }
+}
+pre.numberSource a.sourceLine
+ { position: relative; left: -4em; }
+pre.numberSource a.sourceLine::before
+ { content: attr(title);
+ position: relative; left: -1em; text-align: right; vertical-align: baseline;
+ border: none; pointer-events: all; display: inline-block;
+ -webkit-touch-callout: none; -webkit-user-select: none;
+ -khtml-user-select: none; -moz-user-select: none;
+ -ms-user-select: none; user-select: none;
+ padding: 0 4px; width: 4em;
+ color: #aaaaaa;
+ }
+pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
+div.sourceCode
+ { }
+@media screen {
+a.sourceLine::before { text-decoration: underline; }
+}
+code span.al { color: #ff0000; } /* Alert */
+code span.an { color: #008000; } /* Annotation */
+code span.at { } /* Attribute */
+code span.bu { } /* BuiltIn */
+code span.cf { color: #0000ff; } /* ControlFlow */
+code span.ch { color: #008080; } /* Char */
+code span.cn { } /* Constant */
+code span.co { color: #008000; } /* Comment */
+code span.cv { color: #008000; } /* CommentVar */
+code span.do { color: #008000; } /* Documentation */
+code span.er { color: #ff0000; font-weight: bold; } /* Error */
+code span.ex { } /* Extension */
+code span.im { } /* Import */
+code span.in { color: #008000; } /* Information */
+code span.kw { color: #0000ff; } /* Keyword */
+code span.op { } /* Operator */
+code span.ot { color: #ff4000; } /* Other */
+code span.pp { color: #ff4000; } /* Preprocessor */
+code span.sc { color: #008080; } /* SpecialChar */
+code span.ss { color: #008080; } /* SpecialString */
+code span.st { color: #008080; } /* String */
+code span.va { } /* Variable */
+code span.vs { color: #008080; } /* VerbatimString */
+code span.wa { color: #008000; font-weight: bold; } /* Warning */
diff --git a/pandoc_kate.css b/pandoc_kate.css
new file mode 100644
index 0000000..426dce9
--- /dev/null
+++ b/pandoc_kate.css
@@ -0,0 +1,64 @@
+a.sourceLine { display: inline-block; line-height: 1.25; }
+a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }
+a.sourceLine:empty { height: 1.2em; }
+.sourceCode { overflow: visible; }
+code.sourceCode { white-space: pre; position: relative; }
+div.sourceCode { margin: 1em 0; }
+pre.sourceCode { margin: 0; }
+@media screen {
+div.sourceCode { overflow: auto; }
+}
+@media print {
+code.sourceCode { white-space: pre-wrap; }
+a.sourceLine { text-indent: -1em; padding-left: 1em; }
+}
+pre.numberSource a.sourceLine
+ { position: relative; left: -4em; }
+pre.numberSource a.sourceLine::before
+ { content: attr(title);
+ position: relative; left: -1em; text-align: right; vertical-align: baseline;
+ border: none; pointer-events: all; display: inline-block;
+ -webkit-touch-callout: none; -webkit-user-select: none;
+ -khtml-user-select: none; -moz-user-select: none;
+ -ms-user-select: none; user-select: none;
+ padding: 0 4px; width: 4em;
+ background-color: #ffffff;
+ color: #a0a0a0;
+ }
+pre.numberSource { margin-left: 3em; border-left: 1px solid #a0a0a0; padding-left: 4px; }
+div.sourceCode
+ { color: #1f1c1b; background-color: #ffffff; }
+@media screen {
+a.sourceLine::before { text-decoration: underline; }
+}
+code span. { color: #1f1c1b; } /* Normal */
+code span.al { color: #bf0303; background-color: #f7e6e6; font-weight: bold; } /* Alert */
+code span.an { color: #ca60ca; } /* Annotation */
+code span.at { color: #0057ae; } /* Attribute */
+code span.bn { color: #b08000; } /* BaseN */
+code span.bu { color: #644a9b; font-weight: bold; } /* BuiltIn */
+code span.cf { color: #1f1c1b; font-weight: bold; } /* ControlFlow */
+code span.ch { color: #924c9d; } /* Char */
+code span.cn { color: #aa5500; } /* Constant */
+code span.co { color: #898887; } /* Comment */
+code span.cv { color: #0095ff; } /* CommentVar */
+code span.do { color: #607880; } /* Documentation */
+code span.dt { color: #0057ae; } /* DataType */
+code span.dv { color: #b08000; } /* DecVal */
+code span.er { color: #bf0303; text-decoration: underline; } /* Error */
+code span.ex { color: #0095ff; font-weight: bold; } /* Extension */
+code span.fl { color: #b08000; } /* Float */
+code span.fu { color: #644a9b; } /* Function */
+code span.im { color: #ff5500; } /* Import */
+code span.in { color: #b08000; } /* Information */
+code span.kw { color: #1f1c1b; font-weight: bold; } /* Keyword */
+code span.op { color: #1f1c1b; } /* Operator */
+code span.ot { color: #006e28; } /* Other */
+code span.pp { color: #006e28; } /* Preprocessor */
+code span.re { color: #0057ae; background-color: #e0e9f8; } /* RegionMarker */
+code span.sc { color: #3daee9; } /* SpecialChar */
+code span.ss { color: #ff5500; } /* SpecialString */
+code span.st { color: #bf0303; } /* String */
+code span.va { color: #0057ae; } /* Variable */
+code span.vs { color: #bf0303; } /* VerbatimString */
+code span.wa { color: #bf0303; } /* Warning */
diff --git a/pandoc_monochrome.css b/pandoc_monochrome.css
new file mode 100644
index 0000000..bb56806
--- /dev/null
+++ b/pandoc_monochrome.css
@@ -0,0 +1,43 @@
+a.sourceLine { display: inline-block; line-height: 1.25; }
+a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }
+a.sourceLine:empty { height: 1.2em; }
+.sourceCode { overflow: visible; }
+code.sourceCode { white-space: pre; position: relative; }
+div.sourceCode { margin: 1em 0; }
+pre.sourceCode { margin: 0; }
+@media screen {
+div.sourceCode { overflow: auto; }
+}
+@media print {
+code.sourceCode { white-space: pre-wrap; }
+a.sourceLine { text-indent: -1em; padding-left: 1em; }
+}
+pre.numberSource a.sourceLine
+ { position: relative; left: -4em; }
+pre.numberSource a.sourceLine::before
+ { content: attr(title);
+ position: relative; left: -1em; text-align: right; vertical-align: baseline;
+ border: none; pointer-events: all; display: inline-block;
+ -webkit-touch-callout: none; -webkit-user-select: none;
+ -khtml-user-select: none; -moz-user-select: none;
+ -ms-user-select: none; user-select: none;
+ padding: 0 4px; width: 4em;
+ }
+pre.numberSource { margin-left: 3em; padding-left: 4px; }
+div.sourceCode
+ { }
+@media screen {
+a.sourceLine::before { text-decoration: underline; }
+}
+code span.al { font-weight: bold; } /* Alert */
+code span.an { font-style: italic; } /* Annotation */
+code span.cf { font-weight: bold; } /* ControlFlow */
+code span.co { font-style: italic; } /* Comment */
+code span.cv { font-style: italic; } /* CommentVar */
+code span.do { font-style: italic; } /* Documentation */
+code span.dt { text-decoration: underline; } /* DataType */
+code span.er { font-weight: bold; } /* Error */
+code span.in { font-style: italic; } /* Information */
+code span.kw { font-weight: bold; } /* Keyword */
+code span.pp { font-weight: bold; } /* Preprocessor */
+code span.wa { font-style: italic; } /* Warning */
diff --git a/pandoc_pygments.css b/pandoc_pygments.css
new file mode 100644
index 0000000..cee8875
--- /dev/null
+++ b/pandoc_pygments.css
@@ -0,0 +1,61 @@
+a.sourceLine { display: inline-block; line-height: 1.25; }
+a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }
+a.sourceLine:empty { height: 1.2em; }
+.sourceCode { overflow: visible; }
+code.sourceCode { white-space: pre; position: relative; }
+div.sourceCode { margin: 1em 0; }
+pre.sourceCode { margin: 0; }
+@media screen {
+div.sourceCode { overflow: auto; }
+}
+@media print {
+code.sourceCode { white-space: pre-wrap; }
+a.sourceLine { text-indent: -1em; padding-left: 1em; }
+}
+pre.numberSource a.sourceLine
+ { position: relative; left: -4em; }
+pre.numberSource a.sourceLine::before
+ { content: attr(title);
+ position: relative; left: -1em; text-align: right; vertical-align: baseline;
+ border: none; pointer-events: all; display: inline-block;
+ -webkit-touch-callout: none; -webkit-user-select: none;
+ -khtml-user-select: none; -moz-user-select: none;
+ -ms-user-select: none; user-select: none;
+ padding: 0 4px; width: 4em;
+ color: #aaaaaa;
+ }
+pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
+div.sourceCode
+ { }
+@media screen {
+a.sourceLine::before { text-decoration: underline; }
+}
+code span.al { color: #ff0000; font-weight: bold; } /* Alert */
+code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
+code span.at { color: #7d9029; } /* Attribute */
+code span.bn { color: #40a070; } /* BaseN */
+code span.bu { } /* BuiltIn */
+code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
+code span.ch { color: #4070a0; } /* Char */
+code span.cn { color: #880000; } /* Constant */
+code span.co { color: #60a0b0; font-style: italic; } /* Comment */
+code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
+code span.do { color: #ba2121; font-style: italic; } /* Documentation */
+code span.dt { color: #902000; } /* DataType */
+code span.dv { color: #40a070; } /* DecVal */
+code span.er { color: #ff0000; font-weight: bold; } /* Error */
+code span.ex { } /* Extension */
+code span.fl { color: #40a070; } /* Float */
+code span.fu { color: #06287e; } /* Function */
+code span.im { } /* Import */
+code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
+code span.kw { color: #007020; font-weight: bold; } /* Keyword */
+code span.op { color: #666666; } /* Operator */
+code span.ot { color: #007020; } /* Other */
+code span.pp { color: #bc7a00; } /* Preprocessor */
+code span.sc { color: #4070a0; } /* SpecialChar */
+code span.ss { color: #bb6688; } /* SpecialString */
+code span.st { color: #4070a0; } /* String */
+code span.va { color: #19177c; } /* Variable */
+code span.vs { color: #4070a0; } /* VerbatimString */
+code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
diff --git a/pandoc_tango.css b/pandoc_tango.css
new file mode 100644
index 0000000..ec04f53
--- /dev/null
+++ b/pandoc_tango.css
@@ -0,0 +1,60 @@
+a.sourceLine { display: inline-block; line-height: 1.25; }
+a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }
+a.sourceLine:empty { height: 1.2em; }
+.sourceCode { overflow: visible; }
+code.sourceCode { white-space: pre; position: relative; }
+div.sourceCode { margin: 1em 0; }
+pre.sourceCode { margin: 0; }
+@media screen {
+div.sourceCode { overflow: auto; }
+}
+@media print {
+code.sourceCode { white-space: pre-wrap; }
+a.sourceLine { text-indent: -1em; padding-left: 1em; }
+}
+pre.numberSource a.sourceLine
+ { position: relative; left: -4em; }
+pre.numberSource a.sourceLine::before
+ { content: attr(title);
+ position: relative; left: -1em; text-align: right; vertical-align: baseline;
+ border: none; pointer-events: all; display: inline-block;
+ -webkit-touch-callout: none; -webkit-user-select: none;
+ -khtml-user-select: none; -moz-user-select: none;
+ -ms-user-select: none; user-select: none;
+ padding: 0 4px; width: 4em;
+ color: #aaaaaa;
+ }
+pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
+div.sourceCode
+ { background-color: #f8f8f8; }
+@media screen {
+a.sourceLine::before { text-decoration: underline; }
+}
+code span.al { color: #ef2929; } /* Alert */
+code span.an { color: #8f5902; font-weight: bold; font-style: italic; } /* Annotation */
+code span.at { color: #c4a000; } /* Attribute */
+code span.bn { color: #0000cf; } /* BaseN */
+code span.cf { color: #204a87; font-weight: bold; } /* ControlFlow */
+code span.ch { color: #4e9a06; } /* Char */
+code span.cn { color: #000000; } /* Constant */
+code span.co { color: #8f5902; font-style: italic; } /* Comment */
+code span.cv { color: #8f5902; font-weight: bold; font-style: italic; } /* CommentVar */
+code span.do { color: #8f5902; font-weight: bold; font-style: italic; } /* Documentation */
+code span.dt { color: #204a87; } /* DataType */
+code span.dv { color: #0000cf; } /* DecVal */
+code span.er { color: #a40000; font-weight: bold; } /* Error */
+code span.ex { } /* Extension */
+code span.fl { color: #0000cf; } /* Float */
+code span.fu { color: #000000; } /* Function */
+code span.im { } /* Import */
+code span.in { color: #8f5902; font-weight: bold; font-style: italic; } /* Information */
+code span.kw { color: #204a87; font-weight: bold; } /* Keyword */
+code span.op { color: #ce5c00; font-weight: bold; } /* Operator */
+code span.ot { color: #8f5902; } /* Other */
+code span.pp { color: #8f5902; font-style: italic; } /* Preprocessor */
+code span.sc { color: #000000; } /* SpecialChar */
+code span.ss { color: #4e9a06; } /* SpecialString */
+code span.st { color: #4e9a06; } /* String */
+code span.va { color: #000000; } /* Variable */
+code span.vs { color: #4e9a06; } /* VerbatimString */
+code span.wa { color: #8f5902; font-weight: bold; font-style: italic; } /* Warning */
diff --git a/pandoc_zenburn.css b/pandoc_zenburn.css
new file mode 100644
index 0000000..9632339
--- /dev/null
+++ b/pandoc_zenburn.css
@@ -0,0 +1,60 @@
+a.sourceLine { display: inline-block; line-height: 1.25; }
+a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }
+a.sourceLine:empty { height: 1.2em; }
+.sourceCode { overflow: visible; }
+code.sourceCode { white-space: pre; position: relative; }
+div.sourceCode { margin: 1em 0; }
+pre.sourceCode { margin: 0; }
+@media screen {
+div.sourceCode { overflow: auto; }
+}
+@media print {
+code.sourceCode { white-space: pre-wrap; }
+a.sourceLine { text-indent: -1em; padding-left: 1em; }
+}
+pre.numberSource a.sourceLine
+ { position: relative; left: -4em; }
+pre.numberSource a.sourceLine::before
+ { content: attr(title);
+ position: relative; left: -1em; text-align: right; vertical-align: baseline;
+ border: none; pointer-events: all; display: inline-block;
+ -webkit-touch-callout: none; -webkit-user-select: none;
+ -khtml-user-select: none; -moz-user-select: none;
+ -ms-user-select: none; user-select: none;
+ padding: 0 4px; width: 4em;
+ }
+pre.numberSource { margin-left: 3em; padding-left: 4px; }
+div.sourceCode
+ { color: #cccccc; background-color: #303030; }
+@media screen {
+a.sourceLine::before { text-decoration: underline; }
+}
+code span.al { color: #ffcfaf; } /* Alert */
+code span.an { color: #7f9f7f; font-weight: bold; } /* Annotation */
+code span.at { } /* Attribute */
+code span.bn { color: #dca3a3; } /* BaseN */
+code span.bu { } /* BuiltIn */
+code span.cf { color: #f0dfaf; } /* ControlFlow */
+code span.ch { color: #dca3a3; } /* Char */
+code span.cn { color: #dca3a3; font-weight: bold; } /* Constant */
+code span.co { color: #7f9f7f; } /* Comment */
+code span.cv { color: #7f9f7f; font-weight: bold; } /* CommentVar */
+code span.do { color: #7f9f7f; } /* Documentation */
+code span.dt { color: #dfdfbf; } /* DataType */
+code span.dv { color: #dcdccc; } /* DecVal */
+code span.er { color: #c3bf9f; } /* Error */
+code span.ex { } /* Extension */
+code span.fl { color: #c0bed1; } /* Float */
+code span.fu { color: #efef8f; } /* Function */
+code span.im { } /* Import */
+code span.in { color: #7f9f7f; font-weight: bold; } /* Information */
+code span.kw { color: #f0dfaf; } /* Keyword */
+code span.op { color: #f0efd0; } /* Operator */
+code span.ot { color: #efef8f; } /* Other */
+code span.pp { color: #ffcfaf; font-weight: bold; } /* Preprocessor */
+code span.sc { color: #dca3a3; } /* SpecialChar */
+code span.ss { color: #cc9393; } /* SpecialString */
+code span.st { color: #cc9393; } /* String */
+code span.va { } /* Variable */
+code span.vs { color: #cc9393; } /* VerbatimString */
+code span.wa { color: #7f9f7f; font-weight: bold; } /* Warning */