/****************************************************************************** * This file is part of a software distribution, which is furnished under the * * terms of a license. Use of this software by any means is subject to this * * license and signifies the acceptance of the licensing terms stated * * therein. Please see the file LICENSE in the top-level directory of this * * software distribution for detailed copyright disclaimers and licensing * * terms. * ****************************************************************************** * Copryight (c) by Andreas S. Wetzel - All rights reserved. * ******************************************************************************/ /* $Id: vd_resize.c,v 1.2 2001/03/19 14:54:06 mickey Exp $ */ #include #include #include /********* Globals **********/ extern u_short tel_option[]; extern ED *ed; extern VP vp; extern VD vd; extern VTCAP vtcap; /*********** Code ***********/ void resize(void) { SIZE *sz; static u_short depth = 0; int x =0; int tx = 0; int ty = 0; if(vd.resize_ok && his_state_is_will(TELOPT_NAWS) && !depth) { depth = 0xff; vlock(LOCK, (V_IO | V_TIMER)); /* * Now we don't give up, til * the screen has an acceptable * size. */ do { sz = getsize(); vtcap.cols = sz->x; vtcap.rows = sz->y; if(vtcap.cols < 39 || vtcap.rows < 4) { if(vtcap.cols != tx || vtcap.rows != ty) x = 0; if(!x) { cls(); printf(" Inefficient screensize (%dx%d)\r\n", vtcap.cols, vtcap.rows); printf("Resize window to at least\r\n"); printf(" 39 x 4\r\n"); tx = vtcap.cols; ty = vtcap.rows; x = 0xff; } vsleep(0, 0x186A0); if(cmd_loop() == -1) exit(-1); } } while(vtcap.cols < 39 || vtcap.rows < 4); cls(); alter_status(STAT_SIZE, "%dx%d ", vtcap.cols, vtcap.rows); scroll_reg(1, vtcap.rows - 2); if((ed->curpos - ed->margin) > vtcap.cols) ed->margin = (char *)(ed->curpos - vtcap.cols + 1); line_update(); depth = 0; vlock(UNLOCK, (V_IO | V_TIMER)); } }