Text processing/Max licenses in use: Difference between revisions

Content added Content deleted
(Added more Racketty implementation in →‎{{header|Racket}})
(Added COBOL solution. Corrected PL/I lang tag.)
Line 511: Line 511:
2008/10/03_08:40:40
2008/10/03_08:40:40
</pre>
</pre>

=={{header|COBOL}}==
{{works with|OpenCOBOL}}
<lang cobol> IDENTIFICATION DIVISION.
PROGRAM-ID. max-licenses-in-use.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT license-file ASSIGN "mlijobs.txt"
ORGANIZATION LINE SEQUENTIAL
FILE STATUS file-status.

DATA DIVISION.
FILE SECTION.
FD license-file.
01 license-record.
03 FILLER PIC X(8).
03 action PIC X(3).
88 license-out VALUE "OUT".
03 FILLER PIC X(3).
03 license-timestamp PIC X(19).
03 FILLER PIC X(13).

WORKING-STORAGE SECTION.
01 file-status PIC XX.
88 file-ok VALUE "00".

01 max-licenses-out PIC 9(6).
01 num-max-times PIC 99.
01 max-license-times-area.
03 max-timestamps PIC X(19) OCCURS 1 TO 50 TIMES
DEPENDING ON num-max-times.
01 current-licenses-out PIC 9(6).
01 i PIC 99.

PROCEDURE DIVISION.
DECLARATIVES.
license-file-error SECTION.
USE AFTER ERROR ON license-file.

DISPLAY "An unexpected error has occurred. Error "
file-status ". The program will close."
GOBACK
.
END DECLARATIVES.

main-line.
OPEN INPUT license-file
IF NOT file-ok
DISPLAY "File could not be opened. Error " file-status
"."
GOBACK
END-IF
PERFORM FOREVER
READ license-file
AT END
EXIT PERFORM
END-READ

IF license-out
ADD 1 TO current-licenses-out

EVALUATE TRUE
WHEN current-licenses-out > max-licenses-out
MOVE 1 TO num-max-times
MOVE current-licenses-out TO max-licenses-out
MOVE license-timestamp
TO max-timestamps (num-max-times)

WHEN current-licenses-out = max-licenses-out
ADD 1 TO num-max-times
MOVE license-timestamp
TO max-timestamps (num-max-times)
END-EVALUATE
ELSE
SUBTRACT 1 FROM current-licenses-out
END-IF
END-PERFORM

CLOSE license-file

DISPLAY "License count at log end: " current-licenses-out
DISPLAY "Maximum simulataneous licenses: " max-licenses-out
DISPLAY "Time(s):"
PERFORM VARYING i FROM 1 BY 1 UNTIL num-max-times < i
DISPLAY max-timestamps (i)
END-PERFORM

GOBACK
.</lang>

=={{header|Common Lisp}}==
=={{header|Common Lisp}}==


Line 1,428: Line 1,522:


=={{header|PL/I}}==
=={{header|PL/I}}==
<lang PL/I>
<lang pli>
text3: procedure options (main); /* 19 November 2011 */
text3: procedure options (main); /* 19 November 2011 */
declare line character (80) varying;
declare line character (80) varying;