summaryrefslogtreecommitdiff
path: root/network
diff options
context:
space:
mode:
authorB. Watson <yalhcru@gmail.com>2014-02-05 08:54:02 +0700
committerErik Hanson <erik@slackbuilds.org>2014-02-08 11:10:10 -0600
commitf05385edeef1b12adb2f9033e1fbddbada1c6caa (patch)
tree1327ecbe03d11e29358dd23fd35e90f8f48eba3d /network
parentb9fe91a6a6ca4c16369b0867db2e65f51ab39984 (diff)
downloadslackbuilds-f05385edeef1b12adb2f9033e1fbddbada1c6caa.tar.gz
network/cicb: Added (ICB client).
Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
Diffstat (limited to 'network')
-rw-r--r--network/cicb/README8
-rw-r--r--network/cicb/cicb.SlackBuild114
-rw-r--r--network/cicb/cicb.info10
-rw-r--r--network/cicb/icb.1272
-rw-r--r--network/cicb/icbserverdb11
-rw-r--r--network/cicb/slack-desc19
-rw-r--r--network/cicb/tcl_continue_error.diff45
7 files changed, 479 insertions, 0 deletions
diff --git a/network/cicb/README b/network/cicb/README
new file mode 100644
index 0000000000..26ba466cfe
--- /dev/null
+++ b/network/cicb/README
@@ -0,0 +1,8 @@
+cicb (ICB client)
+
+ICB (International CB) is a teleconferencing system that allows Internet
+users to participate in realtime online discussions (similar to IRC). This
+package builds a client program (called, strangely enough, "icb") that
+is used to access ICB.
+
+icb has extensive built-in help, accessed by the /help command.
diff --git a/network/cicb/cicb.SlackBuild b/network/cicb/cicb.SlackBuild
new file mode 100644
index 0000000000..f301bdaecb
--- /dev/null
+++ b/network/cicb/cicb.SlackBuild
@@ -0,0 +1,114 @@
+#!/bin/sh
+
+# Slackware build script for cicb
+
+# Written by B. Watson (yalhcru@gmail.com)
+
+# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
+
+PRGNAM=cicb
+VERSION=${VERSION:-5.1.1b3}
+BUILD=${BUILD:-1}
+TAG=${TAG:-_SBo}
+
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) ARCH=i486 ;;
+ arm*) ARCH=arm ;;
+ *) ARCH=$( uname -m ) ;;
+ esac
+fi
+
+CWD=$(pwd)
+TMP=${TMP:-/tmp/SBo}
+PKG=$TMP/package-$PRGNAM
+OUTPUT=${OUTPUT:-/tmp}
+
+if [ "$ARCH" = "i486" ]; then
+ SLKCFLAGS="-O2 -march=i486 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "i686" ]; then
+ SLKCFLAGS="-O2 -march=i686 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+else
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+fi
+
+set -e
+
+rm -rf $PKG
+mkdir -p $TMP $PKG $OUTPUT
+cd $TMP
+rm -rf $PRGNAM-$VERSION
+tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
+cd $PRGNAM-$VERSION
+chown -R root:root .
+find -L . \
+ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
+ -o -perm 511 \) -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+
+# Recent stdio.h defines a getline(), cicb's internal getline() conflicts.
+# There's probably a way to fix this more elegantly with some combination
+# of gcc feature macros, but my attempt led to a maze of twisty compile errors.
+# Renaming cicb's getline() to get_line() works fine and seems more
+# future-proof.
+sed -i 's/getline *(/get_line(/g' icb/*.[ch]
+
+# Need this for recent tcl, to allow deprecated features. Someday this will
+# probably stop working and upstream will have to fix it.
+SLKCFLAGS="$SLKCFLAGS -DUSE_INTERP_ERRORLINE -DUSE_INTERP_RESULT"
+
+# Another tcl fix (from upstream's CVS repo)
+patch -p1 < $CWD/tcl_continue_error.diff
+
+# library autodetection is broken on 64-bit, hence the
+# --with-(readline|ssl)* and the LDFLAGS below. They don't do any harm
+# on 32-bit.
+
+LDFLAGS="-L/usr/lib$LIBDIRSUFFIX" \
+CFLAGS="$SLKCFLAGS" \
+CXXFLAGS="$SLKCFLAGS" \
+./configure \
+ --with-ssl \
+ --with-ssl-lib=/usr/lib$LIBDIRSUFFIX \
+ --with-readlinelib=/usr/lib$LIBDIRSUFFIX \
+ --datarootdir=/usr/share/$PRGNAM \
+ --prefix=/usr \
+ --libdir=/usr/lib${LIBDIRSUFFIX} \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ --mandir=/usr/man \
+ --docdir=/usr/doc/$PRGNAM-$VERSION \
+ --build=$ARCH-slackware-linux
+
+make
+
+# no DESTDIR support, and prefix= is broken. Manual install.
+# icbserverdb is newer than what's in the cicb tarball, it came from:
+# wget -O icbserverdb ftp://ftp.icb.net/pub/icb/servers
+
+mkdir -p $PKG/usr/bin $PKG/usr/share/$PRGNAM
+ln -s icb $PKG/usr/bin/$PRGNAM
+install -s -m0755 icb/icb $PKG/usr/bin
+install -m0644 $CWD/icbserverdb system.icbrc $PKG/usr/share/$PRGNAM
+
+# man page written for this SlackBuild
+mkdir -p $PKG/usr/man/man1
+gzip -9c < $CWD/icb.1 > $PKG/usr/man/man1/icb.1.gz
+ln -s icb.1.gz $PKG/usr/man/man1/$PRGNAM.1.gz
+
+mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
+cp -a C* README TODO TRIGGERS contrib $PKG/usr/doc/$PRGNAM-$VERSION
+cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+
+cd $PKG
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
diff --git a/network/cicb/cicb.info b/network/cicb/cicb.info
new file mode 100644
index 0000000000..4c485d6304
--- /dev/null
+++ b/network/cicb/cicb.info
@@ -0,0 +1,10 @@
+PRGNAM="cicb"
+VERSION="5.1.1b3"
+HOMEPAGE="http://cicb.sourceforge.net/"
+DOWNLOAD="http://downloads.sourceforge.net/project/cicb/cicb/cicb.5.1.1b3/cicb-5.1.1b3.tar.gz"
+MD5SUM="204989b74ee70585d718ec5f100959c8"
+DOWNLOAD_x86_64=""
+MD5SUM_x86_64=""
+REQUIRES=""
+MAINTAINER="B. Watson"
+EMAIL="yalhcru@gmail.com"
diff --git a/network/cicb/icb.1 b/network/cicb/icb.1
new file mode 100644
index 0000000000..309ed9bf27
--- /dev/null
+++ b/network/cicb/icb.1
@@ -0,0 +1,272 @@
+.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "ICB 1"
+.TH ICB 1 "2014-02-04" "5.1.1b3" "SlackBuilds.org"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+icb \- a color\-capable International/Internet CB chat client
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+icb \fB[options]\fR
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\s-1ICB \s0(International \s-1CB,\s0 or Internet \s-1CB\s0) is a teleconferencing system that
+allows Internet users to participate in realtime online discussions.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+Options may be abbreviated to the shortest unique prefix (generally
+one or two characters). Options requiring an argument must have a space
+before the argument.
+.IP "\-nickname \fInick\fR" 4
+.IX Item "-nickname nick"
+Sign on with nickname \fInick\fR (default: see \fB\s-1ENVIRONMENT\s0\fR below).
+.IP "\-password \fIpass\fR" 4
+.IX Item "-password pass"
+Set password to \fIpass\fR. Note: specifying a password on the command line implies \-clear.
+.IP "\-password \-" 4
+.IX Item "-password -"
+Prompt for password.
+.IP "\-group \fIgroup\fR" 4
+.IX Item "-group group"
+Sign on into group \fIgroup\fR.
+.IP "\-server \fIname\fR" 4
+.IX Item "-server name"
+Connect to server named \fIname\fR.
+.IP "\-host \fIhost\fR" 4
+.IX Item "-host host"
+Connect to server on host \fIhost\fR (default: \fBdefault.icb.net\fR).
+.IP "\-port \fIport\fR" 4
+.IX Item "-port port"
+Try to connect to port \fIport\fR (default: 7326, or 7327 when using \s-1SSL\s0).
+.IP "\-bindhost \fIhost\fR" 4
+.IX Item "-bindhost host"
+Try to bind outgoing connect to host \fIhost\fR (default: 0.0.0.0).
+.IP "\-SSL" 4
+.IX Item "-SSL"
+Use \s-1SSL.\s0
+.IP "\-list" 4
+.IX Item "-list"
+List known servers, in order.
+.IP "\-clear" 4
+.IX Item "-clear"
+Wipe args from command line.
+.IP "\-who" 4
+.IX Item "-who"
+See who's on; don't sign on.
+.IP "\-restricted" 4
+.IX Item "-restricted"
+Restricted mode. Disables logging, external shell commands, and
+the tcl commands \fIexec\fR, \fIprint\fR, \fIfile\fR, and \fIsource\fR.
+.IP "\-color" 4
+.IX Item "-color"
+Enable \s-1ANSI\s0 color mode (disabled by default).
+.IP "\-help" 4
+.IX Item "-help"
+Display built-in help message.
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+.IP "\s-1ICBNAME\s0" 4
+.IX Item "ICBNAME"
+.PD 0
+.IP "\s-1FNNAME\s0" 4
+.IX Item "FNNAME"
+.IP "\s-1FORUMNAME\s0" 4
+.IX Item "FORUMNAME"
+.PD
+If the \fB\-nickname\fR option is not given, these environment variables
+are checked in the order listed. The first one that's set is used as
+the nickname on the server. If none are set, the login name on the local
+system is used as the nickname.
+.IP "\s-1EDITOR\s0" 4
+.IX Item "EDITOR"
+.PD 0
+.IP "\s-1VISUAL\s0" 4
+.IX Item "VISUAL"
+.PD
+If \s-1EDITOR \s0(or \s-1VISUAL,\s0 if \s-1EDITOR\s0 is not set) is set to \*(L"emacs\*(R" (or a
+path ending in \*(L"emacs\*(R", such as \*(L"/usr/bin/emacs\*(R"), icb will use emacs
+editing mode by default, otherwise it will use vi mode. However, the
+default \fIsystem.icbrc\fR contains \*(L"oset editmode emacs\*(R" which overrides
+this variable. To use the environment, add \*(L"ounset editmode\*(R" to your
+\&\fI~/.icb/icbrc\fR.
+.IP "\s-1SHELL\s0" 4
+.IX Item "SHELL"
+The shell to use when running external commands from within icb, via
+the \fIc_chell\fR command (see \fB/help primitives\fR). If not set, \fB/bin/sh\fR
+is used.
+.SH "FILES"
+.IX Header "FILES"
+.IP "/usr/share/cicb/icbserverdb" 4
+.IX Item "/usr/share/cicb/icbserverdb"
+List of \s-1ICB\s0 servers. Used by the \fB\-list\fR and \fB\-server\fR options.
+.IP "/usr/share/cicb/system.icbrc" 4
+.IX Item "/usr/share/cicb/system.icbrc"
+System-wide \s-1ICB\s0 startup script, in \s-1TCL.\s0 Contains many helpful comments.
+.ie n .IP "$HOME/.icb/icbrc" 4
+.el .IP "\f(CW$HOME\fR/.icb/icbrc" 4
+.IX Item "$HOME/.icb/icbrc"
+Per-user startup script, sourced by system.icbrc if found.
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+\&\s-1ICB\s0 is based on Sean Casey's ForumNet (\*(L"forum\*(R" or \*(L"fn\*(R") 0.10, with his
+permission. The new name was devised by Mark Giaquinto and John Atwood
+DeVries. The actual code here is based on release 5.0.9 of the Tcl C\-Icb
+client. It has been severely modified by a loose knit group of users who
+can't seem to part with the traditional client code.
+.PP
+The parts of the code that are left over from ForumNet are Copyright (c)
+1990 by Carrick Sean Casey.
+.PP
+The parts of the code that are left over from icb 5.0.9 is Copyright (c)
+1993 by Mark J. Reed.
+.PP
+That said, cicb 5.1 is nearly a complete rewrite of the original code by
+the cicb-workers committee, which includes, but is not limited to: Erik
+Fichtner, Phil Stracchino, Michel Hoche-Mong, and Felix Lee.
+.PP
+This man page written by B. Watson for the SlackBuilds.org project, and may
+be used by anyone.
+.SH "LICENSE"
+.IX Header "LICENSE"
+This code has been placed under the \s-1GNU\s0 Public License with Mark Reed's
+blessing. Please see the file \*(L"\s-1COPYING\*(R"\s0 for further information.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+icb's extensive built-in help, accessed by the \fB/help\fR command.
+.PP
+The \s-1ICB\s0 web site, \fBhttp://www.icb.net/\fR.
diff --git a/network/cicb/icbserverdb b/network/cicb/icbserverdb
new file mode 100644
index 0000000000..4ef7930e47
--- /dev/null
+++ b/network/cicb/icbserverdb
@@ -0,0 +1,11 @@
+#
+# Server Name IP address Server Admin Port
+#
+default default.icb.net falcon@icb.net 7326
+chime chime.icb.net falcon@icb.net 7326
+echo echo.icb.net queue@echo.com 7326
+empire empire.icb.net ???@empire.net 7326
+cjnetworks cjnetworks.icb.net ???@cjnetworks.com 7326
+swcp swcp.icb.net ???@swcp.com 7326
+bossanova bossanova.icb.net colby@bossanova.com 7326
+squarewave squarewave.icb.net lerner@squarewave.com 7326
diff --git a/network/cicb/slack-desc b/network/cicb/slack-desc
new file mode 100644
index 0000000000..e7a1379955
--- /dev/null
+++ b/network/cicb/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.
+# Line up the first '|' above the ':' following the base package name, and
+# the '|' on the right side marks the last column you can put a character in.
+# You must make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':' except on otherwise blank lines.
+
+ |-----handy-ruler------------------------------------------------------|
+cicb: cicb (ICB client)
+cicb:
+cicb: ICB (International CB) is a teleconferencing system that allows
+cicb: Internet users to participate in realtime online discussions
+cicb: (similar to IRC). This package builds a client program (called,
+cicb: strangely enough, "icb") that is used to access ICB.
+cicb:
+cicb: Project URL: http://www.icb.net/
+cicb:
+cicb:
+cicb:
diff --git a/network/cicb/tcl_continue_error.diff b/network/cicb/tcl_continue_error.diff
new file mode 100644
index 0000000000..dcba1b865c
--- /dev/null
+++ b/network/cicb/tcl_continue_error.diff
@@ -0,0 +1,45 @@
+diff -wNaur -xCVS cicb-5.1.1b3/icb/parse.c cicb/icb/parse.c
+--- cicb-5.1.1b3/icb/parse.c 2009-03-23 02:51:53.000000000 -0400
++++ cicb/icb/parse.c 2013-07-05 02:16:27.000000000 -0400
+@@ -1,4 +1,4 @@
+-/* $Id: parse.c,v 1.20 2009/03/23 06:51:53 hoche Exp $ */
++/* $Id: parse.c,v 1.21 2013/07/05 06:16:27 hoche Exp $ */
+
+ /* parse a line from the user */
+
+@@ -8,6 +8,9 @@
+
+ #define ARRAY_SIZE(x) (sizeof (x) / sizeof (x[0]))
+
++#define TCL_CONTINUE_ERROR_MSG "invoked \"continue\" outside of a loop"
++#define TCL_IGNORE 666
++
+
+ /* This is similar to Tcl_VarEval, but it treats each string as a separate
+ list element, rather than concat-ing the strings together and then
+@@ -76,6 +79,14 @@
+ if (status == TCL_CONTINUE) {
+ send_command (cmd, args);
+ status = TCL_OK;
++ } else if (status == TCL_ERROR) {
++
++ /* handle the dreaded "invoked continue" message */
++ char *errmsg = (char*)Tcl_GetStringResult (interp);
++ if (strcmp(errmsg, TCL_CONTINUE_ERROR_MSG) == 0) {
++ send_command (cmd, args);
++ status = TCL_IGNORE;
++ }
+ }
+
+ return status;
+@@ -122,7 +133,9 @@
+ putl (result, PL_SL);
+ }
+ error_mode = 0;
+-
++ } else if (status == TCL_IGNORE) {
++ /* do nothing */
++ error_mode = 0;
+ } else {
+ /* Report an error. */
+ char* errmsg = "";