/* $VER: GoToLbl.ced GER 1.0 (04-Nov-2002) von A.Greve
**
** ARexx Script zur Benutzung mit CygnusEd Professional V4.20
**
** Siehe "GoToLblCED.readme" für die Beschreibung
*/

IF ~SHOW('LIBRARIES','rexxtricks.library') THEN DO
	IF ~ADDLIB('rexxtricks.library',10,-30,0) THEN DO
		SAY 'Konnte die <rexxtricks.library> nicht öffnen!'
		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 'Konnte den ARexx Port CYGNUSED nicht öffnen! Wurde CygnusEd gestartet?'; 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 'Konnte den temporären Block nicht nach »'tempname'« schreiben!'; 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 gefunden 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 'Konnte den Viewlist-Requester von RexxTricks nicht öffnen!'; retv = 10
		END
	END
END
ELSE DO
	SAY 'Konnte die temporäre Datei »'tempname'« nicht einlesen!'; retv = 10
END

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

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