Posts

Plan 9: Poking PCI Hardware

Image
  Poking the VGA card  term% cat /dev/pci/*ctl 06.00.00 8086/29c0   0 03.00.00 1234/1111    0 0:fd000008 16777216 2:feb94000 4096 02.00.00 8086/10d3  11 0:feb40000 131072 1:feb60000 131072 2:0000c041 32 3:feb90000 16384 00.ff.00 1234/11e8  11 0:fea00000 1048576 06.01.00 8086/2918   0 01.06.01 8086/2922  10 4:0000c061 32 5:feb95000 4096 0c.05.00 8086/2930  10 4:00000701 64 term% cat /dev/vgactl type vesa size 1280x720x32 x8r8g8b8 tilt none hwgc soft hwaccel off hwblank on addr p 0xfd000000 v 0xfffffe80fd000000 size 0x1000000 softscreen on term% echo 1280*4 | bc 5120 term% grep -l  1234/1111 /dev/pci/*ctl /dev/pci/0.1.0ctl term% dd -if /dev/pci/0.1.0 bar0 -of /dev/pci/0.1.0 bar0 -bs 5120 -count 64 -oseek 200 64+0 records in 64+0 records out Don't worry about the display corruption. It will be redrawn by Rio when you move the cursor or the window.   Code devpnp.c and archacpi.c    

Plan 9: Code Assist (Rio)

Image
  This is part 2 of my vision of Plan 9 as an Infinity Notebook . This focuses on the developer tools expanding on these ideas . Syntax Highlight Highlight comment, string and keywords. This is triggered on demand presently. For more advanced rendering requirements, use plot . In general, syntax highlighting is a computing intensive operation. Each character needs an attribute to store font size, weight, slant and color attributes. Font attributes affect which font file (regular, bold, italic or bold-italic version) is used for rendering. Each of this also affects the box size calculations for line wrap. This implementation uses a simpler approach using spans to store color information: Scanner : table-driven matchers ( mblock , mline , mstring , mident ), first match wins, each returns a length and a class. Classes : one {name, rgba, img} table indexed by an enum, initialized once. Output : waddcolorspanclass stores sorted spans; spanfirst finds the first overlapping one. ...

Plan 9: Code Assist

Image
Jump to definition with ctags    Use ctags for jump-to-defintion. Also, you can use Button3 in acme to jump to include files - both system and local headers. readtags uses binary search . So it makes jump to symbol faster on a large codebase.  Note: Use  sig  command for signature lookup.  Use  src  command for jumping to Plan 9 command sources.  If you have mounted contrib sources, use this . Alternatively, download tar from https://ctags.sourceforge.net/  . Make following changes: in Makefile, add '-DHAVE_REMOVE' (remove() instead of unlink()) and '-DHAVE_OPENDIR' (for directory recursion option) to DEFS in config.h, remove or comment out the definition of INT_MAX  # Use one below to enable APE bind -b /$objtype/bin/ape /bin ape/psh    # ls doesn't support -di option in Plan 9 sed 's/ls -di/ls/' configure > configure.new mv configure.new configure   # Fake presence of egrep cp /bin/grep /$objtype/bin/ ...

Plan 9: Devanagari Input with kbmap

Image
  Note : The demo uses layer 3 for better key visualization while using Devanagari.                The PS/2 interface presents two physical layers, switched on if the input scancode is one or two bytes. This second "escaped" layer is typically generated for keys like `Home' and `Ins'. Kbdfs additionally maintains eight more virtual layers that are switched on `Shift', `Ctl', `AltGr', and `Mod4' modifier key state. Not all permutations of these modifiers are represented as layers, the exhaustive list is as follows: none Key shift Shift + Key esc Escaped Key altgr AltGr + Key ctl Ctl + Key ctlesc Ctl + Escaped Key shiftesc Shift + Escaped Key shiftaltgr Shift + AltGr + Key mod4 Mod4 + Key altgr...

Plan 9: Key Visualizer

Image
Simple key visualizer for capturing keystrokes during a screencast using kbdfs, awk and statusmsg. Note : You need a Truetype font for arbitrary large display ( /n/ttf/mine/32/font  in the example).  Also, ensure truetypefs is running if you do use Truetype font.   #!/bin/rc fn notify {     scr=`{awk '{print $4, $5}' /dev/screen}     w=200     h=60     ws=$scr(1)     hs=$scr(2)     minx=`{echo $ws - $w | bc}     warg=`{echo -w  $minx,0,$ws,$h}     font=/n/ttf/mine/32/font aux/statusmsg $warg $1 } {     tee /dev/kbdtap |     tr '\000' '\034' |     awk -v 'RS=\034' '     BEGIN {         esc   = sprintf("%c", 033)         tab   = sprintf("%c", 011)         bksp  = sprintf("%c", 010)         del   = sprintf("%c", 0177)      ...

Plan 9: Emoji

Image
  Noto Emoji Font Note:  Noto Color emoji needs Color Bitmap Data (CBDT) or COLR/CPAL support.   Four independent bugs, spanning truetypefs.c , hint.c , and head.c : 1. assert(gs[i] != nil) crash in compilesub ( truetypefs.c ) ttffindchar returning glyph 0 for a rune inside a declared cmap segment (a genuine gap, not just the NUL special-case) skipped the retry-via-notdef path entirely. If the font's own .notdef then also failed to rasterize, the assert took the whole fileserver down. Fixed by replacing the assert with a synthesized blank placeholder as the last resort in the fallback chain. 2. No bounds checking on glyph geometry before blit() ( truetypefs.c ) blit() has zero validation of its own; compilesub sized the destination strip from the font's declared ascentpx + descentpx but never checked that an individual glyph's actual rendered width/height/vertical position fit inside that buffer. A decorative font ( architectsdaughter ) reporting ink extents...

Plan 9: Dynamic HTML

Image
  Render Dynamic HTML using plot and qjs. Render a simple website   Font zoom   E-Book Reader eBook is a collection of HTML files in a ZIP archive. Follow same steps for Comic Book reader which are collection of JPG/PNG images in a ZIP/RAR archive. For columns, pure HTML solution involves column-count CSS property. However, this works only for designed screen sizes. For non-standard sizes, the first column might span multiple pages before continuing in the second column. Hence, the page mode manages the split without relying on the column-count.   Keymap t                          Table of Content -/=                     Font zoom 1,2,3                  Column s                         Toggle scroll/page mode  ...