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 */
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 */
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 */