home *** CD-ROM | disk | FTP | other *** search
- 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 ***).
-