home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol023
/
confer.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1984-04-29
|
6KB
|
235 lines
PROGRAM CONFERENCE;
(*********************************************************
* *
* CHAIRING A CONFERENCE *
* *
* VERSION *
* 1.0 8 Nov 78 *
* ELECTRONIC DESIGN # 23 *
* 1.1 October 1979 *
* Entered by R.E. Penley *
* PASCAL/Z by ITHACA INTERSYSTEMS *
* Modifications were made to the *
* following procedures: *
* INPUT, CHECK, CONVERT, & CORRECT *
* 1.2 9 Oct 79 *
* Added Instructions *
* 1.3 13 Oct 79 *
* Modified CHECK to invalidate illegal *
* entries by Negating the current entry *
* *
*********************************************************)
CONST
TTYWIDTH = 80;
PAPERLINES = 24;
TYPE
DAYTYPE = (MONDAY, TUESDAY, WEDNESDAY);
WORD = ARRAY [1..10] OF CHAR;
VAR
TOPIC : ARRAY [MONDAY..WEDNESDAY, 1..4] OF INTEGER;
SUBJ : ARRAY [MONDAY..WEDNESDAY, 1..4] OF WORD;
DAY : DAYTYPE;
CH : CHAR;
J : INTEGER;
ERROR, DONE : BOOLEAN;
(*********************************************************)
PROCEDURE INIT;
BEGIN
FOR DAY:=MONDAY TO WEDNESDAY DO
FOR J:=1 TO 4 DO TOPIC [DAY, J] := 0
END;
PROCEDURE INPUT;
VAR
A1,B1,C1,D1 : INTEGER;
PROCEDURE PUT( DAY0 : DAYTYPE);
(* Read Values into A1,B1,C1 & D1.
Data must be in the range 1..6 *)
BEGIN
READLN(A1, B1, C1, D1);
WRITELN;
IF (A1<1) OR (A1>6) OR (B1<1) OR (B1>6) OR
(C1<1) OR (C1>6) OR (D1<1) OR (D1>6)
THEN DONE := FALSE
ELSE BEGIN
DONE := TRUE;
TOPIC [DAY0, 1] := A1;
TOPIC [DAY0, 2] := B1;
TOPIC [DAY0, 3] := C1;
TOPIC [DAY0, 4] := D1
END(* IF *)
END(* PUT *);
BEGIN (*** Input ***)
WRITELN;
REPEAT
WRITE('Enter Topics for Monday >');
PUT(MONDAY)
UNTIL DONE;
REPEAT
WRITE('Enter Topics for Tuesday >');
PUT(TUESDAY)
UNTIL DONE;
REPEAT
WRITE('Enter Topics for Wednesday >');
PUT(WEDNESDAY)
UNTIL DONE
END(* INPUT *);
PROCEDURE CLEAR;
BEGIN WRITE( CHR(26) ) END;
PROCEDURE SPACE(WIDTH : INTEGER);
BEGIN WRITE(' ':WIDTH) END;
PROCEDURE INSTRUCT;
BEGIN
CLEAR;
WRITELN;WRITELN;
SPACE(15);WRITELN('Conference Scheduling Program');
WRITELN;WRITELN;
WRITELN(' This program will prepare a schedule for a three');
WRITELN('day conference. You may list four topics for each');
WRITELN('day of the conference. There will be a total of six');
WRITELN('topics. Each topic should be scheduled twice.');
WRITELN(' Any entry scheduled more than twice will be rejected.');
WRITELN('A program will be printed out leaving blanks where');
WRITELN('entries were rejected. You may then input your corrections.');
WRITELN(' Once you''ve made all corrections, the final schedule');
WRITELN('will be printed out and your conference is ready.');
WRITELN;
WRITELN(' When prompted enter four numbers for the day''s topics');
SPACE(12);WRITELN( '1..Software');
SPACE(12);WRITELN( '2..Hardware');
SPACE(12);WRITELN( '3..Systems');
SPACE(12);WRITELN( '4..Production');
SPACE(12);WRITELN( '5..Sales');
SPACE(12);WRITELN( '6..Repairs');
WRITELN;WRITELN
END;
PROCEDURE CONVERT;
(* CONVERTS TOPIC # TO ASCII SUBJECT
INVALID ENTRIES ARE BLANKED OUT
*)
VAR DAYSTOPICS : INTEGER;
BEGIN
FOR DAY:=MONDAY TO WEDNESDAY DO
FOR J:=1 TO 4 DO
BEGIN
DAYSTOPICS := TOPIC [DAY,J] ;
CASE DAYSTOPICS OF
1: SUBJ [ DAY,J ] :='SOFTWARE ';
2: SUBJ [ DAY,J ] :='HARDWARE ';
3: SUBJ [ DAY,J ] :='SYSTEMS ';
4: SUBJ [ DAY,J ] :='PRODUCTION';
5: SUBJ [ DAY,J ] :='SALES ';
6: SUBJ [ DAY,J ] :='REPAIRS ';
ELSE: (* All other cases are invalid *)
SUBJ [ DAY,J ] :=' '
END(* CASE *)
END(* FOR DAY,J *)
END(* CONVERT *);
PROCEDURE CORRECT;
VAR LINE : WORD;
PROCEDURE CORRECTONE( DAY1 : DAYTYPE);
(* Read Values into B & C.
Data must be in the range 1..6 *)
VAR B, C : INTEGER;
BEGIN
WRITE(' Session # >');
READLN(B);
WRITE(' Topic >');
READLN(C);
TOPIC [DAY1, B] := C
END;
BEGIN
WRITELN;
WRITELN('Blanks indicate illegal entries.');
WRITELN('Enter Carriage return when done.');
DONE := FALSE;
REPEAT
LINE := ' ';
WRITELN;
WRITE('Enter: Day >');
READLN(LINE);
IF LINE[1] = ' ' (* CARRIAGE RETURN WILL RETURN A NULL *)
THEN DONE := TRUE
ELSE CASE LINE[1] OF
'M': CORRECTONE(MONDAY);
'T': CORRECTONE(TUESDAY);
'W': CORRECTONE(WEDNESDAY);
ELSE: (* CHECK THAT THE TURKEY
DIDN'T ENTER SOMETHING ELSE *)
DONE := TRUE
END(* CASE CH *)
UNTIL DONE;
WRITELN
END(* CORRECT *);
PROCEDURE CHECK;
CONST
VALID = 2; (* MAX NUMBER OF VALID TOPICS ALLOWED *)
VAR
NUM : ARRAY [1..6] OF INTEGER;
INDEX : INTEGER;
BEGIN
ERROR:=FALSE;
FOR J:=1 TO 6 DO (* INITIALIZE TOPIC COUNTER *)
NUM [J] :=0;
FOR DAY:=MONDAY TO WEDNESDAY DO
FOR J:=1 TO 4 DO
BEGIN
INDEX := ABS( TOPIC[DAY,J] );
NUM [ INDEX ] := NUM [ INDEX ] +1;
IF NUM [ INDEX ] > VALID
THEN BEGIN
ERROR:=TRUE;
(* INVALIDATE ILLEGAL ENTRIES BY NEGATION *)
TOPIC [DAY, J] := -TOPIC [DAY, J];
END(*IF*)
END(*FOR DAY,J*);
IF ERROR THEN CONVERT
END(* CHECK *);
PROCEDURE LIST;
BEGIN
WRITELN;WRITELN;
SPACE(8);WRITELN('Monday':15, 'Tuesday':14, 'Wednesday' );
WRITELN;WRITELN;
FOR J:=1 TO 4 DO
BEGIN
WRITE(J:2, ' ');
FOR DAY:=MONDAY TO WEDNESDAY DO
WRITE(SUBJ [DAY, J] :15);
WRITELN
END(* FOR J *);
(* SCROLL UP THE PROGRAM PRINTOUT *)
IF NOT ERROR THEN
FOR J:=(PAPERLINES-10) DOWNTO 0 DO WRITELN
END(* LIST *);
(*********************************************************)
BEGIN (*** Main program ***)
INIT;
INSTRUCT;
INPUT;
CONVERT;
CHECK;
IF ERROR THEN
REPEAT
LIST;
CORRECT;
CONVERT;
CHECK
UNTIL NOT ERROR;
WRITELN(' Schedule is good');
FOR J:=1 TO 2500 DO; (* SHORT DELAY *)
LIST
END(*** CONFERENCE ***).