'===========================================================================
' Subject: Dragging a window in Theos         Date: 12-22-02 (  :  )       
'  Author: Fred Buffington                    Code: THEOS                  
'  Origin: oasys@sbcglobal.net              Packet: THEOS.ABC
'===========================================================================
'Fred Buffington Email:  oasys@sbcglobal.net 
'Theos BASIC

'Example of dragging a window. 
'This is for the 4.2 version of the Operating system 
'and is Multi-User basic 2.0 runtime 2.1 
 
Code:
 REM -- sample code for dragging a window 
 REM -- window is actually 2 windows and both are movved "simultaneously" 
 REM -- set up mouse events and turn on mouse 
 REM -- Tested on OS:4.2 42013; MUB 2.0 20252; MUB runtime 2.1 20355 
 REM -- - window manager 2.72F 
 REM -- Okla. Accounting Systems and Software 
      ON MOUSE GOTO MOUSE.ALL.CLICK 
      ON MOUSE ON  
 MAIN.ROUTINE: 
      COLOR 15,1 \ PRINT CLS$ 
      GOSUB COMPANY.STATUS 
      STOP  
 COMPANY.STATUS: 
      ON MOUSE ON  
 REM -- open window and print some data to it 
      WINDOW OPEN 6,20,3,MAX(34+4,LEN(RTRIM$(CONAME$))+14+4),10; COLOR 0,3; FRAME RAISED, RIGHT, COLOR 0,3;  
   SELECT 
! select goes with the window open statement and is not a 
! select case statement 
      PRIOR.COL6 = 20 \ PRIOR.ROW6 = 3 \ REM -- set default values 
      WINDOW OPEN 7,22,4,MAX(34,LEN(RTRIM$(CONAME$))+14),8; COLOR 15,3; FRAME SUNKEN, COLOR 0,3; SELECT; TITLE "Company Status", LEFT, COLOR 14,3 
 
      PRIOR.COL7 = 22 \ PRIOR.ROW7 = 4 \ REM -- set default values here 
      PRINT AT$(1,1);"Company [b]code:[/b] ";COID$; 
      PRINT AT$(1,2);"Company Name: ";CONAME$; 
      PRINT AT$(1,3); "Processing: ";ARDT$[1:2];"/";ARDT$[ 3:4]; 
 
      PRINT AT$(1,4);"Current Invoices: "; 
CHR$(9);STR$(INR%); 
 
 
      PRINT AT$(1,5);"Last record printed: ";CHR$(9);STR$(ILPRT%); 
 
      PRINT AT$(1,6);"Current Receipts: ";CHR$(9);STR$(PNR%); 
 
      PRINT AT$(1,7);"Last record printed: ";CHR$(9);STR$(PLPRT%);CRT$("koff"); 
 
      A$ = "ZZ" \ REM -- set a$ to dummy value 
      WHILE LEN(A$)>1 
           A$ = "" \ WHILE A$="" \ GET A$ \ SLEEP .01 \ WEND  
           WEND  
      WINDOW CLOSE 7 \ WINDOW CLOSE 6 
      RETURN  
 
 MOUSE.ALL.CLICK: 
 REM -- mouse event - check for dragging 
      ON MOUSE OFF  
      DD% = MOUSE.BUTTON 
      MWIN% = MOUSE.WINDOW 
      IF MWIN%<>7 THEN DRAGGED% = 0 
      IF DD%<=4 AND MOUSE.WINDOW=7 THEN START.ROW = MOUSE.ROW \ START.COL = MOUSE.COL \ ON MOUSE ON \ A$ = "z" \ WHILE A$<>"" \ GET A$ \ WEND \ RESUME  
 
      IF DD%>511 AND MWIN%=7 
           DRAGGED% = 1 
           NEW.COL% = MOUSE.COL 
           NEW.ROW = MOUSE.ROW 
           IF ABS(NEW.COL%-START.COL)>0 OR ABS(NEW.ROW-START.ROW)>0 
 
                OFFSETX% = NEW.COL%-START.COL \ OFFSETY% = NEW.ROW-START.ROW 
 
                IF ABS(OFFSETX%)>0 OR ABS(OFFSETY%)>0 
                     WINDOW MOVE 6,PRIOR.COL6+OFFSETX%,PRIOR.ROW6+OFFSETY% 
 
                     WINDOW MOVE 7,PRIOR.COL7+OFFSETX%,PRIOR.ROW7+OFFSETY% 
 
                     DRAGED% = 0 
                     PRIOR.COL6 = PRIOR.COL6+OFFSETX% \ PRIOR.ROW6 = PRIOR.ROW6+OFFSETY% 
 
                     PRIOR.COL7 = PRIOR.COL7+OFFSETX% \ PRIOR.ROW7 = PRIOR.ROW7+OFFSETY% 
 
                     IFEND  
                IFEND  
           IFEND  
      IF (DD%=8 OR DD%=16 OR DD%=32) AND DRAGGED% 
           WINDOW MOVE 6,PRIOR.COL6+OFFSETX%,PRIOR.ROW6+OFFSETY% \ REM NEW.COL%,NEW.ROW 
 
           WINDOW MOVE 7,PRIOR.COL7+OFFSETX%,PRIOR.ROW7+OFFSETY% \ REM NEW.COL%,NEW.ROW 
 
           DRAGGED% = 0 
           PRIOR.COL6 = PRIOR.COL6+OFFSETX% \ PRIOR.ROW6 = PRIOR.ROW6+OFFSETY% 
 
           PRIOR.COL7 = PRIOR.COL7+OFFSETX% \ PRIOR.ROW7 = PRIOR.ROW7+OFFSETY% 
           DD% = 0 
           IFEND  
      ON MOUSE ON  
      A$ = "z" \ WHILE A$<>"" \ GET A$ \ WEND  
      RESUME  
