├── .gitignore ├── Archive ├── SPUI-0.1.0.zip ├── SPUI-0.1.1.zip ├── SPUI-0.2.0.zip ├── SPUI-0.2.1.zip ├── SPUI-0.2.2.zip ├── SPUI-0.3.0.zip └── SPUI-0.4.0.zip ├── README.md ├── SPUI ├── README.md ├── VERSION ├── demos │ ├── 1937.ini │ ├── BUILDBAS.BAS │ ├── STARTUP │ │ ├── AUTOEXEC.bas │ │ ├── autoexec.ini │ │ ├── autoexec.txt │ │ └── tokenize.bas │ ├── spui-demo.bas │ └── spui-demo.txt ├── docs │ ├── BUGS.txt │ ├── CHANGELOG.txt │ ├── SPUI.gde │ ├── TODO.txt │ └── license.txt └── dot │ ├── SPUI │ └── SPUI_COMM └── VERSION /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /Archive/SPUI-0.1.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StalePixels/SPUI/429f83aa733f8d16662eccf1d17290e0d3a43317/Archive/SPUI-0.1.0.zip -------------------------------------------------------------------------------- /Archive/SPUI-0.1.1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StalePixels/SPUI/429f83aa733f8d16662eccf1d17290e0d3a43317/Archive/SPUI-0.1.1.zip -------------------------------------------------------------------------------- /Archive/SPUI-0.2.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StalePixels/SPUI/429f83aa733f8d16662eccf1d17290e0d3a43317/Archive/SPUI-0.2.0.zip -------------------------------------------------------------------------------- /Archive/SPUI-0.2.1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StalePixels/SPUI/429f83aa733f8d16662eccf1d17290e0d3a43317/Archive/SPUI-0.2.1.zip -------------------------------------------------------------------------------- /Archive/SPUI-0.2.2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StalePixels/SPUI/429f83aa733f8d16662eccf1d17290e0d3a43317/Archive/SPUI-0.2.2.zip -------------------------------------------------------------------------------- /Archive/SPUI-0.3.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StalePixels/SPUI/429f83aa733f8d16662eccf1d17290e0d3a43317/Archive/SPUI-0.3.0.zip -------------------------------------------------------------------------------- /Archive/SPUI-0.4.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StalePixels/SPUI/429f83aa733f8d16662eccf1d17290e0d3a43317/Archive/SPUI-0.4.0.zip -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SPUI 2 | Stale Pixels User Interface tools for the ZX Spectrum Next 3 | 4 | https://www.youtube.com/watch?v=mC45Ougc8gU 5 | -------------------------------------------------------------------------------- /SPUI/README.md: -------------------------------------------------------------------------------- 1 | Stale Pixels User Interface tools (aka SPUI) 2 | -- 3 | 4 | Abstract 5 | == 6 | SPUI is a DotCommand for the ZX Spectrum Next. It's primary (sole?) purpose is 7 | to make the creation of User Interaction flows from NextBASIC 8 | (a) more convenient; 9 | (b) less ugly; 10 | (c) more consistent; 11 | (d) less effort! 12 | 13 | Quick Start 14 | == 15 | .SPUI -h will get you the built-in help. 16 | 17 | When building GUIs the parameter is compulsory. 18 | 19 | Setup 20 | == 21 | To prevent unexpected side effects, unless instructed, you should preload Register 0x7F with 0. 22 | 23 | More Information 24 | == 25 | See the /docs/ folder 26 | 27 | --Xalior, 20200626 28 | -------------------------------------------------------------------------------- /SPUI/VERSION: -------------------------------------------------------------------------------- 1 | 0.4.2 2 | -------------------------------------------------------------------------------- /SPUI/demos/1937.ini: -------------------------------------------------------------------------------- 1 | # This is a comment, we ignore these so you can have as many as you like 2 | width = 2 3 | # the above is far too small, but this case insensitive dupe will fix it 4 | WIDTH = 26 5 | # Even a width of 26 is too narrow for entries 3 and 6, but that won't cause an error 6 | row = 2 7 | height = 13 8 | # We'll ignore stuff we don't understand 9 | badger = mushroom 10 | title = 1937's Heroes 11 | spui01 = Snow White (The Mistress) 12 | spui02 = One - Dopey (stoned) 13 | spui03= Two - Grumpy (has no drugs) 14 | spui04= Three - Sneezy (cocaine) 15 | spui05= Four - Bashful (PCP) 16 | spui06= Five - Sleepy (also stoned) 17 | spui07= Six - Happy (high) 18 | spui08 = Seven - Doc (the dealer) 19 | spui09= Not appearing in this film 20 | # spui10 is missing on purpose. 21 | spui11 = Magic Mirror 22 | spui12 = Queen 23 | spui13 = Huntsman 24 | # Because our height is set to 13 we'll never display beyond here 25 | spui14 26 | spui15 = 27 | spui16=Prince's horse! 28 | spui17= 29 | spui18= 30 | spui19= 31 | 32 | spui20= I've seen your bottom :-o 33 | # Must end with a \n NEWLINE 34 | CoL = 2 35 | default_timeout = 7 36 | -------------------------------------------------------------------------------- /SPUI/demos/BUILDBAS.BAS: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StalePixels/SPUI/429f83aa733f8d16662eccf1d17290e0d3a43317/SPUI/demos/BUILDBAS.BAS -------------------------------------------------------------------------------- /SPUI/demos/STARTUP/AUTOEXEC.bas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StalePixels/SPUI/429f83aa733f8d16662eccf1d17290e0d3a43317/SPUI/demos/STARTUP/AUTOEXEC.bas -------------------------------------------------------------------------------- /SPUI/demos/STARTUP/autoexec.ini: -------------------------------------------------------------------------------- 1 | WIDTH = 20 2 | row = 5 3 | col = 5 4 | height = 12 5 | title = Stale Pixels 6 | spui01 = NextZXOS 7 | spui02 = NextPiUI 8 | spui03 = FoaK 9 | spui04 = D3 10 | spui10 = Force Auto-Start Proc 11 | spui12 = Retokenize Startup 12 | default_timeout = 4 13 | -------------------------------------------------------------------------------- /SPUI/demos/STARTUP/autoexec.txt: -------------------------------------------------------------------------------- 1 | #program AUTOEXEC 2 | #autostart 10 3 | #autoline 10 4 | ON ERROR Proc OnError() 5 | .cd /SPUI/startup 6 | .EVERY 10 STARTUP 7 | IF %REG 127 THEN PROC AutomaticStartup() 8 | REG 127,0 : .SPUI MENU -I autoexec.ini 9 | ; Remember 0 = None/BREAK 10 | let %c = %REG 127 11 | IF %c = 0 THEN ERASE 12 | IF %c = 1 THEN Proc NextZXOS() 13 | IF %c = 2 THEN Proc NextPiUI() 14 | IF %c = 3 THEN Proc FoaK() 15 | IF %c = 4 THEN Proc D3() 16 | IF %c = 10 THEN Proc ManualStartup() 17 | IF %c = 12 THEN Proc Retokenize() 18 | 19 | STOP 20 | #autoline 21 | 22 | 23 | #autoline 7000 24 | ; Get over Toshiba going ReadOnly 25 | DefProc OnError() 26 | REMOUNT 27 | RUN 28 | EndProc 29 | 30 | DefProc AutomaticStartup() 31 | Proc UpdateESP() 32 | EndProc 33 | 34 | DefProc ManualStartup() 35 | Proc AutomaticStartup() 36 | .INI /sys/every.cfg STARTUP 0 37 | EndProc 38 | 39 | DefProc UpdateESP() 40 | CLS 41 | .NXTP wendy.xalior.com 12300 42 | CLS 43 | EndProc 44 | 45 | DefProc NextZXOS() 46 | .CD / 47 | NEW 48 | EndProc 49 | 50 | DefProc NextPiUI() 51 | .CD /NextPi 52 | .NextPiUI 53 | .LS 54 | ERASE 55 | EndProc 56 | 57 | DefProc FoaK() 58 | .CD /FoaK 59 | .NEXLOAD Foak.nex 60 | EndProc 61 | 62 | DefProc D3() 63 | .CD /D3 64 | CLS 65 | .CD 66 | .LS 67 | ERASE 68 | EndProc 69 | 70 | DefProc Retokenize() 71 | CLS 72 | LOAD "tokenize.bas" 73 | EndProc 74 | #autoline -------------------------------------------------------------------------------- /SPUI/demos/STARTUP/tokenize.bas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StalePixels/SPUI/429f83aa733f8d16662eccf1d17290e0d3a43317/SPUI/demos/STARTUP/tokenize.bas -------------------------------------------------------------------------------- /SPUI/demos/spui-demo.bas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StalePixels/SPUI/429f83aa733f8d16662eccf1d17290e0d3a43317/SPUI/demos/spui-demo.bas -------------------------------------------------------------------------------- /SPUI/demos/spui-demo.txt: -------------------------------------------------------------------------------- 1 | #program spui-demo #autostart 1 REG 127,2 4 ;*************************; 5 ;StalePixels UserInterface; 6 ;*************************; 10 .SPUI menu -d 4 "Showcase" "Tests" "Help" 20 LET %m =% REG 127 30 IF %m = 0 THEN GO TO 9990 40 GO TO %m * 1000 1000 ;******************************* 1010 CLS : REG 127,0 : .SPUI menu -t "Showcase" -r 7 -y 5 "Default" "Narrow" "Long" "Short" "Custom" "INI file" 1020 LET %m =% REG 127 1030 IF %m = 0 THEN CLS: GOTO 10 1040 GO TO %m*100+1000 1099 ;******************************* 1100 CLS : PRINT "Default Menu": PRINT 1105 PRINT "16x6" : PRINT 1109 PRINT ".SPUI menu One Two Three Four Five" 1110 REG 127,0 : .SPUI menu One Two Three Four Five 1190 GOTO 1000 1199 ;******************************* 1200 CLS : PRINT "Narrow Menu": PRINT 1205 PRINT "6x6" : PRINT 1209 PRINT ".SPUI menu -c 6 One Two Three Four" 1210 REG 127,0 : .SPUI menu -c 6 One Two Three Four Five Six Siven Eight Nine Ten Eleven Twelve 1290 GOTO 1000 1299 ;******************************* 1300 CLS : PRINT "Long Menu": PRINT 1305 PRINT "16x12" : PRINT 1309 PRINT ".SPUI menu -r 12 One Two Three Four Five Six Siven Eight Nine Ten Eleven Twelve" 1310 REG 127,0 : .SPUI menu -r 12 One Two Three Four Five Six Siven Eight Nine Ten Eleven Twelve 1390 GOTO 1000 1399 ;******************************* 1400 CLS : PRINT "Short Menu": PRINT 1405 PRINT "6x1" : PRINT 1409 PRINT ".SPUI menu -r 2 ""One and Done""" 1410 REG 127,0 : .SPUI menu -r 2 "One and Done" 1490 GOTO 1000 1499 ;******************************* 1500 CLS : PRINT "Custom Menu": PRINT 1505 PRINT "6x6@1x1" : PRINT 1509 PRINT ".SPUI menu -x 1 -y 1 -t ""Fully Custom"" -c 20 -r 2 ""First option"" ""Two choices"" ""Three thingy"" ""Four is where it normally ends"" ""Five is here"" ""Six & done!""" 1510 REG 127,0 : .SPUI menu -x 1 -y 1 -t "Fully Custom" -c 20 -r 2 "First option" "Two choices" "Three thingy" "Four is where it normally ends" "Five is here" "Six & done!" 1590 GOTO 1000 1599 ;******************************* 1600 CLS : PRINT "INI Menu": PRINT 1609 PRINT ".SPUI menu -I 1937.ini" 1610 REG 127,0 : .SPUI menu -I 1937.ini 1690 GOTO 1000 1699 ;******************************* 2000 ;******************************* 2010 CLS : REG 127,0 : .SPUI menu -t "Errors" -r 5 -y 5 "Too Wide" "Too Narrow" "Too Tall" "Too Short" "Overflow Tests" 2020 LET %m =% REG 127 2030 IF %m = 0 THEN CLS: GOTO 10 2040 GO TO %m*100+2000 2099 ;******************************* 2100 CLS : PRINT "MENU TOO WIDE": PRINT 2105 PRINT "COLUMNS (width) must be <31" : PRINT 2109 PRINT ".SPUI menu -c 31 One Two Three Four Five" 2110 REG 127,0 : .SPUI menu -c 31 One Two Three Four Five 2199 ;******************************* 2200 CLS : PRINT "MENU TOO NARROW" : PRINT 2205 PRINT "COLUMNS (width) must be >6" : PRINT 2209 PRINT ".SPUI menu -c -6 One Two Three Four Five" 2210 REG 127,0 : .SPUI menu -c -6 One Two Three Four Five 2299 ;******************************* 2300 CLS : PRINT "MENU TOO TALL" : PRINT 2305 PRINT "ROWS (height) must be <25" : PRINT 2310 PRINT ".SPUI menu -r 25 One Two Three Four Five" 2319 REG 127,0 : .SPUI menu -r 25 One Two Three Four Five 2399 ;******************************* 2400 CLS : PRINT "MENU TOO SHORT" : PRINT 2405 PRINT "ROWS (height) must be > 1" : PRINT 2409 PRINT ".SPUI menu -r 1 One Two Three Four Five" 2410 REG 127,0 : .SPUI menu -r 1 One Two Three Four Five 2500 ;******************************* 2510 REG 127,0 : .SPUI menu -t "Overflows" -r 5 -y 5 "Width" "Height" "Bottom" "Side" 2520 LET %m =% REG 127 2530 IF %m = 0 THEN GOTO 2000 2540 GO TO %m*100+2500 2599 ;******************************* 2600 CLS : PRINT "OVERFLOW WIDTH" : PRINT 2605 PRINT "Content (x+width) must be <31" : PRINT 2609 PRINT ".SPUI menu -x 25 -c 6 One Two Three Four Five" 2610 REG 127,0 : .SPUI menu -x 25 -c 6 One Two Three Four Five 2699 ;******************************* 2700 CLS : PRINT "OVERFLOW HEIGHT" : PRINT 2705 PRINT "Content (y+height) must be <23" : PRINT 2709 PRINT ".SPUI menu -y 18 -r 5 One Two Three Four Five" 2710 REG 127,0 : .SPUI menu -y 18 -r 5 One Two Three Four Five 2799 ;******************************* 2800 CLS : PRINT "OVERFLOW BOTTOM" : PRINT 2805 PRINT "Content overflows screen length" : PRINT 2809 PRINT ".SPUI menu -r 20 One Two Three Four Five" 2810 REG 127,0 : .SPUI menu -r 20 One Two Three Four Five 2899 ;******************************* 2900 CLS : PRINT "OVERFLOW SIDE" : PRINT 2905 PRINT "Content overflows screen width" : PRINT 2909 PRINT ".SPUI menu -x 20 One Two Three Four Five" 2910 REG 127,0 : .SPUI menu -x 20 One Two Three Four Five 2999 ;******************************* 3000 CLS 3010 PRINT "--------------------------------" 3020 PRINT "Stale Pixels User Interface Tool" 3030 PRINT "--------------------------------" 3040 PRINT 3050 PRINT " 1) SHOWCASE" 3060 PRINT " Correct examples of use. ;)" 3070 PRINT 3080 PRINT " 2) TESTS" 3090 PRINT " Incorrect examples of use. :(" 3100 PRINT 3110 PRINT " 3) HELP" 3120 PRINT " This page. XD" 3130 .SPUI BANNER -t "SPUI Help" 3160 PROC WaitKey(1) 3170 CLS : GO TO 10 3999 STOP 8000 DEFPROC WaitKey(m) 8005 IF m THEN PRINT #0;" press any key" 8010 IF INKEY$ <>"" THEN GO TO 8010 8020 IF INKEY$ ="" THEN GO TO 8020 8030 IF INKEY$ <>"" THEN GO TO 8030 8050 ENDPROC 9990 CLS 9991 PRINT "STOP" 9992 STOP 9998 REMOUNT : .TXT2BAS "spui-demo.txt" : LOAD "spui-demo.bas" 9999 REMOUNT : SAVE "spui-demo.bas" LINE 1 : .BAS2TXT "spui-demo.bas" : PRINT "saved!": STOP -------------------------------------------------------------------------------- /SPUI/docs/BUGS.txt: -------------------------------------------------------------------------------- 1 | SPUI - KNOWN BUGS 2 | 3 | * Total commandline length cannot be greater than 127char^ 4 | * It doesn't go "click" when you move the bar 5 | 6 | ^ This is by design, and is not really a bug - therefore are not likely to be 7 | fixed. -------------------------------------------------------------------------------- /SPUI/docs/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | SPUI - CHANGELOG 2 | 3 | VERSION DETAILS 4 | 0.4.2 FIX: Some debugging data remained from input rewrite, now removed 5 | (thanks to Stefan Byland for testing and finding this!) 6 | FIX: Updated changelog in the GDE file 7 | 0.4.1 NEW: Complete rewrite of input handler code to match drawing API 8 | FIX: Map cursor keys to match NextZXOS uses by default 9 | FIX: Map MD/SMS buttons to match NextZXOS uses by default 10 | (B = Fire1, C = Fire2) 11 | FIX: Improved key-repeat handler around joystick use 12 | 0.4.0 NEW: Complete rewrite of drawing code, now faster and smaller 13 | FIX: Better (read: correct) handling of IY register on exit 14 | 0.3.0 NEW: -I switch to read .INI style configs 15 | FIX: .gde bug reported by Remy Sharp 16 | FIX: Ability to select empty rows 17 | 0.2.2 FIX: Default handling, and updated .gde file 18 | Added TODO.txt to docs 19 | 0.2.1 Re-release of 0.2.0 with missing files added 20 | NEW: All docs moved to .GDE file 21 | 0.2.0 First release on Next/System 22 | BUG: Wrong value on overflows 23 | NEW: Added type BANNER 24 | NEW: Switch -D (timeout until *D*efault) 25 | NEW: Load preselected defaults from reg 0x7f 26 | 0.1.1 (internal release only) 27 | 0.1.0 First public release -------------------------------------------------------------------------------- /SPUI/docs/SPUI.gde: -------------------------------------------------------------------------------- 1 | @title Stale Pixels User Interface Manual 2 | @author D. 'Xalior' Rimron-Soutter 3 | @version 0.4.2 4 | @copyright Copyright (C)2020 Stale Pixels, some rights reserved. 5 | @date 2024-03-18 6 | @index INDEX 7 | @------------------------------------------------------------------------------- 8 | @node MAIN 9 | @prev INDEX 10 | @next USER 11 | @toc INDEX 12 | @{r}SPUI Manual 13 | 14 | @{c}@{h1}Stale Pixels User Interface Manual 15 | 16 | @{c}@{h2}Version 0.4.2 17 | @{c}@{h2}D. Rimron-Soutter 18 | 19 | @{h1}Overview 20 | 21 | Stale Pixels User Interface (aka, and hereafter referred to as, @{i}SPUI@{ui}) is a 22 | command line tool for building simple "ZX Spectrum Next" themed user interfaces. 23 | 24 | It is designed primarily as an in house tool for Stale Pixels, but has been 25 | shared to save others having to reinvent the same tooling for their own needs. 26 | 27 | SPUI is not intended to be a general purpose "startup menu", but more a tool 28 | to allow users to build their own menus and user interactions. 29 | 30 | @{" Using SPUI as a User " LINK USER} 31 | @{" Using SPUI as a Developer " LINK DEVELOPER} 32 | @{" Copyright " LINK COPYRIGHT} 33 | @{" Recent Changes " LINK CHANGELOG} 34 | @{" Acknowledgements " LINK THANKS} 35 | @------------------------------------------------------------------------------- 36 | @node INDEX 37 | @next THANKS 38 | @prev MAIN 39 | @{r}SPUI Manual 40 | 41 | @{c}@{h1}Stale Pixels User Interface Manual Comprehensive Index 42 | @{c}@{h2}Getting Started 43 | 44 | @{" Overview " LINK MAIN} What's SPUI (and what it is not) 45 | @{" User Guide " LINK USER} Interacting with SPUI 46 | @{" Developer Use " LINK DEVELOPER} Creating SPUI interactions 47 | 48 | 49 | @{c}@{h2}Widget Types 50 | 51 | @{" MENU " LINK type_MENU} Menu 52 | @{" BANNER " LINK type_BANNER} Banner 53 | 54 | 55 | @{c}@{h2}Command Line Switches 56 | 57 | @{" -C " LINK cmd_WIDTH_COL} @{b}C@{ub}olumn width 58 | @{" -D " LINK cmd_DELAY} Count@{b}d@{ub}own timer 59 | @{" -H " LINK cmd_HELP} Shortform @{b}H@{ub}elp 60 | @{" -I " LINK cmd_INI} Load options from @{b}I@{ub}NI file 61 | @{" -P " LINK cmd_PROMPT} @{b}P@{ub}rompt for countdown timer 62 | @{" -R " LINK cmd_HEIGHT_ROW} @{b}R@{ub}ow height 63 | @{" -T " LINK cmd_TITLE} Widget @{b}T@{ub}itle 64 | @{" -X " LINK cmd_X_ORIG_COL} Origin @{b}X@{ub} column 65 | @{" -Y " LINK cmd_Y_ORIG_ROW} Origin @{b}Y@{ub} row 66 | 67 | 68 | @{c}@{h2} Any Other Business 69 | 70 | @{" Copyright " LINK COPYRIGHT} Rights and permissions 71 | @{" Credits " LINK THANKS} Thanks and colophon 72 | @------------------------------------------------------------------------------- 73 | @node USER 74 | @prev MAIN 75 | @next DEVELOPER 76 | @toc INDEX 77 | @{r}SPUI Manual 78 | 79 | @{c}@{h1}Stale Pixels User Interface User Manual 80 | 81 | SPUI is used much like the default menu system of NextZXOS, and therefore can 82 | be driven with either the keyboard, via the cursor keys, or with a joystick. 83 | 84 | With the keyboard up and down cursor keys navigate the menu rows, and @{b}ENTER@{ub} 85 | confirms your selection. @{b}BREAK@{ub} acts as back, or cancel. 86 | 87 | When using the joystick the up and down actions take the place of the cursor 88 | keys, and the default fire button takes the place of enter. 89 | 90 | @{i}TODO:@{ui} add Fire2 as cancel/break options via joystick input. 91 | @------------------------------------------------------------------------------- 92 | @node DEVELOPER 93 | @prev USER 94 | @next dev_MAIN 95 | @toc INDEX 96 | @{r}SPUI Manual 97 | 98 | @{c}@{h1}Stale Pixels User Interface Developer Manual 99 | 100 | @{" Abstract " LINK dev_MAIN} What can you expect from SPUI? 101 | @{" Widget Types " LINK dev_TYPES} Who can SPUI help? 102 | @{" Planned Features " LINK dev_ROADMAP} Where SPUI is going? 103 | @{" Known Foibles " LINK dev_BUGS} Why is SPUI broken? 104 | @------------------------------------------------------------------------------- 105 | @node dev_MAIN 106 | @prev DEVELOPER 107 | @next dev_TYPES 108 | @toc INDEX 109 | @{r}SPUI Manual 110 | 111 | @{c}@{h1}What can you expect from SPUI? 112 | @{c}@{h2}(a.k.a. Our Motivation) 113 | 114 | The Sinclair ZX Spectrum has a long, and well established history. The 115 | industrial design of the original 48k Spectrum by Rick Dickinson is so iconic 116 | that you can find it reproduced in both accessories and fashion brands across 117 | the globe. It's even featured in Hollywood productions and Real Life tattoos! 118 | 119 | The design of the humble 128k machine is less steeped in glory, being so 120 | obviously "borrowed" from the QL, famous Sinclair flop... But this is where we 121 | at Stale Pixels take our inspiration. 122 | 123 | Not the case and keyboard, or any of Dick's striking industrial design, but 124 | the new features added to that machine's ROM. We begin at it's beginning, the 125 | startup menu, and the new features you could access from it. 126 | 127 | With that "source" in mind, hopefully you can already start to imagine the 128 | kind of widgets we hope to include in our User Interface (known as just plain 129 | "SPUI" to its friends, pronounced to rhyme with Huey, Dewey or Louie) and the 130 | look and feel we will be aiming for. 131 | @------------------------------------------------------------------------------- 132 | @node dev_TYPES 133 | @prev dev_MAIN 134 | @next type_MENU 135 | @toc INDEX 136 | @{r}SPUI Manual 137 | 138 | @{c}@{h1}Who can SPUI help? 139 | @{c}@{h2}(a.k.a. Our Widget List) 140 | 141 | @{" MENU " LINK type_MENU} Menu 142 | 143 | @{" BANNER " LINK type_BANNER} Banner 144 | @------------------------------------------------------------------------------- 145 | @node type_MENU 146 | @prev dev_TYPES 147 | @next type_BANNER 148 | @toc INDEX 149 | @{r}SPUI Manual 150 | 151 | @{c}@{h1}Widget Type: MENU 152 | @{c}@{h2}(The one when you turn the Spectrum Next on) 153 | 154 | @{h3}Abstract 155 | 156 | A simple menu designed to simulate the one found on the original "Toastrack" 157 | and used through-out the NextZXOS System and BASIC ROMs today. By presetting 158 | the user NextReg you can define the initial selection, and also automatically 159 | pick the default with an optional timeout. 160 | 161 | @{h3}Supported Command Line Switches 162 | 163 | @{" -C " LINK cmd_WIDTH_COL} @{b}C@{ub}olumn width 164 | @{" -D " LINK cmd_DELAY} Count@{b}d@{ub}own timer 165 | @{" -I " LINK cmd_INI} Load options from @{b}I@{ub}NI file 166 | @{" -P " LINK cmd_PROMPT} @{b}P@{ub}rompt for countdown timer 167 | @{" -R " LINK cmd_HEIGHT_ROW} @{b}R@{ub}ow height 168 | @{" -T " LINK cmd_TITLE} Widget @{b}T@{ub}itle 169 | @{" -X " LINK cmd_X_ORIG_COL} Origin @{b}X@{ub} column 170 | @{" -Y " LINK cmd_Y_ORIG_ROW} Origin @{b}Y@{ub} row 171 | 172 | @{h3}Usage Notes 173 | 174 | @{b}o@{ub} The width, plus column offset must not overflow the screen edges, otherwise 175 | this will generate out of bounds error. 176 | 177 | @{b}o@{ub} The height, plus row offset must not overflow the screen edges, otherwise 178 | this will generate out of bounds error. 179 | 180 | @{h3}Widget Specific Default Values 181 | 182 | @{b}T@{ub}itle SPUI 183 | @{b}C@{ub}olumn width 14 (padded by 2) 184 | Count@{b}d@{ub}own timer Has NO default - unset if not used 185 | @{b}R@{ub}ow height 4 186 | Origin @{b}X@{ub} column 9 187 | Origin @{b}Y@{ub} row 6 188 | @------------------------------------------------------------------------------- 189 | @node type_BANNER 190 | @prev type_MENU 191 | @next dev_ROADMAP 192 | @toc INDEX 193 | @{r}SPUI Manual 194 | 195 | @{c}@{h1}Widget Type: BANNER 196 | @{c}@{h2}(The one at the bottom of the Tape Loader) 197 | 198 | @{h3}Abstract 199 | 200 | A quick "branding bar" that is modelled on the one used in the original 201 | 128k "Tape Loader" screen. Can be positioned just about anywhere with CLI 202 | switches, including the very bottom row of the ULA standard draw area. 203 | 204 | @{h3}Supported Command Line Switches 205 | 206 | @{" -C " LINK cmd_WIDTH_COL} @{b}C@{ub}olumn width 207 | @{" -I " LINK cmd_INI} Load options from @{b}I@{ub}NI file 208 | @{" -T " LINK cmd_TITLE} Widget @{b}T@{ub}itle 209 | @{" -X " LINK cmd_X_ORIG_COL} Origin @{b}X@{ub} column 210 | @{" -Y " LINK cmd_Y_ORIG_ROW} Origin @{b}Y@{ub} row 211 | 212 | @{h3}Usage Notes 213 | 214 | @{b}o@{ub} The width, plus column offset must not overflow the screen edges, otherwise 215 | this will generate out of bounds error. 216 | 217 | @{h3}Widget Specific Defaults 218 | 219 | @{b}T@{ub}itle SPUI 220 | @{b}C@{ub}olumn width 30 (padded by 2) 221 | Origin @{b}X@{ub} column 1 222 | Origin @{b}Y@{ub} row 22 223 | @------------------------------------------------------------------------------- 224 | @node dev_ROADMAP 225 | @prev dev_TYPES 226 | @next dev_BUGS 227 | @toc INDEX 228 | @{r}SPUI Manual 229 | 230 | @{c}@{h1}Where SPUI is going? 231 | @{c}@{h2}(a.k.a. Our Roadmap) 232 | 233 | @{h3}Our "ToDo" List 234 | 235 | @{b}o@{ub} Multi-Selection Widgets 236 | @{b}o@{ub} "Alert" dialogs 237 | @{b}o@{ub} "Confirm" dialogs 238 | @{b}o@{ub} Load a Dialog config from a file 239 | 240 | @{h3}Our "TaDa" List 241 | 242 | @{b}o@{ub} Add "Default Selection" loaded from NextReg 0x7F 243 | @{b}o@{ub} Add "Timeout" until default option picked 244 | @------------------------------------------------------------------------------- 245 | @node dev_BUGS 246 | @prev dev_ROADMAP 247 | @next cmd_INDEX 248 | @toc INDEX 249 | @{r}SPUI Manual 250 | 251 | @{c}@{h1}Why is SPUI broken? 252 | @{c}@{h2}(a.k.a. Our Bestest Bugs) 253 | 254 | @{h3}Our "ToDo" List 255 | 256 | @{b}o@{ub} Better MD/Joystick handling 257 | @{b}o@{ub} Read config from file 258 | 259 | @{h3}Our "NoTa" List 260 | 261 | @{b}o@{ub} Handle command-lines >127char long 262 | 263 | @{h3}Our "TaDa" List 264 | 265 | @{b}o@{ub} No Docs -- full .gde now in System/Next > Version 1.3.2 266 | @{b}o@{ub} Work with .$ -- fixed in System/Next > Version 1.3.2 267 | @------------------------------------------------------------------------------- 268 | @node cmd_INDEX 269 | @prev dev_BUGS 270 | @next cmd_WIDTH_COL 271 | @toc INDEX 272 | @{r}SPUI Manual 273 | 274 | @{c}@{h1}Command Line Switch Index 275 | 276 | @{" -C " LINK cmd_WIDTH_COL} @{b}C@{ub}olumn width 277 | @{" -D " LINK cmd_DELAY} Count@{b}d@{ub}own timer 278 | @{" -H " LINK cmd_HELP} Shortform @{b}H@{ub}elp 279 | @{" -I " LINK cmd_INI} Load options from @{b}I@{ub}NI file 280 | @{" -P " LINK cmd_PROMPT} @{b}P@{ub}rompt for countdown timer 281 | @{" -R " LINK cmd_HEIGHT_ROW} @{b}R@{ub}ow height 282 | @{" -T " LINK cmd_TITLE} Widget @{b}T@{ub}itle 283 | @{" -X " LINK cmd_X_ORIG_COL} Origin @{b}X@{ub} column 284 | @{" -Y " LINK cmd_Y_ORIG_ROW} Origin @{b}Y@{ub} row 285 | @------------------------------------------------------------------------------- 286 | @node cmd_WIDTH_COL 287 | @prev cmd_INDEX 288 | @next cmd_DELAY 289 | @toc INDEX 290 | @{r}SPUI Manual 291 | 292 | @{c}@{h1}Command Line Switches C 293 | 294 | @{" -C " LINK cmd_WIDTH_COL} @{b}C@{ub}olumn width 295 | 296 | @{h2}Purpose 297 | 298 | Allows you to override the default column width, the default width for each 299 | widget type varies. You should ensure sure you see the widgets "Default Values" 300 | section for specific values. 301 | 302 | Most widgets have a minimum width, and you cannot make widget smaller than 303 | that. All widgets are not allowed to exceed the drawing space of the screen. 304 | 305 | @{h3}WARNING 306 | 307 | The behaviour of this switch depends upon other, related, switches 308 | Ensure sure you see each widgets "Usage Notes" section for interaction details 309 | 310 | @{h4}Supported Widgets 311 | 312 | @{" MENU " LINK type_MENU} @{" BANNER " LINK type_BANNER} 313 | @------------------------------------------------------------------------------- 314 | @node cmd_DELAY 315 | @prev cmd_WIDTH_COL 316 | @next cmd_HELP 317 | @toc INDEX 318 | @{r}SPUI Manual 319 | 320 | @{c}@{h1}Command Line Switches D 321 | 322 | @{" -D " LINK cmd_DELAY} Count@{b}d@{ub}own timer 323 | 324 | @{h2}Purpose 325 | 326 | Allows you to specify delay before the preloaded default value for the 327 | widget is selected automatically. You should use NextReg 0x7F (128) to load the 328 | widget with the initial values. For details upon how the value in this register 329 | affects the widget you should see the widgets "User Defined Defaults" section 330 | for the widget in question. 331 | 332 | @{h4}Supported Widgets 333 | 334 | @{" MENU " LINK type_MENU} 335 | @------------------------------------------------------------------------------- 336 | @node cmd_HELP 337 | @prev cmd_DELAY 338 | @next cmd_INI 339 | @toc INDEX 340 | @{r}SPUI Manual 341 | 342 | @{c}@{h1}Command Line Switches H 343 | 344 | @{" -H " LINK cmd_HELP} Shortform @{b}H@{ub}elp 345 | 346 | @{h2}Purpose 347 | 348 | Display the inbuilt shorthand help screen. It will mostly refer you back to 349 | this guide file. 350 | 351 | SPUI is a complex application, and to include all of this help from the 352 | the guide internally would make it too big, and harder to maintain, this guide 353 | file is, and will always be, the definitive documentation for SPUI's options. 354 | 355 | @{h4}Supported Widgets 356 | 357 | @{" MENU " LINK type_MENU} @{" BANNER " LINK type_BANNER} 358 | @------------------------------------------------------------------------------- 359 | @node cmd_INI 360 | @prev cmd_HELP 361 | @next cmd_DELAY 362 | @toc INI 363 | @{r}SPUI Manual 364 | 365 | @{c}@{h1}Command Line Switches I 366 | 367 | @{" -I " LINK cmd_INI} Load options from @{b}I@{ub}NI file 368 | 369 | @{h2}Purpose 370 | 371 | Load config options from INI file. 372 | 373 | example: 374 | .SPUI MENU -I my_lovely_horse.ini 375 | 376 | After you have picked the widget type you can optionally load the config 377 | options from an INI file. While the options in the INI file are not required 378 | ALL of the SPUI rows (e.g. menu options) are required. 379 | 380 | @{h4}Supported Widgets 381 | 382 | @{" MENU " LINK type_MENU} @{" BANNER " LINK type_BANNER} 383 | @------------------------------------------------------------------------------- 384 | @node cmd_PROMPT 385 | @prev cmd_HELP 386 | @next cmd_HEIGHT_ROW 387 | @toc INDEX 388 | @{r}SPUI Manual 389 | 390 | @{c}@{h1}Command Line Switches P 391 | 392 | @{" -P " LINK cmd_PROMPT} @{b}P@{ub}rompt for countdown timer 393 | 394 | @{h2}Purpose 395 | 396 | Change the default prompt when displaying the countdown timer when auto- 397 | matically selecting the preselected default option. 398 | 399 | The default message is "Time Left: " but you can change this to any text you 400 | want. Picking a message that is too long for your widget will truncate the 401 | message to ensure that the "00s" remains visible. Even if you pick a timeout 402 | less than 10 seconds the number will sill be padded to two significant digits. 403 | 404 | The maximum timeout you can pick is 99 seconds. 405 | 406 | 407 | @{h4}Supported Widgets 408 | 409 | @{" MENU " LINK type_MENU} 410 | @------------------------------------------------------------------------------- 411 | @node cmd_HEIGHT_ROW 412 | @prev cmd_PROMPT 413 | @next cmd_TITLE 414 | @toc INDEX 415 | @{r}SPUI Manual 416 | 417 | @{c}@{h1}Command Line Switches R 418 | 419 | @{" -R " LINK cmd_HEIGHT_ROW} @{b}R@{ub}ow height 420 | 421 | @{h2}Purpose 422 | 423 | Allows you to override the default column height, the default height for 424 | each widget type varies. You should ensure sure you see the widgets "Default 425 | Values" section for specific values. 426 | 427 | Most widgets have a minimum height, and you cannot make widget smaller than 428 | that. All widgets are not allowed to exceed the drawing space of the screen. 429 | 430 | @{h3}WARNING 431 | 432 | The behaviour of this switch depends upon other, related, switches 433 | Ensure sure you see each widgets "Usage Notes" section for interaction details 434 | 435 | @{h4}Supported Widgets 436 | 437 | @{" MENU " LINK type_MENU} 438 | @------------------------------------------------------------------------------- 439 | @node cmd_TITLE 440 | @prev cmd_HEIGHT_ROW 441 | @next cmd_X_ORIG_COL 442 | @toc INDEX 443 | @{r}SPUI Manual 444 | 445 | @{c}@{h1}Command Line Switches T 446 | 447 | @{" -T " LINK cmd_TITLE} Widget @{b}T@{ub}itle 448 | 449 | @{h2}Purpose 450 | 451 | Change the default text when displaying the widget. Where this exactly is 452 | depends upon the widget in question. You should ensure sure you see the widgets 453 | "Default Values" section for specific details. 454 | 455 | The default message is "SPUI" but you can change this to any text you 456 | want. Picking a message that is too long for your widget will truncate the 457 | message to ensure widget remains legible. Even if you pick a message that is 458 | too long it will be truncated, if you pick one that is too short it will be 459 | padded with empty space. 460 | 461 | @{h4}Supported Widgets 462 | 463 | @{" MENU " LINK type_MENU} @{" BANNER " LINK type_BANNER} 464 | @------------------------------------------------------------------------------- 465 | @node cmd_X_ORIG_COL 466 | @prev cmd_TITLE 467 | @next cmd_Y_ORIG_ROW 468 | @toc INDEX 469 | @{r}SPUI Manual 470 | 471 | @{c}@{h1}Command Line Switches X 472 | 473 | @{" -X " LINK cmd_X_ORIG_COL} Origin @{b}X@{ub} column 474 | 475 | @{h2}Purpose 476 | 477 | Allows you to override the default left hand column, the default column for 478 | each widget type varies. You should ensure sure you see the widgets "Default 479 | Values" section for specific values. 480 | 481 | @{h3}WARNING 482 | 483 | The behaviour of this switch depends upon other, related, switches 484 | Ensure sure you see the additional "Usage Notes" section for interaction details 485 | 486 | @{h4}Supported Widgets 487 | 488 | @{" MENU " LINK type_MENU} @{" BANNER " LINK type_BANNER} 489 | @------------------------------------------------------------------------------- 490 | @node cmd_Y_ORIG_ROW 491 | @prev cmd_X_ORIG_COL 492 | @next COPYRIGHT 493 | @toc INDEX 494 | @{r}SPUI Manual 495 | 496 | @{c}@{h1}Command Line Switches Y 497 | 498 | @{" -Y " LINK cmd_Y_ORIG_ROW} Origin @{b}Y@{ub} row 499 | 500 | @{h2}Purpose 501 | 502 | Allows you to override the default top row, the default starting row for 503 | each widget type varies. You should ensure sure you see the widgets "Default 504 | Values" section for specific values. 505 | 506 | @{h4}WARNING 507 | The behaviour of this switch depends upon other, related, switches 508 | Ensure sure you see the additional "Usage Notes" section for interaction details 509 | 510 | @{h4}Supported Widgets 511 | 512 | @{" MENU " LINK type_MENU} 513 | 514 | @------------------------------------------------------------------------------- 515 | @node COPYRIGHT 516 | @prev cmd_Y_ORIG_ROW 517 | @next CHANGELOG 518 | @toc INDEX 519 | @{r}SPUI Manual 520 | 521 | @{c}@{h1}Stale Pixels User Interface Copyright 522 | 523 | The software SPUI and all associated documentation remain @{b}@{i}Copyright @(2020 Stale 524 | Pixels@{ui}@{ub}, some rights reserved. 525 | 526 | Non-commercial distribution of SPUI and related documents is hereby given if 527 | and only if the software and copyright are unchanged and the copyright message 528 | is left intact. 529 | 530 | Commercial distribution of SPUI and related documents is hereby given if 531 | and only written permission is prior sought 532 | 533 | You may @{b}not@{ub}, without written permission, commercially exploit this tool, 534 | manual or related software. 535 | 536 | @------------------------------------------------------------------------------- 537 | @node CHANGELOG 538 | @prev COPYRIGHT 539 | @next THANKS 540 | @toc MAIN 541 | @{r}SPUI Manual 542 | 543 | @{c}@{h1}Stale Pixels User Interface Changelog 544 | 545 | ------------+----------------------------------------------------------- 546 | @{b}VERSION@{ub} | @{b}DETAILS@{ub} 547 | ============+=========================================================== 548 | @{i}0.4.2@{ui} | @{b}FIX:@{ub} Some debugging data remained from input rewrite, 549 | | now removed (Thanks to Stefan Byland for testing & 550 | | finding this) 551 | | @{b}FIX:@{ub} Updated changelog in the GDE file 552 | @{i}0.4.1@{ui} | @{b}NEW:@{ub} Complete rewrite of input handler to match drawing API 553 | | @{b}FIX:@{ub} Map cursor keys to match NextZXOS uses by default 554 | | @{b}FIX:@{ub} Map MD/SMS buttons to match NextZXOS uses by default 555 | | (@{b}B@{ub} = Fire1, @{b}C@{ub} = Fire2) 556 | @{i}0.4.0@{ui} | @{b}NEW:@{ub} Complete rewrite of drawing API, now faster & smaller 557 | | @{b}FIX:@{ub} Better (read: correct) handling of IY register on exit 558 | @{i}0.3.0ALPHA2@{ui}| @{b}NEW:@{ub} Updated docs for -I 559 | | @{b}FIX:@{ub} Ability to select empty rows 560 | @{i}0.3.0ALPHA@{ui} | @{b}NEW:@{ub} Switch -I (Read @{b}I@{ub}NI) 561 | @{i}0.2.2@{ui} | @{b}FIX:@{ub} Default handling, and updated .gde file 562 | | @{b}NEW:@{ub} Added TODO.txt to docs 563 | @{i}0.2.1@{ui} | Re-release of 0.2.0 with missing files added 564 | | @{b}NEW:@{ub} All docs moved to .GDE file 565 | @{i}0.2.0@{ui} | First release on Next/System 566 | | @{b}FIX:@{ub} Wrong value on overflows 567 | | @{b}NEW:@{ub} Load "pre-selected" defaults from reg 0x7f 568 | | @{b}NEW:@{ub} Switch -D (timeout until @{b}D@{ub}efault) 569 | | @{b}NEW:@{ub} Switch -P (@{b}P@{ub}ompt for time counter) 570 | | @{b}NEW:@{ub} Added type BANNER 571 | ------------+----------------------------------------------------------- 572 | @{i}0.1.1@{ui} | (internal release only) 573 | ------------+----------------------------------------------------------- 574 | @{i}0.1.0@{ui} | First public release 575 | ------------+----------------------------------------------------------- 576 | @------------------------------------------------------------------------------- 577 | @node THANKS 578 | @next MAIN 579 | @prev INDEX 580 | @toc MAIN 581 | @{r}SPUI Manual 582 | 583 | @{c}@{h1}Acknowledgements 584 | 585 | @{c}@{h2}Many **BIG** Thanks go to the following folks... 586 | 587 | @{c}@{h3}Making Things 588 | 589 | @{c}#TeamSpecNext who made the spectrum next, d'uh! 590 | @{c}z88dk nanos gigantum humeris insidentes, gratias tibi! 591 | @{c}Matt Davies Author of the .guide reader command! 592 | 593 | 594 | @{c}@{h3}Feature Suggestions 595 | 596 | @{c}Old Man Saph Matto Marco Lucky SevenFFF 597 | 598 | 599 | @{c}@{h3}Beta-Testers 600 | 601 | @{c}Phoebus Dokos @ Team SpecNext Marco Varesio @ Marco's Retrobits 602 | 603 | -------------------------------------------------------------------------------- /SPUI/docs/TODO.txt: -------------------------------------------------------------------------------- 1 | SPUI - TODO 2 | 3 | * Override .INI options on CLI (due: V0.5.0) 4 | * Clock options on CLI (due: oneday...) 5 | -------------------------------------------------------------------------------- /SPUI/docs/license.txt: -------------------------------------------------------------------------------- 1 | Stale Pixels User Interface Copyright 2 | 3 | The software SPUI and all associated documentation remain Copyright @2020 Stale 4 | Pixels, some rights reserved. 5 | 6 | Non-commercial distribution of SPUI and related documents is hereby given if 7 | and only if the software and copyright are unchanged and the copyright message 8 | is left intact. 9 | 10 | Commercial distribution of SPUI and related documents is hereby given if 11 | and only written permission is prior sought 12 | 13 | You may not, without written permission, commercially exploit SPUI, its manual 14 | or related software. 15 | -------------------------------------------------------------------------------- /SPUI/dot/SPUI: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StalePixels/SPUI/429f83aa733f8d16662eccf1d17290e0d3a43317/SPUI/dot/SPUI -------------------------------------------------------------------------------- /SPUI/dot/SPUI_COMM: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StalePixels/SPUI/429f83aa733f8d16662eccf1d17290e0d3a43317/SPUI/dot/SPUI_COMM -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | 0.4.2 2 | --------------------------------------------------------------------------------