/*
    MARInA System © TNE) 1997


    Start von TeX


        Datum:          03/97
        Autor:          Thomas Neidhardt (TNE), Deutschland, Erlangen

    InterNet:           ft112@fen.baynet.de

        Needs:          RexxReqTools Package by Rafael D'Halleweyn ( rdhall@rug.ac.be )
*/

Parse ARG ChosenFiles

OPTIONS RESULTS
OPTIONS FAILAT 21

CALL Init

/* ----------------------------------------------------------------------- */
Main:

  CALL LOADFILE

  DO k=1 TO Files.count
        CALL StartIt
  END

EXIT 0


/* ----------------------------------------------------------------------- */
StartIt:

  IF (Suffix.k ~= "TEX" & Suffix.k ~= "DVI" & Suffix.k ~= "LOG" & Suffix.k ~= "AUX" & Suffix.k ~= "TOC" & Suffix.k ~= "LOG") THEN
   DO
          Msg = 'Start_TeX.1'
          Parameter1 = AppName
          Parameter2 = Files.k
          CALL ShowMessage

          ChosenFiles = ""
          Drop Files

          RETURN 1
   END


  DVI_Path = Path.k || '/' || Prefix.k || ".DVI"
  TEX_Path = Path.k || '/' || Prefix.k || ".TEX"


  IF (EXISTS(DVI_PATH)) THEN
  DO
        View = 1
        ASCI = 2
        TeX = 3
        Stop = 0

        Msg = 'Start_TeX.2'
  END


  IF (~EXISTS(DVI_PATH)) THEN
  DO
        ASCI = 1
        TeX = 2
        View = 3
        Stop = 0

        Msg = 'Start_TeX.3'
  END

  IF (~EXISTS(TEX_PATH)) THEN
  DO
        ASCI = 1
        TeX = 2
        View = 3
        Stop = 0

        Msg = 'Start_TeX.4'
  END


  Parameter1 = AppName
  Parameter2 = Files.k
  CALL ShowMessage

  IF (Action = Stop) THEN
        RETURN 1

  IF (Action = ASCI & (Suffix.k = "LOG" | Suffix.k = "TOC")) THEN
  DO
        ADDRESS COMMAND '${RefTable/Text-ViewASCII}' Files.k  /* Immer mit Textanzeiger anzeigen */

        ChosenFiles = ""
        Drop Files
        RETURN 1
  END

  IF (Action = ASCI & (Suffix.k = "DVI")) THEN
  DO
        ADDRESS COMMAND '${RefTable/Text-ViewASCII}' TEX_Path  /* Immer mit Textanzeiger anzeigen */

        ChosenFiles = ""
        Drop Files
        RETURN 1
  END

  IF (Action = ASCI) THEN
  DO
        ADDRESS COMMAND '${RefTable/Text-ViewASCII}' Files.k  /* Immer mit Textanzeiger anzeigen */

        ChosenFiles = ""
        Drop Files
        RETURN 1
  END

  IF (Action = View) THEN
  DO
        ADDRESS COMMAND 'run >NIL: ${RefTable/Text-ViewDVI-Starter}' DVI_PATH
        RETURN 1
  END

  IF (Action = TeX & TexStarted = 1) THEN
  DO
        ADDRESS COMMAND '${RefTable/Text-Editor-Starter}' TeX_Path
        RETURN 1
  END

  IF (Action = TeX) THEN
  DO
        ADDRESS COMMAND 'SYS:rexxc/rx TeX:rexx/TeX-Start.rexx 'TEX_Path
        TeXStarted = 1
        RETURN 1
  END

CALL ExitMe


/* ----------------------------------------------------------------------- */
LoadFile:

ActualPath = MyGetENV("ActualPathTex")
IF (~EXISTS(ActualPath) | ActualPath = '' | ActualPath = "ACTUALPATH" | ActualPath = "NOTHING" | ActualPath = "PATH") THEN
  ActualPath = "SYS:"

IF (""=ChosenFiles|"ChosenFiles"=ChosenFiles) THEN
 DO

  Msg = 'Start_TeX.5'
  Parameter1 = AppName
  CALL ShowMessage

  CALL PlaySample(SampleChooseFile)

  ChosenFiles = SelectedFiles

  IF (''=ChosenFiles) THEN
        CALL ExitMe
 END

CALL FileParser

ADDRESS COMMAND 'setenv ActualPathTex "'Path'"'

RETURN 1

/*----------------------------------FileParser-----------------------------*/
FILEPARSER:

IF ( (Files.1 = 'FILES.1') | (POS(':',ChosenFiles) = 0)  ) THEN
 DO
  i=0

  DO forever
   i=i+1

   Files.i = ""
   PrognameBegPos = 0
   DevicePos = 0
   DirPos = 0
   SfxBegin = 0

   IF ( POS('"', ChosenFiles) = 0 ) THEN
        PARSE VAR ChosenFiles Files.i ChosenFiles
   ELSE
        PARSE VAR ChosenFiles Files.i '"' ChosenFiles       /* parse the line */

   IF ( Files.i = " ") THEN
   DO
        IF ( POS('"', ChosenFiles) = 0 ) THEN
             PARSE VAR ChosenFiles Files.i ChosenFiles
        ELSE
             PARSE VAR ChosenFiles Files.i '"' ChosenFiles       /* parse the line */
   END

   Files.i = strip(Files.i, T, ' ')
   Files.i = strip(Files.i, B, '"')

   IF (Files.i = "") THEN
    DO                    /* Break if end of Command-line */
      Files.count=i-1
      LEAVE
    END

   DevicePos=LASTPOS(':',Files.i)

   IF(DevicePos = 0) THEN
     DO
      ADDRESS COMMAND 'cd >ENV:'TempPath
      Path.i=MyGetENV(TempPath)
      ADDRESS COMMAND 'delete ENV:'TempPath 'QUIET'

      IF(RIGHT(Path.i,1) = ':') THEN
        Files.i = Path.i || Files.i
      ELSE
        Files.i = Path.i || '/' || Files.i

     END

   CALL Analyze

  END
 END

IF(File_requested = 1) THEN
  DO i=1 TO Files.count

   PrognameBegPos = 0
   DevicePos = 0
   DirPos = 0
   SfxBegin = 0

   CALL Analyze
 END

i=Files.count  /* set last path to Actual path */
Path = Path.i

/*
 do k=1 to files.count
  say Files.k path.k suffix.k Prefix.k Prefix.k.k
 END
 EXIT 0
*/

RETURN 1

/*--------------------------------Analyze-------------------------------*/
Analyze:

   Laenge = LENGTH(Files.i)
   DevicePos=LASTPOS(':',Files.i)
   DirPos=LASTPOS('/',Files.i)

   IF(DirPos > 1) THEN
    DO
      PrognameBegPos=DirPos
      Path1 = LEFT(Files.i, DirPos)
      Path.i = strip(Path1, T, '/')
    END
   ELSE
    DO
      PrognameBegPos=DevicePos
      Path.i = LEFT(Files.i, DevicePos)
    END

   Numchars = Laenge - PrognameBegPos
   Device.i = LEFT(Files.i, Devicepos)
   FileName.i = RIGHT(Files.i, Laenge-PrognameBegPos)

   SfxBegin = LASTPOS('.',FileName.i)

   IF (SfxBegin=0) THEN
        DO
                Prefix.i = FileName.i
        Suffix.i = ""
        END
   ELSE
        DO
        Prefix.i = LEFT(FileName.i,SfxBegin-1)
        Suffix.i = UPPER(RIGHT(Files.i, NumChars-SfxBegin))
        END

   RETURN 1

/*----------------------------------------------------------------*/
ShowMessage:

   drop Action
   ReqType = ""

   MsgFile = 'MARInA_rexx:'Language'/'Msg
   IF (open(TEMPFILE, MsgFile, 'read')) THEN
    DO
        ReqType = READLN(TEMPFILE)              /* read Requester-Type */

        Line = READLN(TEMPFILE)                 /* read Title-Line */
        CALL Substitutions
        ReqTitle = Line

        Line = READLN(TEMPFILE)                 /* free line after Title */

        Message = ""

        DO UNTIL EOF(TEMPFILE)

            Line = READLN(TEMPFILE)
            CALL Substitutions

            IF POS(">>>", Line) > 0 THEN
              DO
                rtBtns = STRIP(Line, 'L', '>')
                LEAVE
              END
            ELSE
                Message = Message || CR || Line
        END

        Result = CLOSE(TEMPFILE)
    END
   ELSE
    DO
        CALL Err_ShowMessage
    END

    IF (UPPER(ReqType) = 'MULTI REQUEST') THEN
     DO
        Action = rtezrequest(Message,rtBtns,ReqTitle,PosTags)
        RETURN
     END

    IF (UPPER(ReqType) = 'GETFILES') THEN
     DO
        SelectedFiles = rtfilerequest(ActualPath,,ReqTitle,rtBtns, FILE_TAGS, Files)
        RETURN
     END

    IF (UPPER(ReqType) = 'GET ONE FILE') THEN
     DO
        FILETAG = PosTags || " rtfi_height=" ReqHeight
        SelectedFile = rtfilerequest(ActualPath,ActualName,ReqTitle,rtBtns, FILETAG, Files)
        RETURN
     END

    IF (UPPER(ReqType) = 'GETPATH') THEN
     DO
        SelectedPath = rtfilerequest(ActualPath,,ReqTitle,rtBtns, DIR_TAGS)
        RETURN
     END

    IF (UPPER(ReqType) = 'GETSTRING') THEN
     DO
        SelectedString = rtgetstring(PresetString,Message,ReqTitle,rtBtns,GStags,Action)
        RETURN
     END

    IF (UPPER(ReqType) = 'GETSTRING SIMPLE') THEN
     DO
        SelectedString = rtgetstring(PresetString,Message,ReqTitle,,GStags,Action)
        RETURN
     END

    CALL Err_ShowMessage  /* Error if arrived here */

    RETURN

/*--------------------------------------------*/
Substitutions:

     IF POS("%1", Line) > 0 THEN             /* up to four substitution parameters for each message */
     DO UNTIL POS("%1", Line) = 0            /* and per line */
         parse var Line part1 '%1' part2
         Line = part1''parameter1''part2
     END

     IF POS("%2", Line) > 0 THEN
     DO UNTIL POS("%2", Line) = 0
         parse var Line part1 '%2' part2
         Line = part1''parameter2''part2
     END

     IF POS("%3", Line) > 0 THEN
     DO UNTIL POS("%3", Line) = 0
         parse var Line part1 '%3' part2
         Line = part1''parameter3''part2
     END

RETURN

/*--------------------------------------------*/
Err_ShowMessage:

    Message = AppName':' CR CR "Sorry, an error has occured accessing the MessageFile" CR CR "    "MsgFile CR CR "... exiting."
    rtBtns = 'Oh no!'
    Action = rtezrequest(Message,rtBtns,ReqTitle,PosTags)
    CALL ExitMe

    RETURN

/*----------------------------------------------------------------*/
PlaySample:
PARSE ARG Sample

  IF (TalkToUser="0") THEN RETURN

  IF EXISTS('ENV:ProcessTalk') THEN
  DO
      ProcessTalk = Strip(SubWord(MyGetENV("ProcessTalk"),2), T, ']')

      ADDRESS COMMAND 'status >ENV:VoiceSTATUS PROCESS 'ProcessTalk
      VStatus = MyGetENV('VoiceSTATUS')

      IF POS(Play_Voice_Cmd,VStatus)>0 THEN
          ADDRESS COMMAND 'break' ProcessTalk 'c'
  END


  ADDRESS COMMAND Play_Voice Sample

RETURN

/*----------------------------------------------------------------*/
MyGetENV:     PROCEDURE
   PARSE ARG name

   TheFile = "ENV:" || name
   IF (open(TEMPFILE, TheFile, 'read')) THEN
    DO
     ENVvalue = READLN(TEMPFILE)
     Result = Close(TEMPFILE)
        END
   ELSE
        DO
     ENVvalue = "NOTHING"
        END

   RETURN ENVvalue

/*----------------------------------------------------------------*/
GetLanguage:

LanguageNumber = 1      /* Presets */
Language = ''

IF (open(TEMPFILE, 'ENV:sys/locale.prefs', 'read')) THEN
 DO
   DO i = 1 to 50
       r = READCH(TEMPFILE)
   END

   Land = ''

   i=0
   DO UNTIL EOF(TEMPFILE)
       i = i+1
       Char = ReadCh(TEMPFILE)
       IF (C2D(Char) = 0) THEN
           LEAVE
       ELSE
           Land = Land''Char
   END

   /* 32 characters from begin of Lang_x to begin of Lang_y */
   DO j = i to 31 UNTIL EOF(TEMPFILE)
    r = READCH(TEMPFILE)
   END

   Language = ReadLanguage()
   r = Close(TEMPFILE)
 END

 IF (Language='') THEN Language = 'english'

 drop Char
 drop r

 ADDRESS COMMAND 'setenv LANGUAGE 'Language

 IF ~EXISTS('MARInA_rexx:'Language'/Start_TeX.1') THEN
     Language = 'english'

RETURN

/*----------------------------------*/
ReadLanguage:

 Langua = ''

 Langua = ReadCh(TEMPFILE)
 IF (C2D(Langua)=0) THEN RETURN ''

 i=1
 DO UNTIL EOF(TEMPFILE)
    i=i+1
    Char = ReadCh(TEMPFILE)
    IF (C2D(Char)=0) THEN
      LEAVE
    ELSE
      Langua = Langua''Char
 END

 /* 30 characters from begin of Lang_x to begin of Lang_y */
 DO j = i to 29 UNTIL EOF(TEMPFILE)
    r = READCH(TEMPFILE)
 END

RETURN Langua

/*-------------------------------------Init--------------------------------------*/
Init:

AppName = "© TNE) TeX Starter"

CR = '0a'x

CALL GetLanguage

if ~show('L','rexxreqtools.library') THEN
    Result=ADDLIB('rexxreqtools.library',0,-30,0)

if ~show('L','rexxsupport.library') THEN
    Result=ADDLIB('rexxsupport.library',0,-30,0)

ProcessNumber=PRAGMA('ID')


CALL FORBID

Intui  = showlist(l, 'intuition.library',, a)
Screen = next(intui, 56)
Font   = next(screen, 136)
FontSize = c2d(import(offset(font, 20), 2))

CALL PERMIT


MaxTitleChars = MyGetENV("RefTable/GUI-ShellTitleChars")

ConsoleType = MyGetENV("RefTable/GUI-ConsoleType")
IF (ConsoleType = "NOTHING") THEN
        ConsoleType = "40/50/600/200"

ConsoleSize = MyGetENV("SHELLsize")
IF (ConsoleSize = "NOTHING") THEN
        ConsoleSize = "40/50/600/200"

ReqLE = MyGetENV("RefTable/GUI-ReqLE")  /* Main Window */
ReqTE = MyGetENV("RefTable/GUI-ReqTE")

ReqHeight = MyGetENV("RefTable/GUI-ReqHeight")

rt_TE1 = ReqTE + FontSize + 4  /* Requester-Windows */
rt_LE1 = ReqLE + 6

PosTags = "rt_reqpos=reqpos_topleftscr rt_leftoffset=" ReqLE " rt_topoffset=" ReqTE
EZtags = PosTags
GLtags = PosTags || "rtgl_min=0 rtgl_max=1500 rtgl_backfill=true "
GStags = PosTags || " rtgs_backfill=false rtgs_width=300"

POINTER_TAGS = "rt_reqpos=reqpos_pointer"
DIR_TAGS = PosTags || " rtfi_flags=freqf_nofiles|freqf_save rtfi_height=" ReqHeight
FILE_TAGS = PosTags || " rtfi_flags=freqf_multiselect|freqf_selectdirs" || " rtfi_height=" ReqHeight

Console = '>"'ConsoleType || ConsoleSize'/'AppName' Messages.../AUTO/CLOSE/WAIT"'

/* ----- TempFiles ----------- */

TempPath = 'Start_TeX-path_'ProcessNumber

/* ----- Voice ------ */

TalkToUser = MyGetENV("Flags/TalkToUser")
Play_Voice_Cmd = SubWord(MyGetENV('RefTable/PlayVoice'),1,1)
Play_Voice = 'run >ENV:ProcessTalk ${RefTable/PlayVoice}'
SampleDir = 'SysVoice:'Language'/'

SampleChooseFile = SampleDir || 'CompressManagerFile.8SVX'

RETURN

/* -------------------------------------ExitMe---------------------------------- */
ExitMe:

ADDRESS COMMAND 
'copy ENV:ActualPathTex ENVARC: CLONE QUIET'
'copy ENV:ActualPathTex ENVARC:ActualPathPresentate CLONE QUIET'
'copy ENV:ActualPathTex ENV:ActualPathPresentate CLONE QUIET'

drop ChosenFiles
drop Files
drop FileName
drop Suffix
drop Prefix
drop Path

drop Action
drop Result
drop Closed
drop Console
drop Play_Voice

EXIT 0

