File: messagebox.c

package info (click to toggle)
cc65 2.19-2
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 20,268 kB
  • sloc: ansic: 117,151; asm: 66,339; pascal: 4,248; makefile: 1,009; perl: 607
file content (84 lines) | stat: -rw-r--r-- 1,761 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
** char MessageBox (char mode, const char *format, ...)
**
** Maciej 'YTM/Elysium' Witkowiak, 17.08.2003
**
*/

#include <geos.h>
#include <stdio.h>

void _mbprintout(void);

static const dlgBoxStr _mbdlg_EMPTY = {
        DB_DEFPOS(1),
        DB_OPVEC(&RstrFrmDialogue),
        DB_USRROUT(&_mbprintout),
        DB_END,
};

static const dlgBoxStr _mbdlg_OK = {
        DB_DEFPOS(1),
        DB_USRROUT(&_mbprintout),
        DB_ICON(OK, DBI_X_1, DBI_Y_2),
        DB_END,
};

static const dlgBoxStr _mbdlg_OKCANCEL = {
        DB_DEFPOS(1),
        DB_USRROUT(&_mbprintout),
        DB_ICON(OK, DBI_X_0, DBI_Y_2),
        DB_ICON(CANCEL, DBI_X_2, DBI_Y_2),
        DB_END,
};

static const dlgBoxStr _mbdlg_YESNO = {
        DB_DEFPOS(1),
        DB_USRROUT(&_mbprintout),
        DB_ICON(YES, DBI_X_0, DBI_Y_2),
        DB_ICON(NO, DBI_X_2, DBI_Y_2),
        DB_END,
};

static const dlgBoxStr * const _mbboxes[] = {
        &_mbdlg_EMPTY,
        &_mbdlg_OK,
        &_mbdlg_OKCANCEL,
        &_mbdlg_YESNO
};

static char _mbbuffer[256];

char MessageBox(char mode, const char *format, ...)
{
    register char *buf;
    va_list ap;

    /* first format out things */
    va_start(ap, format);
    vsprintf(_mbbuffer, format, ap);
    va_end(ap);

    /* replace LFs by CRs */
    buf = &_mbbuffer[0];
    while (*buf) {
        if (*buf==LF) *buf=CR;
        ++buf;
    }

    /* validate mode */
    if (mode>=MB_LAST)
        mode = MB_EMPTY;

    return DoDlgBox(_mbboxes[mode]);
}

void _mbprintout(void)
{
    UseSystemFont();
    curWindow.top = DEF_DB_TOP;
    curWindow.left = DEF_DB_LEFT+10;
    curWindow.right = DEF_DB_RIGHT-10;
    curWindow.bot = DEF_DB_BOT;
    PutString(_mbbuffer, DEF_DB_TOP+10+curFontDesc.height, DEF_DB_LEFT+10 );
}