User Tools

Site Tools


cdc:nos2.source:nam5871:lfggnt

LFGGNT

Table Of Contents

  • [00002] PROC LFGGNT(TOKEN,COL,LENGTH,TYPE,LINE)
  • [00006] - GET NEXT TOKEN.

Source Code

LFGGNT.txt
  1. *DECK LFGGNT
  2. PROC LFGGNT(TOKEN,COL,LENGTH,TYPE,LINE);
  3. BEGIN # GET NEXT TOKEN #
  4. *IF,DEF,IMS
  5. #
  6. ** LFGGNT -- GET NEXT TOKEN.
  7. *
  8. * D.K. ENDO 81/16/12
  9. *
  10. * LFGGNT FORMS THE NEXT TOKEN ON THE SOURCE LINE AND CLASSIFIES IT.
  11. * IF CHARACTER 72 IS REACHED, AN END OF CARD STATUS IS RETURNED.
  12. *
  13. * PROC LFGGNT(TOKEN,COL,LENGTH,TYPE,LINE)
  14. *
  15. * ENTRY COL = POINTER TO CURRENT CHARACTER.
  16. * LINE = SOURCE LINE TO BE PARSED.
  17. *
  18. * EXIT TOKEN = TOKEN FORMED.
  19. * COL = NEXT CHARACTER TO BEGIN SCAN.
  20. * LENGTH = CHARACTER COUNT OF TOKEN.
  21. * TYPE = CLASSIFICATION OF TOKEN.
  22. *
  23. * METHOD
  24. *
  25. * CLEAR TOKEN,COL, AND LENGTH.
  26. * IF COL IS GREATER THAN MAX,
  27. * THEN,
  28. * SET TYPE TO EOC.
  29. * OTHERWISE,
  30. * FOR EACH CHARACTER UNTIL EOC OR TOKEN IS FORMED,
  31. * SELECT CASE THAT APPLIES,
  32. * CASE 1(ALPHANUMERIC):
  33. * IF LENGTH IS NOT GREATER THAN TEN,
  34. * STORE CHARACTER.
  35. * INCREMENT LENGTH.
  36. * INCREMENT COL.
  37. * CASE 2(DELIMITER):
  38. * IF NAME IS BEING FORMED,
  39. * THEN,
  40. * SET TYPE TO NAME.
  41. * OTHERWISE,
  42. * STORE CHARACTER.
  43. * INCREMENT LENGTH AND COL.
  44. * SET TYPE TO DELIMITER
  45. * CASE 3(SPECIAL):
  46. * IF NAME IS BEING FORMED,
  47. * THEN,
  48. * SET TYPE TO NAME.
  49. * OTHERWISE,
  50. * STORE CHARACTER.
  51. * INCREMENT LENGTH AND COL.
  52. * SET TYPE TO UNKNOWN.
  53. * CASE 4(BLANK):
  54. * IF NAME IS BEING FORMED,
  55. * THEN
  56. * SET TYPE TO NAME.
  57. * OTHERWISE,
  58. * INCREMENT COL.
  59. * IF NO TOKEN WAS FORMED
  60. * SET TYPE TO EOC.
  61. *
  62. #
  63. *ENDIF
  64. ITEM TOKEN C(10); # FORMED TOKEN #
  65. ITEM COL I; # CHARACTER POINTER #
  66. ITEM LENGTH I; # LENGTH OF TOKEN #
  67. ITEM TYPE I; # CLASSIFICATION OF TOKEN #
  68. ARRAY LINE [0:0] S(8); # SOURCE LINE TO BE PARSED #
  69. BEGIN
  70. ITEM LINE$TEXT C(00,00,80); # SOURCE LINE TEXT #
  71. END
  72. DEF MXCOL # 72 #; # LAST CHARACTER TO BE SCANNED #
  73. STATUS STAT UNK, # STATUS TYPE FOR TOKEN #
  74. NAME,
  75. DELIM,
  76. EOC;
  77. ITEM CTEMP C(1); # CHARACTER TEMPORARY #
  78. ITEM EXIT B; # EXIT FLAG #
  79. ITEM I I; # SCRATCH ITEM #
  80. SWITCH GNTSWTCH SPECIAL, # COLON #
  81. ALPHANUM, # A #
  82. ALPHANUM, # B #
  83. ALPHANUM, # C #
  84. ALPHANUM, # D #
  85. ALPHANUM, # E #
  86. ALPHANUM, # F #
  87. ALPHANUM, # G #
  88. ALPHANUM, # H #
  89. ALPHANUM, # I #
  90. ALPHANUM, # J #
  91. ALPHANUM, # K #
  92. ALPHANUM, # L #
  93. ALPHANUM, # M #
  94. ALPHANUM, # N #
  95. ALPHANUM, # O #
  96. ALPHANUM, # P #
  97. ALPHANUM, # Q #
  98. ALPHANUM, # R #
  99. ALPHANUM, # S #
  100. ALPHANUM, # T #
  101. ALPHANUM, # U #
  102. ALPHANUM, # V #
  103. ALPHANUM, # W #
  104. ALPHANUM, # X #
  105. ALPHANUM, # Y #
  106. ALPHANUM, # Z #
  107. ALPHANUM, # 0 #
  108. ALPHANUM, # 1 #
  109. ALPHANUM, # 2 #
  110. ALPHANUM, # 3 #
  111. ALPHANUM, # 4 #
  112. ALPHANUM, # 5 #
  113. ALPHANUM, # 6 #
  114. ALPHANUM, # 7 #
  115. ALPHANUM, # 8 #
  116. ALPHANUM, # 9 #
  117. SPECIAL, # + #
  118. SPECIAL, # - #
  119. DELIM, # * #
  120. SPECIAL, # / #
  121. SPECIAL, # ( #
  122. SPECIAL, # ) #
  123. SPECIAL, # $ #
  124. SPECIAL, # = #
  125. BLANK, # BLANK #
  126. DELIM, # , #
  127. SPECIAL, # . #
  128. SPECIAL, # EQUIV #
  129. SPECIAL, # [ #
  130. SPECIAL, # ] #
  131. SPECIAL, # % (FOR 63 CODE SET -- COLON) #
  132. SPECIAL, # " #
  133. SPECIAL, # _ #
  134. SPECIAL, # ! #
  135. SPECIAL, # & #
  136. SPECIAL, # ' #
  137. SPECIAL, # ? #
  138. SPECIAL, # < #
  139. SPECIAL, # > #
  140. SPECIAL, # @ #
  141. SPECIAL, # \ #
  142. SPECIAL, # ^ #
  143. SPECIAL; # SEMICOLON #
  144. CONTROL EJECT;
  145. # #
  146. # LFGGNT CODE BEGINS HERE #
  147. # #
  148. EXIT = FALSE; # CLEAR EXIT FLAG #
  149. LENGTH = 0; # CLEAR LENGTH #
  150. TOKEN = " "; # CLEAR TOKEN #
  151. IF COL LS MXCOL # IF NOT END OF CARD #
  152. THEN
  153. BEGIN
  154. FOR I=0 WHILE NOT EXIT AND COL LS MXCOL
  155. DO # FOR EACH CHARACTER UNTIL EOC OR #
  156. BEGIN # FORMING OF TOKEN #
  157. CTEMP = C<COL,1>LINE$TEXT[0];
  158. GOTO GNTSWTCH[CTEMP]; # SWITCH BASED ON CHARACTER #
  159. ALPHANUM:
  160. IF LENGTH LS 10 # IF TOKEN IS NOT FULL #
  161. THEN
  162. BEGIN
  163. C<LENGTH,1>TOKEN = CTEMP; # PUT CHARACTER IN TOKEN #
  164. END
  165. LENGTH = LENGTH + 1; # INCREMENT LENGTH #
  166. COL = COL + 1; # POINT TO NEXT COLUMN #
  167. TEST I;
  168. DELIM:
  169. IF LENGTH EQ 0 # IF NOT CURRENTLY FORMING NAME #
  170. THEN
  171. BEGIN
  172. TOKEN = CTEMP; # PUT DELIMITER IN TOKEN #
  173. TYPE = STAT"DELIM"; # SET TYPE TO DELIMITER #
  174. COL = COL + 1; # POINT TO NEXT COLUMN #
  175. LENGTH = 1; # SET LENGTH #
  176. END
  177. ELSE # MUST HAVE NAME IN TOKEN #
  178. BEGIN
  179. TYPE = STAT"NAME"; # SET TYPE TO NAME #
  180. END
  181. EXIT = TRUE; # SET EXIT FLAG #
  182. TEST I;
  183. SPECIAL:
  184. IF LENGTH EQ 0 # IF NOT CURRENTLY FORMING NAME #
  185. THEN
  186. BEGIN
  187. TOKEN = CTEMP; # PUT CHARACTER IN TOKEN #
  188. TYPE = STAT"UNK"; # SET TYPE TO UNKNOWN #
  189. COL = COL + 1; # POINT TO NEXT COLUMN #
  190. LENGTH = 1; # SET LENGTH #
  191. END
  192. ELSE # MUST BE FORMING A NAME #
  193. BEGIN
  194. TYPE = STAT"NAME"; # SET TYPE TO NAME #
  195. END
  196. EXIT = TRUE; # SET EXIT FLAG #
  197. TEST I;
  198. BLANK:
  199. IF LENGTH NQ 0 # IF CURRENTLY FORMING A NAME #
  200. THEN
  201. BEGIN
  202. TYPE = STAT"NAME"; # SET TYPE TO NAME #
  203. EXIT = TRUE; # SET EXIT FLAG #
  204. END
  205. ELSE # NOTHING FORMED YET #
  206. BEGIN
  207. COL = COL + 1; # INCREMENT CHARACTER POINTER #
  208. END
  209. END
  210. IF LENGTH EQ 0 # IF NO TOKEN WAS FORMED #
  211. THEN
  212. BEGIN
  213. TYPE = STAT"EOC"; # SET TYPE TO END OF CARD #
  214. END
  215. END
  216. ELSE # HAVE REACHED END OF CARD #
  217. BEGIN
  218. TYPE = STAT"EOC"; # SET TYPE TO INDICATE SO #
  219. END
  220. RETURN; # **** RETURN **** #
  221. END # LFGGNT #
  222. TERM
cdc/nos2.source/nam5871/lfggnt.txt · Last modified: 2023/08/05 17:22 by Site Administrator