DIM SHARED ER%,Y! CONST N32K&=32768 100 'ERROR HANDLER- SET ER% TO BASICS ERORR CODE AND RESUME. ' 'ER% NEEDS TO BE TESTED BY ROUTINE THAT GENERATED THE ERROR. ER%=ERR PRINT "ERROR:";ER% RESUME NEXT OFTRAP: ER%=ERR IF ER%=OVRFLOWERR THEN IF Y! >= N32K& THEN Y!=N32K& - 1 IF Y! < -N32K& THEN Y!= -N32K& RESUME ELSE PRINT "UNRECOVERABLE ERROR!" ON ERROR GOTO 0 ENDIF SUB READSHDZ (B%(),FACTOR,PPNM%,DRIVE%,SHDZNAME$) 9500 'READ Shimadzu binary DATA FILE 'SHDZNAME$ IF NOT BLANK IS FIRST FILE TO CONVERT. '$dynamic DIM DESC$(50) '$static 9501 PRINT B%(1,1),FACTOR,DRIVE%,SHDZNAME$ 9580 IF SHDZNAME$="" THEN INPUT"FILENAME OF first .spc file to convert?",SHDZNAME$ SHDZNAME$=UCASE$(SHDZNAME$) L%=LEN(SHDZNAME$): 9581 IF RIGHT$(SHDZNAME$,1)=" " THEN L%=L%-1:SHDZNAME$=LEFT$(SHDZNAME$,L%):GOTO 9581 IF RIGHT$(SHDZNAME$,4)<>".SPC" THEN PRINT "NOT A .SPC FILE!":GOTO 9960 'iF LAST TWO DIGITS OF FILENAME NOT NUMERIC, SHOULD BRANCH TO JUST CONVERT ONE FILE. B$=LEFT$(SHDZNAME$,L%-6) M1%=VAL(MID$(SHDZNAME$,L%-5,2)) PRINT "BASENAME, FIRST NUMBER:"B$;M1% ON ERROR GOTO 0:'ERHANDLER 9585 ER%=0:OPEN "I",3,SHDZNAME$ ON ERROR GOTO 0:'DISABLE ERROR HANDLING IF ER%<>0 THEN PRINT "READ FAILED, ERR=";ER%;"- TRY AGAIN:":SHDZNAME$="":GOTO 9580 CLOSE #3 9705 'INPUT"ENTER BASENAME AND NUMBER OF FIRST SPECTRUM TO BE FILED";B$,M1% 9710 'IF B$="" THEN EXIT SUB JJ%=M1%:'THIS WILL BE FIRST SHDZ NUMBER, MORMALLY 0. OUTPUT WILL BE M%+1. 'Later call with tcount% and put in tcount%+1 tcount%=0 j%=tcount%+1 'INPUT"DRIVE FOR SAVING (CR FOR DATA DRIVE)";A$ 'DRV2%=DRIVE%:IF A$<>"" THEN DRV2%=ASC(LEFT$(A$,1))-64 DRV2%=DRIVE% 'INPUT "FACTOR TO MULTIPLY DATA TO PREVENT IT EXCEEDING ~ +/- 1 AU";A$ 'Y=VAL(A$):IF Y=0 THEN Y=1.0 Y=1.0 9885 X=1000!*Y/FACTOR : PRINT "FACTOR,X=";FACTOR; X; "LSB/ABSORBANCE UNIT" 9886 ' REDIM B%(NPOINTS%,NSPEC%)',DESC$(NSPEC%) 'construct each filename N$=RIGHT$("00"+MID$(STR$(JJ%),2),2) SHDZNAME$ =B$+N$+".SPC" 'PRINT "SHDZNAME="SHDZNAME$ 'TEST IF FILE EXISTS: ON ERROR GOTO 100:'ERHANDLER 9888 ER%=0:OPEN "I",3,SHDZNAME$ ON ERROR GOTO 0:'DISABLE ERROR HANDLING CLOSE #3 IF ER%<>0 THEN GOTO 9960:'END ON NON-EXISTENT FILE. OPEN "B",3,SHDZNAME$ IF LOF(3)<119 THEN CLOSE #3:GOTO 9960:'END ON NON-EXISTENT OR ZERO-LENGTH FILE. 9910 GET #3,1,i% if i%<>1 then CLOSE #3: GOTO 9960:'READ FROM ZERO-LENGTH FILE GIVES VALUE ZERO? 'PRINT "First word in file is not 1 but:";i% GET #3,3,mode% if mode%<>2 then PRINT "Mode is not ABSORBANCE but:";mode% GET #3,5,speed% 'PRINT "scan speed:";speed% GET #3,7,slit% 'PRINT "slit #:";slit% GET #3,9,i% 'PRINT "Fifth word is #:";i% GET #3,11,swlnew! 'PRINT "swl=";swlnew! GET #3,15,ewlnew! 'PRINT "ewl=";ewlnew! comment$=string$(78," ") GET #3,40,comment$ 'PRINT "comment$:";COMMENT$;"LENGTH:";LEN(COMMENT$) GET #3,119,npts% 'PRINT "NPTS%=";NPTS% 9940 for i%=1 to npts% 9942 get#3,,y!:Y!=Y!*X:B%(I%,J%)=y! NEXT I% 9955 CLOSE #3 ''BETTER TO JUST READ IT IN BACKWARDS, AS WE KNOW AHEAD OF TIME THE # POINTS! 9956'''IS THE DATA ORDERED BACKWARDS (LONG TO SHORT WAVELENGTH?) REVERSE IT: IF SWLNEW > EWLNEW THEN DUM=SWLNEW:SWLNEW=EWLNEW:EWLNEW=DUM 'FOR K% = TCOUNT%+1 TO TCOUNT%+M1% 9957 FOR I%=1 TO Npts%/2:DUM%=B%(I%,J%):B%(I%,J%)=B%(NPTS%+1-I%,J%):B%(NPTS%+1-I%,J%)=DUM%:NEXT I% 'NEXT K% 9958 ENDIF 'NOW SAVE TRACE 1 AS THE JJ'TH FILE: FLN$=B$+"-"+MID$(STR$(JJ%),2) NPOINTS%=npts% SWL%=cint(ppnm%*swlnew!) INC%=cint(((ewlnew!-swlnew!)*ppnm%)/npoints%) DESC$(J%)=LEFT$(comment$,46)+"|"+RIGHT$(COMMENT$,17) PRINT SHDZNAME$,FLN$,DESC$(J%) 'print "CALL DISKWRIT (";DRV2%,FLN$,B%(1,J%),NPOINTS%,SWL%,INC%;")" 9890 CALL DISKWRIT (DRV2%,FLN$,SEG B%(1,J%),NPOINTS%,SWL%,INC%,DESC$(J%),ER%) IF ER%=0 THEN 9905 PRINT "SAVE FAILED: ERROR ";ER% PRINT"I%,DRV2%,FLN$,B%(1,I%):",I%,DRV2%;FLN$;B%(1,I%) INPUT "PUT NEW DISK AND CR; OR (A) TO ABORT";A$ IF A$<>"A" THEN 9890 'GOTO 9960 9905 jj%=jj%+1:goto 9886 9960 LINE INPUT"CR TO CONTINUE:";A$:'GOSUB 20100 ' EXIT SUB END SUB