1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM        LODUMP:   FILE LOAD/DUMP
4  REM
5  REM        36644A REV A   10/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ************************************
10  REM:  "LODUMP" CREATES AND LOADS PACKED PAPER TAPE COPIES OF
20  REM:  SERIAL FILES.  FILES CAN ALSO BE LOADED WITH COMPATIBLE
30  REM:  MANUALLY PREPARED TAPES OR KEYBOARD INPUT.
40  REM:
100  FILES *
110  DIM A$[72],F$[13],N$[6],I$[3],R$[6],E$[7]
120  PRINT '10"FILE NAME ";
130  INPUT A$
140  ASSIGN A$,1,J
150  GOTO J+1 OF 190,180,180
160  PRINT '10"FILES DOES NOT EXIST"
170  GOTO 120
180  PRINT '10"FILE IS READ-ONLY"
190  PRINT '10"LOAD OR DUMP ";
200  INPUT A$
210  IF A$[1,1]#"L" THEN 1000
220  REM:
230  REM: ***** LOAD FILE *****
240  REM:
250  PRINT '10"DO YOU WANT TO ADD TO THE EXISTING FILE ";
260  INPUT A$
270  IF A$[1,1]="N" THEN 330
280  GOTO TYP(1) OF 290,310,330
290  READ #1;N
300  GOTO 280
310  READ #1;A$
320  GOTO 280
330  IF  END #1 THEN 920
340  PRINT '10"START TAPE READER OR MANUAL INPUT"'10'10
350  F$="0123456789-+."
360  E=P=N=S=Z=0
370  ENTER 255,J,A$
380  B=1
381  IF A$[1,1]#'3 THEN 390
382  GOTO 1900
390  FOR I=1 TO LEN(A$)
400  IF A$[I,I]=" " THEN 620
410  IF Z=2 THEN 840
420  IF A$[I,I]='92 THEN 860
430  FOR X=1 TO 13
440  IF A$[I,I]=F$[X,X] THEN 500
450  NEXT X
460  IF Z THEN 580
470  Z=2
480  I=I-1
490  GOTO 840
500  IF X<11 THEN 810
510  IF X>12 THEN 550
520  IF Z OR S THEN 470
530  S=2*X-23
540  GOTO 840
550  IF P THEN 470
560  P=1
570  GOTO 840
580  IF A$[I,I]#"E" THEN 470
590  IF E THEN 470
600  E=2
610  GOTO 660
620  IF E AND  NOT Z THEN 470
630  GOTO Z+1 OF 730,660
640  PRINT #1;A$[B,I-1], END 
650  GOTO 720
660  IF  NOT P THEN 680
670  N=N*P
680  IF S THEN 700
690  S=1
700  GOTO E OF 760,780
710  PRINT #1;S*N, END 
720  E=0
730  B=I+1
740  P=N=S=Z=0
750  GOTO 840
760  PRINT #1;M*10^(S*N), END 
770  GOTO 720
780  M=S*N
790  E=1
800  GOTO 740
810  Z=1
820  P=P*.1
830  N=N*10+X-1
840  NEXT I
850  GOTO Z+1 OF 370,660,640
860  B=I+1
870  FOR J=B TO LEN(A$)
880  IF A$[J,J]='92 THEN 900
890  NEXT J
900  I=J
910  GOTO 640
920  PRINT '10'10"FILE TOO SMALL"'10'10
930  END 
1000  REM:
1010  REM: ***** DUMP FILE *****
1020  REM:
1030  IF A$[1,1]#"D" THEN 190
1040  L=1/LOG(10)
1050  N$="123456"
1060  I$="?DX"
1070  R$="?D.?DX"
1080  E$="D.?DE,X"
1090  F$="#,?"
1100  PRINT '10"TURN ON PUNCH"'10'10'10
1110  GOSUB 1830
1120  T=0
1130  GOTO TYP(1) OF 1150,1610,1870
1140  REM: *** NUMBERS ***
1150  READ #1;N
1160  T1=0
1170  F$[3,3]=" "
1180  IF N THEN 1210
1190  C=0
1200  GOTO 1350
1210  A=ABS(N)
1220  IF SGN(N)#-1 THEN 1250
1230  F$[3,3]="S"
1240  T1=1
1250  C=INT(LOG(A)*L+5.E-07)
1260  B=A*10^(-C-1)
1270  F=1
1280  FOR D=1 TO 6
1290  F=F*10
1300  IF ABS(B-INT((B+3.E-07)*F)/F)<3.E-07 THEN 1330
1310  NEXT D
1320  D=6
1330  IF D>C+1 OR C>5 THEN 1390
1340  REM: * INTEGER *
1350  T1=T1+C+2
1360  I$[1,1]=N$[C+1,C+1]
1370  F$[4]=I$
1380  GOTO 1540
1390  IF D-C>7 OR A>999999. THEN 1490
1400  REM: * REAL *
1410  L1=(C+1 MAX 1) MIN 6
1420  R1=D-C-1 MAX 1
1430  T1=T1+L1+R1+2
1440  R$[1,1]=N$[L1,L1]
1450  R$[4,4]=N$[R1,R1]
1460  F$[4]=R$
1470  GOTO 1540
1480  REM: * EXPONENTIAL *
1490  R1=D-1 MAX 1
1500  T1=T1+R1+7
1510  E$[3,3]=N$[R1,R1]
1520  F$[4]=E$
1530  REM: * NUMBER PRINT *
1540  T=T+T1
1550  IF T<73 THEN 1580
1560  T=T1
1570  PRINT 
1580  PRINT  USING F$;N
1590  GOTO 1130
1600  REM: *** STRINGS ***
1610  READ #1;A$
1620  FOR I=1 TO LEN(A$)
1630  IF A$[I,I]=" " THEN 1710
1640  NEXT I
1650  GOSUB 1770
1660  IF T>71 THEN 1130
1670  PRINT " ";
1680  T=T+1
1690  GOTO 1130
1700  REM: * STRING WITH EMBEDDED BLANKS *
1710  A$[2]=A$
1720  A$[1,1]='92
1730  IF LEN(A$)>70 THEN 1750
1740  A$[LEN(A$)+1]='92
1750  GOSUB 1770
1760  GOTO 1130
1770  T=T+LEN(A$)
1780  IF T<72 THEN 1810
1790  T=LEN(A$)
1800  PRINT 
1810  PRINT A$;
1820  RETURN 
1830  FOR I=1 TO 60
1840  PRINT '1;
1850  NEXT I
1860  RETURN 
1870  PRINT 
1880  PRINT '3
1890  GOSUB 1830
1900  END 
