.TITLE SCAN. (UTIL-VAX Character Scan Routines) ;----------------------------------------------------------------------- ; ; D I S C L A I M E R N O T I C E ; ------------------- ----------- ; ; This document and/or portions of the material and data furnished ; herewith, was developed under sponsorship of the U. S. Government. ; Neither the U.S. nor the U.S.D.O.E., nor the Leland Stanford Junior ; University, nor their employees, nor their respective contractors, ; subcontractors, or their employees, makes any warranty, express or ; implied, or assumes any liability or responsibility for accuracy, ; completeness or usefulness of any information, apparatus, product ; or process disclosed, or represents that its use will not infringe ; privately-owned rights. Mention of any product, its manufacturer, ; or suppliers shall not, nor is it intended to, imply approval, dis- ; approval, or fitness for any particular use. The U. S. and the ; University at all times retain the right to use and disseminate same ; for any purpose whatsoever. Such distribution shall be made by the ; National Energy Software Center at the Argonne National Laboratory ; and only subject to the distributee furnishing satisfactory proof ; that he has a valid license from the Intel Corporation in effect. ; ;----------------------------------------------------------------------- ; ; R E V I S I O N H I S T O R Y ; ; ; 15FEB82 Alex Hunter 1. Changes required by new entry point vector ; scheme. ; ;----------------------------------------------------------------------- .SHOW EXPANSIONS .PSECT $CGROUP_VECTOR,RD,NOWRT,EXE,GBL,CON,LONG ; ; A macro to automatically generate entry point vector code ; for procedure entry points. ; .MACRO AENTRY NAME,MASK .PSECT $CGROUP_VECTOR .ENTRY V.'NAME,MASK JMP NAME+2 .PSECT UTIL_CODE .ENTRY NAME,MASK .ENDM AENTRY .PSECT UTIL_CODE,RD,NOWRT,EXE,GBL,CON,LONG ;----------------------------------------------------------------------- ; ; LOOKUP TABLE FOR NON-NUMERIC CHARACTER CLASSES. ; ;----------------------------------------------------------------------- ; BIT DEFINITIONS: ALFA = 0 ; ANY LETTER. TOKEN = 1 ; ANY CHARACTER WHICH CAN BE PART OF A TOKEN. FILE = 2 ; ANY CHARACTER WHICH CAN BE PART OF A FILENAME. BLANK = 3 ; ANY CHARACTER REPRESENTING WHITE SPACE. CRLF = 4 ; A CR OR LF. TERM = 5 ; A LINE TERMINATOR CHARACTER. LOWERCASE = 6 ; A LOWERCASE LETTER. ALFANUM = 7 ; ANY LETTER OR DIGIT. ; BIT MASKS: M.ALFA = 1@ALFA M.TOKEN = 1@TOKEN M.FILE = 1@FILE M.BLANK = 1@BLANK M.CRLF = 1@CRLF M.TERM = 1@TERM M.LOWERCASE = 1@LOWERCASE M.ALFANUM = 1@ALFANUM ; TABLE: ACLASS: .BYTE 0 ; 00 NUL .BYTE 0 ; 01 SOH .BYTE 0 ; 02 STX .BYTE 0 ; 03 ETX .BYTE 0 ; 04 EOT .BYTE 0 ; 05 ENQ .BYTE 0 ; 06 ACK .BYTE 0 ; 07 BEL .BYTE 0 ; 08 BS .BYTE ; 09 HT .BYTE ; 0A LF .BYTE 0 ; 0B VT .BYTE 0 ; 0C FF .BYTE ; 0D CR .BYTE 0 ; 0E SO .BYTE 0 ; 0F SI .BYTE 0 ; 10 DLE .BYTE 0 ; 11 DC1 .BYTE 0 ; 12 DC2 .BYTE 0 ; 13 DC3 .BYTE 0 ; 14 DC4 .BYTE 0 ; 15 NAK .BYTE 0 ; 16 SYN .BYTE 0 ; 17 ETB .BYTE 0 ; 18 CAN .BYTE 0 ; 19 EM .BYTE 0 ; 1A SUB .BYTE ; 1B ESC .BYTE 0 ; 1C FS .BYTE 0 ; 1D GS .BYTE 0 ; 1E RS .BYTE 0 ; 1F US .BYTE ; 20 SP .BYTE 0 ; 21 ! .BYTE 0 ; 22 " .BYTE 0 ; 23 # .BYTE ;(VMS only) ; 24 $ .BYTE 0 ; 25 % .BYTE 0 ; 26 & .BYTE 0 ; 27 ' .BYTE 0 ; 28 ( .BYTE 0 ; 29 ) .BYTE 0 ; 2A * .BYTE 0 ; 2B + .BYTE 0 ; 2C , .BYTE 0 ; 2D - .BYTE ; 2E . .BYTE 0 ; 2F / .BYTE ; 30 0 .BYTE ; 31 1 .BYTE ; 32 3 .BYTE ; 33 3 .BYTE ; 34 4 .BYTE ; 35 5 .BYTE ; 36 6 .BYTE ; 37 7 .BYTE ; 38 8 .BYTE ; 39 9 .BYTE ; 3A : .BYTE ; (VMS only) ; 3B ; .BYTE 0 ; 3C < .BYTE 0 ; 3D = .BYTE 0 ; 3E > .BYTE ; 3F ? .BYTE ; 40 @ .BYTE ; 41 A .BYTE ; 42 B .BYTE ; 43 C .BYTE ; 44 D .BYTE ; 45 E .BYTE ; 46 F .BYTE ; 47 G .BYTE ; 48 H .BYTE ; 49 I .BYTE ; 4A J .BYTE ; 4B K .BYTE ; 4C L .BYTE ; 4D M .BYTE ; 4E N .BYTE ; 4F O .BYTE ; 50 P .BYTE ; 51 Q .BYTE ; 52 R .BYTE ; 53 S .BYTE ; 54 T .BYTE ; 55 U .BYTE ; 56 V .BYTE ; 57 W .BYTE ; 58 X .BYTE ; 59 Y .BYTE ; 5A Z .BYTE ; (VMS only) ; 5B [ .BYTE 0 ; 5C \ .BYTE ; (VMS only) ; 5D ] .BYTE 0 ; 5E ^ .BYTE ; 5F _ .BYTE 0 ; 60 ` .BYTE ; 61 a .BYTE ; 62 b .BYTE ; 63 c .BYTE ; 64 d .BYTE ; 65 e .BYTE ; 66 f .BYTE ; 67 g .BYTE ; 68 h .BYTE ; 69 i .BYTE ; 6A j .BYTE ; 6B k .BYTE ; 6C l .BYTE ; 6D m .BYTE ; 6E n .BYTE ; 6F o .BYTE ; 70 p .BYTE ; 71 q .BYTE ; 72 r .BYTE ; 73 s .BYTE ; 74 t .BYTE ; 75 u .BYTE ; 76 v .BYTE ; 77 w .BYTE ; 78 x .BYTE ; 79 y .BYTE ; 7A z .BYTE 0 ; 7B { .BYTE 0 ; 7C | .BYTE 0 ; 7D } .BYTE 0 ; 7E ~ .BYTE 0 ; 7F DEL .BYTE 0[128] ; (Just in case...) ; 80-FF. ;----------------------------------------------------------------------- ; ; LOOKUP TABLE FOR NUMERIC CHARACTER CLASSES. ; ; BITS <3:0> OF EACH ENTRY REPRESENT THE BINARY VALUE OF THE ; CORRESPONDING ASCII CHARACTER. ; ; OTHER BITS ARE DEFINED BELOW. ; ;----------------------------------------------------------------------- BINARY = 4 ; BINARY DIGIT. OCTAL = 5 ; OCTAL DIGIT. DECIMAL = 6 ; DECIMAL DIGIT. HEX = 7 ; HEXADECIMAL DIGIT. ; BIT MASKS: M.BINARY = 1@BINARY M.OCTAL = 1@OCTAL M.DECIMAL = 1@DECIMAL M.HEX = 1@HEX ; LOOKUP TABLE: NCLASS: .BYTE 0 ; 00 NUL .BYTE 0 ; 01 SOH .BYTE 0 ; 02 STX .BYTE 0 ; 03 ETX .BYTE 0 ; 04 EOT .BYTE 0 ; 05 ENQ .BYTE 0 ; 06 ACK .BYTE 0 ; 07 BEL .BYTE 0 ; 08 BS .BYTE 0 ; 09 HT .BYTE 0 ; 0A LF .BYTE 0 ; 0B VT .BYTE 0 ; 0C FF .BYTE 0 ; 0D CR .BYTE 0 ; 0E SO .BYTE 0 ; 0F SI .BYTE 0 ; 10 DLE .BYTE 0 ; 11 DC1 .BYTE 0 ; 12 DC2 .BYTE 0 ; 13 DC3 .BYTE 0 ; 14 DC4 .BYTE 0 ; 15 NAK .BYTE 0 ; 16 SYN .BYTE 0 ; 17 ETB .BYTE 0 ; 18 CAN .BYTE 0 ; 19 EM .BYTE 0 ; 1A SUB .BYTE 0 ; 1B ESC .BYTE 0 ; 1C FS .BYTE 0 ; 1D GS .BYTE 0 ; 1E RS .BYTE 0 ; 1F US .BYTE 0 ; 20 SP .BYTE 0 ; 21 ! .BYTE 0 ; 22 " .BYTE 0 ; 23 # .BYTE 0 ; 24 $ .BYTE 0 ; 25 % .BYTE 0 ; 26 & .BYTE 0 ; 27 ' .BYTE 0 ; 28 ( .BYTE 0 ; 29 ) .BYTE 0 ; 2A * .BYTE 0 ; 2B + .BYTE 0 ; 2C , .BYTE 0 ; 2D - .BYTE 0 ; 2E . .BYTE 0 ; 2F / .BYTE +0 ; 30 0 .BYTE +1 ; 31 1 .BYTE +2 ; 32 3 .BYTE +3 ; 33 3 .BYTE +4 ; 34 4 .BYTE +5 ; 35 5 .BYTE +6 ; 36 6 .BYTE +7 ; 37 7 .BYTE +8 ; 38 8 .BYTE +9 ; 39 9 .BYTE 0 ; 3A : .BYTE 0 ; 3B ; .BYTE 0 ; 3C < .BYTE 0 ; 3D = .BYTE 0 ; 3E > .BYTE 0 ; 3F ? .BYTE 0 ; 40 @ .BYTE +10 ; 41 A .BYTE +11 ; 42 B .BYTE +12 ; 43 C .BYTE +13 ; 44 D .BYTE +14 ; 45 E .BYTE +15 ; 46 F .BYTE 0 ; 47 G .BYTE 0 ; 48 H .BYTE 0 ; 49 I .BYTE 0 ; 4A J .BYTE 0 ; 4B K .BYTE 0 ; 4C L .BYTE 0 ; 4D M .BYTE 0 ; 4E N .BYTE 0 ; 4F O .BYTE 0 ; 50 P .BYTE 0 ; 51 Q .BYTE 0 ; 52 R .BYTE 0 ; 53 S .BYTE 0 ; 54 T .BYTE 0 ; 55 U .BYTE 0 ; 56 V .BYTE 0 ; 57 W .BYTE 0 ; 58 X .BYTE 0 ; 59 Y .BYTE 0 ; 5A Z .BYTE 0 ; 5B [ .BYTE 0 ; 5C \ .BYTE 0 ; 5D ] .BYTE 0 ; 5E ^ .BYTE 0 ; 5F _ .BYTE 0 ; 60 ` .BYTE +10 ; 61 a .BYTE +11 ; 62 b .BYTE +12 ; 63 c .BYTE +13 ; 64 d .BYTE +14 ; 65 e .BYTE +15 ; 66 f .BYTE 0 ; 67 g .BYTE 0 ; 68 h .BYTE 0 ; 69 i .BYTE 0 ; 6A j .BYTE 0 ; 6B k .BYTE 0 ; 6C l .BYTE 0 ; 6D m .BYTE 0 ; 6E n .BYTE 0 ; 6F o .BYTE 0 ; 70 p .BYTE 0 ; 71 q .BYTE 0 ; 72 r .BYTE 0 ; 73 s .BYTE 0 ; 74 t .BYTE 0 ; 75 u .BYTE 0 ; 76 v .BYTE 0 ; 77 w .BYTE 0 ; 78 x .BYTE 0 ; 79 y .BYTE 0 ; 7A z .BYTE 0 ; 7B { .BYTE 0 ; 7C | .BYTE 0 ; 7D } .BYTE 0 ; 7E ~ .BYTE 0 ; 7F DEL .BYTE 0[128] ; (Just in case...) ; 80-FF. ;----------------------------------------------------------------------- ; ; CHARACTER SCAN PROCEDURES. ; ;----------------------------------------------------------------------- AENTRY DDIGCH,<^M<>> MOVZBL @W^SCANP-K.(R11),R0 EXTV #DECIMAL,#1,NCLASS[R0],R0 RET AENTRY QDIGCH,<^M<>> MOVZBL @W^SCANP-K.(R11),R0 EXTV #OCTAL,#1,NCLASS[R0],R0 RET AENTRY BDIGCH,<^M<>> MOVZBL @W^SCANP-K.(R11),R0 EXTV #BINARY,#1,NCLASS[R0],R0 RET AENTRY HDIGCH,<^M<>> MOVZBL @W^SCANP-K.(R11),R0 EXTV #HEX,#1,NCLASS[R0],R0 RET AENTRY ANYCH,<^M<>> MCOML #0,R0 RET AENTRY FORCUP,<^M<>> MOVZBL @W^SCANP-K.(R11),R0 BBC #LOWERCASE,ACLASS[R0],1$ SUBB2 #<^A'a'-^A'A'>,R0 ; Convert lowercase to uppercase. 1$: RET AENTRY LETRCH,<^M<>> MOVZBL @W^SCANP-K.(R11),R0 EXTV #ALFA,#1,ACLASS[R0],R0 RET AENTRY LTNMCH,<^M<>> MOVZBL @W^SCANP-K.(R11),R0 EXTV #ALFANUM,#1,ACLASS[R0],R0 RET AENTRY TOKCH,<^M<>> MOVZBL @W^SCANP-K.(R11),R0 EXTV #TOKEN,#1,ACLASS[R0],R0 RET AENTRY FILECH,<^M<>> MOVZBL @W^SCANP-K.(R11),R0 EXTV #FILE,#1,ACLASS[R0],R0 RET AENTRY CRLFCH,<^M<>> MOVZBL @W^SCANP-K.(R11),R0 EXTV #CRLF,#1,ACLASS[R0],R0 RET AENTRY TERMCH,<^M<>> MOVZBL @W^SCANP-K.(R11),R0 EXTV #TERM,#1,ACLASS[R0],R0 RET AENTRY BLNKCH,<^M<>> MOVZBL @W^SCANP-K.(R11),R0 EXTV #BLANK,#1,ACLASS[R0],R0 RET AENTRY ASCBIN,<^M<>> MOVZBL @W^SCANP-K.(R11),R0 EXTZV #0,#4,NCLASS[R0],R0 RET .END