STATUS LINE in ZIL/ZILF

After re-watching my video on digging around VERSION and STATUS-LINE a couple of things stood out.

One thing in particular, and again i’m focusing here on XZIP (Z5), is that whilst you can remove the VERSION output by putting the “;” at the start of V-VERSION you can’t do the same for INIT-STATUS-LINE … so i’m a bit lost as to what exactly that does? The obvious answer is “initialise the status line” except it doesn’t because whether or not you put “;” before INIT-STATUS-LINE appears to be irrelevant if UPDATE-STATUS-LINE is still active in the parser.zil file.

See below…

In fact you can hash out this line using “;” and then that will remove the status line, even if INIT-STATUS-LINE still runs at the start.

image

Hope this is making sense? :open_mouth:

I’m just trying to get my head around it so i’m accurate in my video.

Thanks!

Adam

1 Like

If you look at the routine for these (all versions except ZIP, that is a special case where the statusline is handled by the terp).

            <ROUTINE INIT-STATUS-LINE ()
                <SPLIT 1>
                <CLEAR 1>>

            <ROUTINE UPDATE-STATUS-LINE ("AUX" WIDTH)
                <SCREEN 1>
                <HLIGHT ,H-INVERSE>
                <FAKE-ERASE>
                <TELL !\ >
                <COND (,HERE-LIT <TELL D ,HERE>)
                      (ELSE <TELL %,DARKNESS-STATUS-TEXT>)>
                <SET WIDTH <LOWCORE SCRH>>
                <CURSET 1 <- .WIDTH 22>>
                <TELL "Score: ">
                <PRINTN ,SCORE>
                <CURSET 1 <- .WIDTH 10>>
                <TELL "Moves: ">
                <PRINTN ,MOVES>
                <SCREEN 0>
                <HLIGHT ,H-NORMAL>>

You see that INIT-STATUS-LINE just splits the screen, the actual printing inverse in the upper screen is done by UPDATE-STATUS-LINE.

This means that if you remove the call to INIT-STATUS-LINE the screen isn’t split in two and the UPDATE-STATUS-LINE do the inverse printing in SCREEN 0 (the same where the game is played). You can notice this as a small flicker in the statusline if type so many lines that the screen scrolls.

If you want to remove the statusline altogether you will need to remove the call to INIT-STATUS-LINE (otherwise the game will always have a blank top row) and stop the call to or rewrite the routine UPDATE-STATUS-LINE (if you want another appearance of it).

3 Likes

Thanks! I didn’t think to dig into the ROUTINE statement which is what I should have done! :slight_smile:

Excellent, thanks!

I have what I need now to do the video (short as it will be!)

Thanks mate :+1:

Adam