本文整理汇总了C++中dprint函数的典型用法代码示例。如果您正苦于以下问题:C++ dprint函数的具体用法?C++ dprint怎么用?C++ dprint使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了dprint函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main(void)
{
dprint(123);
dprint(123.0);
return 0;
}
示例2: setalt
static void
setalt(Dev *d, int ifcid, int altid)
{
if(usbcmd(d, Rh2d|Rstd|Riface, Rsetiface, altid, ifcid, nil, 0) < 0)
dprint(2, "%s: setalt ifc %d alt %d: %r\n", argv0, ifcid, altid);
}
示例3: usage
void
usage(void)
{
dprint("usage: sam [-d] [-t samterm] [-s sam name] -r machine\n");
exits("usage");
}
示例4: mutt_copy_hdr
/* Ok, the only reason for not merging this with mutt_copy_header()
* below is to avoid creating a HEADER structure in message_handler().
* Also, this one will wrap headers much more aggressively than the other one.
*/
int
mutt_copy_hdr (FILE *in, FILE *out, LOFF_T off_start, LOFF_T off_end, int flags,
const char *prefix)
{
int from = 0;
int this_is_from;
int ignore = 0;
char buf[LONG_STRING]; /* should be long enough to get most fields in one pass */
char *nl;
LIST *t;
char **headers;
int hdr_count;
int x;
char *this_one = NULL;
size_t this_one_len = 0;
int error;
if (ftello (in) != off_start)
fseeko (in, off_start, 0);
buf[0] = '\n';
buf[1] = 0;
if ((flags & (CH_REORDER | CH_WEED | CH_MIME | CH_DECODE | CH_PREFIX | CH_WEED_DELIVERED)) == 0)
{
/* Without these flags to complicate things
* we can do a more efficient line to line copying
*/
while (ftello (in) < off_end)
{
nl = strchr (buf, '\n');
if ((fgets (buf, sizeof (buf), in)) == NULL)
break;
/* Is it the begining of a header? */
if (nl && buf[0] != ' ' && buf[0] != '\t')
{
ignore = 1;
if (!from && mutt_strncmp ("From ", buf, 5) == 0)
{
if ((flags & CH_FROM) == 0)
continue;
from = 1;
}
else if (flags & (CH_NOQFROM) &&
ascii_strncasecmp (">From ", buf, 6) == 0)
continue;
else if (buf[0] == '\n' || (buf[0] == '\r' && buf[1] == '\n'))
break; /* end of header */
if ((flags & (CH_UPDATE | CH_XMIT | CH_NOSTATUS)) &&
(ascii_strncasecmp ("Status:", buf, 7) == 0 ||
ascii_strncasecmp ("X-Status:", buf, 9) == 0))
continue;
if ((flags & (CH_UPDATE_LEN | CH_XMIT | CH_NOLEN)) &&
(ascii_strncasecmp ("Content-Length:", buf, 15) == 0 ||
ascii_strncasecmp ("Lines:", buf, 6) == 0))
continue;
if ((flags & CH_UPDATE_REFS) &&
ascii_strncasecmp ("References:", buf, 11) == 0)
continue;
if ((flags & CH_UPDATE_IRT) &&
ascii_strncasecmp ("In-Reply-To:", buf, 12) == 0)
continue;
ignore = 0;
}
if (!ignore && fputs (buf, out) == EOF)
return (-1);
}
return 0;
}
hdr_count = 1;
x = 0;
error = FALSE;
/* We are going to read and collect the headers in an array
* so we are able to do re-ordering.
* First count the number of entries in the array
*/
if (flags & CH_REORDER)
{
for (t = HeaderOrderList; t; t = t->next)
{
dprint(3, (debugfile, "Reorder list: %s\n", t->data));
hdr_count++;
}
}
dprint (1, (debugfile, "WEED is %s\n", (flags & CH_WEED) ? "Set" : "Not"));
headers = safe_calloc (hdr_count, sizeof (char *));
//.........这里部分代码省略.........
示例5: fill_sha512
static void fill_sha512(struct verify_header *hdr, void *p, unsigned int len)
{
struct vhdr_sha512 *vh = hdr_priv(hdr);
struct fio_sha512_ctx sha512_ctx = {
.buf = vh->sha512,
};
fio_sha512_init(&sha512_ctx);
fio_sha512_update(&sha512_ctx, p, len);
}
static void fill_sha256(struct verify_header *hdr, void *p, unsigned int len)
{
struct vhdr_sha256 *vh = hdr_priv(hdr);
struct fio_sha256_ctx sha256_ctx = {
.buf = vh->sha256,
};
fio_sha256_init(&sha256_ctx);
fio_sha256_update(&sha256_ctx, p, len);
}
static void fill_sha1(struct verify_header *hdr, void *p, unsigned int len)
{
struct vhdr_sha1 *vh = hdr_priv(hdr);
struct fio_sha1_ctx sha1_ctx = {
.H = vh->sha1,
};
fio_sha1_init(&sha1_ctx);
fio_sha1_update(&sha1_ctx, p, len);
}
static void fill_crc7(struct verify_header *hdr, void *p, unsigned int len)
{
struct vhdr_crc7 *vh = hdr_priv(hdr);
vh->crc7 = fio_crc7(p, len);
}
static void fill_crc16(struct verify_header *hdr, void *p, unsigned int len)
{
struct vhdr_crc16 *vh = hdr_priv(hdr);
vh->crc16 = fio_crc16(p, len);
}
static void fill_crc32(struct verify_header *hdr, void *p, unsigned int len)
{
struct vhdr_crc32 *vh = hdr_priv(hdr);
vh->crc32 = fio_crc32(p, len);
}
static void fill_crc32c(struct verify_header *hdr, void *p, unsigned int len)
{
struct vhdr_crc32 *vh = hdr_priv(hdr);
vh->crc32 = fio_crc32c(p, len);
}
static void fill_crc64(struct verify_header *hdr, void *p, unsigned int len)
{
struct vhdr_crc64 *vh = hdr_priv(hdr);
vh->crc64 = fio_crc64(p, len);
}
static void fill_md5(struct verify_header *hdr, void *p, unsigned int len)
{
struct vhdr_md5 *vh = hdr_priv(hdr);
struct fio_md5_ctx md5_ctx = {
.hash = (uint32_t *) vh->md5_digest,
};
fio_md5_init(&md5_ctx);
fio_md5_update(&md5_ctx, p, len);
}
static void populate_hdr(struct thread_data *td, struct io_u *io_u,
struct verify_header *hdr, unsigned int header_num,
unsigned int header_len)
{
unsigned int data_len;
void *data, *p;
p = (void *) hdr;
hdr->magic = FIO_HDR_MAGIC;
hdr->verify_type = td->o.verify;
hdr->len = header_len;
hdr->rand_seed = io_u->rand_seed;
hdr->crc32 = fio_crc32c(p, offsetof(struct verify_header, crc32));
data_len = header_len - hdr_size(hdr);
data = p + hdr_size(hdr);
switch (td->o.verify) {
case VERIFY_MD5:
dprint(FD_VERIFY, "fill md5 io_u %p, len %u\n",
//.........这里部分代码省略.........
示例6: extend_file
/*
* Leaves f->fd open on success, caller must close
*/
static int extend_file(struct thread_data *td, struct fio_file *f)
{
int r, new_layout = 0, unlink_file = 0, flags;
unsigned long long left;
unsigned int bs;
char *b = NULL;
if (read_only) {
log_err("fio: refusing extend of file due to read-only\n");
return 0;
}
/*
* check if we need to lay the file out complete again. fio
* does that for operations involving reads, or for writes
* where overwrite is set
*/
if (td_read(td) ||
(td_write(td) && td->o.overwrite && !td->o.file_append) ||
(td_write(td) && td->io_ops->flags & FIO_NOEXTEND))
new_layout = 1;
if (td_write(td) && !td->o.overwrite && !td->o.file_append)
unlink_file = 1;
if (unlink_file || new_layout) {
dprint(FD_FILE, "layout unlink %s\n", f->file_name);
if ((unlink(f->file_name) < 0) && (errno != ENOENT)) {
td_verror(td, errno, "unlink");
return 1;
}
}
flags = O_WRONLY | O_CREAT;
if (new_layout)
flags |= O_TRUNC;
dprint(FD_FILE, "open file %s, flags %x\n", f->file_name, flags);
f->fd = open(f->file_name, flags, 0644);
if (f->fd < 0) {
td_verror(td, errno, "open");
return 1;
}
#ifdef CONFIG_POSIX_FALLOCATE
if (!td->o.fill_device) {
switch (td->o.fallocate_mode) {
case FIO_FALLOCATE_NONE:
break;
case FIO_FALLOCATE_POSIX:
dprint(FD_FILE, "posix_fallocate file %s size %llu\n",
f->file_name,
(unsigned long long) f->real_file_size);
r = posix_fallocate(f->fd, 0, f->real_file_size);
if (r > 0) {
log_err("fio: posix_fallocate fails: %s\n",
strerror(r));
}
break;
#ifdef CONFIG_LINUX_FALLOCATE
case FIO_FALLOCATE_KEEP_SIZE:
dprint(FD_FILE,
"fallocate(FALLOC_FL_KEEP_SIZE) "
"file %s size %llu\n", f->file_name,
(unsigned long long) f->real_file_size);
r = fallocate(f->fd, FALLOC_FL_KEEP_SIZE, 0,
f->real_file_size);
if (r != 0)
td_verror(td, errno, "fallocate");
break;
#endif /* CONFIG_LINUX_FALLOCATE */
default:
log_err("fio: unknown fallocate mode: %d\n",
td->o.fallocate_mode);
assert(0);
}
}
#endif /* CONFIG_POSIX_FALLOCATE */
if (!new_layout)
goto done;
/*
* The size will be -1ULL when fill_device is used, so don't truncate
* or fallocate this file, just write it
*/
if (!td->o.fill_device) {
dprint(FD_FILE, "truncate file %s, size %llu\n", f->file_name,
(unsigned long long) f->real_file_size);
if (ftruncate(f->fd, f->real_file_size) == -1) {
if (errno != EFBIG) {
td_verror(td, errno, "ftruncate");
goto err;
}
}
//.........这里部分代码省略.........
示例7: safe_rename
int safe_rename (const char *src, const char *target)
{
struct stat ssb, tsb;
if (!src || !target)
return -1;
if (link (src, target) != 0)
{
/*
* Coda does not allow cross-directory links, but tells
* us it's a cross-filesystem linking attempt.
*
* However, the Coda rename call is allegedly safe to use.
*
* With other file systems, rename should just fail when
* the files reside on different file systems, so it's safe
* to try it here.
*
*/
dprint (1, (debugfile, "safe_rename: link (%s, %s) failed: %s (%d)\n", src, target, strerror (errno), errno));
/*
* FUSE may return ENOSYS. VFAT may return EPERM. FreeBSD's
* msdosfs may return EOPNOTSUPP. ENOTSUP can also appear.
*/
if (errno == EXDEV || errno == ENOSYS || errno == EPERM
#ifdef ENOTSUP
|| errno == ENOTSUP
#endif
#ifdef EOPNOTSUPP
|| errno == EOPNOTSUPP
#endif
)
{
dprint (1, (debugfile, "safe_rename: trying rename...\n"));
if (rename (src, target) == -1)
{
dprint (1, (debugfile, "safe_rename: rename (%s, %s) failed: %s (%d)\n", src, target, strerror (errno), errno));
return -1;
}
dprint (1, (debugfile, "safe_rename: rename succeeded.\n"));
return 0;
}
return -1;
}
/*
* Stat both links and check if they are equal.
*/
if (lstat (src, &ssb) == -1)
{
dprint (1, (debugfile, "safe_rename: can't stat %s: %s (%d)\n",
src, strerror (errno), errno));
return -1;
}
if (lstat (target, &tsb) == -1)
{
dprint (1, (debugfile, "safe_rename: can't stat %s: %s (%d)\n",
src, strerror (errno), errno));
return -1;
}
/*
* pretend that the link failed because the target file
* did already exist.
*/
if (compare_stat (&ssb, &tsb) == -1)
{
dprint (1, (debugfile, "safe_rename: stat blocks for %s and %s diverge; pretending EEXIST.\n", src, target));
errno = EEXIST;
return -1;
}
/*
* Unlink the original link. Should we really ignore the return
* value here? XXX
*/
if (unlink (src) == -1)
{
dprint (1, (debugfile, "safe_rename: unlink (%s) failed: %s (%d)\n",
src, strerror (errno), errno));
}
return 0;
}
示例8: main
void
main(void)
{
uint32 nrftx = 0, nrxuf = 0;
int i = 0;
static __xdata Rcall c;
uint8 state = Idle;
uint8 waitflag = 0, clearflag = 0;
uint8 laststate, lastflag, lastMARCSTATE;
laststate = state;
lastflag = flag;
lastMARCSTATE = MARCSTATE;
memset(&curcall, 0, sizeof curcall);
SLEEP &= ~SLEEP_OSC_PD;
await(SLEEP & SLEEP_XOSC_S);
CLKCON = (CLKCON & ~(CLKCON_CLKSPD | CLKCON_OSC)) | CLKSPD_DIV_1;
await(!(CLKCON & CLKCON_OSC));
SLEEP |= SLEEP_OSC_PD;
await(SLEEP & SLEEP_XOSC_S);
P1DIR |= LEDBITS;
printinit();
srvinit();
rfinit();
GREEN = RED = 0;
// Enables interrupts. (Go go go)
EA = 1;
wdinit();
dprint("pingrf started.\n");
srvrx();
for(;;){
wdreset();
if(flag&Fpanic){
GREEN = 0;
RED = 0;
for(;;){
RED ^= 1;
sleep(1000);
/* TODO: reset */
}
}
if((flag&clearflag) != 0)
flag &= ~(flag&clearflag);
switch(state){
case Idle:
if(peekcall()->type == Nop)
break;
nextcall(&c);
waitflag = clearflag = 0;
call(&c, &state, &waitflag, &clearflag);
break;
case Reply:
reply(&c);
state = Replying;
break;
case Replying:
if(flag&Ftxcall){
flag &= ~Ftxcall;
state = Idle;
}
// GREEN=1;
break;
default:
if((flag&waitflag) != 0){
waitflag = flag&waitflag;
flag &= ~waitflag;
call(&c, &state, &waitflag, &clearflag);
}
/*
if((flag&waitflag)==waitflag){
flag &= ~waitflag;
call(&c, &state, &waitflag, &clearflag);
}
*/
break;
}
#ifdef DEBUG
if((i++%100000 == 0) || (flag != lastflag || state != laststate | lastMARCSTATE != MARCSTATE)){
//__critical {
//.........这里部分代码省略.........
示例9: siw_tx_ctrl
/*
* Send out one complete FPDU. Used for fixed sized packets like
* Read Requests or zero length SENDs, WRITEs, READ.responses.
* Also used for pushing an FPDU hdr only.
*/
static inline int siw_tx_ctrl(struct siw_iwarp_tx *c_tx, struct socket *s,
int flags)
{
struct msghdr msg = {.msg_flags = flags};
struct kvec iov = {
.iov_base = (char *)&c_tx->pkt.ctrl + c_tx->ctrl_sent,
.iov_len = c_tx->ctrl_len - c_tx->ctrl_sent};
int rv = kernel_sendmsg(s, &msg, &iov, 1,
c_tx->ctrl_len - c_tx->ctrl_sent);
dprint(DBG_TX, " (QP%d): op=%d, %d of %d sent (%d)\n",
TX_QPID(c_tx), c_tx->pkt.ctrl.opcode,
c_tx->ctrl_sent + rv, c_tx->ctrl_len, rv);
if (rv >= 0) {
c_tx->ctrl_sent += rv;
if (c_tx->ctrl_sent == c_tx->ctrl_len) {
siw_dprint_hdr(&c_tx->pkt.hdr, TX_QPID(c_tx),
"CTRL sent");
if (!(flags & MSG_MORE))
c_tx->new_tcpseg = 1;
rv = 0;
} else if (c_tx->ctrl_sent < c_tx->ctrl_len)
rv = -EAGAIN;
else
BUG();
}
return rv;
}
/*
* 0copy TCP transmit interface.
*
* Push page array page by page or in one shot.
* Pushing the whole page array requires the inner do_tcp_sendpages
* function to be exported by the kernel.
*/
static int siw_tcp_sendpages(struct socket *s, struct page **page,
int offset, size_t size)
{
int rv = 0;
#ifdef SIW_SENDPAGES_EXPORT
struct sock *sk = s->sk;
if (!(sk->sk_route_caps & NETIF_F_SG) ||
!(sk->sk_route_caps & NETIF_F_ALL_CSUM)) {
/* FIXME:
* This should also be handled in a
* loop
*/
return -EFAULT;
}
lock_sock(sk);
TCP_CHECK_TIMER(sk);
/*
* just return what sendpages has return
*/
rv = do_tcp_sendpages(sk, page, offset, size, MSG_MORE|MSG_DONTWAIT);
TCP_CHECK_TIMER(sk);
release_sock(sk);
if (rv == -EAGAIN)
rv = 0;
#else
/*
* If do_tcp_sendpages() function is not exported
* push page by page
*/
size_t todo = size;
int i;
for (i = 0; size > 0; i++) {
size_t bytes = min_t(size_t, PAGE_SIZE - offset, size);
rv = s->ops->sendpage(s, page[i], offset, bytes,
MSG_MORE|MSG_DONTWAIT);
if (rv <= 0)
break;
size -= rv;
if (rv != bytes)
break;
offset = 0;
}
if (rv >= 0 || rv == -EAGAIN)
rv = todo - size;
#endif
return rv;
//.........这里部分代码省略.........
示例10: __get_io_u
/*
* Return an io_u to be processed. Gets a buflen and offset, sets direction,
* etc. The returned io_u is fully ready to be prepped and submitted.
*/
struct io_u *get_io_u(struct thread_data *td)
{
struct fio_file *f;
struct io_u *io_u;
int do_scramble = 0;
io_u = __get_io_u(td);
if (!io_u) {
dprint(FD_IO, "__get_io_u failed\n");
return NULL;
}
if (check_get_verify(td, io_u))
goto out;
if (check_get_trim(td, io_u))
goto out;
/*
* from a requeue, io_u already setup
*/
if (io_u->file)
goto out;
/*
* If using an iolog, grab next piece if any available.
*/
if (td->flags & TD_F_READ_IOLOG) {
if (read_iolog_get(td, io_u))
goto err_put;
} else if (set_io_u_file(td, io_u)) {
dprint(FD_IO, "io_u %p, setting file failed\n", io_u);
goto err_put;
}
f = io_u->file;
assert(fio_file_open(f));
if (ddir_rw(io_u->ddir)) {
if (!io_u->buflen && !(td->io_ops->flags & FIO_NOIO)) {
dprint(FD_IO, "get_io_u: zero buflen on %p\n", io_u);
goto err_put;
}
f->last_start = io_u->offset;
f->last_pos = io_u->offset + io_u->buflen;
if (io_u->ddir == DDIR_WRITE) {
if (td->flags & TD_F_REFILL_BUFFERS) {
io_u_fill_buffer(td, io_u,
io_u->xfer_buflen, io_u->xfer_buflen);
} else if (td->flags & TD_F_SCRAMBLE_BUFFERS)
do_scramble = 1;
if (td->flags & TD_F_VER_NONE) {
populate_verify_io_u(td, io_u);
do_scramble = 0;
}
} else if (io_u->ddir == DDIR_READ) {
/*
* Reset the buf_filled parameters so next time if the
* buffer is used for writes it is refilled.
*/
io_u->buf_filled_len = 0;
}
}
/*
* Set io data pointers.
*/
io_u->xfer_buf = io_u->buf;
io_u->xfer_buflen = io_u->buflen;
out:
assert(io_u->file);
if (!td_io_prep(td, io_u)) {
if (!td->o.disable_slat)
fio_gettime(&io_u->start_time, NULL);
if (do_scramble)
small_content_scramble(io_u);
return io_u;
}
err_put:
dprint(FD_IO, "get_io_u failed\n");
put_io_u(td, io_u);
return NULL;
}
示例11: io_u_queued_complete
/*
* Called to complete min_events number of io for the async engines.
*/
int io_u_queued_complete(struct thread_data *td, int min_evts,
uint64_t *bytes)
{
struct io_completion_data icd;
struct timespec *tvp = NULL;
int ret;
struct timespec ts = { .tv_sec = 0, .tv_nsec = 0, };
dprint(FD_IO, "io_u_queued_completed: min=%d\n", min_evts);
if (!min_evts)
tvp = &ts;
ret = td_io_getevents(td, min_evts, td->o.iodepth_batch_complete, tvp);
if (ret < 0) {
td_verror(td, -ret, "td_io_getevents");
return ret;
} else if (!ret)
return ret;
init_icd(td, &icd, ret);
ios_completed(td, &icd);
if (icd.error) {
td_verror(td, icd.error, "io_u_queued_complete");
return -1;
}
if (bytes) {
int ddir;
for (ddir = DDIR_READ; ddir < DDIR_RWDIR_CNT; ddir++)
bytes[ddir] += icd.bytes_done[ddir];
}
return 0;
}
/*
* Call when io_u is really queued, to update the submission latency.
*/
void io_u_queued(struct thread_data *td, struct io_u *io_u)
{
if (!td->o.disable_slat) {
unsigned long slat_time;
slat_time = utime_since(&io_u->start_time, &io_u->issue_time);
add_slat_sample(td, io_u->ddir, slat_time, io_u->xfer_buflen);
}
}
void fill_io_buffer(struct thread_data *td, void *buf, unsigned int min_write,
unsigned int max_bs)
{
if (!td->o.zero_buffers) {
unsigned int perc = td->o.compress_percentage;
if (perc) {
unsigned int seg = min_write;
seg = min(min_write, td->o.compress_chunk);
if (!seg)
seg = min_write;
fill_random_buf_percentage(&td->buf_state, buf,
perc, seg, max_bs);
} else
fill_random_buf(&td->buf_state, buf, max_bs);
} else
memset(buf, 0, max_bs);
}
/*
* "randomly" fill the buffer contents
*/
void io_u_fill_buffer(struct thread_data *td, struct io_u *io_u,
unsigned int min_write, unsigned int max_bs)
{
io_u->buf_filled_len = 0;
fill_io_buffer(td, io_u->buf, min_write, max_bs);
}
示例12: read_command
/*----------------------------------------------------------------------
Read a character from keyboard with timeout
Input: none
Result: Returns command read via read_char
Times out and returns a null command every so often
Calculates the timeout for the read, and does a few other house keeping
things. The duration of the timeout is set in pine.c.
----------------------------------------------------------------------*/
UCS
read_command(char **utf8str)
{
int tm = 0, more_freq_timeo;
UCS ucs;
long dtime;
static unsigned char utf8buf[7];
unsigned char *newdestp;
/*
* timeo is the mail-check-interval. What we want to do (ignoring the
* messages_queued part) is timeout more often than timeo but only
* check for new mail every timeo or so seconds. The reason we want to
* timeout more often is so that we will have a chance to catch the user
* in an idle period where we can do a check_point(). Otherwise, with
* a default mail-check-interval, we are almost always calling newmail
* right after the user presses a key, making it the worst possible
* time to do a checkpoint.
*/
more_freq_timeo = MIN(get_input_timeout(), IDLE_TIMEOUT);
if(more_freq_timeo == 0)
more_freq_timeo = IDLE_TIMEOUT;
cancel_busy_cue(-1);
tm = (messages_queued(&dtime) > 1) ? (int)dtime : more_freq_timeo;
if(utf8str)
*utf8str = NULL;
ucs = read_char(tm);
if(ucs != NO_OP_COMMAND && ucs != NO_OP_IDLE && ucs != KEY_RESIZE)
zero_new_mail_count();
#ifdef BACKGROUND_POST
/*
* Any expired children to report on?
*/
if(ps_global->post && ps_global->post->pid == 0){
int winner = 0;
if(ps_global->post->status < 0){
q_status_message(SM_ORDER | SM_DING, 3, 3, "Abysmal failure!");
}
else{
(void) pine_send_status(ps_global->post->status,
ps_global->post->fcc, tmp_20k_buf, SIZEOF_20KBUF,
&winner);
q_status_message(SM_ORDER | (winner ? 0 : SM_DING), 3, 3,
tmp_20k_buf);
}
if(!winner)
q_status_message(SM_ORDER, 0, 3,
"Re-send via \"Compose\" then \"Yes\" to \"Continue INTERRUPTED?\"");
if(ps_global->post->fcc)
fs_give((void **) &ps_global->post->fcc);
fs_give((void **) &ps_global->post);
}
#endif
/*
* The character we get from read_char() is a UCS-4 char. Or it could be a special
* value like KEY_UP or NO_OP_IDLE or something similar. From here on out
* we're going to operate with UTF-8 internally. This is the point where we
* convert the UCS-4 input (actually whatever sort of input the user is typing
* was converted to UCS-4 first) to UTF-8. It's easy in this read_command
* case because if user types a non-ascii character as a command it's going to be
* an error. All commands are ascii. In order to present a reasonable error
* message we pass back the UTF-8 string to the caller.
*/
if(ucs >= 0x80 && ucs < KEY_BASE){
/*
* User typed a character that is non-ascii. Convert it to
* UTF-8.
*/
memset(utf8buf, 0, sizeof(utf8buf));
newdestp = utf8_put(utf8buf, (unsigned long) ucs);
if(newdestp - utf8buf > 1){ /* this should happen */
if(utf8str)
*utf8str = (char *) utf8buf;
dprint((9, "Read command: looks like user typed non-ascii command 0x%x %s: returning KEY_UTF8\n", ucs, pretty_command(ucs)));
ucs = KEY_UTF8;
}
else{
dprint((9, "Read command: looks like user typed unknown, non-ascii command 0x%x %s: returning KEY_UNKNOWN\n", ucs, pretty_command(ucs)));
//.........这里部分代码省略.........
示例13: optionally_enter
int
optionally_enter(char *utf8string, int y_base, int x_base, int utf8string_size,
char *utf8prompt, ESCKEY_S *escape_list, HelpType help, int *flags)
{
UCS *string = NULL, ucs;
size_t string_size;
UCS *s2;
UCS *saved_original = NULL;
char *candidate;
UCS *kill_buffer = NULL;
UCS *k, *kb;
int field_pos; /* offset into array dline.vl */
int i, j, return_v, cols, prompt_width, too_thin,
real_y_base, km_popped, passwd;
char **help_text;
long fkey_table[12];
struct key_menu *km;
bitmap_t bitmap;
COLOR_PAIR *lastc = NULL, *promptc = NULL;
struct variable *vars = ps_global->vars;
struct display_line dline;
#ifdef _WINDOWS
int cursor_shown;
#endif
dprint((5, "=== optionally_enter called ===\n"));
dprint((9, "utf8string:\"%s\" y:%d x:%d length: %d append: %d\n",
utf8string ? utf8string : "",
x_base, y_base, utf8string_size,
(flags && *flags & OE_APPEND_CURRENT)));
dprint((9, "passwd:%d utf8prompt:\"%s\" label:\"%s\"\n",
(flags && *flags & OE_PASSWD_NOAST) ? 10 :
(flags && *flags & OE_PASSWD) ? 1 : 0,
utf8prompt ? utf8prompt : "",
(escape_list && escape_list[0].ch != -1 && escape_list[0].label)
? escape_list[0].label: ""));
if(!ps_global->ttyo)
return(pre_screen_config_opt_enter(utf8string, utf8string_size, utf8prompt,
escape_list, help, flags));
#ifdef _WINDOWS
if (mswin_usedialog ())
return(win_dialog_opt_enter(utf8string, utf8string_size, utf8prompt,
escape_list, help, flags));
#endif
/*
* Utf8string comes in as UTF-8. We'll convert it to a UCS-4 array and operate on
* that array, then convert it back before returning. Utf8string_size is the size
* of the utf8string array but that doesn't help us much for the array we need to
* operate on here. We'll just allocate a big array and then cut it off when
* sending it back.
*
* This should come before the specialized calls above but those aren't
* converted to use UCS-4 yet.
*/
string = utf8_to_ucs4_cpystr(utf8string);
dline.vused = ucs4_strlen(string);
string_size = (2 * MAX(utf8string_size,dline.vused) + 100);
fs_resize((void **) &string, string_size * sizeof(UCS));
suspend_busy_cue();
cols = ps_global->ttyo->screen_cols;
prompt_width = utf8_width(utf8prompt);
too_thin = 0;
km_popped = 0;
if(y_base > 0)
real_y_base = y_base;
else{
real_y_base = y_base + ps_global->ttyo->screen_rows;
real_y_base = MAX(real_y_base, 0);
}
flush_ordered_messages();
mark_status_dirty();
if(flags && *flags & OE_APPEND_CURRENT) /* save a copy in case of cancel */
saved_original = ucs4_cpystr(string);
/*
* build the function key mapping table, skipping predefined keys...
*/
memset(fkey_table, NO_OP_COMMAND, 12 * sizeof(long));
for(i = 0, j = 0; escape_list && escape_list[i].ch != -1 && i+j < 12; i++){
if(i+j == OE_HELP_KEY)
j++;
if(i+j == OE_CANCEL_KEY)
j++;
if(i+j == OE_ENTER_KEY)
j++;
fkey_table[i+j] = escape_list[i].ch;
}
/* assumption that HelpType is char ** */
//.........这里部分代码省略.........
示例14: loadfont
static void
loadfont(int n, int s)
{
char file[256];
int i, fd, t, deep;
static char *try[3] = {"", "times/R.", "pelm/"};
Subfont *f;
Font *ff;
try[0] = fname[n];
for (t = 0; t < 3; t++){
i = s * mag * charmap[fmap[n]].xheight/0.72; /* a pixel is 0.72 points */
if (i < MINSIZE)
i = MINSIZE;
dprint(2, "size %d, i %d, mag %g\n", s, i, mag);
for(; i >= MINSIZE; i--){
/* if .font file exists, take that */
snprint(file, sizeof file, "%s/%s%d.font",
libfont, try[t], i);
ff = openfont(display, file);
if(ff != 0){
fonttab[n][s] = ff;
dprint(2, "using %s for font %d %d\n", file, n, s);
return;
}
/* else look for a subfont file */
for (deep = log2[screen->depth]; deep >= 0; deep--){
snprint(file, sizeof file, "%s/%s%d.%d",
libfont, try[t], i, deep);
dprint(2, "trying %s for %d\n", file, i);
if ((fd = open(file, 0)) >= 0){
f = readsubfont(display, file, fd, 0);
if (f == 0) {
fprint(2, "can't rdsubfontfile %s: %r\n", file);
exits("rdsubfont");
}
close(fd);
ff = mkfont(f, 0);
if(ff == 0){
fprint(2, "can't mkfont %s: %r\n", file);
exits("rdsubfont");
}
fonttab[n][s] = ff;
dprint(2, "using %s for font %d %d\n", file, n, s);
return;
}
}
}
}
fprint(2, "can't find font %s.%d or substitute, quitting\n", fname[n], s);
exits("no font");
}
void
loadfontname(int n, char *s)
{
int i;
Font *f, *g = 0;
if (strcmp(s, fname[n]) == 0)
return;
if(fname[n] && fname[n][0]){
if(lastload[n] && strcmp(lastload[n], fname[n]) == 0)
return;
strcpy(lastload[n], fname[n]);
}
fontlookup(n, s);
for (i = 0; i < NSIZE; i++)
if (f = fonttab[n][i]){
if (f != g) {
freefont(f);
g = f;
}
fonttab[n][i] = 0;
}
}
void
allfree(void)
{
int i;
for (i=0; i<NFONT; i++)
loadfontname(i, "??");
}
void
readmapfile(char *file)
{
Biobuf *fp;
char *p, cmd[100];
if ((fp=Bopen(file, OREAD)) == 0){
fprint(2, "proof: can't open map file %s\n", file);
exits("urk");
}
while((p=Brdline(fp, '\n')) != 0) {
p[Blinelen(fp)-1] = 0;
scanstr(p, cmd, 0);
//.........这里部分代码省略.........
示例15: while
static ADDRESS *mutt_expand_aliases_r (ADDRESS *a, LIST **expn)
{
ADDRESS *head = NULL, *last = NULL, *t, *w;
LIST *u;
char i;
const char *fqdn;
while (a)
{
if (!a->group && !a->personal && a->mailbox && strchr (a->mailbox, '@') == NULL)
{
t = mutt_lookup_alias (a->mailbox);
if (t)
{
i = 0;
for (u = *expn; u; u = u->next)
{
if (mutt_strcmp (a->mailbox, u->data) == 0) /* alias already found */
{
dprint (1, (debugfile, "mutt_expand_aliases_r(): loop in alias found for '%s'\n", a->mailbox));
i = 1;
break;
}
}
if (!i)
{
u = safe_malloc (sizeof (LIST));
u->data = safe_strdup (a->mailbox);
u->next = *expn;
*expn = u;
w = rfc822_cpy_adr (t, 0);
w = mutt_expand_aliases_r (w, expn);
if (head)
last->next = w;
else
head = last = w;
while (last && last->next)
last = last->next;
}
t = a;
a = a->next;
t->next = NULL;
rfc822_free_address (&t);
continue;
}
else
{
struct passwd *pw = getpwnam (a->mailbox);
if (pw)
{
char namebuf[STRING];
mutt_gecos_name (namebuf, sizeof (namebuf), pw);
mutt_str_replace (&a->personal, namebuf);
#ifdef EXACT_ADDRESS
FREE (&a->val);
#endif
}
}
}
if (head)
{
last->next = a;
last = last->next;
}
else
head = last = a;
a = a->next;
last->next = NULL;
}
if (option (OPTUSEDOMAIN) && (fqdn = mutt_fqdn(1)))
{
/* now qualify all local addresses */
rfc822_qualify (head, fqdn);
}
return (head);
}