1  REM THIS BASIC LANGUAGE PROGRAM IS DESIGNED TO OPERATE ON THE HP 2000
2  REM COMPUTER SYSTEM. IT PERMITS THE HP 7260 OPTICAL MARK READER TO BE
3  REM  USED TO INPUT BASIC LANGUAGE PROGRAMS MARKED ON HP MARKED CARD BASIC
4  REM CARDS (HP PART NO. 9320-2051 )
5  REM 1. THE PROGRAM AUTOMATICALLY CREATES A DISC FILE OF SUFFICIENT SIZE
6  REM    TO STORE AN INPUT PROGRAM.
7  REM 2. DURING READING OF THE BASIC CARDS THE PROGRAM CHECKS FOR INVALID
8  REM    MARKS OR COMBINATIONS OF MARKS AND AT THE END OF THE INPUT PHASE
9  REM    LISTS ERRORS ON THE USER'S TERMINAL.
10  REM 3. THOUGH THE CARDS HAVE BOXES TO PERMIT THE MARKING OF THE FOLLOWING
11  REM    SYSTEM COMMANDS "SCRATCH, LIST, RUN AND PUNCH ", THESE COMMANDS
12  REM    WILL NOT BE ACCEPTED BY THE SYSTEM WHEN THE FILE IS LOADED AS A
13  REM    PROGRAM.
14  REM 4. A MARK MADE IN THE " STATEMENT " BOX ON THE CARD IS INTERPRETED
15  REM    AS A BLANK.
16  REM 5. THE BOXES REFERRED TO IN 3 AND 4 ABOVE MAY BE USED FOR OTHER
17  REM    PURPOSES BY CHANGING THE CONTENTS OF THE STRINGS C1$ AND B1$
18  REM    THESE WILL BE FOUND IN LINES 120 AND 170.
19  REM
20  REM FOR INFORMATION ON THE USE OF THE HP 7260A OPTICAL MARK READER WITH
21  REM THE HP 2000 COMPUTER SYSTEM REFER TO APPLICATION NOTE 5953-0101
22  DIM F0$[15],F1$[6]
23  DIM D$[6],G$[6],K$[6],B$[42],A$[80],R$[80],C$[42],C1$[42],B1$[42]
24  DIM H$[4],P$[2]
25  DIM X$[80],R0$[80]
26  DIM E$[15],E0$[28]
27  DIM E1$[15],F$[28]
28  DIM U[38],M$[25]
29  DIM P1$[3]
30  P1=0
31  FILES *,*
32  PRINT "USING LINEPRINTER (Y)?";
33  ENTER 255,Y0,P1$
34  IF P1$[1,1] <> "Y" THEN 42
35  P1=2
36  ASSIGN "LP",P1,Y0
37  IF Y0 <> 3 THEN 42
38  PRINT LIN(2)"LINEPRINTER NOT ACCESSIBLE."
39  P1=0
40  GOTO 436
41  REM====================================================18
42  C$="COM    RESTORESTOP   GOSUB  END    NEXT   "
43  C1$="IF     PRINT  READ          PUNCH  LIST   "
44  D$="987654"
45  G$="3210"
46  K$="ABDHP "
47  B$="MAT    REM    RETURN DEF    DIM    FOR    "
48  B1$="GOTO   DATA   LET           RUN    SCRATCH"
49  F0$="$TL[RJ!QI PDBAH"
50  F1$=" PHDBA"
51  H$=" PH@"
52  E$="ABCDEFGHI=,1230"
53  E0$="    JKL4MNO5PQR6STU7VWX8YZ.9"
54  E1$="+-*/^;<>#()1230"
55  F$="    [:$4?%@5&' 6STU7VWX8YZ.9"
56  GOSUB 328
57  S=N1=0
58  REM======================READ A CARD========================
59  N=K1=F5=P=C7=0
60  GOSUB 113
61  IF N=0 AND C7=0 THEN 252
62  IF N <> 0 AND C7 <> 0 THEN 66
63  IF C7 <> 0 THEN 69
64  GOSUB 426
65  GOTO 59
66  GOSUB 426
67  F5=1
68  GOTO 71
69  R0$[K1+1,K1+K]=R$[1,K]
70  K1=K1+K
71  N=P=0
72  GOSUB 113
73  IF P=0 THEN 89
74  F5=0
75  K1=0
76  PRINT '10'9'17
77  PRINT #P1;"CARD NUMBER "S
78  PRINT #P1;"BAD CONT. CHARACTER"
79  IF N=0 THEN 84
80  GOSUB 428
81  IF C7=0 THEN 59
82  F5=1
83  GOTO 71
84  R0$[K1+1,K1+K]=R$[1,K]
85  K1=K1+K
86  IF C7=0 THEN 88
87  GOTO 71
88  GOTO 252
89  IF N=0 THEN 94
90  GOSUB 426
91  K1=0
92  IF C7=0 THEN 59
93  GOTO 82
94  IF C7=0 THEN 99
95  IF K1+K>80 THEN 109
96  R0$[K1+1,K1+K]=R$[1,K]
97  K1=K1+K
98  GOTO 71
99  IF F5=0 THEN 104
100  PRINT '10'9'17
101  PRINT #P1;"CARD NUMBER "S
102  PRINT #P1;" BAD CONT. CARD FROM PREVIOUS CARD"
103  GOTO 59
104  IF K1+K>80 THEN 109
105  R0$[K1+1,K1+K]=R$[1,K]
106  K=K1+K
107  R$[1,K]=R0$[1,K]
108  GOTO 252
109  PRINT '10'9'17
110  PRINT #P1;"CARD NUMBER "S
111  PRINT #P1;"NUMBER OF CHARACTERS EXCEED 80 - ON CONT. CARDS"
112  GOTO 59
113  R$[1,1]=" "
114  PRINT '10'18'17
115  PRINT '10'25;
116  SYSTEM R,"ECHO-OFF"
117  LINPUT A$
118  SYSTEM R,"ECHO-ON"
119  IF A$ <> '9 THEN 121
120  GOTO 301
121  IF A$='7 THEN 310
122  REM
123  REM====================DECODE STATEMENT NUMBER-COLUMN 1-4=========
124  K=0
125  S=S+1
126  FOR I=5 TO 11 STEP 2
127  K=K+1
128  GOSUB 255
129  IF (A0+A1)=0 THEN 146
130  IF (A0+A1)=2 THEN 145
131  REM GET A DIGIT
132  IF A1=1 THEN 138
133  REM
134  J=POS(K$,A$[I,I])
135  IF J=0 THEN 145
136  R$[K,K]=D$[J,J]
137  GOTO 147
138  REM
139  J=POS(K$[1,4],A$[I+1,I+1])
140  REM
141  IF J=0 THEN 145
142  R$[K,K]=G$[J,J]
143  GOTO 147
144  REM
145  GOSUB 421
146  K=K-1
147  NEXT I
148  REM
149  REM==========================DECODE STATEMENT COLUMN #5==================
150  REM
151  I=13
152  K=K+1
153  B=0
154  GOSUB 255
155  IF (A0+A1)=0 THEN 173
156  IF (A1+A0)=2 THEN 172
157  IF A1=1 THEN 165
158  X=0
159  GOSUB 267
160  IF C=0 THEN 172
161  R$[K,K+6]=B$[C,C+6]
162  K=K+6
163  B=1
164  GOTO 177
165  X=1
166  GOSUB 267
167  IF C=0 THEN 172
168  R$[K,K+6]=B1$[C,C+6]
169  K=K+6
170  B=1
171  GOTO 177
172  GOSUB 421
173  K=K-1
174  REM
175  REM=================DECODE STATEMENT COLUMN #6====================
176  REM
177  I=15
178  K=K+1
179  GOSUB 255
180  IF (A0+A1)=2 THEN 196
181  IF (A0+A1)=0 THEN 197
182  IF B=1 THEN 196
183  IF A1=1 THEN 190
184  X=0
185  GOSUB 267
186  IF C=0 THEN 196
187  R$[K,K+6]=C$[C,C+6]
188  K=K+6
189  GOTO 201
190  X=1
191  GOSUB 267
192  IF C=0 THEN 196
193  R$[K,K+6]=C1$[C,C+6]
194  K=K+6
195  GOTO 201
196  GOSUB 421
197  K=K-1
198  REM
199  REM==================DECODE ODD COLUMN 7 TO 35=================
200  REM
201  I=17
202  K=K+1
203  GOSUB 255
204  IF (A0+A1) <> 0 THEN 207
205  K=K-1
206  GOTO 217
207  IF A0 <> 0 THEN 214
208  GOSUB 276
209  IF C <> 0 THEN 212
210  GOSUB 421
211  GOTO 205
212  R$[K,K]=E$[C,C]
213  GOTO 217
214  GOSUB 290
215  IF C=0 THEN 210
216  R$[K,K]=E0$[C,C]
217  I=I+2
218  REM==================DECODE EVEN COLUMN 8 TO 36================
219  K=K+1
220  GOSUB 255
221  IF (A0+A1) <> 0 THEN 224
222  K=K-1
223  GOTO 236
224  IF A0 <> 0 THEN 231
225  GOSUB 276
226  IF C <> 0 THEN 229
227  GOSUB 421
228  GOTO 222
229  R$[K,K]=E1$[C,C]
230  GOTO 236
231  GOSUB 290
232  IF C=0 THEN 227
233  R$[K,K]=F$[C,C]
234  IF R$[K,K] <> F$[5,5] THEN 236
235  R$[K,K]='34
236  I=I+2
237  IF I <= 75 THEN 239
238  GOTO 241
239  K=K+1
240  GOTO 203
241  REM=================DECODE COLUMN 37====================
242  I=77
243  C7=0
244  IF A$[77,78]="@@" THEN 249
245  IF A$[77,78]="@ " THEN 248
246  GOSUB 421
247  RETURN 
248  C7=1
249  RETURN 
250  REM===============TEMPORARY END==============
251  REM
252  IF  END #1 THEN 384
253  PRINT #1;R$[1,K]
254  GOTO 59
255  REM
256  REM ===================# OF IMAGE CHARACT. /COLUMN===============
257  REM
258  A0=0
259  A1=0
260  IF A$[I,I]="@" THEN 262
261  A0=1
262  IF A$[1+I,1+I]="@" THEN 264
263  A1=1
264  IF I>15 AND C7 <> 0 THEN 266
265  P=P+A0+A1
266  RETURN 
267  REM===============GET IMAGE CHARCT. (COLUMNS 5/6)=================
268  REM
269  J=POS(K$[1,6],A$[X+I,X+I])
270  IF J <> 0 THEN 273
271  C=0
272  RETURN 
273  C=(J-1)*7+1
274  RETURN 
275  REM
276  REM
277  REM===============GET INDEX FOR FINAL CHAR. COLUMN 7-37============
278  REM
279  J=POS(F0$[1,15],A$[I+1,I+1])
280  IF J <> 0 THEN 288
281  REM
282  IF A$[1+I,1+I] <> '34 THEN 285
283  C=4
284  GOTO 289
285  REM
286  C=0
287  RETURN 
288  C=J
289  RETURN 
290  REM
291  J=POS(F1$[1,6],A$[I,I])
292  IF J <> 0 THEN 294
293  GOTO 285
294  REM
295  L=POS(H$[1,4],A$[I+1,I+1])
296  IF L <> 0 THEN 298
297  GOTO 285
298  C=J*4+L
299  RETURN 
300  GOTO 434
301  REM====================PICK FAIL STATUS====================
302  PRINT '10'9'17
303  PRINT '7;TAB(20);"PICK FAIL"
304  PRINT TAB(15);
305  PRINT "RELOAD CARDS THEN PRESS READY"
306  LINPUT X$
307  IF LEN(X$)>1 THEN 326
308  IF X$='18 THEN 324
309  IF X$ <> '7 THEN 322
310  PRINT '10'9'17
311  PRINT #P1;"NUMBER OF CARDS READ IS: ";S
312  PRINT #P1;"NUMBER OF BAD CARDS IS: ";N1
313  IF C7 <> 1 THEN 315
314  PRINT #P1;"LAST CARD(S) NOT STORED - MISSING CONT. CARD "
315  PRINT TAB(25);'7"INPUT HOPPER EMPTY OR OUTPUT HOPPER FULL"
316  PRINT TAB(30);"DO YOU WANT TO STORE MORE CARDS?"
317  PRINT TAB(35);"ANSWER BY YES OR NO"
318  LINPUT X$
319  IF X$="YES" THEN 412
320  IF X$="NO" THEN 393
321  GOTO 317
322  IF X$='9 THEN 302
323  GOTO 304
324  REM
325  GOTO 59
326  A$=X$
327  GOTO 121
328  REM================ASK FILE===================
329  PRINT 
330  PRINT "      "'7'7" FILE NAME FOR YOUR CARDS?"
331  M$="FILES-      ,DS,XXX,40"
332  INPUT M$[7,12]
333  PRINT "      ENTER # OF CARDS TO BE READ "
334  INPUT O
335  O=INT(O*40/256)+5
336  CONVERT O TO M$[17,19]
337  SYSTEM R,M$
338  IF R <> 0 THEN 356
339  ASSIGN M$[7,12],1,R
340  IF R <> 0 THEN 384
341  PRINT #P1;"THE PROGRAM HAS CREATED : ";
342  PRINT #P1;"A DISC FILE CALLED ";
343  PRINT #P1;M$[7,12]
344  PRINT #P1;TAB(27);
345  PRINT #P1;"SIZE OF ";
346  PRINT #P1;M$[17,19];
347  PRINT #P1;"BLOCKS OF 256 WORDS EACH"
348  PRINT #P1;TAB(27);"MAX. RECORD SIZE IS 40 WORDS"
349  RETURN 
350  PRINT "FILE ALREADY USED. DO YOU WANT TO UPDATE OR REPLACE PROGRAM?"
351  PRINT "                ANSWER BY UP OR RE "
352  INPUT P$
353  IF P$="UP" THEN 371
354  IF P$="RE" THEN 379
355  GOTO 350
356  REM
357  M$[1,5]="CAT"
358  SYSTEM A$,M$[1,12]
359  IF A$[8,9] <> "AL" THEN 365
360  CONVERT A$[10,15] TO G
361  IF G<O THEN 367
362  CONVERT A$[17,21] TO G
363  IF G<40 THEN 369
364  GOTO 350
365  U=1
366  GOTO 384
367  U=2
368  GOTO 384
369  U=3
370  GOTO 384
371  REM==============POS IN FILE==============
372  ASSIGN M$[7,12],1,R
373  IF R <> 0 THEN 384
374  PRINT #1;CTL(24)
375  IF  END #1 THEN 349
376  READ #1;A$
377  IF TYP(-1)=3 THEN 349
378  GOTO 376
379  REM============REPLACE PROGRAM================
380  ASSIGN M$[7,12],1,R
381  IF R <> 0 THEN 384
382  PRINT #1;CTL(24)
383  GOTO 349
384  PRINT TAB(15);'7"BAD NEWS! CAN'T USE THE FILE: ";
385  GOTO U OF 386,388,390
386  PRINT "ILLEGAL FILE TYPE"
387  GOTO 391
388  PRINT "FILE TOO SMALL"
389  GOTO 391
390  PRINT "RECORD LENGTH TOO SMALL"
391  PRINT TAB(15);"PROGRAM ABORTED. TRY AGAIN."
392  GOTO 434
393  REM==================FILE LISTING==========================
394  PRINT "DO YOU WANT A LISTING OF ";M$[7,12];"?";
395  PRINT "(YES/NO)";
396  LINPUT X$
397  IF X$="YES" THEN 400
398  IF X$="NO" THEN 415
399  GOTO 394
400  PRINT #1;CTL(24)
401  PRINT #P1;"CRD#  CARD CONTENTS"
402  PRINT #P1
403  I=0
404  I=I+1
405  IF  END #1 THEN 409
406  LINPUT #1;A$
407  PRINT #P1;I;A$
408  GOTO 404
409  PRINT #P1
410  PRINT #P1;TAB(6);"END OF FILE ";M$[7,12]
411  GOTO 415
412  PRINT "RUN AGAIN THIS PROGRAM BUT:";
413  PRINT "DECLARE SAME FILE ";M$[7,12];" IF LARGE ENOUGH"
414  PRINT "AND UPDATE IT "
415  PRINT #P1;"TO LOAD THIS FILE AS PROGRAM : - TYPE "
416  PRINT #P1;"                    SCR"
417  PRINT #P1;"                      LOAD-";M$[7,12]
418  PRINT #P1;"ANY SYNTAX ERRORS WILL THEN BE LISTED"
419  PRINT #P1;"YOU MAY CORRECT THEN RUN THE PROGRAM "
420  GOTO 434
421  REM=================KEEP TRACK OF ERRORS================
422  N=N+1
423  U[N]=(I-3)/2
424  RETURN 
425  REM======================PRINT ERRORS======================
426  PRINT '10'9'17
427  PRINT #P1;"CARD NUMBER "S
428  PRINT #P1;'7"ERROR IN COLUMN # ";
429  FOR Y=1 TO N
430  PRINT #P1;U[Y];
431  NEXT Y
432  N1=N1+1
433  RETURN 
434  REM===============SET O.M.R. BACK INTO HOLLERITH MODE==========
435  PRINT '10'20'17
436  END 
