;************************************;* *;*(C)Copyright 1986 by Paul B. Loux *;* *;* These routines are in the public *;* domain, and are not to be sold *;* for a profit. They may be freely *;* distributed, provided that this *;* header remains in place. Use and *;* enjoy! PBL, CIS 72337,2073. *;* *;************************************;;************************************;* *;*Modifications 1993 by P. Sungenis.*;* *;************************************;; File: WINDOW2.ACT;; New Calls:;; O_Window(BYTE wnum,lt,up,rt,lw,nstat);; Open window where:;; wnum = window number (0-10); lt = leftmost cursor column; rt = rightmost cursor column; up = uppermost cursor row; lw = lowest cursor row; nstat = name status; (1 = Add name in BYTE ARRAY; wname to the window);; C_Window(BYTE wnum);; Close window wnum.;; Be certain to close windows in ; decreasing numerical order, from; 10-0.;; Init_W() ;; Set up windowing environment. No; longer does a Graphics(0), so the; screen does not have to be cleared; before opening your first window.;; BYTE ARRAY wstat(10);; Holds the status of each window,; 1 = opened, 0 = not opened.;MODULEBYTE ARRAY buffer(2048),ltx(10),upx(10),rtx(10),lwx(10),wstat(10),wname(30)BYTE POINTER bufptr,topBYTE ROWCRS=$54,CRSINH=$2F0,CH=$2FCCARD COLCRS=$55,SAVMSC=$58PROC Init_W() top=buffer bufptr=bufferRETURNPROC C_Window(BYTE wnum)BYTE width,height,lt,up,rt,lw,r,tmpBYTE POINTER screen lt=ltx(wnum) up=upx(wnum) rt=rtx(wnum) lw=lwx(wnum) CRSINH=1 lt==-1 rt==+1 up==-1 lw==+1 width=rt-lt+1 height=lw-up+1 screen=SAVMSC+lw*40+lt bufptr=top-width r=height WHILE r>0 DO MoveBlock(screen,bufptr,width) Zero(bufptr,width) bufptr==-width screen==-40 r==-1 OD top=bufptr+width wstat(wnum)=0RETURNPROC Inv_Name()BYTE x FOR x=1 TO wname(0) DO wname(x)==!$80 ODRETURNPROC O_Window(BYTE wnum,lt,up,rt,lw,nstat)BYTE POINTER screenBYTE width,height,ctr,r,c,i,tmp,b_lt,b_up,b_rt,b_lwINT need,max r=wstat(wnum) IF r=1 THEN C_Window(wnum) FI ltx(wnum)=lt upx(wnum)=up rtx(wnum)=rt lwx(wnum)=lw CRSINH=1 PUT(126) b_lt=lt-1 b_up=up-1 b_rt=rt+1 b_lw=lw+1 width=b_rt-b_lt+1 height=b_lw-b_up+1 ctr=lt+(((rt-lt+1)-wname(0))/2)-1 max=top-buffer need=width*height IF max+need>2048 THEN Error(147,147,147) ; buffer overflow FI screen=SAVMSC+b_up*40+b_lt bufptr=top r=height WHILE r>0 DO MoveBlock(bufptr,screen,width) ZERO(screen,width) bufptr==+width screen==+40 r==-1 OD top=bufptr Color=$91 Plot(b_lt,b_up) Color=$92 DrawTo(b_rt,b_up) Color=$85 Plot(b_rt,b_up) Color=$FC DrawTo(b_rt,b_lw) Color=$83 Plot(b_rt,b_lw) Color=$92 DrawTo(b_lt,b_lw) Color=$9A Plot(b_lt,b_lw) Color=$FC DrawTo(b_lt,b_up+1) Plot(b_lt,b_up+1) IF nstat=1 AND wname(0)<(width-4) THEN Inv_Name() COLCRS=ctr ROWCRS=b_up Put(') Print(wname) Put(') FI ROWCRS=up COLCRS=lt+1 CH=255 CRSINH=0 Put(30) wstat(wnum)=1RETURNPROC Test() Init_W() SCopy(wname,"Enter new prompt text") O_Window(1,2,8,37,15,1) GetD(7) C_Window(1)RETURN