PACKET setup DEFINES setup : (* 02.03.86, M.Staubermann *) LET separator = "|" , old option mark = " " , (* ""16"" , *) choice mark = ""15"" , end mark = ""14"" , left = ""8"" , right = ""2"" , bottom = ""6""21""0"" , clr line = ""13""5"" , home = ""1"" ; PROC selektor (TEXT CONST options, INT VAR option number,BOOL CONST warten) : TEXT VAR zeichen ; INT VAR i , last separator pos , new separator pos := 0 , old option := option number , max options := 0 ; REP new separator pos := pos (options, separator, new separator pos +1) ; max options INCR 1 UNTIL new separator pos = 0 PER ; out (""13"") ; REP i := 0 ; last separator pos := 0 ; REP i INCR 1 ; new separator pos := pos (options, separator, last separator pos + 1) ; IF new separator pos = 0 THEN new separator pos := LENGTH options + 1 FI ; IF i = option number THEN out (choice mark) ELIF i = old option THEN out (old option mark) ELSE out (end mark) FI ; out subtext (options, last separator pos + 1, new separator pos - 1) ; out (end mark) ; last separator pos := new separator pos UNTIL last separator pos = LENGTH options + 1 PER ; out (""13"") ; IF warten THEN inchar (zeichen) ; IF zeichen = ""27"" THEN option number := old option ELIF zeichen = left AND option number = 1 THEN option number := max options ELIF zeichen = left THEN option number DECR 1 ELIF zeichen = right AND option number = max options THEN option number := 1 ELIF zeichen = right THEN option number INCR 1 FI ELSE zeichen := ""13"" FI UNTIL zeichen = ""13"" OR zeichen = ""27"" PER ENDPROC selektor ; LET std datenbits = 4 , (* 8 *) std stopbits = 1 , (* 1.0 *) std flowmode = 1 , (* xon/xoff *) std parity = 1 , (* no parity *) std fixed = 4 , (* RTS ON, DTR ON *) setup text = "Ende|Kanal|Baudrate|Datenbits|Stopbits|Parity|Flußkontrolle", ende text = "Ändern|Abbruch" , kanal text = "2|3" , datenbits text= "5|6|7|8" , stopbits text = "1.0|1.5|2.0" , parity text = "no|even|odd" , fixed text = "DTR OFF/RTS OFF|DTR OFF/RTS ON|DTR ON/RTS OFF|DTR ON/RTS ON" , flowmode text = "xon/xoff|dtr|rts/cts|dtr/rts/cts|fixed" ; INT VAR old session := 0 ; ROW 2 INT VAR datenbits, stopbits, parity, flowmode , fixed ; ROW 2 REAL VAR baudrates ; PROC init params : datenbits := ROW 2 INT:(std datenbits , std datenbits) ; stopbits := ROW 2 INT:(std stopbits , std stopbits) ; parity := ROW 2 INT:(std parity , std parity) ; flowmode := ROW 2 INT:(std flowmode , std flowmode) ; fixed := ROW 2 INT:(std fixed, std fixed) ; baudrates := ROW 2REAL:(baudrate (channelb), baudrate (channela)) ; ENDPROC init params ; PROC setup : INT VAR kanal := aktueller kanal , setup choice := 1 ; BOOL VAR x dtr, x rts, x auto dtr, x cts ; page ; init setup (kanal, setup choice) ; select setup choice ; cursor (1, 19) ; setup choice := 2 ; selektor (ende text, setup choice, TRUE) ; out (bottom) ; IF setup choice = 1 THEN kanal := 1 ; x flowmode ; setup (kanal bool, x parity, x stopbits, x datenbits, x dtr, x rts, x auto dtr, x cts) ; baudrate (kanal bool, baudrates (kanal)) ; kanal := 2 ; x flowmode ; setup (kanal bool, x parity, x stopbits, x datenbits, x dtr, x rts, x auto dtr, x cts) ; baudrate (kanal bool, baudrates (kanal)) FI . x flowmode : x dtr := FALSE ; x rts := FALSE ; SELECT flowmode (kanal) OF CASE 1 : x auto dtr := FALSE ; (* XON/XOFF *) x cts := FALSE CASE 2 : x auto dtr := TRUE ; (* DTR *) x cts := FALSE CASE 3 : x auto dtr := FALSE ; (* RTS/CTS *) x cts := TRUE CASE 4 : x auto dtr := TRUE ; (* RTS/CTS/DTR *) x cts := TRUE CASE 5 : x auto dtr := FALSE ; (* fixed *) x cts := FALSE ; SELECT fixed (kanal) OF CASE 1 : x dtr := FALSE ; (* wie XON/XOFF *) x rts := FALSE CASE 2 : x dtr := FALSE ; (* RTS=1 *) x rts := TRUE CASE 3 : x dtr := TRUE ; (* DTR=1 *) x rts := FALSE CASE 4 : x dtr := TRUE ; (* RTS=1,DTR=1 *) x rts := TRUE ENDSELECT ENDSELECT. x parity : SELECT parity (kanal) OF CASE 2 : even parity CASE 3 : odd parity OTHERWISE no parity ENDSELECT. x stopbits : SELECT stopbits (kanal) OF CASE 2 : 1.5 CASE 3 : 2.0 OTHERWISE 1.0 ENDSELECT. x datenbits : datenbits (kanal) + 4. select setup choice : REP cursor (1, 5) ; selektor (setup text, setup choice, TRUE) ; SELECT setup choice OF CASE 1 : LEAVE select setup choice CASE 2 : select kanal choice CASE 3 : select baudrate choice CASE 4 : select datenbits choice CASE 5 : select stopbits choice CASE 6 : select parity choice CASE 7 : select flowmode choice ENDSELECT PER . select kanal choice : INT VAR save kanal := kanal ; cursor (1, 7) ; selektor (kanal text, kanal, TRUE) ; init setup (kanal, setup choice) . select baudrate choice : cursor (1, 9) ; TEXT VAR t := text (baudrates (kanal)) + " " ; out (" ") ; editget (t) ; baudrates (kanal) := real (t) . select datenbits choice : cursor (1, 11) ; selektor (datenbits text, datenbits (kanal), TRUE) . select stopbits choice : cursor (1, 13) ; selektor (stopbits text, stopbits (kanal), TRUE) . select parity choice : cursor (1, 15) ; selektor (parity text, parity (kanal), TRUE). select flowmode choice : cursor (1, 17) ; selektor (flowmode text, flowmode (kanal), TRUE) ; IF flowmode (kanal) = 5 THEN cursor (1, 19) ; selektor (fixed text, fixed (kanal), TRUE) ; out (clr line) FI . aktueller kanal : IF channel = 2 THEN 1 ELIF channel = 3 THEN 2 ELSE 1 FI . kanal bool : IF kanal = 1 THEN channel b ELSE channel a FI . ENDPROC setup ; PROC init setup (INT VAR kanal, setup choice) : IF session <> old session THEN init params ; old session := session FI ; out (home) ; putline (" ----------------------------- V 2 4 - S E T U P ---------------------------") ; line ; putline (" Verlassen 'ESC', Aussuchen 'LEFT' und 'RIGHT', Einstellen 'RETURN'") ; line ; selektor (setup text, setup choice, FALSE) ; line ; line ; selektor (kanal text, kanal, FALSE) ; line ; line ; out (" ") ; put (baudrates (kanal)) ; out (" ") ; line ; line ; selektor (datenbits text, datenbits (kanal), FALSE) ; line ; line ; selektor (stopbits text, stopbits (kanal), FALSE) ; line ; line ; selektor (parity text, parity (kanal), FALSE) ; line ; line ; selektor (flowmode text, flowmode (kanal), FALSE) ; line ; line ; line ; line ; putline (" --------------------------------------------------------------------------") ; out (home) . ENDPROC init setup ; ENDPACKET setup ;