MAINLOOP:

CALL startup
REPEAT "Mainloop"
    CALL Scanna opkommando
    CASE changemenu
	WHEN menu = batch
	    CALL batch loop
	WHEN menu = setup
	    CALL setup loop
	WHEN menu = interactiv
	    CALL interactiv loop
	WHEN meny = edit
	    CALL editor
    END changemenu
END "Mainloop" WHEN exit program


STARTUP:

CALL l{gg ut main-bild
CALL initiate editor
CALL initiate timer
CALL initiate setup
CALL initiate log
CALL initiate syntaxcheck
???????? CALL initiate variable names
CALL initiate interaktiv
CALL initiate batch
CALL initiate kommunikation
CALL initiate keyboard


INTERAKTIV LOOP:

REPEAT "Interaktiv loop"
    Scanna kommunikationen (inkl. utskrift och loggning)
    CALL Scanna opkommando
    S{nd en rad WHEN send mode
END "Interaktiv loop" WHEN annan meny OR exit program

!!
BATCH-LOOP:

REPEAT "Batch-loop"
    CALL Scanna opkommando
    CASE s{ndning
	WHEN s{ndning aktiverad
	    Uppdatering av klocka
	    Scanna kommunikationen (inkl. utskrift och loggning)
	    CALL S{nd en rad WHEN timeout OR tillr{ckligt med svar	
	    stoppa s{ndning WHEN testtiden slut
    END s{ndning
END "Batch-loop" WHEN annan meny OR exit program


SETUP-LOOP:

l{gg ut setup-bild
REPEAT "Setup-loop"
    Scanna opkommando
END "Setup-loop" WHEN annan meny OR exit program


EDIT:

REPEAT edit WHILE meny = edit
    REPEAT char
	getchar
    END char WHEN tecken finns
    CASE tkn
	WHEN tkn = funktionstangent
	    CALL packa upp operat|rsinmatning
	    CASE param
		WHEN parametrar kr{vs
		    REPEAT par
			CALL scanna opkommando
		    END par WHEN parametern ifylld
		    rensa kommandoraden
		    positionera tillbaka cursor
	    END param
	WHEN tkn = backspace
	    CALL backspace
	WHEN tkn = CR
	    st{ll cursor f|rst p} n{sta rad
	WHEN tkn = TAB
	    st{ll cursor p} n{sta tab-pos
	WHEN printbart tecken
	    eka tecknet
	    l{gg tecknet i edit-buffert
	OTHERWISE
	    kasta tecknet
    END tkn
END edit
!!
SCANNA OPKOMMANDO:

REPEAT key WHEN tecken finns AND NOT komplett kommando
    CALL getchar
    CASE tkn
	WHEN tkn = funktionstangent OR tkn = CR
	    CALL packa upp operat|rsinmatning
	    nollst{ll buffert och kommandorad WHEN inmatning korrekt
	WHEN tkn = escape
	    nollst{ll teckenbuffert och kommandorad
	WHEN tkn = backspace
	    ta bort ett tecken i buffert och p} sk{rm
	WHEN printbart tecken AND plats finns i buffern
	    eka tecknet
	    l{gg tecknet sist i tecken-buffert
	OTHERWISE
	    kasta tecknet
    END tkn
END key


GETCHAR:	returnerar ett tecken eller funktionstangent

CASE keypress
    WHEN keypressed
	CASE mode
	    WHEN ftang-mode
		returnera funktionstangenten
	    OTHERWISE
		CASE null
		    WHEN tkn = null
			aktivera ftang-mode
		    OTHERWISE
			returnera tecknet
		END null
	END mode
    OTHERWISE
	returnera "inget tecken"
END keypress
!!
PACKA UPP OPERAT\RSINMATNING: (tecken fr}n keyboard)

CASE f-tang
    WHEN funktionstangent
	s{tt kommando till funktionstangents motsvarighet
    OTHERWISE
	REPEAT analysera
	    plocka ut ett element ur teckenbuffert
	    CASE inmatningstyp
		WHEN elementet {r parameter
		    l{gg elementet i parameterarean
		OTHERWISE (kommando)
		    CASE kommando
			WHEN element = giltigt kommando
			    s{tt kommando till element
			    nollst{ll parameterindex
			OTHERWISE
			    returnera felkod
			    EXIT packa upp operat|rsinmatning
		    END kommando
		    s{tt upp att n{sta element i teckenbuffern {r parameter
	    END inmatningstyp
	END analysera WHEN teckenbuffert tom
END f-tang
CASE antparm
    WHEN antal parametrar {r > max
	returnera felkod
	EXIT packa upp operat|rsinmatning
END antparm
CALL perform_operator_command
!!
PERFORM_OPERATOR_COMMAND

CASE kommando
    WHEN kommando = x
	CALL x
    .
    .
    .
    .


END kommando

x kan vara f|ljande:

cf_setup, cf_batch, cf_intact, cf_exit, cf_main, cf_return 

cf_inface, c_gpib, f_gpib, c_rs232, f_rs232, cf_timout
cf_battim, cf_print, cf_fillog, cf_lognam, c_logtyp, f_logtyp

f_baud, f_parity, f_datbit, f_stpbit

f_gpibadr

f_logtyp_s, f_logtyp_ar, f_logtyp_sr, f_logtyp_ur, f_logtyp_e,
f_logtyp_er 

cf_batnam, cf_start, cf_wait, cf_go, cf_step, cf_stop

f_prevline, f_nextline

cf_edit, cf_sndone, cf_sndbuf, cf_send, cf_stop

f_cursup, f_cursdown, f_cursright, f_cursleft, f_home, f_end,
f_insert, f_del

cf_getbuf, cf_savbuf, cf_dellin, cf_undel

c_  : kommandot kan bara ges p} kommandorad
f_  : kommandot kan bara ges med funktionstangent
cf_ : kommandot kan ges b}de p} b}da s{tt
!!
LOGGNING:


byt sida WHEN sidbyte
skriv en rad p} loggen WHEN logtypen vald
addera ev. till statistik-ackumulatorer
skriv ut statistik WHEN loggen klar

END loggning



SCAN COMMUNICATION

REPEAT scan WHEN tecken finns AND NOT komplett message
    CALL GetCommChar
    CASE error
	WHEN error returned from GetCommChar
	    print an error message on the logdevices
    END error
    CASE tkn
	WHEN tkn = CR OR bufferten full
	    CALL unpack_message   (* packa upp, analysera och logga message *)
	    nollst{ll buffert
	WHEN printbart tecken
	    l{gg tecknet i buffert
	OTHERWISE
	    l{gg ett fr}getecken i bufferten
    END tkn
END scan


