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_cursor (void) { zword win = (h_version == V6) ? winarg2 () : 1; zword y = zargs[0]; zword x = zargs[1]; flush_buffer (); /* Supply default arguments */ if (zargc < 3) zargs[2] = -3; /* Handle cursor on/off */ if ((short) y < 0) { if ((short) y == -2) cursor = TRUE; if ((short) y == -1) cursor = FALSE; return; } /* Convert grid positions to screen units if this is not V6 */ if (h_version != V6) { if (cwin == 0) return; y = (y - 1) * h_font_height + 1; x = (x - 1) * h_font_width + 1; } /* Protect the margins */ if (y == 0) /* use cursor line if y-coordinate is 0 */ y = wp[win].y_cursor; if (x == 0) /* use cursor column if x-coordinate is 0 */ x = wp[win].x_cursor; if (x <= wp[win].left || x > wp[win].x_size - wp[win].right) x = wp[win].left + 1; /* Move the cursor */ wp[win].y_cursor = y; wp[win].x_cursor = x; if (win == cwin) update_cursor (); }/* z_set_cursor */
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_margins (void) { zword win = winarg2 (); flush_buffer (); wp[win].left = zargs[0]; wp[win].right = zargs[1]; /* Protect the margins */ if (wp[win].x_cursor <= zargs[0] || wp[win].x_cursor > wp[win].x_size - zargs[1]) { wp[win].x_cursor = zargs[0] + 1; if (win == cwin) update_cursor (); } }/* z_set_margins */
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 */