home *** CD-ROM | disk | FTP | other *** search
- /*
- ** wn_puts - output string to window
- **
- ** Copyright (c) 1984, 1985, 1986 - Philip A. Mongelluzzo
- ** All rights reserved.
- **
- */
-
- #include "windows.h"
-
- /*
- ***********
- * wn_puts *
- ***********
- */
-
- wn_puts(wn, row, col, s) /* put simple string */
- WINDOWPTR wn;
- int row,col;
- char *s;
- {
- int matrib; /* local attribute */
- char *p, *p1, *p2; /* local pointer */
- int l1,l2; /* length of s */
- int k; /* scratch */
- /* a few OBVIOUS checks */
- /* don't allow writing on */
- /* or beyond the border, if */
- /* one exists */
- matrib = wn->style; /* load attribute */
- wns_fixc(&matrib); /* fixup */
- k = wn->uly + row + WMR;
- if(k > (wni_mxrows-1)) return(NULL); /* dont be real stupid */
- if( (k) >= (wn->uly + WMR + wn->ysize) && WMR) return(NULL);
-
- if(!wn_activate(wn)) return(NULL); /* bring window to the top */
- wns_err(wn, "wn_puts"); /* avoid disaster */
- l1=strlen(s); /* length */
- p = malloc((l1*2)+2); /* fetch some memory */
- if(!p) return(NULL); /* error */
-
- while(l1+col > wn->xsize) l1--; /* dont allow border overflow */
- l2=l1; /* carbon copy for savres */
- wn->ccy = row + WMR/2; /* adjust virtual cursor */
- wn->ccx = col + l1 + WMR/2;
- p1 = p; /* set up pointers */
- p2 = s; /* for both source & dest */
- while (l1--) { /* build char,,atrib */
- *p1++ = *p2++; /* pair */
- *p1++ = (char)matrib; /* for write */
- }
- *p1 = '\0'; /* terminate string */
- row = wn->uly + row + WMR/2; /* adjust position */
- col = wn->ulx + col + WMR/2;
- wns_savres(wn->page, row, col, l2, row, p, RESTORE);
- free(p);
- if(wn->synflg) /* and position */
- v_locate(wn->page, wn->uly+wn->ccy, wn->ulx+wn->ccx);
- return(TRUE);
- }
-
- /*
- ************
- * wn_putsa *
- ************
- */
-
- wn_putsa(wn, row, col, s, atrib) /* put simple string with atrib */
- WINDOWPTR wn;
- int row,col;
- char *s;
- unsigned atrib;
- {
- static int satrib; /* a place to save current atrib */
- int rv; /* return value from wn_puts */
- int matrib;
-
- if(!wn_activate(wn)) return(NULL); /* bring window to the top */
- matrib = atrib; /* my copy */
- wns_err(wn, "wn_putsa"); /* avoid disaster */
- satrib = wn->style; /* save current atrib */
- wns_fixc(&matrib); /* fixup */
- wn->style = atrib; /* force new atrib */
- rv = wn_puts(wn, row, col, s); /* do it with wn_puts */
- wn->style = satrib; /* restore atrib */
- return(rv);
- }
-
-
- /*
- ***********
- * wn_putc *
- ***********
- */
-
- wn_putc(wn, row, col, c) /* put simple character */
- WINDOWPTR wn; /* the window */
- int row,col; /* location */
- char c; /* the character */
- {
- char s[3]; /* character string */
-
- if(!wn_activate(wn)) return(NULL); /* bring window to the top */
- wns_err(wn, "wn_putc"); /* avoid disaster */
- s[0] = c; /* load character */
- s[1] = '\0'; /* terminate string */
- return(wn_puts(wn, row, col, s)); /* print the string */
- }
-
- /*
- ************
- * wn_putca *
- ************
- */
-
- wn_putca(wn, row, col, c, a) /* put simple character & atrib */
- WINDOWPTR wn; /* the window */
- int row,col; /* location */
- char c; /* the character */
- unsigned a; /* the attribute */
- {
- char s[3]; /* character string */
-
- if(!wn_activate(wn)) return(NULL); /* bring window to the top */
- wns_err(wn, "wn_putca"); /* avoid disaster */
- s[0] = c; /* load character */
- s[1] = '\0'; /* terminate string */
- return(wn_putsa(wn, row, col, s, a)); /* print the string & atrib */
- }
-
- /* End */
-