1 ' SMPTE Timecode Calculator for CASIO FX-850P/880P 2 ' BY THOMAS ILG 5 FCC=0:IF FPS=0 THEN FPS=25 10 CLS:GOSUB100 ' Main Menu 20 IF DISP=0 THEN GOSUB1500 ELSE GOSUB 1700 25 LOCATE0,OSY+1 27 IFFCC>0THENTX$="6C>A 7C>B "ELSETX$="" 30 PRINT "3T/F 4+ 5- "+TX$+"8BA 9-"+MID$(STR$(FPS),2); 40 IF VAL(A$)=0 THEN GOSUB2000 45 A=VAL(A$):CLS 55 IF DISP=0 THEN ON A GOSUB400,430,500,600,700,730,760,900,800 ELSE ON A GOSUB200,240,510,600,700,730,760,900,800 60 A$="":GOTO10 70 END 100 FPM=FPS*60:FPH=FPM*60:RETURN ' Procedure basic value calculation 150 T$=TC$:GOSUB3000 ' Procedure calculate values from TC text and check calidity 152 GOSUB4000:FRF=NUM 155 GOSUB4000:SEC=NUM 160 GOSUB4000:MIN=NUM 161 GOSUB4000:HOR=NUM 167 ERT=0 168 IFSEC>59 THEN SEC=59:ERT=1 169 IFMIN>59 THEN MIN=59:ERT=1 170 IFHOR>23 THEN HOR=23:ERT=1 171 IF FRF>=FPS THEN FRF=0:ERT=1 172 IF ERT=1 THEN PRINT"TC ENTRY ERROR!" 173 RETURN 200 INPUT "FAMES A: ",FCA ' Menu Point 1 FC: Enter A 205 FCC=0:RETURN 240 INPUT "FAMES B: ",FCB ' Menu Point 2 FC: Enter B 245 FCC=0:RETURN 400 INPUT "TIMECODE A: ",TCA$ ' Menu Point 1 TC: Enter A 405 TC$=TCA$ 410 GOSUB1100 415 FCA=FRA 416 FCC=0:RETURN 430 INPUT "TIMECODE B: ",TCB$ ' Menu Point 2 TC: Enter B 435 TC$=TCB$ 440 GOSUB 1100 445 FCB=FRA 446 FCC=0:RETURN 500 DISP=1:RETURN ' Menu Point 3: Change display TC/Framecount 510 DISP=0:RETURN 600 FCC=FCA+FCB ' Menu Point 4: Calculate A+B 605 IF FCC=>24*FPH THEN FCC=FCC-24*FPH 610 OPT$="[C=A+B]" 655 RETURN 700 FCC=FCA-FCB ' Menu Point 5: Calculate A-B 705 IF FCC<0 THEN FCC=FCC+24*FPH 710 OPT$="[C=A-B]" 720 RETURN 730 IF FCC>0 THEN FCA=FCC:FCC=0 ' Menu point 6: Move C TO A 740 RETURN 760 IF FCC>0 THEN FCB=FCC:FCC=0 ' Menu point 7: Move C to B 770 RETURN 800 INPUT "NEW BASE FPS: ",FPS ' Menu Point 9: Frames per second 805 RETURN 900 NUM=FCB ' Menu Point 8: B-A 910 FCB=FCA 920 FCA=NUM 930 RETURN 1000 TCH=INT(FRA/FPH) ' Procedure calculate TC values from framecount 1005 FRAM=FRA-TCH*FPH 1010 TCM=INT(FRAM/FPM) 1015 FRAS=FRAM-(TCM*FPM) 1020 TCS=INT(FRAS/FPS) 1025 TCF=FRAS-(TCS*FPS) 1090 RETURN 1100 GOSUB 150 ' Procedrue calculate framecount from TC 1110 FRA=HOR*FPH+MIN*FPM+SEC*FPS+FRF 1120 RETURN 1500 PRINT "1A : : : 2B : : : "; ' Procedure display als TC 1510 FRA=FCA:GOSUB1000 1530 OS=3:OSY=0:GOSUB1800 1550 FRA=FCB:GOSUB1000 1570 OS=19:GOSUB1800 1590 IF FCC=0 THEN RETURN 1595 LOCATE 0,1 1600 PRINT " C= : : :"; 1610 FRA=FCC:GOSUB1000 1630 OS=3:OSY=1:GOSUB1800 1655 PRINT " "+OPT$; 1656 GOSUB2000:RETURN 1700 PRINT "1A"+STR$(FCA); ' Procedure display as framecount 1705 LOCATE 16,0 1710 PRINT "2B"+STR$(FCB); 1715 OSY=0 1720 IF FCC=0 THEN RETURN 1730 LOCATE 0,1 1735 OSY=1 1740 PRINT " C="+STR$(FCC)+" "+OPT$; 1741 GOSUB2000:RETURN 1800 IF TCH<10 THEN TEXT$="0" ELSE TEXT$="" ' Display a timecode 1805 TEXT$=TEXT$+MID$(STR$(TCH),2) 1810 IF TCM<10 THEN INS$=":0" ELSE INS$=":" 1815 TEXT$=TEXT$+INS$+MID$(STR$(TCM),2) 1820 IF TCS<10 THEN INS$=":0" ELSE INS$=":" 1825 TEXT$=TEXT$+INS$+MID$(STR$(TCS),2) 1830 IF TCF<10 THEN INS$=":0" ELSE INS$=":" 1835 TEXT$=TEXT$+INS$+MID$(STR$(ROUND(TCF,-1),2) 1840 LOCATE OS,OSY 1850 PRINT TEXT$; 1860 RETURN 2000 A$=INKEY$ ' Procedure wait for key 2010 IF A$="" THEN GOTO2000 2020 RETURN 3000 PRINT "PARSING... "; ' Procedure search non numerics 3005 FOR I=1 TO LEN(T$) 3010 FOR X=0 TO 9 3015 IF MID$(T$,I,1)=MID$(STR$(X),2) THEN GOTO 3030 3020 NEXT X 3030 IF X>9 THEN T$=LEFT$(T$,I-1)+":"+MID$(T$,I+1) 3040 NEXT I 3060 T$="0000000000"+T$ 3070 RETURN 4000 IF RIGHT$(T$,1)=":" THEN T$=LEFT$(T$,LEN(T$)-1) ' Return 2 digit value 4010 NUM=VAL(RIGHT$(T$,2)) 4020 T$=LEFT$(T$,LEN(T$)-2) 4040 RETURN