10 REM > Sampler
   20 REM J.G.Harston 15-Jul-1985
   30 :
   40 MODE7:DIM R%(3),S(3)
   50 ins%=TRUE:ON ERROR ins%=FALSE
   60 IFins%:PROC_INSTRUC
   70 ON ERROR PROC_ERROR
   80 MODE7:PROC_INIT
   90 REPEAT
  100   PRINTTAB(0,0);"Waiting..."
  110   T%=T%+1
  120   PRINTTAB(0,13);"Run time: ";(D%*T%)/100;" sec  "
  130   REPEAT UNTIL TIME>t%:t%=TIME+D%
  140   PRINTTAB(0,0);"Sampling...":FORA%=0TO3:R%(A%)=0:NEXTA%
  150   FORa%=1TO10:FOR A%=0 TO C%:R%(A%)=((ADVAL(A%+1) DIV 64)*S(A%)+R%(A%)):NEXTA%:NEXTa%
  160   FORA%=0TO3
  170     R%(A%)=R%(A%)/10
  180     PRINTTAB(12,4+2*A%);FNd3n2(R%(A%)/4)
  190   NEXTA%:IF F% THEN PRINTTAB(0,0);"Printing...":PROC_PLOT
  200   IF INKEY(1)=32 THEN F%=F% EOR 1
  210   PRINTTAB(17,18);:IF F% THEN PRINT"n. " ELSE PRINT"ff."
  220 UNTIL FALSE
  230 :
  240 DEFPROC_PLOT
  250 VDU2:L%=0
  260 FOR LO%=0 TO C%
  270   PROC_PLOTTER(LO%,L%):L%=R%(LO%)
  280 NEXTLO%
  290 IF DD$="Y" THEN VDU1,13,1,27,1,ASC"K",1,4,1,0,1,255,1,8,1,8,1,8
  300 IF (T% MOD M%)=0 THEN VDU1,13,1,27,1,75,1,188,1,1,1,0,1,0,1,0,1,0:FOR LO%=0 TO 10:FOR LP1%=1 TO 9:VDU1,28,1,8,1,8,1,8:NEXTLP1%:VDU1,63,1,8,1,8,1,8:NEXTLO%
  310 VDU1,10,1,13,3
  320 ENDPROC
  330 :
  340 DEFPROC_PLOTTER(Z%,LA%)
  350 IF R%(Z%)>480 THEN ENDPROC
  360 A=R%(Z%):IF A-8<L% THEN VDU1,13 ELSE A=A-L%-5
  370 B%=A+5
  380 VDU 1,27,1,75,1,B% MOD 256,1,B% DIV 256
  390 FOR B%=0 TO A:VDU1,0:NEXTB%
  400 PROC_SHAPE(Z%)
  410 ENDPROC
  420 :
  430 DEFPROC_SHAPE(A)
  440 IF A=0 THEN VDU1,14,1,10,1,14,1,0,1,0:ENDPROC
  450 IF A=1 THEN VDU1,14,1,14,1,14,1,0,1,0:ENDPROC
  460 IF A=2 THEN VDU1,10,1,4,1,10,1,0,1,0:ENDPROC
  470 VDU1,4,1,14,1,4,1,0,1,0:ENDPROC
  480 :
  490 DEFPROC_INIT
  500 CLS
  510 VDU2,1,27,1,64,1,27,1,ASC"3",1,10,3
  520 M%=20:F%=0:T%=-2:t%=0
  530 INPUT"How many channels? (1-4) "C%:C%=C%-1
  540 INPUT"Delay between samples in seconds"'"(5 sec minimum):"DELAY:D%=DELAY*100
  550 INPUT"Duration axis? (Y/N) "DD$:IF LEFT$(DD$,1)="y" OR LEFT$(DD$,1)="Y" THEN DD$="Y" ELSE DD$="N"
  560 FOR LOOP=0 TO C%
  570   PRINT"Gain for channel ";LOOP+1;":";:INPUT" "S(LOOP)
  580 S(LOOP)=S(LOOP)/2:NEXT LOOP
  590 INPUT LINE"Main title for printout"'":"TT$:VDU2,21:PRINTTT$:VDU6,1,10,1,10,1,10,1,10,1,13,3
  600 FOR LOOP=0 TO C%
  610   PRINT"Text for channel ";LOOP+1;":":INPUT LINE ""TT$
  620   VDU2,21:PRINT" Gain: ";2*S(LOOP);SPC(4-LENSTR$(S(LOOP)));:VDU6,1,27,1,ASC"K",1,5,1,0:PROC_SHAPE(LOOP):VDU21:PRINT"  "TT$:VDU6
  630 VDU1,10,1,10,1,10,1,13,3:NEXTLOOP
  640 VDU2,21:PRINT"One sample every ";DELAY;"sec.":VDU6,1,10,1,10,1,10,1,13,3
  650 CLS
  660 FOR A=0 TO C%
  670   PRINTTAB(0,4+2*A);"Channel ";A+1;":"SPC(10)"Gain: ";S(A)*2
  680 NEXTA
  690 PRINTTAB(8,18);"Printer on."
  700 VDU23,1;0;0;0;0
  710 PRINTTAB(3,22);"SPACE BAR - Printer on/off."
  720 PRINTTAB(6,20);"One sample every "DELAY"s."
  730 ENDPROC
  740 :
  750 DEFFNd3n2(A)
  760 LOCAL A$
  770 A$=STRING$(3-LENSTR$(INT(A))," ")+STR$(A)
  780 IF A=INT(A) THEN A$=A$+"."
  790 =LEFT$(A$+"00",6)
  800 :
  810 DEFPROC_ERROR
  820 PRINT'"Error: ";:VDU19,0,0,0:REPORT
  830 Z=0:IF ERR=17 THEN Z=GET:IF INKEY-1=0 THEN ENDPROC
  840 IF INKEY-1 THEN END
  850 PROC_INSERT("L."+STR$(ERL)+CHR$(6)+CHR$13)
  860 VDU21:END
  870 ENDPROC
  880 :
  890 DEFPROC_INSERT(A$)
  900 *FX15
  910 FOR A=1 TO LEN A$:OSCLI"FX 138,0,"+STR$(ASCMID$(A$,A,1)):NEXT A
  920 ENDPROC
  930 :
  940 DEFPROC_INSTRUC
  950 CLS:*LOAD SampIns FFFF7C00
  960 PRINTTAB(5,23)"Press space to continue...";:Z=GET
  970 ENDPROC