home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_BAS / DNALIB59.ZIP / MOVEWIN.BAS < prev    next >
BASIC Source File  |  1994-01-21  |  3KB  |  122 lines

  1. DECLARE SUB GetBytes(BaseScreen$,InsertByte$,Address%,NumBytes%)
  2.  
  3. SUB MoveableWindow(BaseScreen$,ScreenID$,TopRow%,LeftColumn%) PUBLIC
  4.  
  5. DO
  6.  
  7. a$ = LEFT$(ScreenID$,3)                                                                 'get the 3 characters
  8. Divisor% = VAL(a$)                            'convert them to an integer
  9. TempScreen$ = LTRIM$(ScreenID$,a$)            'remove extra characters
  10. NumRows% = LEN(TempScreen$) \ (Divisor% + 1)  'divide to find NumRows%
  11.  
  12. WHILE NOT INSTAT:WEND
  13.  
  14. Ky$ = INKEY$
  15.  
  16. AddRowTop% = 0
  17. Direction% = 0
  18.  
  19. IF LEN(Ky$) = 1 THEN
  20.   Chose% = ASC(Ky$)
  21. ELSE
  22.   Chose% = -ASC(RIGHT$(Ky$,1))
  23. END IF
  24.  
  25. KeyBoardRoutine:
  26.  
  27. SELECT CASE Chose%
  28.         CASE 13   'EnterKey
  29.           Finished% = 1
  30.         CASE 27
  31.           Finished% = 1
  32.         CASE -72  'Up ArrowKey
  33.           IF TopRow% > 1 THEN
  34.             DECR TopRow%
  35.             Direction% = 3
  36.           END IF
  37.         CASE -80  'Down ArrowKey
  38.           IF TopRow% + (NumRows% - 1) < 25 THEN
  39.             INCR TopRow%
  40.             AddRowTop% = 1
  41.             Direction% = 1
  42.           END IF
  43.         CASE -75  'LeftArrow
  44.           IF LeftColumn% > 1 THEN
  45.             DECR LeftColumn%
  46.             Direction% = 2
  47.           END IF
  48.         CASE -77  'RightArrow
  49.           IF LeftColumn% + (Divisor% \ 2) - 1 < 80 THEN
  50.             INCR LeftColumn%
  51.             Direction% = 4
  52.           END IF
  53. END SELECT
  54.  
  55. SELECT CASE Direction%
  56.         CASE 1
  57.           Top% = TopRow% - 1
  58.           BottomRow% = Top% + NumRows%
  59.         CASE 3
  60.           Top% = TopRow%
  61.           BottomRow% = TopRow% + NumRows%
  62.         CASE ELSE
  63.           Top% = TopRow%
  64.           BottomRow% = (TopRow% + NumRows%) - 1
  65. END SELECT
  66.  
  67. DEF SEG = &HB800
  68.  
  69. FOR i% = Top% TO BottomRow%
  70.   Start% = (i% - 1) * 160 + ((LeftColumn% * 2) - 2)
  71.   SELECT CASE Direction%
  72.         CASE 1 'down
  73.           IF AddRowTop% THEN
  74.             GetBytes BaseScreen$,InsertByte$,Start%,Divisor%
  75.             POKE$ Start%,InsertByte$
  76.             AddRowTop% = 0
  77.           ELSE
  78.             b$ = LEFT$(TempScreen$,Divisor%)
  79.             POKE$ Start%,b$
  80.             TempScreen$ = LTRIM$(TempScreen$,b$)
  81.             TempScreen$ = LTRIM$(TempScreen$,CHR$(255))
  82.           END IF
  83.         CASE 3 ' up
  84.           IF i% = BottomRow% THEN
  85.             GetBytes BaseScreen$,InsertByte$,Start%,Divisor%
  86.             POKE$ Start%,InsertByte$
  87.           ELSE
  88.             b$ = LEFT$(TempScreen$,Divisor%)
  89.             POKE$ Start%,b$
  90.             TempScreen$ = LTRIM$(TempScreen$,b$)
  91.             TempScreen$ = LTRIM$(TempScreen$,CHR$(255))
  92.           END IF
  93.         CASE 2 'left
  94.           GetBytes BaseScreen$,InsertByte$,Start% + Divisor%,2
  95.           b$ = LEFT$(TempScreen$,Divisor%)
  96.           c$ = b$ + InsertByte$
  97.           POKE$ Start%,c$
  98.           TempScreen$ = LTRIM$(TempScreen$,b$)
  99.           TempScreen$ = LTRIM$(TempScreen$,CHR$(255))
  100.         CASE 4 'right
  101.           GetBytes BaseScreen$,InsertByte$,Start% - 2,2
  102.           b$ = LEFT$(TempScreen$,Divisor%)
  103.           c$ = InsertByte$ + b$
  104.           POKE$ Start% - 2,c$
  105.           TempScreen$ = LTRIM$(TempScreen$,b$)
  106.           TempScreen$ = LTRIM$(TempScreen$,CHR$(255))
  107.   END SELECT
  108.  
  109. NEXT i%
  110.  
  111. LOOP UNTIL Finished%
  112. DEF SEG
  113.  
  114. END SUB
  115.  
  116. SUB GetBytes(BaseScreen$,InsertByte$,Address%,NumBytes%)
  117.  
  118. TempScreen$ = LEFT$(BaseScreen$,(Address% + NumBytes%))
  119. InsertByte$ = RIGHT$(TempScreen$,NumBytes%)
  120.  
  121. END SUB
  122.