C PROGRAM GTCHR.FT C ----------------- C C C C C C C GTCHR - AN OS/8 FORTRAN II SUBROUTINE TO ANALYZE A CHARACTER C ------------------------------------------------------------ C INPUT STREAM FROM A SYS: DATA FILE. C --------------------------------- C C C SUBROUTINE GTCHR(ICHAR,FILNAM,IRSTSW,IEOF,IRJUST) C C C PETER LEMKIN C NATIONAL INSTITUTES OF HEALTH C BETHESDA, MD. 20014 C C C SEPT 17, 1971 C REVISED DECEMBER 4, 1972 C C ABSTRACT C -------- C GTCHR GETS SEQUENTIAL CHARACTERS, IN 6BIT ASCII RIGHT JUSTIFIED, C FROM THE SPECIFIED ".DA" FILE. SWITCH IRSTSW IS USED TO REOPEN C A FILE AT THE START OF THE FILE OR TO GET THE NEXT CHARACTER IN C THE FILE. THE FILE EOF IS DETECTED BY THE EOF(IFLAG) ROUTINE C WHICH DETECTS CONTROL/Z CHARACTERS. A LINE MAY BE UP TO 127 C CHARACTERS LONG. ANY LEGAL 6-BIT CHARACTER IS ALLOWED. C**PAGE C COMPILE AS: GTCHR.RL_GTCHR.FT C C C ARGUMENT LIST C ------------- C ICHAR - NEXT CHAR IN THE FILE (=-1 AT END OF LINE.) C FILNAM - THE *.DA ASCII SOURCE FILE. C IRSTSW - 0 TO GET THE NEXT CHARACTER. C - 1 TO REOPEN A FILE. C - 2 PRINT OUT THE CURRENT LINE ON THE OUTPUT DEVICE C - 3 TO UNDERLINE THE CURRENT CHARACTER IN THE LINE. C IEOF - 0 NO EOF FOUND ON THIS CHARACTER C - 1 EOF FOUND ON THIS CHARACTER. C IRJUST - 0 TO LEFT JUSTIFY C - 1 TO RIGHT JUSTIFY. C C C SUBROUTINES USED C ------------------ C 1. UTIL2.SB - USES THE EOF SUBROUTINE IN THIS PACKAGE. C C C C C --------------------------------------------------- C DIMENSION IA(128) C C SWITCH OFF THE EOF SWITCH IEOF=0 C C TEST IF THE FILE IS TO BE OPENED. IF(IRSTSW-1)2,1,200 C DO A DSK LOOKUP OF THE FILENAME 1 CALL IOPEN('DSK',FILNAM) C RESET THE EOF FLAG CALL EOF(ICHY) IEND=0 C ISPACE IS THE VALUE OF "SPACE" LEFT JUSTIFIED. ISPACE=32*64+32 ICOUNT=0 C C GET THE NEXT CHARACTER , TEST IF NEED A NEW BUFFER. 2 IF(ICOUNT-IEND)10,3,10 C YEP, NEED A NEW BUFFER C ZERO IT OUT FIRST. 3 DO 4 I=1,128 4 IA(I)=0 READ(4,101) (IA(J),J=1,128) 101 FORMAT(128A1) C NOW PUSH A CARRIAGE RETURN C TEST IF THERE ARE EXTRA SPACCES AT THE END OF THE LINE DO 66 K=1,127 L=128-K C COUNT BACKWARDS , SEE IF ZERO. ISSS=IA(L)-ISPACE IF(ISSS)77,66,77 66 CONTINUE 77 IEND=L C WHERE IEND IS THE INDEX OF THE LAST NON SPACE CHARACTER. C C C ICHAR=-1 ICOUNT=0 RETURN C NOW GET THE DATA CHARACTER REQUESTED. 10 ICOUNT=ICOUNT+1 C STRIP OFF THE SPACE IN THE 2ND CHARACTER POSITION. ICHAR=IA(ICOUNT)-32 C RIGHT JUSTIFY S CLA CLL S TAD I \ICHAR S RTR;RTR;RTR S AND (0077 S DCA \ICH /SAVE IT C C TEST IF RIGHT JUSTIFY IF(IRJUST-1)7,6,7 6 ICHAR=ICH C C TEST IF EOF 7 CALL EOF(ICHY) IF(ICHY+1)8,9,8 9 IEOF=1 8 RETURN C C SEE IF PRINT OR UNDERLINE IT. 200 IF(IRSTSW-2)202,202,203 202 WRITE(IERRMSG,101) (IA(K),K=1,IEND) RETURN C C UNDER LINE IT... 203 ISPC=32*64 K1=ICOUNT-1 IUPAR=30*64 WRITE(IERRMSG,101) (ISPC,K=1,K1),IUPAR RETURN C END