123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- ! Trinitystat.h
- ! This library gives the ability to switch between the normal statusline and a
- ! Trinity style statusline. It works for both the Z-Machine and Glulx, and
- ! should work on all three compilers. (G.N.'s Z-Machine compiler, A.P.'s Glulx
- ! compiler, and A.P.'s biplatform compiler.) It has only been tested on the
- ! biplatform compiler, though.
- ! You must, of course, Replace DrawStatusLine; for this to work.
- ! An object is supplied, statline, with a property trinity. If trinity is true,
- ! then you will have a Trinity-style line. Guess what happens if trinity is
- ! false?
- ! If you have defined Constant DEBUG;, then you get an extra debugging verb.
- ! Typing "trinity" will switch statusline styles.
- ! Copyright (C) 2000 by Jonathan Rosebaugh. Released under GPL version 2.
- ! see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
- ! This is necessary to compile with Graham's current Inform 6.21 compiler.
- #ifndef WORDSIZE;
- Constant TARGET_ZCODE;
- Constant WORDSIZE 2;
- #endif;
- ! Debugging verb
- #ifdef DEBUG;
- Object statline with trinity 0;
- Verb meta "trinity"
- * -> Trinity;
- [TrinitySub;
- statline.trinity = (~~(statline.trinity));
- ];
- #endif;
- ! Z-Code version
- #ifdef TARGET_ZCODE;
- Array printed_text table 64;
- #IFV5;
- [ DrawStatusLine width posa posb i j;
- if (statline.trinity)
- {
- i = 0->33; if (i==0) i=80;
- font off;
- @split_window 1; @buffer_mode 0; @set_window 1;
- style reverse; @set_cursor 1 1; spaces(i);
- printed_text-->0 = 64;
- @output_stream 3 printed_text;
- if (location == thedark) print (name) location;
- else
- { FindVisibilityLevels();
- if (visibility_ceiling == location)
- print (name) location;
- else print (The) visibility_ceiling;
- }
- @output_stream -3;
- j=(i-(printed_text-->0))/2;
- @set_cursor 1 j; print (name) location; spaces(j-1);
- style roman;
- @buffer_mode 1; @set_window 0; font on;
- }
- else { @split_window 1; @set_window 1; @set_cursor 1 1; style reverse;
- width = 0->33; posa = width-26; posb = width-13;
- spaces width;
- @set_cursor 1 2;
- if (location == thedark) print (name) location;
- else
- { FindVisibilityLevels();
- if (visibility_ceiling == location)
- print (name) location;
- else print (The) visibility_ceiling;
- }
- if ((0->1)&2 == 0)
- { if (width > 76)
- { @set_cursor 1 posa; print (string) SCORE__TX, sline1;
- @set_cursor 1 posb; print (string) MOVES__TX, sline2;
- }
- if (width > 63 && width <= 76)
- { @set_cursor 1 posb; print sline1, "/", sline2;
- }
- }
- else
- { @set_cursor 1 posa;
- print (string) TIME__TX;
- LanguageTimeOfDay(sline1, sline2);
- }
- @set_cursor 1 1; style roman; @set_window 0;
- }
- ];
- #ENDIF;
- #endif; ! TARGET_ZCODE
- ! Glulx version
- #ifdef TARGET_GLULX;
- Array bluelalablankage-->1;
- [ DrawStatusLine width height posa posb centerarea;
- ! If we have no status window, we must not try to redraw it.
- if (gg_statuswin == 0)
- return;
- ! If there is no player location, we shouldn't try either.
- if (location == nothing || parent(player) == nothing)
- return;
- glk($002F, gg_statuswin); ! set_window
- StatusLineHeight(gg_statuswin_size);
- glk($0025, gg_statuswin, gg_arguments, gg_arguments+4);
- ! window_get_size
- width = gg_arguments-->0;
- height = gg_arguments-->1;
- posa = width-26; posb = width-13;
- glk($002A, gg_statuswin); ! window_clear
- if (statline.trinity)
- {
- if (location == thedark) {
- centerarea = (width/2) - (PrintAnyToArray(bluelalablankage,0, location)/2);
- }
- else {
- FindVisibilityLevels();
- if (visibility_ceiling == location)
- centerarea = (width/2) - ((PrintAnyToArray(bluelalablankage,0,
- location)) / 2);
- else
- centerarea = (width/2) - (PrintAnyToArray(bluelalablankage,0,
- visibility_ceiling)/2);
- }
- glk_window_move_cursor( gg_statuswin, centerarea, 0);
- if (visibility_ceiling == location)
- print (name) location;
- else
- print (The) visibility_ceiling;
- }
- else {
- glk($002B, gg_statuswin, 1, 0); ! window_move_cursor
- if (location == thedark) {
- print (name) location;
- }
- else {
- FindVisibilityLevels();
- if (visibility_ceiling == location)
- print (name) location;
- else
- print (The) visibility_ceiling;
- }
- if (width > 66) {
- glk($002B, gg_statuswin, posa-1, 0); ! window_move_cursor
- print (string) SCORE__TX, sline1;
- glk($002B, gg_statuswin, posb-1, 0); ! window_move_cursor
- print (string) MOVES__TX, sline2;
- }
- if (width > 53 && width <= 66) {
- glk($002B, gg_statuswin, posb-1, 0); ! window_move_cursor
- print sline1, "/", sline2;
- }
- }
- glk($002F, gg_mainwin); ! set_window
- ];
- #endif; ! TARGET_GLULX
|