/*GuruStatistix V1.22 by Steffen Clemenz
  E-Mail: clemenz@zedat.fu-berlin.de
  This program is E-Mailware!!! Don`t destroy my code, this will kill your computer.
  If you can`t contact me with e-mail,please write to me:
  Steffen Clemenz
  Clara-Zetkin-Ring 61
  Frankfurt/Oder
  15232                                       */


/*----------------------------------Opening Libraries--------------------------------------*/
call addlib("libs/rexxreqtools.library", 0, -30, 0)

/*--------------Reading Locales and Preferences from GuruStatistix.catalog-----------------*/

CALL OPEN out,"ENV:gurustatistix.prefs",read
 CALL READLN out
 locale=RESULT
 CALL READLN out
 gurudat=RESULT
 CALL READLN out
 textanzeiger=RESULT
 CALL READLN out
 guruhistory=RESULT
 CALL READLN out
 statdir=RESULT
 CALL READLN out
 zeit=RESULT
CALL CLOSE out

CALL OPEN out,locale||"/gurustatistix.catalog",read
 DO i=1 TO 17
  CALL READLN out
  string.i=RESULT
 END

CALL CLOSE out

/*-----------------------I want to get the date till i will calculate----------------------*/
/*CALL datumabfragen*/

ADDRESS command
gcounter=0

/*Reading of GuruHistory-file*/
CALL OPEN out,gurudat,read
 DO WHILE EOF(out)~=1
 CALL READLN out
 gurudat.gcounter=RESULT
 gcounter=gcounter+1
END

CALL CLOSE out

/*Now copying guruhistory to ram: because its much faster to analyse there*/
IF ~EXISTS('ram:guru') THEN DO
                      'copy '||guruhistory||' TO ram:guru'
                            END

SAY string.13
zeit1=time('S')
zeit3=time()
SAY string.10||" "||time()

/*---------------------------Jump to calculate rendering-time------------------------------*/

IF UPPER(zeit)~=UPPER("NONE") THEN CALL fertig

/*Now opening the ram:guru-file*/
CALL OPEN out,"ram:guru",read

/*Definitions*/
counter=0
counterA=0
counterB=0
firstdatum=0
c=0

/*---------------------------Searching for the important words-----------------------------*/
DO WHILE EOF(out)~=1

  CALL READLN out
  IF UPPER(WORD(RESULT,1))=UPPER("Task") THEN CALL Task
  IF UPPER(WORD(RESULT,1))=UPPER("Date") THEN CALL Datum
  IF UPPER(WORD(RESULT,1))=UPPER("error") THEN CALL Error

END

raus1:
CALL CLOSE out
CALL ordnen

EXIT

/*------------------------Collect and count the entries to a list--------------------------*/
Task:

 buf=WORD(RESULT,4)
 wort=STRIP(buf,'B','"')

 i=0

 DO i=0 TO counter
 IF UPPER(wort)=UPPER(wort.i) THEN LEAVE
 END

 IF i>counter THEN DO
                     counter=counter+1
                     wort.counter=wort
                     wortzahl.counter=1
                    END
              ELSE
                   DO
                     wortzahl.i=(wortzahl.i)+1
                   END

RETURN

Datum:

 datum=WORD(RESULT,4)
 IF firstdatum=0 THEN firstdatum=datum
 enddatum=datum

 i=0

 DO i=0 TO counterA
 IF UPPER(datum)=UPPER(datum.i) THEN LEAVE
 END

 IF i>counterA THEN DO
                     counterA=counterA+1
                     datum.counterA=datum
                     datumzahl.counterA=1
                    END
              ELSE
                   DO
                     datumzahl.i=(datumzahl.i)+1
                   END

RETURN

Error:

 error=WORD(RESULT,3)

 i=0

 DO i=0 TO counterB
 IF UPPER(error)=UPPER(error.i) THEN LEAVE
 END

 IF i>counterB THEN DO
                     counterB=counterB+1
                     error.counterB=error
                     errorzahl.counterB=1
                    END
              ELSE
                   DO
                     errorzahl.i=(errorzahl.i)+1
                   END

RETURN

/*----------------------Assoziate Errorcodenumber and understandable text-------------------*/
Errorname:

 IF UPPER(LEFT(error.i,1))=UPPER("8") THEN error.i="0"||RIGHT(error.i,LENGTH(error.i)-1)

 DO d=0 TO gcounter
  IF UPPER(error.i)=UPPER(WORD(gurudat.d,1)) THEN LEAVE
 END

 IF d>gcounter THEN error.i=error.i||" "||string.9
               ELSE error.i=gurudat.d
RETURN

/*To build the GuruCharts-File I use sort-program from Amiga-DOS*/
/*#####################################Fehler################################################*/
ordnen:
 string="                                               "
 null="0000000000"
 stern="**************************************************************************************"

 /*------------------------------------Tasks------------------------------------------------*/

 CALL OPEN mak,"ram:Charts1",write
 gesamtWort=0

 sterne=LEFT(stern,LENGTH(string.1))
 
 DO i=1 TO counter
 zeile=LEFT(null,6-LENGTH(wortzahl.i))||STRIP(wortzahl.i)||"   "||wort.i
 gesamtWort=gesamtWort+wortzahl.i
 CALL WRITELN mak,zeile
 END


 CALL CLOSE mak

 gesamtWort=LEFT(null,6-LENGTH(gesamtWort))||STRIP(gesamtWort)||"   "||string.2

 ADDRESS command
 'c:sort ram:Charts1 ram:Charts'

 datum=string.3||" "||date()
 firstdatum=string.5||" "||firstdatum
 lastdatum=string.15||" "||enddatum

 CALL OPEN mak,"ram:anfang",write
 CALL WRITELN mak,firstdatum
 CALL WRITELN mak,lastdatum
 CALL WRITELN mak,datum
 CALL WRITELN mak,sterne
 CALL WRITELN mak,string.1
 CALL WRITELN mak,sterne
 CALL CLOSE mak

 CALL OPEN mak,"ram:charts",append
 CALL WRITELN mak," "
 CALL WRITELN mak,gesamtWort
 CALL WRITELN mak," "
 CALL WRITELN mak," "
 CALL CLOSE mak


 /*------------------------------------Date-------------------------------------------------*/
 sterne=LEFT(stern,LENGTH(string.4))

 CALL OPEN mak,"ram:datum1",write

 DO i=1 TO counterA
 zeile=LEFT(null,6-LENGTH(datumzahl.i))||STRIP(datumzahl.i)||"   "||datum.i
 CALL WRITELN mak,zeile
 END

 CALL CLOSE mak

 gesamtDatum=LEFT(null,6-LENGTH(counterA))||STRIP(counterA)||"   "||string.6

 'c:sort ram:datum1 ram:datum'

 CALL OPEN mak,"ram:anfang1",write
 CALL WRITELN mak,sterne
 CALL WRITELN mak,string.4
 CALL WRITELN mak,sterne
 CALL CLOSE mak

 CALL OPEN mak,"ram:datum",append
 CALL WRITELN mak," "
 CALL WRITELN mak,gesamtDatum
 CALL WRITELN mak," "
 CALL WRITELN mak," "
 CALL CLOSE mak

 /*------------------------------------Error--------------------------------------------------*/
 sterne=LEFT(stern,LENGTH(string.7))

 CALL OPEN mak,"ram:error1",write

 DO i=1 TO counterB
 CALL Errorname
 zeile=LEFT(null,6-LENGTH(errorzahl.i))||STRIP(errorzahl.i)||"   "||error.i
 CALL WRITELN mak,zeile
 END

 CALL CLOSE mak

 'c:sort ram:error1 ram:error'

 CALL OPEN mak,"ram:anfang2",write
 CALL WRITELN mak,sterne
 CALL WRITELN mak,string.7
 CALL WRITELN mak,sterne
 CALL WRITELN mak,string.12
 CALL CLOSE mak

 CALL OPEN mak,"ram:error",append
 CALL WRITELN mak," "
 CALL WRITELN mak,string.8

 CALL CLOSE mak

 'JOIN ram:anfang ram:charts ram:anfang1 ram:datum ram:anfang2 ram:error TO ram:GuruCharts'


 'run >NIL: '||textanzeiger||' ram:GuruCharts'

 /*----------------------Time used for rendering-calculation routine--------------------------*/

 zeit2=time('S')
 SAY string.11||" "||time()

 IF UPPER(zeit)=UPPER("NONE") THEN  DO
       zeitgesamt=zeit2-zeit1
       'list >ram:length ram:guru nohead'

       CALL OPEN out,"RAM:length",read
       CALL READLN out
       laenge=WORD(RESULT,2)
       CALL CLOSE out

       zeitgesamt=laenge||" "||zeitgesamt

       CALL OPEN out,"ENV:gurustatistix.prefs",write
       CALL WRITELN out,locale
       CALL WRITELN out,gurudat
       CALL WRITELN out,textanzeiger
       CALL WRITELN out,guruhistory
       CALL WRITELN out,statdir
       CALL WRITELN out,zeitgesamt
       CALL CLOSE out
                                     END


 'delete >NIL: ram:anfang'
 'delete >NIL: ram:anfang1'
 'delete >NIL: ram:anfang2'
 'delete >NIL: ram:charts'
 'delete >NIL: ram:datum1'
 'delete >NIL: ram:datum'
 'delete >NIL: ram:Charts1'
 'delete >NIL: ram:error'
 'delete >NIL: ram:error1'
 'delete >NIL: ram:guru'
 'delete >NIL: ram:length'

 'copy ram:gurucharts to '||statdir||'stats/GuruCharts'||LEFT(time(),2)||SUBSTR(time(),4,2)||'.'||date('s')
RETURN

/*--------------------------------------------------------------------------------------------*/
fertig:

 'list >ram:length ram:guru nohead'

 CALL OPEN out,"RAM:length",read
 CALL READLN out
 laenge=WORD(RESULT,2)
 CALL CLOSE out

 laenge1=STRIP(WORD(zeit,1))
 zeitgesamt=STRIP(WORD(zeit,2))

 dauer=laenge*zeitgesamt/laenge1

 stunden=TRUNC(dauer/3600)
 dauer=dauer-(TRUNC(dauer/3600)*3600)
 minuten=TRUNC(dauer/60)
 sekunden=dauer-(TRUNC(dauer/60)*60)

 stunden1=SUBSTR(zeit3,1,2)
 minuten1=SUBSTR(zeit3,4,2)
 sekunden1=SUBSTR(zeit3,7,2)

 a=0
 sekunden1=sekunden1+sekunden

 IF sekunden1>60 THEN DO
                       sekunden1=sekunden1-60
                       a=1
                      END

 minuten1=minuten1+minuten+a
 a=0
 If minuten1>60 THEN DO
                       minuten1=minuten1-60
                       a=1
                     END

 stunden1=stunden1+stunden+a
 IF stunden1>24 THEN DO
                       stunden1=stunden1-24
                     END

 stunden1=RIGHT(stunden1,2,'0')
 minuten1=RIGHT(minuten1,2,'0')
 sekunden1=RIGHT(sekunden1,2,'0')

 zeit2=stunden1||":"||minuten1||":"||sekunden1

 position=POS('*',string.14)

 string.14=DELSTR(string.14,position,1)
 string.14=INSERT(zeit2,string.14,position)

 SAY string.14

RETURN

datumabfragen:

buffer = rtgetstring(DATE(), , string.17, , fonttag)

RETURN
