/* $VER: GoToLbl.ced ENG 1.0 (04-Nov-2002) by A.Greve
**
** ARexx script for usage with CygnusEd Professional V4.20
**
** See "GoToLblCED.readme" for a description
*/

IF ~SHOW('LIBRARIES','rexxtricks.library') THEN DO
	IF ~ADDLIB('rexxtricks.library',10,-30,0) THEN DO
		SAY 'Couldn''t open <rexxtricks.library> !'
		EXIT(10)
	END
END

SIGNAL ON break_c
SIGNAL ON failure
SIGNAL ON halt
SIGNAL ON ioerr
SIGNAL ON syntax

tempname = 'T:GTLtemp.txt'

OPTIONS RESULTS

IF ~SHOW('PORTS','CYGNUSED') THEN DO
	SAY 'Couldn''t open ARexx port CYGNUSED ! Is CygnusEd running ?'; EXIT(10)
END

ADDRESS 'CYGNUSED'; CEDTOFRONT

STATUS RESTNAME; scriptname = RESULT

STATUS PUBSCREENNAME; pscreen = RESULT

STATUS CURSORLINE; y = RESULT + 1
STATUS DESIREDCOLUMN; x = RESULT + 1

'BEG OF FILE'; MARK
'END OF FILE'; COPY
'SAVE CLIP AS' tempname 1
IF RESULT = 0 THEN DO
	SAY 'Couldn''t save the temporary block to »'tempname'« !'; EXIT(10)
END

MARK; LEFT; COPY; JUMPTO y x

DROP labels.
labels.0 = 0; retv = 0; mlen = 0
IF RXTR_READFILE(tempname, infile) THEN DO
	k = LENGTH(infile.0)
	DO i = 1 TO infile.0
		tmp = WORD(infile.i, 1)
		IF RIGHT(tmp, 1) = ':' THEN DO
			mlen = MAX(LENGTH(tmp), mlen)
			j = 1 + labels.0; labels.0 = j; labels.j = tmp; lines.j = i
			l = i - 1; IF l > 0 THEN prev.j = infile.l; ELSE prev.j = ''
		END
	END
	tmp = COPIES(' ', mlen)
	DO i = 1 TO j
		labels.i = LEFT(labels.i||tmp, mlen)'  'RIGHT('       'lines.i, k)'  'prev.i
	END
	DROP lines. prev.
	IF pscreen ~= '' THEN lview.pubscreen = pscreen
	lview.multiselect = FALSE
	lview.width = 560
	/* lview.height = 150 */
	lview.title = j' labels found in »'scriptname'« :'
	IF RXTR_VIEWLIST('labels', 'lview', 'ergo') THEN DO
		i = WORD(ergo.1, 2); JUMPTO i 1
	END
	ELSE DO
		IF (ergo.gadget ~= 0) & (ergo.gadget ~= 1) THEN DO
			SAY 'Couldn''t open the RexxTricks Viewlist!'; retv = 10
		END
	END
END
ELSE DO
	SAY 'Couldn''t read the temporary file »'tempname'« !'; retv = 10
END

ADDRESS COMMAND 'Delete >NIL: 'tempname
EXIT(retv)

break_c:
failure:
halt:
ioerr:
syntax:
	SAY '+++ Error' rc 'in line' sigl '-' ERRORTEXT(rc)
	SAY SOURCELINE(sigl)
EXIT(10)
