%EXTERNALROUTINE BALL(%STRING(63) FILE) %EXTERNALROUTINESPEC DEFINE(%STRING(63) S) %ROUTINESPEC PRINT FORM(%STRING(63) S) %ROUTINESPEC QSORT(%INTEGER A,B) %ROUTINESPEC BWRITE(%INTEGER N,M) %BYTEINTEGERARRAY FORM(1:80) %CONSTINTEGER VCOL=54,MAXCOL=60,MAXVOTES=22 %INTEGERARRAY VOTE(10:MAXCOL) %INTEGERARRAY TOT,RANK,ORDER(1:8,10:MAXCOL) %INTEGERARRAY FORMS(1:8) %INTEGERARRAY HASH(0:511) %BYTEINTEGERARRAY FAC(0:511) %INTEGER COL,TIT1,C1,C2,C3,C4,DEPT,F,H,I,J,K,U,V %CONSTINTEGERARRAY TOTC(1:10)=4,4,4,1,4,2,3,1,4,5 %CONSTSTRING(3)%ARRAY TIT(10:MAXCOL)="L1 ","L2 ","L3 ","L4 ","L5 ", "L6 ","L7 ","S1 ","S2 ","S3 ","S4 ","S5 ","S6 ","S7 ","E1 ","E2 ", "E3 ","E4 ","E5 ","E6 ","E7 ","E8 ","E9 ","E10","C1 ","C2 ","C3 ", "C4 ","C5 ","H1 ","H2 ","H3 ","H4 ","O1 ","O2 ","O3 ","O4 ","O5 ", "O6 ","O7 ","O8 ","I1 ","I2 ","I3 ","I4 ","D1 "(2),"D2 "(2),"D3 "(2) %CONSTSTRING(21)%ARRAY ABREV(10:MAXCOL)="ADA","ALGOL 68","APL","LISP", "UCSD PASCAL","POP-2","PROLOG","BASIC","BCPL","COBOL","LOGO", "PASCAL","SIMULA","SNOBOL","UNIX commands", "Editor self-teacher","File-name extns","Old file versions", "Sub-directories","Word-processing","Users' names", "IMP for UCSD","Package monitoring","Parameter prompts", "File transport","Local area nets","RCONET to SRCNET", "Remote printers","Terminal speeds","Multi-fount printer", "Faster plotter","Public consoles","Graphics tablet", "Continuous EMAS","Weekend EMAS","Mag. tape security", "Resource control","IMP on UNIX","Scheduling control", "File restoration","Options lists","Info retrieval", "Int. IMP manual","Int. GENSTAT manual", "Census data on disc","Video mode on","Video mode off", "Lower case","Upper case","Width=80","Width=72" ! faculty codes : ! 1 : Arts ! 2 : Divinity ! 3 : Law ! 4 : Medicine ! 5 : Music ! 6 : Science ! 7 : Social Science ! 8 : Veterinary Medicine ! 9 : The rest - library, research institutes, data processing etc. ! 10: ERCC %ON %EVENT 9 %START ->END %FINISH DEFINE("STREAM01,FACS") SELECT INPUT(1) %CYCLE I=0,1,511 READ(J) %IF J=0 %THEN HASH(I)=0 %ELSE %START READ SYMBOL(C1) READ SYMBOL(C2) READ SYMBOL(C3) READ SYMBOL(C4) HASH(I)=C1<<24!C2<<16!C3<<8!C4 %FINISH FAC(I)=J %REPEAT DEFINE("STREAM02,".FILE) SELECT INPUT(2) %CYCLE I=1,1,8 %CYCLE J=10,1,MAXCOL TOT(I,J)=0 %REPEAT FORMS(I)=0 %REPEAT DEFINE("STREAM03,RESULTS") SELECT OUTPUT(3) %CYCLE %CYCLE I=1,1,80 READ SYMBOL(FORM(I)) %IF FORM(I)=NL %THEN PRINT FORM("SHORT FORM") %AND ->CONT %REPEAT READ SYMBOL(I) %IF I#NL %THEN %START PRINT FORM("LONG FORM") READ SYMBOL(I) %UNTIL I=NL ->CONT %FINISH DEPT=FORM(1)<<24!FORM(2)<<16!FORM(3)<<8!FORM(4) H=DEPT-DEPT//507*507 %CYCLE J=H,1,H+511 K=J&511 %IF HASH(K)=DEPT %THEN %EXIT %IF HASH(K)=0 %THEN %START WRITE(K,1) PRINT FORM(" DEPT ?") ->CONT %FINISH %REPEAT F=TOTC(FAC(K)) %IF DEPT&255='U' %THEN U=6 %ELSE U=7 V=0 %CYCLE I=10,1,VCOL %IF '0'<=FORM(I)<='9' %THEN VOTE(I)=FORM(I)-'0' %ELSE %START %IF FORM(I)#' ' %THEN PRINT FORM("INVALID CHAR") %AND ->CONT VOTE(I)=0 %FINISH V=V+VOTE(I) %REPEAT %UNLESS V<=MAXVOTES %THEN PRINT FORM("TOO MANY VOTES") %AND ->CONT %CYCLE I=VCOL+1,2,MAXCOL-1 %IF '2'<=FORM(I)<='9' %THEN FORM(I)='1' %IF '2'<=FORM(I+1)<='9' %THEN FORM(I+1)='1' %UNLESS (FORM(I)=' ' %AND FORM(I+1)=' ') %OR (FORM(I)='1' %AND %C FORM(I+1)=' ') %OR (FORM(I)=' ' %AND FORM(I+1)='1') %THEN %C PRINT FORM("DEFAULTS ?") %AND ->CONT %IF FORM(I)='1' %THEN VOTE(I)=1 %ELSE VOTE(I)=0 %IF FORM(I+1)='1' %THEN VOTE(I+1)=1 %ELSE VOTE(I+1)=0 %REPEAT %CYCLE I=10,1,MAXCOL TOT(F,I)=TOT(F,I)+VOTE(I) TOT(U,I)=TOT(U,I)+VOTE(I) TOT(8,I)=TOT(8,I)+VOTE(I) %REPEAT FORMS(F)=FORMS(F)+1 FORMS(U)=FORMS(U)+1 FORMS(8)=FORMS(8)+1 CONT:%REPEAT END:%CYCLE COL=1,1,8 %CYCLE I=10,1,VCOL ORDER(COL,I)=I RANK(COL,I)=I-9 %REPEAT QSORT(10,VCOL) %CYCLE I=VCOL+1,2,MAXCOL-1 %IF TOT(COL,I)>=TOT(COL,I+1) %THEN RANK(COL,I)=1 %AND %C RANK(COL,I+1)=2 %ELSE RANK(COL,I)=2 %AND RANK(COL,I+1)=1 %REPEAT %REPEAT NEWPAGE PRINT STRING(" USER BALLOT RESULTS =================== Votes Cast ( Rank in Column ) Medicine Science Social ") PRINT STRING("Others ERCC Under- Staff & Overall & Vet Med Science ") PRINT STRING(" grads PGs ") TIT1=0 %CYCLE I=10,1,MAXCOL %IF CHARNO(TIT(I),1)#TIT1 %THEN NEWLINE %AND TIT1=CHARNO(TIT(I),1) PRINT STRING(TIT(I).": ".ABREV(I)) SPACES(21-LENGTH(ABREV(I))) PRINT SYMBOL(':') %CYCLE J=1,1,8 WRITE(TOT(J,I),6) SPACE BWRITE(RANK(J,I),2) %REPEAT NEWLINE %REPEAT ! PRINT STRING(" ! ! Number of Ballot Forms : ") ! %CYCLE I=1,1,8 ! WRITE(FORMS(I),12) ! %REPEAT NEWPAGE PRINT STRING(" Ordered by Rank in Column ( Votes Cast ) Medicine Science Social Others ERCC ") PRINT STRING("Under- Staff & Overall & Vet Med Science ") PRINT STRING("grads PGs ") %CYCLE I=10,1,VCOL %CYCLE J=1,1,8 PRINT STRING(" ".TIT(ORDER(J,I))) BWRITE(TOT(J,ORDER(J,I)),4) %REPEAT NEWLINE %REPEAT NEWPAGE %STOP !--------------------------------------------------------------------- %ROUTINE PRINT FORM(%STRING(63) S) %INTEGER I PRINT STRING(S." ") %CYCLE I=1,1,80 PRINT SYMBOL(FORM(I)) %REPEAT NEWLINE %END !--------------------------------------------------------------------- %ROUTINE QSORT(%INTEGER A,B) %INTEGER L,U,D %RETURN %IF A>=B L=A-1 ; U=B ; D=ORDER(COL,U) %CYCLE L=L+1 %UNTIL L=U %OR TOT(COL,ORDER(COL,L))TOT(COL,D) %EXIT %IF L=U ORDER(COL,L)=ORDER(COL,U) RANK(COL,ORDER(COL,L))=L-9 %REPEAT ORDER(COL,U)=D RANK(COL,ORDER(COL,U))=U-9 QSORT(A,U-1) QSORT(U+1,B) %END !-------------------------------------------------------------------- %ROUTINE BWRITE(%INTEGER N,M) %INTEGER I,J,K,L PRINT STRING("(") I=10\\(M-1) J=0 L=0 %CYCLE K=N//I N=N-K*I %IF K=0 %AND L=0 %THEN J=J+1 %ELSE PRINT SYMBOL(K+'0') %AND L=1 I=I//10 %REPEAT %UNTIL I=1 PRINT SYMBOL(N+'0') PRINT SYMBOL(')') SPACES(J) %END %END %ENDOFFILE