amiga-bootcamp/09_intuition/screens.md
Ilia Sharin 21751c0025 docs(amiga): complete AmigaOS 3.1/3.2 developer reference — 172 files across 17 sections
Comprehensive technical documentation covering:
- Hardware: OCS/ECS/AGA custom chip registers, Copper & Blitter deep dives
- Boot sequence: cold boot through startup-sequence
- Binary format: HUNK executable spec, relocation, debug info
- Linking & ABI: .fd files, LVO tables, register calling conventions
- Exec kernel: tasks, interrupts, memory, signals, semaphores
- AmigaDOS: file I/O, FFS/OFS layout, CLI/Shell scripting
- Graphics: planar bitmaps, Copper programming, HAM/EHB modes
- Intuition: screens, windows, IDCMP, BOOPSI
- Devices: trackdisk, SCSI, serial, timer, audio, keyboard
- Libraries: utility, expansion, IFFParse, locale, ARexx
- Networking: bsdsocket API, SANA-II, TCP/IP stack comparison
- Toolchain: GCC, vasm/vlink, SAS/C, NDK, debugging
- Reverse engineering: IDA/Ghidra setup, compiler fingerprints, case studies
- CPU & MMU: 68040/060 emulation libs, PMMU, cache management
- Driver development: SANA-II, Picasso96/RTG, AHI audio

All files include breadcrumb navigation. No local paths or proprietary content.
2026-04-23 12:17:35 -04:00

92 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[← Home](../README.md) · [Intuition](README.md)
# Screens — OpenScreen, CloseScreen, SA_ Tags
## Overview
An Amiga **Screen** is a complete display context: a `ViewPort` with its own `BitMap`, colour palette, and resolution. Multiple screens can coexist and be dragged up/down to reveal each other.
---
## Screen Types
| Type | Constant | Description |
|---|---|---|
| Workbench | `WBENCHSCREEN` | The default desktop screen |
| Custom | `CUSTOMSCREEN` | Application-owned screen |
| Public | `PUBLICSCREEN` | Named screen other apps can open windows on |
---
## Opening a Screen (OS 2.0+ TagList)
```c
struct Screen *scr = OpenScreenTags(NULL,
SA_Width, 640,
SA_Height, 256,
SA_Depth, 4, /* 16 colours */
SA_DisplayID, HIRES_KEY,
SA_Title, "My Screen",
SA_ShowTitle, TRUE,
SA_Type, CUSTOMSCREEN,
SA_Pens, (ULONG)~0, /* use 3D pen defaults */
SA_Font, &topaz8,
TAG_DONE);
```
### Common SA_ Tags
| Tag | Description |
|---|---|
| `SA_Width`, `SA_Height` | Screen dimensions |
| `SA_Depth` | Bitplane count (18) |
| `SA_DisplayID` | ModeID from display database |
| `SA_Title` | Title bar text |
| `SA_ShowTitle` | Show/hide title bar |
| `SA_Type` | `CUSTOMSCREEN`, `PUBLICSCREEN` |
| `SA_Behind` | Open behind other screens |
| `SA_Quiet` | No title bar at all |
| `SA_AutoScroll` | Allow autoscrolling |
| `SA_Overscan` | Overscan type (`OSCAN_TEXT`, `OSCAN_STANDARD`, `OSCAN_MAX`) |
| `SA_Pens` | DrawInfo pen array (3D look) |
| `SA_Interleaved` | Use interleaved bitmap |
| `SA_Colors32` | 32-bit colour palette |
| `SA_PubName` | Public screen name |
---
## Closing
```c
CloseScreen(scr);
/* All windows must be closed first! */
```
---
## Public Screens
```c
/* Open a public screen: */
struct Screen *pub = OpenScreenTags(NULL,
SA_Type, PUBLICSCREEN,
SA_PubName, "MYAPP",
SA_Title, "My Public Screen",
TAG_DONE);
PubScreenStatus(pub, 0); /* make it available */
/* From another process, open a window on it: */
struct Screen *found = LockPubScreen("MYAPP");
struct Window *win = OpenWindowTags(NULL,
WA_PubScreen, found,
WA_Title, "On MYAPP",
TAG_DONE);
UnlockPubScreen(NULL, found);
```
---
## References
- NDK39: `intuition/screens.h`, `intuition/intuition.h`
- ADCD 2.1: `OpenScreenTagList`, `CloseScreen`, `LockPubScreen`