PROGRAM MAKMAP ! For EMPIRE map construction C To use MAKMAP create a 100-row by 60-column map of C the topology desired, in standard EMPIRE format. C an example is: C ...............+++++++............ C .............+++++++++++++++...... C ...+...........*+++++++++......... C ...+++........++++++++++++........ C ..*++++.........++++++++++........ C +++++++++......+++++++*++++....... C (etc.) Note that the map is !SIDEWAYS! from the standard C EMPIRE format, as it is easier to use a text editor when C this is the case. C SPECIAL RULE: (GIVE THE COMPUTER AN EVEN BREAK) C C IF A CITY HAS A NEIGHBORING WATER SQUARE, THEN THAT C WATER SQUARE MUST BE AN OCEAN SQUARE, AND ALL OCEAN C SQUARES MUST BE PART OF THE SAME OCEAN. SPLITTING C OFF LITTLE LAKES AND MULTIPLE OCEANS WILL CAUSE THE C COMPUTER TO THINK IT CAN GET TO A PORT WHEN IN FACT C IT CANT. IMPLICIT INTEGER(A-Z) INTEGER IMAP(100,60),OMAP(60,100),DATA(300),FILE(6) DATA ISTAR/42/ ! "*" IN R1 FORMAT ! GO TO 4 1 TYPE 101,FILE ! ?FRSOPN is for the birds ... 101 FORMAT(' ?Can''t find file - '6A5) 4 TYPE 102 102 FORMAT(' Handmade map file: ',$) ACCEPT 103,FILE IF(FILE(1) .EQ. ' ') CALL EXIT 103 FORMAT(6A5) OPEN(UNIT=21,DIALOG=FILE,ERR=1,ACCESS='SEQIN',MODE='ASCII') OOPS = 0 NCITYS = 0 DO 10 I = 1,100 10 READ(21,105,END=95) (IMAP(I,J),J=1,60) 105 FORMAT(60R1) CLOSE(UNIT=21) DO 20 ROW=1,100 DO 20 COL=1,60 IF(IMAP(ROW,COL) .EQ. ISTAR) NCITYS = 1 + NCITYS I6ROW = ROW ; I6COL = COL ! Avoid compiler warnings ! RC = XLATE(IMAP,I6ROW,I6COL) IF(RC.LT.0) OOPS=OOPS+1 ! Count errors 20 OMAP(COL,ROW) = RC ! Transpose IF(OOPS .GT. 0) GO TO 96! Cut out if input errors IF(NCITYS .LE. 70) GO TO 45 TYPE 451, NCITYS 451 FORMAT(' ? Too many cities for normal EMPIRE!' 1/' ? Used'I4,', max is 70') GO TO 47 45 K = 1 ; L = 300 ; N = 0 DO 40 I = 1,60 DO 40 J = 1,100 55 N = N * 3 + OMAP(I,J) K = K + 1 ! Another parcel IF(K .LE. 20) GO TO 40 ! Filled a word? DATA(L) = N ; N = 0 ; K = 1 ! Yes L = L - 1 40 CONTINUE TYPE 387,NCITYS 387 FORMAT(' [ Used'I3,' cities out of 70]') 47 TYPE 107 107 FORMAT(' Output binary file to: ',$) ACCEPT 103,FILE IF(FILE(1) .EQ. ' ') STOP 'Abort' OPEN(UNIT=21,DIALOG=FILE,MODE='BINARY',ACCESS='SEQOUT') WRITE(21) DATA ! And output it CLOSE(UNIT=21) STOP 'Done' 95 TYPE 112,I 112 FORMAT(' ? End-of-file at row'I3,' (should be 100 rows)') STOP 96 TYPE 114,OOPS 114 FORMAT(' ?',I3,' Input format error(s) -- cartography aborted') STOP END INTEGER FUNCTION XLATE(X,Y,Z) INTEGER X(100,60),Y,Z,STAR,PLUS,DOT DATA STAR/42/,PLUS/43/,DOT/46/ K = X(Y,Z) XLATE = 0 IF(K .EQ. DOT) RETURN XLATE = 1 IF(K .EQ. PLUS) RETURN XLATE = 2 IF(K .EQ. STAR) RETURN XLATE = -1 TYPE 1,K,K,Y,Z 1 FORMAT(' % Illegal character ''',R1,''' ('O3') found in row',I4, 1', column'I4) RETURN END