From 9477c1eb2f7477114b73ba162081a694503170c7 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Thu, 26 Apr 2001 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2001-04-26 --- pc/devvga.c | 27 ++++++++++++++++++++++++++- pc/screen.h | 1 + 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/pc/devvga.c b/pc/devvga.c index 67c7af5d1263bf30fc7b11d2c17308a58a620486..0e6bf0b7f0096d21efe4edfdbfb6b1a1dea896c1 100644 --- a/pc/devvga.c +++ b/pc/devvga.c @@ -17,10 +17,14 @@ enum { Qdir, Qvgactl, + Qvgaovl, + Qvgaovlctl, }; static Dirtab vgadir[] = { - "vgactl", { Qvgactl, 0 }, 0, 0660, + "vgactl", { Qvgactl, 0 }, 0, 0660, + "vgaovl", { Qvgaovl, 0 }, 0, 0660, + "vgaovlctl", { Qvgaovlctl, 0 }, 0, 0660, }; static void @@ -131,6 +135,11 @@ vgaread(Chan* c, void* a, long n, vlong off) return n; + case Qvgaovl: + case Qvgaovlctl: + error(Ebadusefd); + break; + default: error(Egreg); break; @@ -337,11 +346,14 @@ vgactl(char* a) error(Ebadarg); } +char Enooverlay[] = "No overlay support"; + static long vgawrite(Chan* c, void* a, long n, vlong off) { char *p; ulong offset = off; + VGAscr *scr; switch(c->qid.path & ~CHDIR){ @@ -363,6 +375,19 @@ vgawrite(Chan* c, void* a, long n, vlong off) free(p); return n; + case Qvgaovl: + scr = &vgascreen[0]; + pprint("vgawrite: Qvgaovl %d (%s)\n", Qvgaovl, scr->dev->name); + return 0; + + case Qvgaovlctl: + scr = &vgascreen[0]; + if (scr->dev->ovlctl == nil) { + error(Enooverlay); + break; + } + return scr->dev->ovlctl(scr, a, n); + default: error(Egreg); break; diff --git a/pc/screen.h b/pc/screen.h index f1b2ee80ed68adb776aceda823dec95195726a69..64c175e015bb12e696bb266fb7eb8782de4e808a 100644 --- a/pc/screen.h +++ b/pc/screen.h @@ -68,6 +68,7 @@ struct VGAdev { ulong (*linear)(VGAscr*, int*, int*); void (*drawinit)(VGAscr*); int (*fill)(VGAscr*, Rectangle, ulong); + int (*ovlctl)(VGAscr*, void*, int); }; struct VGAcur {