Beispiel #1
0
void z_set_colour (void)
{
    zword win = (h_version == V6) ? winarg2 () : 0;

    zword fg = zargs[0];
    zword bg = zargs[1];

    flush_buffer ();

    if ((short) fg == -1)	/* colour -1 is the colour at the cursor */
        fg = os_peek_colour ();
    if ((short) bg == -1)
        bg = os_peek_colour ();

    if (fg == 0)		/* colour 0 means keep current colour */
        fg = lo (wp[win].colour);
    if (bg == 0)
        bg = hi (wp[win].colour);

    if (fg == 1)		/* colour 1 is the system default colour */
        fg = h_default_foreground;
    if (bg == 1)
        bg = h_default_background;

    if (fg == TRANSPARENT_COLOUR)
        fg = lo (wp[win].colour);
    if (bg == TRANSPARENT_COLOUR && !(hx_flags & TRANSPARENT_FLAG))
        bg = hi (wp[win].colour);

    if (h_version == V6 && amiga_screen_model ())

        /* Changing colours of window 0 affects the entire screen */

        if (win == 0) {

            int i;

            for (i = 1; i < 8; i++) {

                zword bg2 = hi (wp[i].colour);
                zword fg2 = lo (wp[i].colour);

                if (bg2 < 16)
                    bg2 = (bg2 == lo (wp[0].colour)) ? fg : bg;
                if (fg2 < 16)
                    fg2 = (fg2 == lo (wp[0].colour)) ? fg : bg;

                wp[i].colour = (bg2 << 8) | fg2;

            }

        }

    wp[win].colour = (bg << 8) | fg;

    if (win == cwin || h_version != V6)
        os_set_colour (fg, bg);

}/* z_set_colour */
Beispiel #2
0
void z_set_colour (void)
{
    zword win = (h_version == V6) ? winarg2 () : 0;

    zword fg = zargs[0];
    zword bg = zargs[1];

    flush_buffer ();

    if ((short) fg == -1)       /* colour -1 is the colour at the cursor */
        fg = os_peek_colour ();
    if ((short) bg == -1)
        bg = os_peek_colour ();

    if (fg == 0)                /* colour 0 means keep current colour */
        fg = lo (wp[win].colour);
    if (bg == 0)
        bg = hi (wp[win].colour);

    if (fg == 1)                /* colour 1 is the system default colour */
        fg = h_default_foreground;
    if (bg == 1)
        bg = h_default_background;

    if (h_version == V6 && h_interpreter_number == INTERP_AMIGA)

        /* Changing colours of window 0 affects the entire screen */

        if (win == 0) {

            int i;

            for (i = 1; i < 8; i++) {

                zword bg2 = hi (wp[i].colour);
                zword fg2 = lo (wp[i].colour);

                if (bg2 < 16)
                    bg2 = (bg2 == lo (wp[0].colour)) ? fg : bg;
                if (fg2 < 16)
                    fg2 = (fg2 == lo (wp[0].colour)) ? fg : bg;

                wp[i].colour = (bg2 << 8) | fg2;

            }

        }

    wp[win].colour = (bg << 8) | fg;

    if (win == cwin || h_version != V6)
        os_set_colour (fg, bg);

}/* z_set_colour */
Beispiel #3
0
void z_set_true_colour (void)
{
    zword win = (h_version == V6) ? winarg2 () : 0;

    zword true_fg = zargs[0];
    zword true_bg = zargs[1];

    zword fg = 0;
    zword bg = 0;

    flush_buffer ();

    switch ((short) true_fg) {

    case -1:	/* colour -1 is the system default colour */
        fg = h_default_foreground;
        break;

    case -2:	/* colour -2 means keep current colour */
        fg = lo (wp[win].colour);
        break;

    case -3:	/* colour -3 is the colour at the cursor */
        fg = os_peek_colour ();
        break;

    case -4:
        fg = lo (wp[win].colour);
        break;

    default:
        fg = os_from_true_colour (true_fg);
        break;
    }

    switch ((short) true_bg) {

    case -1:	/* colour -1 is the system default colour */
        bg = h_default_background;
        break;

    case -2:	/* colour -2 means keep current colour */
        bg = hi (wp[win].colour);
        break;

    case -3:	/* colour -3 is the colour at the cursor */
        bg = os_peek_colour ();
        break;

    case -4:	/* colour -4 means transparent */
        if (hx_flags & TRANSPARENT_FLAG)
            bg = TRANSPARENT_COLOUR;
        else
            bg = hi (wp[win].colour);
        break;

    default:
        bg = os_from_true_colour (true_bg);
        break;
    }

    wp[win].colour = (bg << 8) | fg;

    if (win == cwin || h_version != V6)
        os_set_colour (fg, bg);

}/* z_set_true_colour */