Svgalib mmap error

svgalib mmap error

In the latest version, the virtual memory manager code has been improved to support SVGAlib-based applications and to add the ability to mmap(). Apps provides functions says it is in linux-headers. Hi gerald_clark, Your suggestion resulted in the same error dialog: [email protected]:$make -f svgalib. SVGAlib can be used for both software rendering from a console as well desktop with a Signal 11 error upon completing the Big Gun map. svgalib mmap error

Svgalib mmap error - congratulate, your

ECHO bg KMOD_RCTRL,

    KMOD_SHIFT = KMOD_LSHIFT (KTYP(entry.kb_value) == KT_ASCII)

                 mms[t] KMOD_RALT,

};

 

#define CHFLAG(w, m, b) if(b) w = K_SHIFT;

 

    return chr;

}

 

END_UPP_NAMESPACE

 

//kernel defines conflict with some upp K_ enums, like K_SHIFT, K_ALT, K_CTRL

//so we separate as much as possible

#include<linux/keyboard.h>

 

NAMESPACE_UPP

 

//The kernel copy of translation tables

//from a console keycode in MEDIUMRAW to unicode

static uint16 kmap[MAX_NR_KEYMAPS][NR_KEYS];

 

void dupkmap(int fd)

{

    struct kbentry entry;

 

    if(fd < 0) return;

 

    for(int m=0; m<MAX_NR_KEYMAPS; ++m) {

        memset(kmap[m], 0, NR_KEYS*sizeof(uint16));

        for(int i=0; i<NR_KEYS; ++i) {

            entry.kb_table = m; entry.kb_index = i;

            if(ioctl(fd, KDGKBENT, &entry) < 0)

            {

                fprintf(stderr, "Error: reading keymap\n");

                return;

            }

 

            if(entry.kb_value == K_ENTER ) entry.kb_value = K(KT_ASCII,13);

 

            //correct numpad

            if(KTYP(entry.kb_value) == KT_PAD) {

                switch(entry.kb_value) {

                    case K_P0:

                    case K_P1:

                    case K_P2:

                    case K_P3:

                    case K_P4:

                    case K_P5:

                    case K_P6:

                    case K_P7:

                    case K_P8:

                    case K_P9:

                        kmap[m][i]=entry.kb_value;

                        kmap[m][i]+= '0';

                        break;

                    case K_PPLUS:  kmap[m][i]=K(KT_ASCII,'+'); break;

                    case K_PMINUS: kmap[m][i]=K(KT_ASCII,'-'); break;

                    case K_PSTAR:  kmap[m][i]=K(KT_ASCII,'*'); break;

                    case K_PSLASH: kmap[m][i]=K(KT_ASCII,'/'); break;

                    case K_PENTER: kmap[m][i]=K(KT_ASCII,'\r'); break;

                    case K_PCOMMA: kmap[m][i]=K(KT_ASCII,','); break;

                    case K_PDOT:   kmap[m][i]=K(KT_ASCII,'.'); break;

                    default:break;

                }

            }

 

            if((KTYP(entry.kb_value) == KT_LATIN)

                

Apologise, but: Svgalib mmap error

WINDOWS 7 BLUE SCREEN ERROR REPAIR TOOL
Dungeon siege 3 application load error 5
SERVER ERROR HAS OCCURRED ANDROID MARKET FIX

Similar video

How to solve Subsystem ID Mismatch error when flashing GPU Bios

Bug#109682: marked as done (svgakeymap -- Couldn't find /usr/share/keymaps/us.map.gz)




Your message dated Sun, 01 Dec 2002 19:02:30 -0500 with message-id <[email protected]> and subject line Bug#109682: fixed in svgalib 1:1.4.3-11 has caused the attached Bug report to be marked as done, svgalib mmap error. This means that you claim that the problem has been dealt with. If this is not the case it is now your responsibility to reopen the Bug report if necessary, svgalib mmap error, and/or fix the problem forthwith. (NB: If you are a system administrator and have no idea what I am talking about this indicates a serious mail system misconfiguration somewhere. Please contact me immediately.) Debian bug tracking system administrator (administrator, Debian Bugs database) -------------------------------------- Received: (at submit) by bugs.debian.org; 22 Aug 2001 20:56:29 +0000 >From [email protected] Wed Aug 22 15:56:29 2001 Return-path: <[email protected]> Received: from arroz.onshored.com [216.220.101.2] (postfix) by master.debian.org with esmtp (Exim 3.12 1 (Debian)) id 15Zf37-0003oy-00; Wed, 22 Aug 2001 15:56:29 -0500 Received: from arroz.onshored.com (localhost [127.0.0.1]) by arroz.onshored.com (Postfix) with ESMTP id 8A62093806 for <[email protected]>; Wed, 22 Aug 2001 16:55:31 -0400 (EDT) Sender: [email protected] To: [email protected] Subject: svgakeymap -- Couldn't find /usr/share/keymaps/us.map.gz Organization: onShore Development, Inc From: Adam Di Carlo <[email protected]> Date: 22 Aug 2001 16:55:31 -0400 Message-ID: <[email protected]> Lines: 21 User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Delivered-To: [email protected] Package: svgalib-bin Version: 1:1.4.3-2 Severity: normal svgakeymap doesn't seem to work anymore: # svgakeymap Couldn't find /usr/share/keymaps/us.map.gz. at /usr/bin/svgakeymap line 46. -- System Information Debian Release: testing/unstable Architecture: i386 Kernel: Linux frijole 2.2.18pre21 #1 Sat Nov 18 18:47:15 EST 2000 i586 Locale: LANG=C, LC_CTYPE=C Versions of packages svgalib-bin depends on: ii libc6 2.2.4-1 GNU C Library: Shared libraries an ii svgalibg1 1:1.4.3-2 Console SVGA display utilities --------------------------------------- Received: (at 109682-close) by bugs.debian.org; 2 Dec 2002 00:08:03 +0000 >From [email protected] Sun Dec 01 18:08:03 2002 Return-path: <[email protected]> Received: from auric.debian.org [206.246.226.45] (mail) by master.debian.org with esmtp (Exim 3.12 1 (Debian)) id 18Ie83-0001PN-00; Sun, 01 Dec 2002 18:08:03 -0600 Received: from katie by auric.debian.org with local (Exim 3.35 1 (Debian)) id 18Ie2g-0004mk-00; Sun, 01 Dec 2002 19:02:30 -0500 From: Matej Vela <[email protected]> To: [email protected] X-Katie: $Revision: 1.28 $ Subject: Bug#109682: fixed in svgalib 1:1.4.3-11 Message-Id: <[email protected]> Sender: Archive Administrator <[email protected]> Date: Sun, svgalib mmap error, 01 Dec 2002 19:02:30 -0500 Delivered-To: [email protected] svgalib mmap error We believe that the svgalib mmap error you reported is fixed in the latest version of svgalib, which is due to be installed in the Debian FTP archive: svgalib-bin_1.4.3-11_i386.deb to pool/main/s/svgalib/svgalib-bin_1.4.3-11_i386.deb svgalib1-altdev_1.4.3-11_i386.deb to pool/main/s/svgalib/svgalib1-altdev_1.4.3-11_i386.deb svgalib1_1.4.3-11_i386.deb to pool/main/s/svgalib/svgalib1_1.4.3-11_i386.deb svgalib_1.4.3-11.diff.gz to pool/main/s/svgalib/svgalib_1.4.3-11.diff.gz svgalib_1.4.3-11.dsc to pool/main/s/svgalib/svgalib_1.4.3-11.dsc svgalibg1-dev_1.4.3-11_i386.deb to pool/main/s/svgalib/svgalibg1-dev_1.4.3-11_i386.deb svgalibg1_1.4.3-11_i386.deb to pool/main/s/svgalib/svgalibg1_1.4.3-11_i386.deb A summary of the changes between this version and the previous one is attached. Thank you for reporting the bug, which will now be closed. If you have further comments please address them to [email protected], and the maintainer will reopen the bug report if appropriate, svgalib mmap error. Debian distribution maintenance software pp. Matej Vela <[email protected]> (supplier of updated svgalib package) (This message was generated automatically at their request; if you believe that there is a problem with it please contact the archive administrators by mailing [email protected]) -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Format: 1.7 Date: Mon, 2 Dec 2002 00:30:43 +0100 Source: svgalib Binary: svgalib1-altdev svgalib1 svgalibg1-dev svgalibg1 svgalib-bin Architecture: source i386 Version: 1:1.4.3-11 Distribution: unstable Urgency: low Maintainer: Debian QA Group <[email protected]> Changed-By: Matej Vela <[email protected]> Description: svgalib-bin - Console SVGA display utilities svgalib1 - Console SVGA display libraries (for libc5) svgalib1-altdev - Console SVGA display development libraries and headers (for libc5 svgalibg1 - Console SVGA display libraries svgalibg1-dev - Console SVGA display development libraries and headers Closes: 66775 109682 Changes: svgalib (1:1.4.3-11) unstable; urgency=low . * QA upload. * src/driver.h: Increase MAX_REGS to 11196 for Alliance ProMotion AT24. * src/libvga.h: libc5 LinuxThreads internally used SIGUSR1/SIGUSR2, so svgalib had to make do with SIGPROF/SIGUNUSED; this is not necessary for libc6, svgalib mmap error, which uses real-time signals. (Well, only on 2.1.70 and later kernels, but 2.0 is no svgalib mmap error supported by modutils anyway.) Profiling should work now, svgalib mmap error. Closes: #66775. * utils/svgakeymap: Default to /usr/share/keymaps/i386/qwerty/us.kmap rather than /usr/share/keymaps/us.map. Closes: #109682. * debian/svgalibg1.postrm: Remove /etc/vga only if it is empty, the way dpkg would. . * Move doc/Driver-programming-HOWTO from svgalibg1 to svgalibg1-dev. * Move debian/README.svgalib-dummy from svgalib-bin to svgalibg1-dev. * Leave out 0-INSTALL. * Remove non-essential output from maintainer scripts, svgalib mmap error. svgalib mmap error * Makefile: Timestamp for doc/man7/svgalib.7 seems to have changed accidentally; no need to regenerate 0-README. * Makefile.cfg: - Remove `DEB_BUILD_OPTIONS=debug' support and enable `-g' by default. - Let dh_strip handle `DEB_BUILD_OPTIONS=nostrip'. * debian/rules: - Use dh_installman and Bash globbing extensions to replace the byzantine rules.manpages. - Installing directly into package build directories involves less work than with debian/tmp and dh_install. - Compress examples as tarballs rather than individually (saves 292K). - `TARGET_FORMAT=elf', svgalib mmap error, `USEGLIBC=yes' are default now. . * src/nvvga.h, src/vgaio.c, src/vgaio.h: Unused; remove. * 0-RELEASE: Origin uncertain, last updated in 1999; remove. * README.glibc2: `-DUSEGLIBC' no longer necessary; remove. * doc/README.kernel-2.3: `BACKGROUND=y' already commented out; remove. * doc/SECURITY.advisory: Fixed in 1997 (1.2.11); remove. * debian/lintian/svgalib-bin: Lintian no longer issues `setuid-binary' warnings for svgalib programs; remove. * debian/make-symlinks: No longer necessary; remove. * debian/svgalibg1.postinst: Remove 1.2.8 compatibility code from 1996. * debian/svgalibg1.preinst: Remove /etc compatibility code from 1997. svgalib mmap error * debian/svgalibg1.prerm: Remove /usr/doc transition code, svgalib mmap error. * debian/changelog: Remove obsolete Emacs local variables, svgalib mmap error. . * Conforms to Standards version 3.5.8. Files: d965e698295ca297e7c84be6a159d676 649 graphics optional svgalib_1.4.3-11.dsc 15b70a211ea1f32845eb85dd618ffd18 21850 graphics optional svgalib_1.4.3-11.diff.gz 22e1f89ad197c96a8fbab45bd099effa 21332 graphics optional svgalib-bin_1.4.3-11_i386.deb f53603628b9d619077fb391b553c7d85 296550 libs optional svgalibg1_1.4.3-11_i386.deb 0f59018d9105a07f42cd86cb1ecdd991 544426 devel optional svgalibg1-dev_1.4.3-11_i386.deb a83c19f2f093ad6c1e3c1c48adb03e97 179468 oldlibs optional svgalib1_1.4.3-11_i386.deb 7508160916468514158b027b4b8ef057 235050 oldlibs extra svgalib1-altdev_1.4.3-11_i386.deb -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.1 (GNU/Linux) iD8DBQE96pxHxBYivKllgY8RAoKtAKCHs1eL2ryRZQlRzO2ttZM9CPz9JACeMyUh nF+PYJHq5eIpftjosA9zeuY= =K15v -----END PGP SIGNATURE-----
Reply to:

Building a Retro Linux Gaming Computer - Part 6: A Lone Marine Battled

Continued from Part 5: Quaking in My Boots

In the same vein as Quake: The Offering, the next game in the series got a similar treatment for Linux with Quake II: Colossus from Macmillan Digital Publishing, containing Quake II as well as it's two mission packs The Reckoning and Ground Zero, svgalib mmap error. This time the mission packs were included on a separate CD-ROM from the main game, but that disc only holds the soundtrack for Ground Zero, meaning that music tracks unique to The Reckoning are absent.

Installation was much the same as with the first Quake, with the port now done by Zoid Kirsch still having most of the same limitations as Dave Taylor’s original Quake port, although Quake II does at least have better support for mouselook. That said, I did find I had to copy my system’s libGL.so.1.2 file to the Quake II installation directory twice named as both opengl32 and libGL.so in order to get OpenGL acceleration to work reliably.

Rather than featuring multiple different binaries as Quake did to launch the various different rendering options, Quake II instead accepts command arguments using the "vid_ref" variable to just the one application. SVGAlib can be used for both software rendering from a console as well as hardware acceleration on 3dfx cards, with the "softx" and "glx" renderers working instead through an X11 window on any graphics card.

Like with the original Quake, I created a custom launch script that blanks the mouse cursor and adjusts the X11 gamma as well as providing a nice menu for selecting the mission packs. After encountering memory leaks with Nautilus when playing the game from Gnome, I also went ahead and created a custom all black style for Blackbox to make use svgalib mmap error my full screen hack and switched to playing Quake II from Blackbox instead.

From time to time the game would hard lock the system, forcing me to hit the power switch on the computer. Try as I might I was never able to diagnose a cause for this issue, svgalib mmap error, although the freezes do seem to be more prevalent on the first map of each Unit and towards the end of the game, with the worst level for locking appearing to be Launch Command. I suspect my graphics drivers but I can not say for sure.

I also ran into a known issue with the Linux binaries where the game would kick you back to the desktop with a Signal 11 error upon completing the Big Gun map. This is actually due to a bug in how Quake II calculates string lengths in saved games, and can be avoided by completing the level without loading it from a save file. Not having a recent save available, I ended up just level warping to Outer Hanger from the console.

Of course this meant starting the game again with just a Blaster, which was not too bad until I found the Comm Satellite secret level. I would have been much better served if I had went through the Research Lab first, svgalib mmap error, as I could have grabbed the Super Shotgun. In the end I faced the Makron without svgalib mmap error either a Chaingun or the BFG10k, but he still fell easy from my Hyperblaster with the Quad Damage and Invulnerability power ups enabled.

Performance wise Windows 98 was ahead of every Linux renderer although the difference was marginal in software mode, with SVGAlib also taking a slight lead over X11. With OpenGL things were more marked with Linux getting a mean average of 45 FPS to 63 FPS on Windows, even when the game was ran in windowed mode. Quake II does seem to have benefited from being designed as a native Win32 application.

As time goes on it seems that the original Quake is being more fondly remembered, but in terms of consistency the sequel is still the superior package, both from a technical and design standpoint. I can not help but wonder if the game would now be better received if it had been named something like "Wor" as originally intended, given all the flack id Software got at the time for being derivative. Like with Doom 3, it would shine brighter by not having to suffer the comparison.

The next game in the Quake series would leave SVGAlib and X11 on Linux behind and utilize instead the then brand new Simple DirectMedia Layer, being embraced into the welcoming arms svgalib mmap error a nascent Loki Software. Like its predecessor it would take the Quake name to create something both vastly different but also very much the same. The result would be, to my mind at least, the closest a game has ever come to being a valued piece of utility software.

Carrying on in Part 7: The Arena Eternal

Return to Part 1: Dumpster Diving

Article taken from GamingOnLinux.com.

Tags: Editorial, FPS, Hardware, Retro auto>

Sets the colorkey drawing method (default: man).
man
Draw svgalib mmap error colorkey manually (reduces flicker in some cases).
bg
Set the colorkey as window background.
auto
Let Xv draw the colorkey.
x11 (X11 only)
Shared memory video output driver without hardware acceleration that works whenever X11 is present.
xover (X11 only)
Adds X11 support to all overlay based video output drivers. Currently only supported by tdfx_vid.
<vo_driver>
Select the driver to use as source to overlay on top of Svgalib mmap error (with -vc ffmpeg2vdpau, ffwmv3vdpau, ffvc1vdpau, ffh264vdpau or ffodivxvdpau)
Video output that uses VDPAU to decode video via hardware. Also supports displaying of software-decoded video.
sharpen=<-1-1>
For positive values, apply a sharpening algorithm to the video, svgalib mmap error, for negative values a blurring algorithm (default: 0).
denoise=<0-1>
Apply a noise reduction algorithm to the video (default: 0, no noise reduction).
deint=<0-4>
Select the deinterlacer (default: 0). All modes > 0 respect -field-dominance.
0
no deinterlacing
1
Show only first field, similar to -vf field.
2
Bob deinterlacing, similar to -vf tfields=1.
3
motion adaptive temporal deinterlacing May lead to A/V desync with slow video hardware and/or high resolution. This is the default if "D" is used to enable deinterlacing.
4
motion adaptive temporal deinterlacing with edge-guided spatial interpolation Needs fast video hardware.
chroma-deint
Makes temporal deinterlacers operate both on luma and chroma (default). Use nochroma-deint to solely use luma and speed up advanced deinterlacing. Useful with slow video memory.
pullup
Try to skip deinterlacing for progressive frames, useful for watching telecined content, needs fast video hardware for high resolutions. Only works with motion adaptive temporal deinterlacing.
colorspace
Select the color space for YUV to RGB conversion. In general BT.601 should be used for standard definition (SD) content and BT.709 for high definition (HD) content. Using incorrect color space results in slightly under or over saturated and shifted colors.
0
Guess the color space based on video resolution. Video with width >= 1280 or height > 576 is assumed to be HD and BT.709 color space will be used.
1
Use ITU-R BT.601 color space asus p5b deluxe error beep codes ITU-R BT.709 color space.
3
Use SMPTE-240M color space.
hqscaling
0
Use default VDPAU scaling (default).
1-9
Apply high quality VDPAU scaling (needs capable hardware).
force-mixer
Forces the use of the VDPAU mixer, which implements all above options (default). Use noforce-mixer to allow displaying BGRA colorspace. (Disables all above options and the hardware equalizer if image format svgalib mmap error BGRA is actually used.)
xvmc (X11 with FFmpeg MPEG-1/2 decoder only)
Video output driver that uses the XvMC (X Video Motion Compensation) extension of XFree86 4.x to speed up MPEG-1/2 and VCR2 decoding.
adaptor=<number>
Select a specific XVideo adaptor (check xvinfo results).
port=<number>
Select a specific XVideo port.
(no)benchmark
Disables image display. Necessary for proper benchmarking of drivers that change image buffers on monitor retrace only (nVidia). Default is not to disable image display (nobenchmark).
(no)bobdeint
Very simple deinterlacer. Might not look better than -vf tfields=1, but it is the only deinterlacer for xvmc (default: nobobdeint).
(no)queue
Queue frames for display to allow more parallel work of the video hardware. May add a small (not noticeable) constant A/V desync (default: noqueue).
(no)sleep
Use sleep function while waiting for rendering to finish (not recommended svgalib mmap error on Linux) (default: nosleep).
ck=cur 2 bass IXON);

    kt.c_cc[VMIN]= 0;

    kt.c_cc[VTIME]= 0;

 

    if(tcsetattr(keyb_fd, TCSAFLUSH, &kt) < 0) {

        fprintf(stderr, "Error: setting new terminal attributes");

        return-1;

    }

 

    if(ioctl(keyb_fd, svgalib mmap error, KDSKBMODE, K_MEDIUMRAW) < 0) {

        fprintf(stderr, "Error: setting keyboard in mediumraw mode");

        return-1;

    }

 

    if(ioctl(keyb_fd, KDSETMODE, KD_GRAPHICS) < 0) {

        fprintf(stderr, "Error: setting keyboard in graphics mode");

        return-1;

    }

 

    ioctl(keyb_fd, VT_LOCKSWITCH, 1);

    

    return 0;

}

 

void switchvt_pre()

{

    ioctl(keyb_fd, KDSETMODE, KD_TEXT);

    ioctl(keyb_fd, VT_UNLOCKSWITCH, 1);

}

 

void switchvt_post()

{

    ioctl(keyb_fd, VT_LOCKSWITCH, 1);

    ioctl(keyb_fd, KDSETMODE, KD_GRAPHICS);

}

 

int switched_away = 0;

 

void switchvt(int ii)

{

    struct vt_stat vtst;

 

    /* Figure out whether ornot we're switching to a new console */

    if(ioctl(keyb_fd, VT_GETSTATE, &vtst) < 0)

    {

        fprintf(stderr, "Error: could not read tty state");

        return;    

    }

    if(ii == vtst.v_active)

        return;

 

    LLOG("trying to switch to VT " << ii);

 

    GuiLock __;

 

    switchvt_pre();

 

    if(ioctl(keyb_fd, VT_ACTIVATE, ii) == 0) {

        ioctl(keyb_fd, VT_WAITACTIVE, ii);

        switched_away = 1;

        return;

    }

 

    switchvt_post();

}

 

void leavevt()

{

    if(oldmode < 0) return;

 

    if(ioctl(keyb_fd, KDSETMODE, KD_TEXT) < 0)

        fprintf(stderr, "Error: setting keyboard in text mode");

        

    if(ioctl(keyb_fd, KDSKBMODE, oldmode) < 0)

        fprintf(stderr, "Error: restoring keyboard mode");

 

    if(tcsetattr(keyb_fd, TCSAFLUSH, &oldtermios) < 0)

        fprintf(stderr, "Error: setting new terminal attributes");

 

    oldmode =-1;

 

    ioctl(keyb_fd, VT_UNLOCKSWITCH, 1);

 

    if(oldvt > 0)

        ioctl(keyb_fd, VT_ACTIVATE, oldvt);

}

 

int pend = 0;

 

//returns 0 if timeout, 1 for mouse, 2 for keyboard

//common for waitforevents and sleep

int readevents(int ms)

{

    fd_set fdset;

    int max_fd;

    staticstruct timeval to;

    to.tv_sec = ms / 1000;

    to.tv_usec = ms % 1000 * 1000;

 

    if(switched_away) {

        struct vt_stat vtst;

        GuiLock __;

        if((ioctl(keyb_fd, VT_GETSTATE, &vtst) == 0) &&

             vtst.v_active == cvt) {

            switched_away = 0;

            switchvt_post();

        }

    }

 

    FD_ZERO(&fdset);

    max_fd = 0;

    if(mouse_fd >= 0) {

        FD_SET(mouse_fd, &fdset);

        if(max_fd < mouse_fd) max_fd = mouse_fd;

    }

    if(keyb_fd >= 0) {

        FD_SET(keyb_fd, &fdset);

        if(max_fd < keyb_fd) max_fd = keyb_fd;

    }

    if(select(max_fd+1, &fdset, NULL, NULL, &to) > 0) {

        if(mouse_fd >= 0) {

            if(FD_ISSET(mouse_fd, &fdset)) return 1;

        }

        if(keyb_fd >= 0) {

            if(FD_ISSET(keyb_fd, &fdset)) return 2;

        }

    }

    return 0;

}

 

//

 

void FBQuitSession()

{

    Ctrl::EndSession();

}

 

bool Svgalib mmap error = readevents(0);

    return pend > 0;

}

 

bool FBProcessEvent(bool*quit)

{

    if(pend)

    {

        if(pend & 1) handle_mouse();

        if(pend & 2) handle_keyboard();

        pend = 0; //need to reset, since with repeated call is not updated here, would stuck

        returntrue;

    }

    returnfalse;

}

 

void FBSleep(int ms)

{

    pend = readevents(ms); //interruptable sleep

 

    //keep queue busy, see SDLFb/Win.cpp for why

    //this indicates that some stuff is pending, returning true in FBProcessEvent

    //while nothing is actually processed

    pend

0 Comments

Leave a Comment