static void fs3270_deactivate(struct raw3270_view *view) { struct fs3270 *fp; fp = (struct fs3270 *) view; fp->active = 0; /* If an old init command is still running just return. */ if (!raw3270_request_final(fp->init)) return; /* Prepare read-buffer request. */ raw3270_request_set_cmd(fp->init, TC_RDBUF); /* * Hackish: skip first 5 bytes of the idal buffer to make * room for the TW_KR/TO_SBA/<address>/<address>/TO_IC sequence * in the activation command. */ fp->rdbuf->data[0] += 5; fp->rdbuf->size -= 5; raw3270_request_set_idal(fp->init, fp->rdbuf); fp->init->rescnt = 0; fp->init->callback = fs3270_save_callback; /* Start I/O to read in the 3270 buffer. */ fp->init->rc = raw3270_start_locked(view, fp->init); if (fp->init->rc) fp->init->callback(fp->init, NULL); }
/* * Switch to the fullscreen view. */ static int fs3270_activate(struct raw3270_view *view) { struct fs3270 *fp; fp = (struct fs3270 *) view; raw3270_request_set_cmd(fp->clear, TC_EWRITEA); fp->clear->callback = fs3270_reset_callback; return raw3270_start(view, fp->clear); }
static int fs3270_activate(struct raw3270_view *view) { struct fs3270 *fp; char *cp; int rc; fp = (struct fs3270 *) view; /* If an old init command is still running just return. */ if (!raw3270_request_final(fp->init)) return 0; if (fp->rdbuf_size == 0) { /* No saved buffer. Just clear the screen. */ raw3270_request_set_cmd(fp->init, TC_EWRITEA); fp->init->callback = fs3270_reset_callback; } else { /* Restore fullscreen buffer saved by fs3270_deactivate. */ raw3270_request_set_cmd(fp->init, TC_EWRITEA); raw3270_request_set_idal(fp->init, fp->rdbuf); fp->init->ccw.count = fp->rdbuf_size; cp = fp->rdbuf->data[0]; cp[0] = TW_KR; cp[1] = TO_SBA; cp[2] = cp[6]; cp[3] = cp[7]; cp[4] = TO_IC; cp[5] = TO_SBA; cp[6] = 0x40; cp[7] = 0x40; fp->init->rescnt = 0; fp->init->callback = fs3270_restore_callback; } rc = fp->init->rc = raw3270_start_locked(view, fp->init); if (rc) fp->init->callback(fp->init, NULL); else fp->active = 1; return rc; }