_  __   _  _         _ _     _      _           _           
  __| |/ /_ | || |     __| (_)___| | __ (_)_ __   __| | _____  __
 / _` | '_ \| || |_   / _` | / __| |/ / | | '_ \ / _` |/ _ \ \/ /
| (_| | (_) |__   _| | (_| | \__ \   <  | | | | | (_| |  __/>  < 
 \__,_|\___/   |_|    \__,_|_|___/_|\_\ |_|_| |_|\__,_|\___/_/\_\
                                                                 
            

WINDOWS.C

FILE INFORMATION

FILENAME(S): WINDOWS.C

FILE TYPE(S): USR

FILE SIZE: 4.3K

FIRST SEEN: 2025-12-01 01:08:53

APPEARS ON: 1 disk(s)

FILE HASH

c8b0425c3135cedaeae805e39ce3828665877d34add5b43fa1c82c3bddd6b539

FOUND ON DISKS (1 DISKS)

DISK TITLE FILENAME FILE TYPE COLLECTION TRACK SECTOR ACTIONS
C BACKUP WINDOWS.C USR hedning, loot 16 10 DOWNLOAD FILE

FILE CONTENT & ANALYSIS

00000000: 85 81 9F 2F 2A 20 D7 49  4E 44 4F 57 20 52 4F 55  |.../* .INDOW ROU|
00000010: 54 49 4E 53 20 46 4F 52  20 54 48 45 20 C3 36 34  |TINS FOR THE .64|
00000020: 20 2A 2F 0D 1C 0D 1C 0D  1F 23 44 45 46 49 4E 45  | */......#DEFINE|
00000030: 20 D7 C9 CE C4 CF D7 20  20 57 49 4E 44 4F 57 5B  | ......  WINDOW[|
00000040: 4E 45 57 57 49 4E 5D 0D  1F 23 44 45 46 49 4E 45  |NEWWIN]..#DEFINE|
00000050: 20 D3 C3 D2 C5 C5 CE 20  20 30 58 45 30 30 30 0D  | ......  0XE000.|
00000060: 1F 23 44 45 46 49 4E 45  20 D5 D0 20 20 20 20 20  |.#DEFINE ..     |
00000070: 20 30 0D 1F 23 44 45 46  49 4E 45 20 C4 CF D7 CE  | 0..#DEFINE ....|
00000080: 20 20 20 20 31 0D 1C 0D  1C 0D 9F 2F 2A 20 D7 49  |    1....../* .I|
00000090: 4E 44 4F 57 20 53 54 52  55 43 54 55 52 45 20 2A  |NDOW STRUCTURE *|
000000A0: 2F 0D 1C 0D 9C 53 54 41  54 49 43 20 53 54 52 55  |/....STATIC STRU|
000000B0: 43 54 20 57 49 4E 53 54  52 55 43 0D 9C 20 20 20  |CT WINSTRUC..   |
000000C0: 20 20 20 20 20 20 20 20  20 DB 0D 9C 0D 9C 20 20  |         .....  |
000000D0: 20 20 20 20 20 20 20 20  20 20 20 20 49 4E 54 20  |            INT |
000000E0: 20 52 4F 57 31 3B 20 20  20 20 20 20 2F 2A 20 55  | ROW1;      /* U|
000000F0: 50 50 45 52 20 4C 45 46  54 20 43 4F 52 4E 45 52  |PPER LEFT CORNER|
00000100: 20 2A 2F 0D 9C 20 20 20  20 20 20 20 20 20 20 20  | */..           |
00000110: 20 20 20 49 4E 54 20 20  43 4F 4C 31 3B 0D 9C 20  |   INT  COL1;.. |
00000120: 20 20 20 20 20 20 20 20  20 20 20 20 20 49 4E 54  |             INT|
00000130: 20 20 52 4F 57 32 3B 20  20 20 20 20 20 2F 2A 20  |  ROW2;      /* |
00000140: 44 4F 57 4E 20 52 49 47  48 54 20 43 4F 52 4E 45  |DOWN RIGHT CORNE|
00000150: 52 20 2A 2F 0D 9C 20 20  20 20 20 20 20 20 20 20  |R */..          |
00000160: 20 20 20 20 49 4E 54 20  20 43 4F 4C 32 3B 0D 9C  |    INT  COL2;..|
00000170: 20 20 20 20 20 20 20 20  20 20 20 20 20 20 49 4E  |              IN|
00000180: 54 20 20 42 59 54 45 53  3B 20 20 20 20 20 2F 2A  |T  BYTES;     /*|
00000190: 20 4E 55 4D 42 45 52 20  4F 46 20 42 59 54 45 53  | NUMBER OF BYTES|
000001A0: 20 55 53 45 44 20 42 59  20 57 49 4E 44 4F 57 20  | USED BY WINDOW |
000001B0: 2A 2F 0D 9C 20 20 20 20  20 20 20 20 20 20 20 20  |*/..            |
000001C0: 20 20 43 48 41 52 20 2A  53 54 4F 52 45 50 54 52  |  CHAR *STOREPTR|
000001D0: 3B 20 2F 2A 20 50 4F 49  4E 54 45 52 20 54 4F 20  |; /* POINTER TO |
000001E0: 53 54 4F 52 41 47 45 20  4F 46 20 48 49 44 44 45  |STORAGE OF HIDDE|
000001F0: 4E 20 20 53 55 52 46 41  43 45 20 2A 2F 0D 9C 0D  |N  SURFACE */...|
00000200: 9C 20 20 20 20 20 20 20  20 20 20 20 20 DD 20 57  |.            . W|
00000210: 49 4E 44 4F 57 5B 38 5D  3B 0D 9C 0D 9C 0D 9C 53  |INDOW[8];......S|
00000220: 54 41 54 49 43 20 49 4E  54 20 20 4E 45 57 57 49  |TATIC INT  NEWWI|
00000230: 4E 20 20 20 20 20 3D 20  2D 31 3B 0D 9C 53 54 41  |N     = -1;..STA|
00000240: 54 49 43 20 43 48 41 52  20 43 4C 52 53 54 52 5B  |TIC CHAR CLRSTR[|
00000250: 34 31 5D 20 3D 20 DB 22  20 20 20 20 20 20 20 20  |41] = ."        |
00000260: 20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000270: 20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000280: 22 DD 3B 0D 1C 0D 1C 0D  9F 2F 2A 20 46 55 4E 43  |".;....../* FUNC|
00000290: 54 49 4F 4E 20 44 45 43  4C 41 52 41 54 49 4F 4E  |TION DECLARATION|
000002A0: 53 20 2A 2F 0D 1C 0D 1C  0D 96 56 4F 49 44 20 43  |S */......VOID C|
000002B0: 4C 45 41 52 57 49 4E 28  29 0D 1C 0D 1C DB 0D 1C  |LEARWIN().......|
000002C0: 0D 1C 49 4E 54 20 20 4C  4F 4F 50 31 2C 52 4F 57  |..INT  LOOP1,ROW|
000002D0: 41 44 44 52 2C 42 59 54  45 49 4E 52 4F 57 3B 0D  |ADDR,BYTEINROW;.|
000002E0: 1C 0D 1C 0D 1C 20 20 20  20 20 52 4F 57 41 44 44  |.....     ROWADD|
000002F0: 52 20 20 20 3D 20 D3 C3  D2 C5 C5 CE 2B D7 C9 CE  |R   = ......+...|
00000300: C4 CF D7 2E 52 4F 57 31  2A 34 30 2B 34 30 2B D7  |....ROW1*40+40+.|
00000310: C9 CE C4 CF D7 2E 43 4F  4C 31 2B 31 3B 0D 1C 20  |......COL1+1;.. |
00000320: 20 20 20 20 42 59 54 45  49 4E 52 4F 57 20 3D 20  |    BYTEINROW = |
00000330: D7 C9 CE C4 CF D7 2E 43  4F 4C 32 2D D7 C9 CE C4  |.......COL2-....|
00000340: CF D7 2E 43 4F 4C 31 2D  31 3B 0D 1C 0D 1C 20 20  |...COL1-1;....  |
00000350: 20 20 20 46 4F 52 20 28  4C 4F 4F 50 31 3D D7 C9  |   FOR (LOOP1=..|
00000360: CE C4 CF D7 2E 52 4F 57  31 2B 31 3B 4C 4F 4F 50  |.....ROW1+1;LOOP|
00000370: 31 3C D7 C9 CE C4 CF D7  2E 52 4F 57 32 3B 4C 4F  |1<.......ROW2;LO|
00000380: 4F 50 31 2B 2B 2C 52 4F  57 41 44 44 52 2B 3D 34  |OP1++,ROWADDR+=4|
00000390: 30 29 0D 1C 20 20 20 20  20 20 20 20 20 4D 4F 56  |0)..         MOV|
000003A0: 45 20 28 52 4F 57 41 44  44 52 2C 42 59 54 45 49  |E (ROWADDR,BYTEI|
000003B0: 4E 52 4F 57 2C 26 43 4C  52 53 54 52 5B 30 5D 29  |NROW,&CLRSTR[0])|
000003C0: 3B 0D 1C 0D 1C 0D 1C DD  0D 1C 0D 1C 0D 1C 0D 1C  |;...............|
000003D0: 0D 96 42 4F 4F 4C 45 41  4E 20 4F 50 45 4E 57 49  |..BOOLEAN OPENWI|
000003E0: 4E 28 55 50 45 52 52 4F  57 2C 4C 45 46 54 43 4F  |N(UPERROW,LEFTCO|
000003F0: 4C 2C 44 4F 57 4E 52 4F  57 2C 52 49 47 48 54 43  |L,DOWNROW,RIGHTC|
00000400: 4F 4C 29 0D 1C 0D 1C 49  4E 54 20 20 20 20 20 55  |OL)....INT     U|
00000410: 50 45 52 52 4F 57 2C 4C  45 46 54 43 4F 4C 2C 44  |PERROW,LEFTCOL,D|
00000420: 4F 57 4E 52 4F 57 2C 52  49 47 48 54 43 4F 4C 3B  |OWNROW,RIGHTCOL;|
00000430: 0D 1C 0D 1C DB 0D 1C 0D  1C 49 4E 54 20 20 20 20  |.........INT    |
00000440: 20 49 2C 4C 4F 4F 50 31  2C 4C 4F 4F 50 32 2C 42  | I,LOOP1,LOOP2,B|
00000450: 59 54 49 4E 52 4F 57 3B  0D 1C 49 4E 54 20 20 20  |YTINROW;..INT   |
00000460: 20 20 53 4F 55 52 43 45  41 44 52 2C 53 54 4F 52  |  SOURCEADR,STOR|
00000470: 45 41 44 52 3B 0D 1C 43  48 41 52 20 20 20 20 2A  |EADR;..CHAR    *|
00000480: 54 41 52 47 45 54 41 44  52 2C 2A 43 4F 4C 4F 52  |TARGETADR,*COLOR|
00000490: 20 3D 20 36 34 36 3B 0D  1C 43 48 41 52 20 20 20  | = 646;..CHAR   |
000004A0: 20 2A 42 4F 52 44 45 52  20 3D 20 35 33 32 38 30  | *BORDER = 53280|
000004B0: 3B 0D 1C 42 4F 4F 4C 45  41 4E 20 52 45 53 55 4C  |;..BOOLEAN RESUL|
000004C0: 54 20 20 3D 20 C6 C1 CC  D3 C5 3B 0D 1C 0D 1C 0D  |T  = .....;.....|
000004D0: 1C 20 20 49 46 20 28 20  4E 45 57 57 49 4E 20 3C  |.  IF ( NEWWIN <|
000004E0: 20 37 20 29 0D 1C 20 20  20 DB 0D 1C 0D 96 20 20  | 7 )..   .....  |
000004F0: 20 20 20 2F 2A 20 49 4E  49 54 49 41 4C 49 5A 45  |   /* INITIALIZE|
00000500: 20 41 20 4E 45 57 20 57  49 4E 44 4F 57 20 2A 2F  | A NEW WINDOW */|
00000510: 0D 1C 0D 1C 20 20 20 20  20 4E 45 57 57 49 4E 2B  |....     NEWWIN+|
00000520: 2B 3B 0D 1C 0D 96 20 20  20 20 20 2F 2A 20 43 41  |+;....     /* CA|
00000530: 4C 43 55 4C 41 54 45 20  4E 55 4D 42 45 52 20 4F  |LCULATE NUMBER O|
00000540: 46 20 42 59 54 45 53 20  49 4E 20 54 48 45 20 57  |F BYTES IN THE W|
00000550: 49 4E 44 4F 57 20 2A 2F  0D 1C 0D 1C 20 20 20 20  |INDOW */....    |
00000560: 20 D7 C9 CE C4 CF D7 2E  42 59 54 45 53 20 3D 20  | .......BYTES = |
00000570: 20 28 31 2B 44 4F 57 4E  52 4F 57 2D 55 50 45 52  | (1+DOWNROW-UPER|
00000580: 52 4F 57 29 2A 28 31 2B  52 49 47 48 54 43 4F 4C  |ROW)*(1+RIGHTCOL|
00000590: 2D 4C 45 46 54 43 4F 4C  29 3B 0D 1C 0D 96 20 20  |-LEFTCOL);....  |
000005A0: 20 20 20 2F 2A 20 41 4C  4C 4F 43 41 54 45 20 53  |   /* ALLOCATE S|
000005B0: 54 4F 52 41 47 45 20 41  52 45 41 20 46 4F 52 20  |TORAGE AREA FOR |
000005C0: 48 49 44 44 45 4E 20 53  55 52 46 41 43 45 20 2A  |HIDDEN SURFACE *|
000005D0: 2F 0D 1C 0D 1C 20 20 20  20 20 49 46 20 28 28 53  |/....     IF ((S|
000005E0: 54 4F 52 45 41 44 52 20  3D 20 4D 41 4C 4C 4F 43  |TOREADR = MALLOC|
000005F0: 28 D7 C9 CE C4 CF D7 2E  42 59 54 45 53 29 29 20  |(.......BYTES)) |
00000600: 21 3D 20 30 29 0D 1C 20  20 20 20 20 20 DB 0D 1C  |!= 0)..      ...|
00000610: 20 20 20 20 20 20 20 20  D7 C9 CE C4 CF D7 2E 53  |        .......S|
00000620: 54 4F 52 45 50 54 52 20  3D 20 53 54 4F 52 45 41  |TOREPTR = STOREA|
00000630: 44 52 3B 0D 1C 0D 96 20  20 20 20 20 2F 2A 20 53  |DR;....     /* S|
00000640: 54 4F 52 45 20 43 4F 52  44 49 4E 41 54 45 53 20  |TORE CORDINATES |
00000650: 46 4F 52 20 57 49 4E 44  4F 57 20 2A 2F 0D 1C 0D  |FOR WINDOW */...|
00000660: 1C 20 20 20 20 20 20 20  20 D7 C9 CE C4 CF D7 2E  |.        .......|
00000670: 52 4F 57 31 20 3D 20 55  50 45 52 52 4F 57 3B 0D  |ROW1 = UPERROW;.|
00000680: 1C 20 20 20 20 20 20 20  20 D7 C9 CE C4 CF D7 2E  |.        .......|
00000690: 43 4F 4C 31 20 3D 20 4C  45 46 54 43 4F 4C 3B 0D  |COL1 = LEFTCOL;.|
000006A0: 1C 20 20 20 20 20 20 20  20 D7 C9 CE C4 CF D7 2E  |.        .......|
000006B0: 52 4F 57 32 20 3D 20 44  4F 57 4E 52 4F 57 3B 0D  |ROW2 = DOWNROW;.|
000006C0: 1C 20 20 20 20 20 20 20  20 D7 C9 CE C4 CF D7 2E  |.        .......|
000006D0: 43 4F 4C 32 20 3D 20 52  49 47 48 54 43 4F 4C 3B  |COL2 = RIGHTCOL;|
000006E0: 0D 1C 0D 96 20 20 20 20  20 2F 2A 20 53 54 4F 52  |....     /* STOR|
000006F0: 45 20 48 49 44 44 45 4E  20 53 55 52 46 41 43 45  |E HIDDEN SURFACE|
00000700: 20 54 4F 20 41 4C 4C 4F  43 41 54 45 44 20 42 4C  | TO ALLOCATED BL|
00000710: 4F 43 4B 20 2A 2F 0D 1C  0D 1C 20 20 20 20 20 20  |OCK */....      |
00000720: 20 20 53 4F 55 52 43 45  41 44 52 20 3D 20 D3 C3  |  SOURCEADR = ..|
00000730: D2 C5 C5 CE 2B 34 30 2A  55 50 45 52 52 4F 57 2B  |....+40*UPERROW+|
00000740: 4C 45 46 54 43 4F 4C 3B  0D 1C 20 20 20 20 20 20  |LEFTCOL;..      |
00000750: 20 20 42 59 54 49 4E 52  4F 57 20 20 3D 20 31 2B  |  BYTINROW  = 1+|
00000760: 52 49 47 48 54 43 4F 4C  2D 4C 45 46 54 43 4F 4C  |RIGHTCOL-LEFTCOL|
00000770: 3B 0D 1C 0D 1C 20 20 20  20 20 20 46 4F 52 28 4C  |;....      FOR(L|
00000780: 4F 4F 50 31 3D 55 50 45  52 52 4F 57 3B 4C 4F 4F  |OOP1=UPERROW;LOO|
00000790: 50 31 3C 3D 44 4F 57 4E  52 4F 57 3B 4C 4F 4F 50  |P1<=DOWNROW;LOOP|
000007A0: 31 2B 2B 2C 53 4F 55 52  43 45 41 44 52 2B 3D 34  |1++,SOURCEADR+=4|
000007B0: 30 2C 53 54 4F 52 45 41  44 52 2B 3D 42 59 54 49  |0,STOREADR+=BYTI|
000007C0: 4E 52 4F 57 29 0D 1C 20  20 20 20 20 20 20 20 20  |NROW)..         |
000007D0: 4D 4F 56 45 28 53 54 4F  52 45 41 44 52 2C 42 59  |MOVE(STOREADR,BY|
000007E0: 54 49 4E 52 4F 57 2C 53  4F 55 52 43 45 41 44 52  |TINROW,SOURCEADR|
000007F0: 2C 35 36 29 3B 0D 1C 0D  1C 0D 96 20 20 20 20 20  |,56);......     |
00000800: 2F 2A 20 44 52 41 57 20  46 52 41 4D 45 20 52 4F  |/* DRAW FRAME RO|
00000810: 55 4E 44 20 57 49 4E 44  4F 57 20 2A 2F 0D 1C 0D  |UND WINDOW */...|
00000820: 1C 0D 1C 20 20 20 20 20  20 20 20 54 41 52 47 45  |...        TARGE|
00000830: 54 41 44 52 20 3D 20 D3  C3 D2 C5 C5 CE 2B 34 30  |TADR = ......+40|
00000840: 2A 55 50 45 52 52 4F 57  2B 4C 45 46 54 43 4F 4C  |*UPERROW+LEFTCOL|
00000850: 3B 0D 1C 0D 1C 20 20 20  20 20 20 20 20 2A 54 41  |;....        *TA|
00000860: 52 47 45 54 41 44 52 20  3D 20 31 31 32 3B 0D 1C  |RGETADR = 112;..|
00000870: 0D 1C 20 20 20 20 20 20  20 20 46 4F 52 20 28 4C  |..        FOR (L|
00000880: 4F 4F 50 31 3D 4C 45 46  54 43 4F 4C 2B 31 2C 2B  |OOP1=LEFTCOL+1,+|
00000890: 2B 54 41 52 47 45 54 41  44 52 3B 4C 4F 4F 50 31  |+TARGETADR;LOOP1|
000008A0: 3C 52 49 47 48 54 43 4F  4C 3B 4C 4F 4F 50 31 2B  |<RIGHTCOL;LOOP1+|
000008B0: 2B 2C 54 41 52 47 45 54  41 44 52 2B 2B 29 0D 1C  |+,TARGETADR++)..|
000008C0: 20 20 20 20 20 20 20 20  20 20 20 20 2A 54 41 52  |            *TAR|
000008D0: 47 45 54 41 44 52 20 3D  20 36 37 3B 0D 1C 0D 1C  |GETADR = 67;....|
000008E0: 20 20 20 20 20 20 20 20  2A 54 41 52 47 45 54 41  |        *TARGETA|
000008F0: 44 52 20 3D 20 31 31 30  3B 0D 1C 0D 1C 20 20 20  |DR = 110;....   |
00000900: 20 20 20 20 20 46 4F 52  20 28 4C 4F 4F 50 31 3D  |     FOR (LOOP1=|
00000910: 55 50 45 52 52 4F 57 2B  31 2C 54 41 52 47 45 54  |UPERROW+1,TARGET|
00000920: 41 44 52 2B 3D 34 30 3B  4C 4F 4F 50 31 3C 44 4F  |ADR+=40;LOOP1<DO|
00000930: 57 4E 52 4F 57 3B 4C 4F  4F 50 31 2B 2B 2C 54 41  |WNROW;LOOP1++,TA|
00000940: 52 47 45 54 41 44 52 2B  3D 34 30 29 0D 1C 20 20  |RGETADR+=40)..  |
00000950: 20 20 20 20 20 20 20 20  20 20 2A 54 41 52 47 45  |          *TARGE|
00000960: 54 41 44 52 20 3D 20 36  36 3B 0D 1C 0D 1C 20 20  |TADR = 66;....  |
00000970: 20 20 20 20 20 20 2A 54  41 52 47 45 54 41 44 52  |      *TARGETADR|
00000980: 20 3D 20 31 32 35 3B 0D  1C 0D 1C 20 20 20 20 20  | = 125;....     |
00000990: 20 20 20 46 4F 52 20 28  4C 4F 4F 50 31 3D 52 49  |   FOR (LOOP1=RI|
000009A0: 47 48 54 43 4F 4C 2D 31  2C 54 41 52 47 45 54 41  |GHTCOL-1,TARGETA|
000009B0: 44 52 2D 2D 3B 4C 4F 4F  50 31 3E 4C 45 46 54 43  |DR--;LOOP1>LEFTC|
000009C0: 4F 4C 3B 4C 4F 4F 50 31  2D 2D 2C 54 41 52 47 45  |OL;LOOP1--,TARGE|
000009D0: 54 41 44 52 2D 2D 29 0D  1C 20 20 20 20 20 20 20  |TADR--)..       |
000009E0: 20 20 20 20 20 2A 54 41  52 47 45 54 41 44 52 20  |     *TARGETADR |
000009F0: 3D 20 36 37 3B 0D 1C 0D  1C 20 20 20 20 20 20 20  |= 67;....       |
00000A00: 20 2A 54 41 52 47 45 54  41 44 52 20 3D 20 31 30  | *TARGETADR = 10|
00000A10: 39 3B 0D 1C 0D 1C 20 20  20 20 20 20 20 20 46 4F  |9;....        FO|
00000A20: 52 20 28 4C 4F 4F 50 31  3D 44 4F 57 4E 52 4F 57  |R (LOOP1=DOWNROW|
00000A30: 2D 31 2C 54 41 52 47 45  54 41 44 52 2D 3D 34 30  |-1,TARGETADR-=40|
00000A40: 3B 4C 4F 4F 50 31 3E 55  50 45 52 52 4F 57 3B 4C  |;LOOP1>UPERROW;L|
00000A50: 4F 4F 50 31 2D 2D 2C 54  41 52 47 45 54 41 44 52  |OOP1--,TARGETADR|
00000A60: 2D 3D 34 30 29 0D 1C 20  20 20 20 20 20 20 20 20  |-=40)..         |
00000A70: 20 20 20 2A 54 41 52 47  45 54 41 44 52 20 3D 20  |   *TARGETADR = |
00000A80: 36 36 3B 0D 1C 0D 1C 0D  96 20 20 20 20 20 2F 2A  |66;......     /*|
00000A90: 20 43 4C 45 41 52 20 57  49 4E 44 4F 57 20 2A 2F  | CLEAR WINDOW */|
00000AA0: 0D 1C 0D 1C 0D 1C 20 20  20 20 20 20 20 20 43 4C  |......        CL|
00000AB0: 45 41 52 57 49 4E 28 29  3B 0D 1C 0D 1C 20 20 20  |EARWIN();....   |
00000AC0: 20 20 20 20 20 52 45 53  55 4C 54 20 3D 20 D4 D2  |     RESULT = ..|
00000AD0: D5 C5 3B 0D 1C 20 20 20  20 20 20 DD 0D 1C 20 20  |..;..      ...  |
00000AE0: 20 20 20 45 4C 53 45 0D  1C 20 20 20 20 20 20 20  |   ELSE..       |
00000AF0: DB 0D 1C 20 20 20 20 20  20 20 20 4E 45 57 57 49  |...        NEWWI|
00000B00: 4E 2D 2D 3B 0D 1C 20 20  20 20 20 20 20 DD 0D 1C  |N--;..       ...|
00000B10: 0D 1C 20 20 20 DD 0D 1C  0D 1C 20 20 20 52 45 54  |..   .....   RET|
00000B20: 55 52 4E 28 52 45 53 55  4C 54 29 3B 0D 1C 0D 1C  |URN(RESULT);....|
00000B30: DD 0D 1C 0D 1C 0D 1C 0D  96 56 4F 49 44 20 43 4C  |.........VOID CL|
00000B40: 4F 53 45 57 49 4E 28 29  0D 1C 0D 1C DB 0D 1C 0D  |OSEWIN()........|
00000B50: 1C 20 20 20 20 20 20 20  20 20 49 4E 54 20 4C 4F  |.         INT LO|
00000B60: 4F 50 31 2C 4C 4F 4F 50  32 2C 42 59 54 49 4E 52  |OP1,LOOP2,BYTINR|
00000B70: 4F 57 2C 4D 45 4D 4F 52  59 3B 0D 1C 55 4E 53 49  |OW,MEMORY;..UNSI|
00000B80: 47 4E 45 44 20 49 4E 54  20 54 41 52 47 45 54 41  |GNED INT TARGETA|
00000B90: 44 52 2C 53 4F 55 52 43  45 41 44 52 3B 0D 1C 0D  |DR,SOURCEADR;...|
00000BA0: 1C 0D 1C 20 20 20 20 20  49 46 20 28 20 4E 45 57  |...     IF ( NEW|
00000BB0: 57 49 4E 20 3E 20 2D 31  20 29 0D 1C 20 20 20 20  |WIN > -1 )..    |
00000BC0: 20 20 DB 0D 1C 0D 96 20  20 20 20 20 2F 2A 20 52  |  .....     /* R|
00000BD0: 45 53 54 4F 52 45 20 48  49 44 44 45 4E 20 53 55  |ESTORE HIDDEN SU|
00000BE0: 52 46 41 43 45 20 55 4E  44 45 52 20 57 49 4E 44  |RFACE UNDER WIND|
00000BF0: 4F 57 20 2A 2F 0D 1C 0D  1C 20 20 20 20 20 20 20  |OW */....       |
00000C00: 20 54 41 52 47 45 54 41  44 52 20 3D 20 D3 C3 D2  | TARGETADR = ...|
00000C10: C5 C5 CE 2B 34 30 2A D7  C9 CE C4 CF D7 2E 52 4F  |...+40*.......RO|
00000C20: 57 31 2B D7 C9 CE C4 CF  D7 2E 43 4F 4C 31 3B 0D  |W1+.......COL1;.|
00000C30: 1C 20 20 20 20 20 20 20  20 53 4F 55 52 43 45 41  |.        SOURCEA|
00000C40: 44 52 20 3D 20 D7 C9 CE  C4 CF D7 2E 53 54 4F 52  |DR = .......STOR|
00000C50: 45 50 54 52 3B 0D 1C 20  20 20 20 20 20 20 20 42  |EPTR;..        B|
00000C60: 59 54 49 4E 52 4F 57 20  20 3D 20 31 2B D7 C9 CE  |YTINROW  = 1+...|
00000C70: C4 CF D7 2E 43 4F 4C 32  2D D7 C9 CE C4 CF D7 2E  |....COL2-.......|
00000C80: 43 4F 4C 31 3B 0D 1C 0D  1C 46 4F 52 28 0D 1C 4C  |COL1;....FOR(..L|
00000C90: 4F 4F 50 31 3D D7 C9 CE  C4 CF D7 2E 52 4F 57 31  |OOP1=.......ROW1|
00000CA0: 3B 4C 4F 4F 50 31 3C 3D  D7 C9 CE C4 CF D7 2E 52  |;LOOP1<=.......R|
00000CB0: 4F 57 32 3B 4C 4F 4F 50  31 2B 2B 2C 54 41 52 47  |OW2;LOOP1++,TARG|
00000CC0: 45 54 41 44 52 2B 3D 34  30 2C 53 4F 55 52 43 45  |ETADR+=40,SOURCE|
00000CD0: 41 44 52 2B 3D 42 59 54  49 4E 52 4F 57 29 0D 1C  |ADR+=BYTINROW)..|
00000CE0: 20 20 20 20 20 20 20 20  4D 4F 56 45 28 54 41 52  |        MOVE(TAR|
00000CF0: 47 45 54 41 44 52 2C 42  59 54 49 4E 52 4F 57 2C  |GETADR,BYTINROW,|
00000D00: 53 4F 55 52 43 45 41 44  52 2C 35 36 29 3B 0D 1C  |SOURCEADR,56);..|
00000D10: 0D 96 20 20 20 20 20 2F  2A 20 52 45 54 55 52 4E  |..     /* RETURN|
00000D20: 20 4C 41 53 54 20 41 4C  4C 4F 43 41 54 45 44 20  | LAST ALLOCATED |
00000D30: 42 4C 4F 43 4B 20 2A 2F  0D 1C 0D 1C 20 20 20 20  |BLOCK */....    |
00000D40: 20 20 20 20 4D 46 52 45  45 20 28 D7 C9 CE C4 CF  |    MFREE (.....|
00000D50: D7 2E 42 59 54 45 53 29  3B 0D 1C 0D 96 20 20 20  |..BYTES);....   |
00000D60: 20 20 2F 2A 20 53 45 54  20 50 4F 49 4E 54 45 52  |  /* SET POINTER|
00000D70: 20 54 4F 20 50 52 45 53  45 4E 54 20 57 49 4E 44  | TO PRESENT WIND|
00000D80: 4F 57 20 2A 2F 0D 1C 0D  1C 20 20 20 20 20 20 20  |OW */....       |
00000D90: 20 4E 45 57 57 49 4E 2D  2D 3B 0D 1C 0D 1C 20 20  | NEWWIN--;....  |
00000DA0: 20 20 20 DD 0D 1C 0D 1C  DD 0D 1C 0D 1C 0D 1C 0D  |   .............|
00000DB0: 96 42 4F 4F 4C 45 41 4E  20 53 43 52 4F 4C 4C 57  |.BOOLEAN SCROLLW|
00000DC0: 49 4E 28 55 50 4F 52 44  4F 57 4E 29 0D 1C 0D 1C  |IN(UPORDOWN)....|
00000DD0: 49 4E 54 20 55 50 4F 52  44 4F 57 4E 3B 0D 1C 0D  |INT UPORDOWN;...|
00000DE0: 1C DB 0D 1C 0D 1C 42 4F  4F 4C 45 41 4E 20 52 45  |......BOOLEAN RE|
00000DF0: 53 55 4C 54 20 3D 20 C6  C1 CC D3 C5 3B 0D 1C 0D  |SULT = .....;...|
00000E00: 1C 43 48 41 52 20 2A 54  41 52 47 45 54 41 44 44  |.CHAR *TARGETADD|
00000E10: 52 2C 2A 53 4F 55 52 43  45 41 44 44 52 3B 0D 1C  |R,*SOURCEADDR;..|
00000E20: 49 4E 54 20 20 4C 4F 4F  50 2C 42 59 54 45 49 4E  |INT  LOOP,BYTEIN|
00000E30: 52 4F 57 3B 0D 1C 0D 1C  0D 1C 49 46 20 28 4E 45  |ROW;......IF (NE|
00000E40: 57 57 49 4E 3E 2D 31 29  0D 1C 20 DB 0D 1C 20 20  |WWIN>-1).. ...  |
00000E50: 20 52 45 53 55 4C 54 3D  D4 D2 D5 C5 3B 0D 1C 0D  | RESULT=....;...|
00000E60: 1C 20 20 20 42 59 54 45  49 4E 52 4F 57 3D D7 C9  |.   BYTEINROW=..|
00000E70: CE C4 CF D7 2E 43 4F 4C  32 2D D7 C9 CE C4 CF D7  |.....COL2-......|
00000E80: 2E 43 4F 4C 31 2D 31 3B  0D 1C 0D 1C 20 20 20 49  |.COL1-1;....   I|
00000E90: 46 20 28 55 50 4F 52 44  4F 57 4E 3D 3D D5 D0 29  |F (UPORDOWN==..)|
00000EA0: 0D 1C 20 20 20 20 DB 0D  1C 20 20 20 20 20 20 54  |..    ...      T|
00000EB0: 41 52 47 45 54 41 44 44  52 3D D3 C3 D2 C5 C5 CE  |ARGETADDR=......|
00000EC0: 2B D7 C9 CE C4 CF D7 2E  52 4F 57 31 2A 34 30 2B  |+.......ROW1*40+|
00000ED0: 34 31 3B 0D 1C 20 20 20  20 20 20 53 4F 55 52 43  |41;..      SOURC|
00000EE0: 45 41 44 44 52 3D 54 41  52 47 45 54 41 44 44 52  |EADDR=TARGETADDR|
00000EF0: 2B 34 30 3B 0D 1C 0D 1C  46 4F 52 20 28 4C 4F 4F  |+40;....FOR (LOO|
00000F00: 50 3D D7 C9 CE C4 CF D7  2E 52 4F 57 31 2B 31 3B  |P=.......ROW1+1;|
00000F10: 4C 4F 4F 50 3C D7 C9 CE  C4 CF D7 2E 52 4F 57 32  |LOOP<.......ROW2|
00000F20: 2D 31 3B 4C 4F 4F 50 2B  2B 2C 54 41 52 47 45 54  |-1;LOOP++,TARGET|
00000F30: 41 44 44 52 2B 3D 34 30  2C 53 4F 55 52 43 45 41  |ADDR+=40,SOURCEA|
00000F40: 44 44 52 2B 3D 34 30 29  0D 1C 20 20 DB 0D 1C 20  |DDR+=40)..  ... |
00000F50: 20 20 20 4D 4F 56 45 28  54 41 52 47 45 54 41 44  |   MOVE(TARGETAD|
00000F60: 44 52 2C 42 59 54 45 49  4E 52 4F 57 2C 53 4F 55  |DR,BYTEINROW,SOU|
00000F70: 52 43 45 41 44 44 52 2C  35 33 29 3B 0D 1C 20 20  |RCEADDR,53);..  |
00000F80: DD 0D 1C 0D 1C 20 20 20  20 20 20 4D 4F 56 45 28  |.....      MOVE(|
00000F90: 54 41 52 47 45 54 41 44  44 52 2C 42 59 54 45 49  |TARGETADDR,BYTEI|
00000FA0: 4E 52 4F 57 2C 26 43 4C  52 53 54 52 5B 30 5D 2C  |NROW,&CLRSTR[0],|
00000FB0: 35 33 29 3B 0D 1C 20 20  20 20 DD 0D 1C 20 20 20  |53);..    ...   |
00000FC0: 45 4C 53 45 20 49 46 20  28 55 50 4F 52 44 4F 57  |ELSE IF (UPORDOW|
00000FD0: 4E 3D 3D C4 CF D7 CE 29  0D 1C 20 20 20 20 20 20  |N==....)..      |
00000FE0: 20 20 20 DB 0D 1C 20 20  20 20 20 20 20 20 20 20  |   ...          |
00000FF0: 20 54 41 52 47 45 54 41  44 44 52 3D D3 C3 D2 C5  | TARGETADDR=....|
00001000: C5 CE 2B D7 C9 CE C4 CF  D7 2E 52 4F 57 32 2A 34  |..+.......ROW2*4|
00001010: 30 2D 33 39 3B 0D 1C 20  20 20 20 20 20 20 20 20  |0-39;..         |
00001020: 20 20 53 4F 55 52 43 45  41 44 44 52 3D 54 41 52  |  SOURCEADDR=TAR|
00001030: 47 45 54 41 44 44 52 2D  34 30 3B 0D 1C 0D 1C 46  |GETADDR-40;....F|
00001040: 4F 52 20 28 4C 4F 4F 50  3D D7 C9 CE C4 CF D7 2E  |OR (LOOP=.......|
00001050: 52 4F 57 32 2D 31 3B 4C  4F 4F 50 3E D7 C9 CE C4  |ROW2-1;LOOP>....|
00001060: CF D7 2E 52 4F 57 32 2B  31 3B 4C 4F 4F 50 2D 2D  |...ROW2+1;LOOP--|
00001070: 2C 54 41 52 47 45 54 41  44 44 52 2D 3D 34 30 2C  |,TARGETADDR-=40,|
00001080: 53 4F 55 52 43 45 41 44  44 52 2D 3D 34 30 29 0D  |SOURCEADDR-=40).|
00001090: 1C 20 20 DB 0D 1C 20 20  20 20 4D 4F 56 45 28 54  |.  ...    MOVE(T|
000010A0: 41 52 47 45 54 41 44 44  52 2C 42 59 54 45 49 4E  |ARGETADDR,BYTEIN|
000010B0: 52 4F 57 2C 53 4F 55 52  43 45 41 44 44 52 2C 35  |ROW,SOURCEADDR,5|
000010C0: 33 29 3B 0D 1C 20 20 DD  0D 1C 0D 1C 20 20 20 20  |3);..  .....    |
000010D0: 20 20 20 20 20 20 20 4D  4F 56 45 28 54 41 52 47  |       MOVE(TARG|
000010E0: 45 54 41 44 44 52 2C 42  59 54 45 49 4E 52 4F 57  |ETADDR,BYTEINROW|
000010F0: 2C 26 43 4C 52 53 54 52  5B 30 5D 2C 35 33 29 3B  |,&CLRSTR[0],53);|
00001100: 0D 1C 20 20 20 20 20 20  20 20 20 DD 0D 1C 20 20  |..         ...  |
00001110: 20 45 4C 53 45 0D 1C 20  20 20 20 DB 0D 1C 20 20  | ELSE..    ...  |
00001120: 20 20 20 20 52 45 53 55  4C 54 20 3D 20 C6 C1 CC  |    RESULT = ...|
00001130: D3 C5 3B 0D 1C 20 20 20  20 DD 0D 1C 20 DD 0D 1C  |..;..    ... ...|
00001140: 0D 1C 52 45 54 55 52 4E  28 52 45 53 55 4C 54 29  |..RETURN(RESULT)|
00001150: 3B 0D 1C 0D 1C DD 0D 1C  0D 1C 0D 1C 0D 00        |;.............  |
.../* WINDOW ROUTINS FOR THE C64 */.....
.#DEFINE WINDOW  WINDOW[NEWWIN]..#DEFINE
 SCREEN  0XE000..#DEFINE UP      0..#DEF
INE DOWN    1....../* WINDOW STRUCTURE *
/....STATIC STRUCT WINSTRUC..           
 .....              INT  ROW1;      /* U
PPER LEFT CORNER */..              INT  
COL1;..              INT  ROW2;      /* 
DOWN RIGHT CORNER */..              INT 
 COL2;..              INT  BYTES;     /*
 NUMBER OF BYTES USED BY WINDOW */..    
          CHAR *STOREPTR; /* POINTER TO 
STORAGE OF HIDDEN  SURFACE */....       
     . WINDOW[8];......STATIC INT  NEWWI
N     = -1;..STATIC CHAR CLRSTR[41] = ."
                                        
".;....../* FUNCTION DECLARATIONS */....
..VOID CLEARWIN().........INT  LOOP1,ROW
ADDR,BYTEINROW;......     ROWADDR   = SC
REEN+WINDOW.ROW1*40+40+WINDOW.COL1+1;.. 
    BYTEINROW = WINDOW.COL2-WINDOW.COL1-
1;....     FOR (LOOP1=WINDOW.ROW1+1;LOOP
1<WINDOW.ROW2;LOOP1++,ROWADDR+=40)..    
     MOVE (ROWADDR,BYTEINROW,&CLRSTR[0])
;.................BOOLEAN OPENWIN(UPERRO
W,LEFTCOL,DOWNROW,RIGHTCOL)....INT     U
PERROW,LEFTCOL,DOWNROW,RIGHTCOL;........
.INT     I,LOOP1,LOOP2,BYTINROW;..INT   
  SOURCEADR,STOREADR;..CHAR    *TARGETAD
R,*COLOR = 646;..CHAR    *BORDER = 53280
;..BOOLEAN RESULT  = FALSE;......  IF ( 
NEWWIN < 7 )..   .....     /* INITIALIZE
 A NEW WINDOW */....     NEWWIN++;....  
   /* CALCULATE NUMBER OF BYTES IN THE W
INDOW */....     WINDOW.BYTES =  (1+DOWN
ROW-UPERROW)*(1+RIGHTCOL-LEFTCOL);....  
   /* ALLOCATE STORAGE AREA FOR HIDDEN S
URFACE */....     IF ((STOREADR = MALLOC
(WINDOW.BYTES)) != 0)..      ...        
WINDOW.STOREPTR = STOREADR;....     /* S
TORE CORDINATES FOR WINDOW */....       
 WINDOW.ROW1 = UPERROW;..        WINDOW.
COL1 = LEFTCOL;..        WINDOW.ROW2 = D
OWNROW;..        WINDOW.COL2 = RIGHTCOL;
....     /* STORE HIDDEN SURFACE TO ALLO
CATED BLOCK */....        SOURCEADR = SC
REEN+40*UPERROW+LEFTCOL;..        BYTINR
OW  = 1+RIGHTCOL-LEFTCOL;....      FOR(L
OOP1=UPERROW;LOOP1<=DOWNROW;LOOP1++,SOUR
CEADR+=40,STOREADR+=BYTINROW)..         
MOVE(STOREADR,BYTINROW,SOURCEADR,56);...
...     /* DRAW FRAME ROUND WINDOW */...
...        TARGETADR = SCREEN+40*UPERROW
+LEFTCOL;....        *TARGETADR = 112;..
..        FOR (LOOP1=LEFTCOL+1,++TARGETA
DR;LOOP1<RIGHTCOL;LOOP1++,TARGETADR++)..
            *TARGETADR = 67;....        
*TARGETADR = 110;....        FOR (LOOP1=
UPERROW+1,TARGETADR+=40;LOOP1<DOWNROW;LO
OP1++,TARGETADR+=40)..            *TARGE
TADR = 66;....        *TARGETADR = 125;.
...        FOR (LOOP1=RIGHTCOL-1,TARGETA
DR--;LOOP1>LEFTCOL;LOOP1--,TARGETADR--).
.            *TARGETADR = 67;....       
 *TARGETADR = 109;....        FOR (LOOP1
=DOWNROW-1,TARGETADR-=40;LOOP1>UPERROW;L
OOP1--,TARGETADR-=40)..            *TARG
ETADR = 66;......     /* CLEAR WINDOW */
......        CLEARWIN();....        RES
ULT = TRUE;..      ...     ELSE..       
...        NEWWIN--;..       .....   ...
..   RETURN(RESULT);.............VOID CL
OSEWIN().........         INT LOOP1,LOOP
2,BYTINROW,MEMORY;..UNSIGNED INT TARGETA
DR,SOURCEADR;......     IF ( NEWWIN > -1
 )..      .....     /* RESTORE HIDDEN SU
RFACE UNDER WINDOW */....        TARGETA
DR = SCREEN+40*WINDOW.ROW1+WINDOW.COL1;.
.        SOURCEADR = WINDOW.STOREPTR;.. 
       BYTINROW  = 1+WINDOW.COL2-WINDOW.
COL1;....FOR(..LOOP1=WINDOW.ROW1;LOOP1<=
WINDOW.ROW2;LOOP1++,TARGETADR+=40,SOURCE
ADR+=BYTINROW)..        MOVE(TARGETADR,B
YTINROW,SOURCEADR,56);....     /* RETURN
 LAST ALLOCATED BLOCK */....        MFRE
E (WINDOW.BYTES);....     /* SET POINTER
 TO PRESENT WINDOW */....        NEWWIN-
-;....     ..............BOOLEAN SCROLLW
IN(UPORDOWN)....INT UPORDOWN;.........BO
OLEAN RESULT = FALSE;....CHAR *TARGETADD
R,*SOURCEADDR;..INT  LOOP,BYTEINROW;....
..IF (NEWWIN>-1).. ...   RESULT=TRUE;...
.   BYTEINROW=WINDOW.COL2-WINDOW.COL1-1;
....   IF (UPORDOWN==UP)..    ...      T
ARGETADDR=SCREEN+WINDOW.ROW1*40+41;..   
   SOURCEADDR=TARGETADDR+40;....FOR (LOO
P=WINDOW.ROW1+1;LOOP<WINDOW.ROW2-1;LOOP+
+,TARGETADDR+=40,SOURCEADDR+=40)..  ... 
   MOVE(TARGETADDR,BYTEINROW,SOURCEADDR,
53);..  .....      MOVE(TARGETADDR,BYTEI
NROW,&CLRSTR[0],53);..    ...   ELSE IF 
(UPORDOWN==DOWN)..         ...          
 TARGETADDR=SCREEN+WINDOW.ROW2*40-39;.. 
          SOURCEADDR=TARGETADDR-40;....F
OR (LOOP=WINDOW.ROW2-1;LOOP>WINDOW.ROW2+
1;LOOP--,TARGETADDR-=40,SOURCEADDR-=40).
.  ...    MOVE(TARGETADDR,BYTEINROW,SOUR
CEADDR,53);..  .....           MOVE(TARG
ETADDR,BYTEINROW,&CLRSTR[0],53);..      
   ...   ELSE..    ...      RESULT = FAL
SE;..    ... .....RETURN(RESULT);.......
......
C64 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL