SYNETSIM.33B

Source Program (QuickBASIC 4.5)

[Excise material below between lines of "#####..." into a QuickBASIC-compilable text file]
#########################################################

10 ID$ = "SYNETSIM 3.3B  9/17/90": PRINT ID$
12 MFID$="SYNETSIM 3.3.2": PFID$="SYNETSIM 3.3.2": SFID$="SYNETSIM 3.0.2"
14 PRINT "(C) COPYRIGHT D.K. HARTLINE 1987, 1988, 1989, 1990."
16 PRINT "SEE SYNETSIM.TXT FOR OPERATING INSTRUCTIONS"
18 PRINT " BRUN3087 (C) COPYRIGHT MICROSOFT CORP. 1982, 1983, 1984"
20 PRINT "                                        1985, 1986, 1987"
35 'NEEDS MODULATION TARGETS FOR GAMMAS
36 '3.3B (.33B 8/21/90): Conductance AND density (gamma); color traces 
37 '3.3A (.33A 8/3/90): Conductance density parameters
38 '3.2D (.32D 7/9/90): Greg's changes: command line; cursor; mid-swp interrupt
39 '     7/23 DIODE addition; 7/24 multiple clamp runs
40 '3.2C (.32C 4/4/90): save refixed; Boolean flags; SPIKE; COND branches
41 '3.2B (.32B 11/28/89): V-clamp version; cursor fxd; save/restore fxd; CMB3
42 '3.2A (.32A 9/12/89): ACNLSPDPM version; String codes; Cursor; CMC12
43 '3.1 (.Q3D 9/2/88): INNS version; minor error correction; CMC11
44 '3.0C (.Q3C 12/25/87): IEEE version; CMC10
45 '3.0 (.Q3B 11/87) = Original Soc Neurosci version; Numerical codes; CMC9
47 '               ##############################################
48 '################  INITIALIZATIONS AND PARAMETER INPUT CALLS ##############
49 '               ##############################################
50 'GWB%=-1         'FOR GWBASIC # Branches<=3; COMMENT OUT FOR QuickBASIC
51 CMPT%=1: TRIGR%=2: ELECTN%=3: DIODE%=4: SPIKE%=5       'BRANCH TYPE CODES
52 COND%=7: DRIVER%=8: HHFXD%=9: HH%=10: SYNAPSE%=11: CHEMOX%=12
53 CONNOR%=14: POOL%=20: POOLK%=21: POOLX%=22
60 LOWBR%=7: HIBR%=14: FRCT%=10                 'CONDUCTANCE-BRANCH CODE RANGE
65 DSPLYB%=1: D$(0)="V": D$(1)="I": D$(2)="G" 'INVARIANT DISPLAY CHARACTERS
70 mdly=2     'seconds to elapse before continuing batch mode.
75 NCODE%=22: IF GWB% THEN MAXBR%=3 ELSE MAXBR%=15
80 DIM TXFLG%(NCODE%), N%(NCODE%), CP%(MAXBR%, NCODE%), G(MAXBR%, 14), I(MAXBR%, 14)
85 FLOC%=1                    'INITIAL LOCATION FOR FACILITATION PARAMETERS
90 RST%=-1		      'Reset to zero initial conditions every sweep
98 GOTO 199
99 '************** Subroutine for decoding/encoding Branch Codes *************
100 IF J$="CMPT"    THEN J%=CMPT%:    GOTO 149
102 IF J$="TRIGR"   THEN J%=TRIGR%:   GOTO 149
103 IF J$="ELECTN"  THEN J%=ELECTN%:  GOTO 149 
104 IF J$="DIODE"   THEN J%=DIODE%:   GOTO 149
105 IF J$="SPIKE"   THEN J%=SPIKE%:   GOTO 149
107 IF J$="COND"    THEN J%=COND%:    GOTO 149
108 IF J$="DRIVER"  THEN J%=DRIVER%:  GOTO 149 
109 IF J$="HHFXD"   THEN J%=HHFXD%:   GOTO 149 
110 IF J$="HH"      THEN J%=HH%:      GOTO 149 
111 IF J$="SYNAPSE" THEN J%=SYNAPSE%: GOTO 149 
112 IF J$="CHEMOX"  THEN J%=CHEMOX%:  GOTO 149
114 IF J$="CONNOR"  THEN J%=CONNOR%:  GOTO 149
120 IF J$="POOL"    THEN J%=POOL%:    GOTO 149 
121 IF J$="POOLK"   THEN J%=POOLK%:   GOTO 149 
122 IF J$="POOLX"   THEN J%=POOLX%:   GOTO 149 
140 J%=VAL(J$)
149 RETURN
150 ON J% GOTO 151,152,153,189,189,189,189,158,159,160,161,162,189,164,189,189,189,189,189,170,171,172: GOTO 189
151 J$="CMPT":   GOTO 180                   '(Access from 1920,...
152 J$="TRIGR":  GOTO 180
153 J$="ELECTN": GOTO 180
154 J$="DIODE":  GOTO 180
155 J$="SPIKE":  GOTO 180
157 J$="COND":   GOTO 180
158 J$="DRIVER": GOTO 180
159 J$="HHFXD":  GOTO 180
160 J$="HH":     GOTO 180
161 J$="SYNAPSE":GOTO 180
162 J$="CHEMOX": GOTO 180
164 J$="CONNOR": GOTO 180
170 J$="POOL":   GOTO 180
171 J$="POOLK":  GOTO 180
172 J$="POOLX":  GOTO 180
180 RETURN
189 J$="": GOTO 180
199 '*************** Master file input
'----
    if command$<>"" THEN
     cm$=command$
     sp%=instr(cm$,"/")            'detect a single switch SW$
     if sp%>0 then 
      ep%=instr(sp%,cm$," ")
      if ep%=0 then ep%=len(cm$)+1
      sw$=mid$(cm$,sp%+1,ep%-sp%-1)
      cm$=left$(cm$,sp%-1)+right$(cm$,len(cm$)-ep%+1)
     end if
    end if

    while left$(cm$,1)=" "          'remove excess spaces fore and aft
     cm$=right$(cm$,len(cm$)-1)
    wend
    while right$(cm$,1)=" "
     cm$=left$(cm$,len(cm$)-1)
    wend

    if cm$<>"" then
     sp%=instr(cm$," ")
     if sp%=0 then sp%=len(cm$)+1
     cm$=left$(cm$,sp%-1)

     sp%=instr(cm$,".")
     if sp%=0 then sp%=len(cm$)+1
     mfile$=left$(cm$,sp%-1)

    else
200 INPUT "INPUT MASTER FILE (no ext)[use  for test mode]"; MFILE$
205 IF MFILE$ = "" THEN MFILE$ = "SYNTEST"

    end if

210 OPEN "I", #3, MFILE$ + ".MST"                'OPEN AND PROCESS MASTER FILE
215 INPUT #3, MTITLE$, MFIDD$, PFILE$, PSPFILE$, BAT$, XSCALE, VSCALE, ISCALE, GSCALE
217 INPUT #3, KSCALE, PSCALE, Y0, TINC, SKIP%, PSPDM, PSPL%, SUMTBL%
220 IF SW$="B" OR SW$="b" THEN GOTO 228
222 IF SW$<>"" THEN PRINT "Invalid switch /";SW$;" ignored.";CHR$(7): GOTO 228
224 BATFILE$=BAT$ 'save name of BAT file in case of menu#7 selection.
226 BAT$="none"   'force model to ignore BAT file.
228 IF BAT$<>"NONE" AND BAT$<>"none" THEN OPEN "I",#5,BAT$  ELSE BAT$="" 
230 YSCALE=VSCALE
232 IF GWB% THEN SUMTBL%=200: PSPL%=200
233 '                                            'CHECK FORMATS OF DATA FILES
234 IF MFID$<>MFIDD$ THEN PRINT "230: BAD MASTER FILE: Need: "; MFID$; " Have: "; MFIDD$: END
236 INPUT #3, SPKHT, ADPFLG%: IF ADPFLG%<>0 THEN ADPFLG%=-1 'BOOLEAN FLAG
240 REM         10    -1   
250 INPUT #3, PF%,ZPF%,SPF%                   'PRINT, PLOT FLAGS: ZERO, SPIKES
252 input #3, gmode%, ncol%, zcol%, scol%, icol%, vcol% 'enhanced graphics mode
254 if gmode%=0 or gmode%=2 then gmode%=2: scx%=639: scy%=199: GOTO 260
256 if gmode%=9 then scx%=639: scy%=349                   'Enhanced EGA
259 REM color 0 is black... not real desirable.
260 if ncol%=0 then ncol%=15
262 if zcol%=0 then zcol%=15
264 if scol%=0 then scol%=15
266 if icol%=0 then icol%=15
268 if vcol%=0 then vcol%=15
270 FOR I%=2 TO NCODE%                        '"TOXIN" BRANCH FLAGS
272  INPUT #3, L%: IF L%<>0 THEN L%=-1
274  TXFLG%(I%)=L%
276  NEXT I%
278 IF PF% THEN LPRINT ID$; " **** RUN DATE: ";DATE$;" AT ";TIME$;" ****"
290 PRINT "MASTER FILE= "; MFILE$ + ".MST: "; MTITLE$: IF PF% THEN LPRINT "MASTER FILE= "; MFILE$ + ".MST: "; MTITLE$
300 PRINT "TINC="; TINC; " SKIP INDEX="; SKIP%: IF PF% THEN LPRINT "TINC="; TINC; " SKIP%="; SKIP%; "PSP-DURN-MPYR="; PSPDM
310 PRINT "ADPFLG%="; ADPFLG%
320 IF PF% THEN LPRINT "SPKHT="; SPKHT; " ADPFLG%="; ADPFLG%
330 GOSUB 1900                                           'PRINT FLAGS/SWITCHES
339 '*************** Parameter file input
340 OPEN "I", #1, PFILE$ + ".PRM"              'OPEN AND CHECK PARAMETER FILE
350 INPUT #1, PTITLE$, PFIDD$
360 IF PFID$ <> PFIDD$ THEN PRINT "360: BAD PARAMETER FILE: Need: "; PFID$; " Have: "; PFIDD$: END
370 PRINT "PARAMETER FILE= "; PFILE$ + ".PRM: "; PTITLE$: IF PF% THEN LPRINT "PARAMETER FILE= "; PFILE$ + ".PRM: "; PTITLE$
410 '***************** BRANCH-DATA INPUT LOOP ********************************
420 INPUT #1, J$, K%         'BRANCH TYPE, BRANCH INDEX
425 GOSUB 100                'DECODE BRANCH CODE
430 IF J%=0 THEN GOTO 465    'END INPUT LIST?
435 rem PRINT "J%=";J%,"K%=";K%
440 IF K%>N%(J%) THEN N%(J%)=K%        'UPDATE BRANCH CODE MAX INDEX
445 ON J% GOSUB 6010, 6020, 6030, 6040, 6050, 6060, 6070, 6080, 6090, 6100, 6110, 6120, 6130, 6140, 6150, 6160, 6170, 6180, 6190, 6200, 6210, 6220
450 '     Code:   1     2     3     4                 7     8     9    10    11    12   13                                         20    21    22
451 '                 TRIGR ELECTN SPIKE            COND DRIVER HHFXD  HH SYNAPSE CHEMOX                                          POOL  POOLK POOLX
455 GOTO 420
460 RETURN                             'USED FOR BLANK INDICES
465 INPUT #1, ID$: IF ID$<>"END" THEN PRINT "465: .PRM FILE FRAMING ERROR.  Code:";J$: STOP
466 CLOSE #1
470 N% = N%(1)
475 FOR L% = 1 TO N%(POOL%)
480  IF XVOL%(L%) = 0 THEN XVOL(L%) = 1
485  NEXT L%
490 DIM SUMTB(N%(11), SUMTBL%)    '1 SUMTB SLOT EA SYNAPSE
495 L%=XSCALE/TINC/SKIP%+3: DIM Y(N%,L%)
496 PRINT "Y DIM=(";N%;",";L%;")"
500 '***************** PSP SHAPE TABLE INPUT LOOP ****************************
505 IF PSPFILE$="NONE" THEN TXFLG%(SYNAPSE%)=1: GOTO 720
510 OPEN "I", #2, PSPFILE$ + ".PSP"
520 INPUT #2, STITLE$, SFIDD$, NPSP%: DIM VPSP(NPSP%, PSPL%)'NUMBER OF PSP SHAPES
530 IF SFID$ <> SFIDD$ THEN PRINT "530: BAD PSP FILE: Need: "; SFID$; " Have: "; SFIDD$: END
540 PRINT "PSP FILE= "; PSPFILE$ + ".PSP: "; STITLE$: IF PF% THEN LPRINT "PSP FILE= "; PSPFILE$ + ".PSP: "; STITLE$
550 FOR K%=1 TO NPSP%
560  PRINT "LOADING PSP"; K%
570  INPUT #2, T1                      'TIME
580  INPUT #2, V1                      'VALUE
590  IF T1<>0 OR V1<>0 THEN IF T1>=0 THEN GOTO 570 ELSE GOTO 680'GET BEGIN
600  T2=TINC: T%=1                     'TABULATED PSP (NOTE VPSP(K%,0)=0)
610  INPUT #2, T3                      'TIME
620  INPUT #2, V3                      'VALUE
630  T3=T3*PSPDM                       'SCALE TIME BY PSPDM
640  VPSP(K%,T%) = V1+(V3-V1)*(T2-T1)/(T3-T1)'INTERPOLATION FORMULA
650  T%=T%+1
660  T2=T2+TINC
665  IF T%>PSPL% THEN GOTO 700
670  IF T2<=T3 THEN GOTO 640
675  T1=T3: V1=V3: GOTO 610
680  IF T1<>-1 THEN PRINT "680: ILLEGAL PSP TYPE": STOP  'COMPUTED PSP
685  FOR T%=0 TO PSPL%
690   VPSP(K%,T%) = EXP(-TINC*T%/V1)   'V1 IS DECAY TIME-CONSTANT
695   NEXT T%
700  NEXT K%
710 CLOSE #2
715 '***** Initialize state variables **************
720 FOR I%=1 TO N%: V(I%)=VLK(I%): NEXT I%            'PRELOAD V'S
725 FOR I%=2 TO NCODE%
726  IF N%(I%)=0 THEN TXFLG%(I%)=-1
727  NEXT I%
730 FOR K%=1 TO N%(POOLX%) 'BASE LEVELS FOR MODULATION TARGETS = INITIAL VALUES
735  XTARG%=XTARG%(K%)
740  IF XTARG%<0 THEN I%=-XTARG%: XBRN%=XBRN%(K%): XPRM%=XPRM%(K%): GOSUB 13000: XTARG0(K%) = K: GOTO 760
750  XTARG0(K%)=XPOOL(XTARG%)
760  NEXT K%
765 PRINT "HIT ANY KEY TO CONTINUE";
    while inkey$=""
    wend
770 GOTO 800
790 RETURN    '(used by ON x GOSUB)
793 '
795 '               #######################################
797 '################  NETST SECTION:  MODEL RUN OPTIONS  ####################
799 '               #######################################
800 U=0
810 X=0
812 FOR I%=1 to N%(DSPLYB%): Y(I%,0)=0: NEXT I%  'store YSCALES here later
815 CLOSE #2: CLOSE #3: IF SF% THEN SF%=0        'RESET DISK-STORE-FLAG
820 IF RST% THEN X=0: U=0                        'RESET U IF RESET-FLAG SET
821 SCREEN 0: CLS
822 IF BAT$<>"" THEN INPUT #5,MM$: GOTO 855
825 PRINT "MAIN MENU": IF SF% THEN PRINT "(.PRN OUTPUT)" ELSE PRINT "(NO .PRN)"
827 IF DBF%<>0 THEN PRINT "DEBUG MODE ON"
830 PRINT "  = END"
831 PRINT "     1= FREE_RUN"
832 PRINT "     2= I_PULSE - Current pulses to a compartment"
833 PRINT "     3= PSP_TRAIN from presynaptic cell"
834 PRINT "     4= Voltage clamp of a compartment"
835 PRINT "     5= POOL_INCrement"
836 PRINT "     6= TOXINS changed"
837 PRINT "     7= Batch operation"
838 PRINT "     8= CHANGE PARAMeters"
839 PRINT "     9= OUTPUT_PRN next sweep"
840 PRINT "    10= SAVE model state"
841 PRINT "    11= RESTORE previous model state"
842 PRINT "    12= CHANGE_DISPLAY variable"
843 PRINT "    13= Options"
850 INPUT MM$
855 MM%=VAL(MM$)
860 SCREEN GMODE%
865 if gmode%=9 then color ncol%                'default text color.
870 ON MM% GOTO 900, 925, 970, 1000, 1090, 1100, 1195, 1200, 1300, 1400, 1500, 1680, 1700
875 IF PF% THEN LPRINT CHR$(12)
880 CLOSE: END
898 '
899 '***************** 1: Network free run **************************
900 IF BAT$<>"" THEN INPUT #5, SWEEP0%: GOTO 904
901 INPUT "NUMBER OF SWEEPS";SWEEP0%
904 SWP%=SWEEP0%
905 CLS: PRINT "SWEEP=";SWEEP0%-SWP%+1;" length=";XSCALE;" sec; YSCALE=";YSCALE
910 GOSUB 1800

    'mid-sweep interrupt... space bar followed by "I" for interrupt.
    i$=inkey$
    if i$=" " then
     do
      g$=inkey$
     loop while g$=""
     if g$="i" or g$="I" then
      x=0 : x%=0                      'plot positions
      swp%=0                          'force final sweep
     end if
    end if

915 IF X<>0 THEN GOTO 910
920 SWP%=SWP%-1
922 IF SWP%<=0 THEN GOTO 815 ELSE GOTO 905
923 '
924 '**************** 2: Single-cell current pulses ****************
925 PRINT "CURRENT PULSE"
929 IF BAT$<>"" THEN INPUT #5,CPT%,BIAS,COND,UCEND,TEST,UEND: GOTO 932
930 INPUT "COMPARTMENT, BIAS-I, COND-I, COND DURN, TEST-I, TEST DURN"; CPT%,BIAS,COND,UCEND,TEST,UEND
932 IF CPT%=0 THEN GOTO 820
935 IF PF% THEN LPRINT "CURRENT PULSE TO CMPT "; CPT%;" BIAS=";BIAS;" COND-I=";COND;" DURN=";UCEND;" TEST-I=";TEST;" DURN=";UEND
940 UCEND=UCEND+U: UEND=UEND+UCEND: CLS: IM0(CPT%)=COND
945 GOSUB 1800: IF X=0 THEN GOTO 815                       'COND PULSE
950 IF U"" THEN INPUT #5,UNIT%, PSPF, UNEXT, UEND: GOTO 976
975  INPUT "UNIT#, PSP RATE (HZ), START DELAY, TRAIN DURN"; UNIT%, PSPF, UNEXT, UEND
976  UNEXT=UNEXT+U: UEND=UEND+UNEXT
977  IF UNIT%=0 THEN GOTO 820
980  IF PF% THEN LPRINT "UNIT# "; UNIT%; " RATE "; PSPF; " FROM "; UNEXT; " TO "; UEND
985  CLS : TXFLG%(SYNAPSE%)=0: X=0: GOTO 995
990  UNEXT=UNEXT+1/PSPF
995  GOSUB 1800: IF X=0 THEN GOTO 815              '1 MODEL STEP
996  IF U>UNEXT AND U"" THEN INPUT #5, VCMODE$: GOTO 1011
1002 PRINT "  - RETURN
1005 PRINT " 1 - HOLD level run"
1007 PRINT " 2 - VC_CT: Single condition-test run"
1008 PRINT " 3 - IV: Multiple condition-test runs with file storage"
1010 INPUT VCMODE$
1011 VCMODE%=VAL(VCMODE$): IVFILE$="": VCF%=-1: SWP%=0
1012 ON VCMODE% GOTO 1015, 1030, 1040
1013 VCF%=0: GOTO 820
1014 ' ---------- Hold run ---------------
1015 IF BAT$<>"" THEN INPUT #5,CPT%,HOLD,SWEEP0%,LOD$: GOTO 1019
1016 INPUT "COMPARTMENT, HOLD-V, # HOLD SWEEPS"; CPT%,HOLD,SWEEP0%
1017 IF CPT%=0 THEN GOTO 1000
1018 INPUT "SAVE TO FILE";LOD$
1019 IF PF% THEN LPRINT "VCLAMP OF CMPT "; CPT%;" HOLD=";HOLD;" FOR ";SWEEP0%;"SWEEPS; SAVED TO: ";LOD$
1020 U=0: X=0: X%=0: VC=HOLD: V(CPT%)=VC: SWEEP%=SWEEP0%: SWP%=2     '(FLG)
1022 IF SWEEP%>0 THEN GOTO 1024 ELSE IF LOD$<>"" OR LOD$<>"NONE" THEN GOSUB 1410: GOTO 1000 ELSE GOTO 1000
1024 CLS: PRINT "SWEEP";SWEEP0%-SWEEP%+1;" length=";XSCALE;"sec";"ISCALE=";ISCALE;"YSCALE=";YSCALE: GOSUB 1800
1026 GOSUB 1800: IF X<>0 THEN GOTO 1026
1028 SWEEP%=SWEEP%-1: GOTO 1022
1029 ' ------------ Single C-T paradigm --------
1030 IF BAT$<>"" THEN INPUT #5,CPT%,COND,UCEND,TEST,UEND,HOLD: GOTO 1035
1032 INPUT "COMPARTMENT TO CLAMP, COND-V, COND DURN, TEST-V, TEST DURN, HOLD-V"; CPT%,COND,UCEND,TEST,UEND,HOLD
1035 IF PF% THEN LPRINT "CMPT= ";CPT%;" COND-V=";COND;" DURN=";UCEND;" TEST-V=";TEST;" DURN=";UEND;" HOLD-V=";HOLD
1037 CLS: SWP%=1: UEND=UEND+UCEND: GOSUB 1070: CLS: GOTO 1000
1039 ' ------------ Multiple C-T paradigm ---------
1040 IF BAT$<>"" THEN INPUT #5,CPT%,COND0,UCEND,DCOND,NCOND%,TEST0,UEND,DTEST,NTEST%,LOD$,IVFILE$: GOTO 1045
1041 INPUT "COMPARTMENT TO CLAMP, INITIAL COND-V, COND DURN, COND-INC, #-COND";CPT%,COND0,UCEND,DCOND,NCOND%
1042 INPUT "INITIAL TEST-V, SAMPLE TIME, TEST-INC, #-TEST"; TEST0,UEND,DTEST,NTEST%
1044 INPUT ".SAV-FILE NAME (incl ext), STORAGE FILE NAME (or 'NONE')";LOD$,IVFILE$
1045 IF IVFILE$<>"NONE" AND IVFILE$<>"none" THEN OPEN "O",#4,IVFILE$: PRINT #4,CHR$(34);IVFILE$;" from ";LOD$;" using ";PFILE$;CHR$(34);CPT%;UCEND;UEND
1047 SWP%=2
1048 IF PF% THEN LPRINT "MULTIPLE CT RUN TO COMPARTMENT";CPT%;
1050 IF PF% THEN LPRINT " COND-V0=";COND0;"COND-DUR=";UCEND;"COND-STEP=";DCOND;"NCOND=";NCOND%;
1051 IF PF% THEN LPRINT "TEST-V0=";TEST0;"SAMPLE TIME=";UEND;"TEST_STEP=";DTEST;"#-TEST=";NTEST%
1052 IF PF% THEN LPRINT ".SAV FILE=";LOD$;" IV-FILE=";IVFILE$
1054 UEND=UEND+UCEND
1055 CLS: COND=COND0: TEST=TEST0
1056 FOR VCNT1%=1 TO NCOND%
1057  FOR VCNT2%=1 TO NTEST%
1058   GOSUB 1515: GOSUB 1070       'RESTORE INITIAL STATE & OUTPUT PULSE SEQ
1060   IF IVFILE$<>"NONE" AND IVFILE$<>"none" THEN PRINT #4, COND,TEST,II(CPT%)-IM(CPT%)
1061   TEST=TEST+DTEST
1062   NEXT VCNT2%
1064  COND=COND+DCOND: TEST=TEST0
1066  NEXT VCNT1%
1067 CLOSE #4
1068 IF BAT$="" THEN GOSUB 2100: CLS: GOTO 1000 ELSE CLS: GOTO 1000
1069 '----------- Output of 1 C-T episode -------------
1070 X=0: U=0: X%=0: VC=COND: V(CPT%)=VC
1071 CLS: LOCATE 1,1: PRINT "COND=";COND;" TEST=";TEST;" HOLD=";HOLD;"     "
1072 GOSUB 1800: IF X=0 THEN PRINT "PREMATURE END": SWP%=0: RETURN 'COND PULSE
1076 IF U"" THEN INPUT #5,CPT%,POOLINC: GOTO 1092
1091 INPUT "POOL#, INCREMENT"; CPT%, POOLINC
1092 IF CPT%=0 THEN GOTO 820
1094 IF PF% THEN LPRINT "POOL INCREMENT IN POOL "; CPT%; " BY"; POOLINC
1096 XPOOL(CPT%)=XPOOL(CPT%)+POOLINC
1098 GOTO 815
1099 '**************** 6: Toxin selection ****************************
1100 IF BAT$<>"" THEN INPUT #5, J%,TXFLG%(J%): PRINT "TOXIN:";J%;TXFLG%(J%):GOTO 820
1101 PRINT "UNBLOCKED CODES: ";
1102 FOR J%=2 TO NCODE%
1104  IF NOT TXFLG%(J%) THEN GOSUB 150: PRINT J$;" ";
1105  NEXT J%: PRINT
1110 INPUT "TOXIN (TRIGR, ELECTN, HH, etc.):";J$: IF J$="" THEN GOTO 820
1112 GOSUB 100
1115 IF TXFLG%(J%) THEN PRINT "BLOCKED: ";  ELSE PRINT "UNBLOCKED: ";
1120 INPUT "INPUT 'U' TO UNBLOCK, 'B' TO BLOCK";TXFLG$
1122 IF TXFLG$="b" OR TXFLG$="B" THEN TXFLG%(J%)=-1: GOTO 1125
1123 IF TXFLG$="u" OR TXFLG$="U" THEN TXFLG%(J%)=0 ELSE PRINT "BAD RESPONSE": GOTO 1120
1125 IF PF% THEN LPRINT "TOXIN "; J$; "= "; TXFLG$
1130 GOTO 820
1194 '*********** 7: **************
1195 IF BAT$ <>"" THEN BAT$="": CLOSE #5: GOTO 820  'Turn off batch mode if on
1196 PRINT "BATCH FILE (";BATFILE$;")"; : INPUT BAT$ : IF BAT$="" THEN BAT$=BATFILE$
1197 OPEN "I", #5, BAT$
1198 GOTO 820
1199 '**************** 8: Change parameters *************************
1200 IF BAT$<>"" THEN INPUT #5,J$,XBRN%,XPRM%: GOTO 1205
1201 INPUT "CHANGE PARAMETER: BRANCH TYPE, BRANCH #, PARAMETER #";J$,XBRN%,XPRM%
1203 IF J$="" THEN GOTO 820
1205 GOSUB 100 : I% = J%
1210 IF J%=ELECTN% THEN K=GC(XBRN%,XPRM%): GOTO 1250   'CODES ELECTN & POOLK SPECIAL
1230 IF J%=POOLK% THEN K=K(XBRN%,XPRM%): GOTO 1250
1240 GOSUB 13000: IF ER% THEN GOTO 1290                'FETCH PARAMETER IN K
1250 PRINT "OLD VALUE =";K;
1252 IF BAT$<>"" THEN INPUT #5,K ELSE INPUT "NEW VALUE =";K
1255 IF PF% THEN LPRINT "PARAMETER ";:LPRINT J$;: LPRINT USING "## ";XBRN%;XPRM%;: LPRINT " NEW VALUE=";K
1260 IF J%=ELECTN% THEN GC(XBRN%,XPRM%)=K: GOTO 820
1270 IF J%=POOLK% THEN K(XBRN%,XPRM%)=K: GOTO 820
1280 GOSUB 16000                                 'SAVE NEW VALUE
1290 IF ER% THEN ER%=0: INPUT " TYPE ANY KEY";A$
1295 GOTO 820
1298 '
1299 '****************  9: Output file set-up subroutine *************
1300 IF BAT$<>"" THEN INPUT #5,OFILE$: SF%=-1: GOTO 1325
1305 IF SF% THEN SF%=0: GOTO 820 ELSE SF%=-1     'TOGGLE DISK OUTPUT FLAG
1310 IF SF% THEN INPUT "OUTPUT FILE NAME (no .EXT)"; OFILE$
1320 IF OFILE$ = "" THEN SF%=0: GOTO 820
1325 OPEN "O",#2, OFILE$+".PRN": IF PF% THEN LPRINT "OUTPUT FILES: "; OFILE$; ".PRN+.SPK"
1330 OPEN "O", #3, OFILE$ + ".SPK"
1335 IF PF% THEN LPRINT "OUTPUT START TIME =";U
1340 GOTO 820
1398 '
1399 '**************** 10: Save state ********************************
1400 IF BAT$<>"" THEN INPUT #5,LOD$: GOTO 1405
1401 INPUT "SAVE STATE AS FILE"; LOD$: IF LOD$ = "" THEN GOTO 820
1405 GOSUB 1410: GOTO 820
1409 '----------------- Subroutine entry (from 1022) ----------
1410 OPEN "O", #1, LOD$: LOD0$=LOD$
1412 PRINT #1, CHR$(34); PFILE$; CHR$(34); ",";    '.PRM FILE NAME
1415 PRINT #1, U; SUMTB0%
1420 FOR I%=1 TO N%: PRINT#1, V(I%);: NEXT I%: PRINT#1, ""  ' SAVE CMPT V'S
1425 FOR J% = 1 TO HIBR%                              'SAVE STATE VARIABLES
1430  IF J% = TRIGR% THEN GOTO 1460
1435  IF N%(J%)=0 THEN GOTO 1460
1440  FOR K% = 1 TO N%(J%)
1445   IF CP%(K%, J%) = 0 THEN GOTO 1455
1447   PRINT #1, J%; K%;
1450   ON J% GOSUB 7010,7020,7030,7040,7050,7060,7070,7080,7090,7100,7110,7120,7130,7140,7150,7160,7170,7180,7190,7200,7210,7220
1453   PRINT #1, ""
1455  NEXT K%
1460 NEXT J%
1462 IF N%(POOL%)=0 THEN GOTO 1464
1463 FOR K%=1 TO N%(POOL%): PRINT #1,"POOL,";K%;",";XPOOL(K%): NEXT K%  'SAVE POOLS
1464 PRINT#1,"0,0"                                            'BLOCK TERM.
1465 IF N%(SPIKE%)=0 THEN GOTO 1475
1470 FOR K%=1 TO N%(SPIKE%):PRINT#1,REFR%(K%);:NEXT K%:PRINT #1,"" 'SPIKE REFRs
1475 IF N%(SYNAPSE%)=0 THEN GOTO 1490
1478 FOR J%=1 TO N%(SYNAPSE%)                                  'SAVE PSP'S
1480  FOR T%=0 TO SUMTBL%
1482   PRINT #1, SUMTB(J%, T%);
1484   NEXT T%: PRINT #1, ""
1486  NEXT J%
1490 PRINT#1,"END": CLOSE #1
1495 RETURN
1499 '**************** 11: Restore state variables ***************************
1500 IF BAT$<>"" THEN INPUT #5, LOD$: GOTO 1507
1501 PRINT "RESTORE FROM FILE (default=";LOD0$;: INPUT "):";LOD$ 
1505 IF LOD$ = "" THEN LOD$=LOD0$
1507 LOD0$=LOD$: IF LOD$="NONE" THEN GOTO 820
1510 GOSUB 1515
1513 GOTO 820
1514 '----------- Restore subroutine entry (called by 1057 and 1510) --------
1515 CLOSE #1: OPEN "I", #1, LOD$
1518 INPUT #1, PFILEE$
1520 IF PFILEE$ <> PFILE$ THEN PRINT "SAVE FILE ID DISCREP.": PRINT CHR$(7): FOR I%=1 TO 10000: NEXT I%
1525 INPUT #1, U, SUMTB0%
1530 FOR I%=1 TO N%: INPUT#1, V(I%): NEXT I%     'COMPARTMENT VOLTAGES
1535 INPUT #1, J%, K%                            'BRANCH TYPE, BRANCH INDEX
1540 IF J%=0 THEN GOTO 1560
1545 ON J% GOSUB 7510,7520,7530,7540,7550,7560,7570,7580,7590,7600,7610,7620,7630,7640,7650,7660,7670,7680,7690,7700,7710,7720
1550 GOTO 1535
1560 IF N%(SPIKE%)=0 THEN GOTO 1570
1565 FOR K%=1 TO N%(SPIKE%): INPUT#1, REFR%(K%): NEXT K%   'LOAD SPIKE REFR%s
1570 IF N%(SYNAPSE%)=0 THEN GOTO 1585
1572 FOR J%=1 TO N%(SYNAPSE%)                              'LOAD PSP'S
1574  FOR T%=0 TO SUMTBL%
1576   INPUT #1, SUMTB(J%, T%)
1578   NEXT T%
1580  NEXT J%
1585 INPUT#1, A$: IF A$<>"END" THEN PRINT "1585: SAVE FILE END ERROR"
1590 CLOSE #1
1595 RETURN
1598 '****************** 12: Display-parameter handling ***********************
1599 '  (accessed by 1696 and 2220)
1600 ON DSPLYB% GOTO 1610,1620,1679,1679,1679,1679,1679,1630,1640,1650,1660,1665
1605 IF DSPLYB%=20 THEN Y=POOL(K%): YSCALE=PSCALE: RETURN ELSE PRINT "BAD BRANCH REQ:";DSPLYB%: RETURN
1610 ON DSPLYV% GOTO 1613,1614                                'CMPT
1612 Y=V(K%): YSCALE=VSCALE
     IF VCF% AND K%=CPT% THEN           'Voltage clamp shows current
      Y=II(K%)-IM(K%)                   'in clamped compartment.
      YSCALE=ISCALE
      PCOL%=ICOL%
      RETURN
     ELSE
      PCOL%=VCOL%
      RETURN  'if DSPLYV%=0, display voltage
     END IF
1613 Y=II(K%): YSCALE=ISCALE: RETURN
1614 Y=GI(K%): YSCALE=GSCALE: RETURN
1620 ON DSPLYV% GOTO 1622,1623,1624,1625,1626,1627,1628       'TRIGR
1621 GOTO 1679
1622 Y=I(K%,TRIGR%): YSCALE=ISCALE: RETURN
1623 Y=G(K%,TRIGR%): YSCALE=GSCALE: RETURN
1624 Y=VM(K%): YSCALE=VSCALE: RETURN
1625 Y=EX(K%): YSCALE=VSCALE: RETURN
1626 Y=W(K%): YSCALE=VSCALE: RETURN
1627 Y=P(K%): YSCALE=VSCALE: RETURN
1628 Y=THR(K%): YSCALE=VSCALE: RETURN
1630 ON DSPLYV% GOTO 1632,1633,1634,1635,1636,1637           'DRIVER
1631 GOTO 1679
1632 Y=I(K%,DRIVER%): YSCALE=ISCALE: RETURN
1633 Y=G(K%,DRIVER%): YSCALE=GSCALE: RETURN
1634 Y=GNA(K%): YSCALE=GSCALE: RETURN
1635 Y=GK(K%): YSCALE=GSCALE: RETURN
1636 Y=GK1(K%): YSCALE=GSCALE: RETURN
1637 Y=GK2(K%):SCALE=GSCALE: RETURN
1640 ON DSPLYV%  GOTO 1642,1643,1644,1645                     'HHFXD
1641 GOTO 1679
1642 Y=I(K%,HHFXD%): YSCALE=ISCALE: RETURN
1643 Y=G(K%,HHFXD%): YSCALE=ISCALE: RETURN
1644 Y=M(K%): YSCALE=1: RETURN
1645 Y=H(K%): YSCALE=1: RETURN
1650 ON DSPLYV% GOTO 1652,1653,1654,1655,1656,1657,1658,1659  'HH
1651 GOTO 1679
1652 Y=I(K%,HH%): YSCALE=ISCALE: RETURN
1653 Y=G(K%,HH%): YSCALE=GSCALE: RETURN
1654 Y=MHH(K%): YSCALE=1: RETURN
1655 Y=ALPHAM(K%): YSCALE=KSCALE: RETURN
1656 Y=BETAM(K%): YSCALE=KSCALE: RETURN
1657 Y=HHH(K%): YSCALE=1: RETURN
1658 Y=ALPHAH(K%): YSCALE=KSCALE: RETURN
1659 Y=BETAH(K%): YSCALE=KSCALE: RETURN
1660 ON DSPLYV% GOTO 1662,1663                                'SYNAPSE
1661 GOTO 1679
1662 Y=I(K%,SYNAPSE%): YSCALE=ISCALE: RETURN
1663 Y=G(K%,SYNAPSE%): YSCALE=GSCALE: RETURN
1665 ON DSPLYV% GOTO 1667,1668                                'CHEMOX
1666 GOTO 1679
1667 Y=I(K%,CHEMOX%): YSCALE=ISCALE: RETURN
1668 Y=G(K%,CHEMOX%): YSCALE=GSCALE: RETURN
1679 PRINT "BAD DISPLAY PARAMETER REQUEST: BRANCH=";DSPLYB%;" PARAMETER=";DSPLYV%: RETURN
1680 IF BAT$<>"" THEN INPUT #5,DSPLYP%,DSPLYV%,Y0: GOTO 820
1681 INPUT "BRANCH-TYPE TO DISPLAY (CMPT, TRIGR, DRIVER, HHFXD, HH, SYNAPSE); OFFSET";J$,Y0
1682 GOSUB 100 : DSPLYB%=J% : ON DSPLYB% GOTO 1683,1684,1697,1697,1697,1697,1688,1689,1690,1691,1692
1683 J%=2: GOTO 1695                                           'CMPT
1684 D$(3)="VM": D$(4)="EX": D$(5)="W": D$(6)="P": D$(7)="THR": J%=7: GOTO 1695 'TRIGR
1688 D$(3)="GNA": D$(4)="GK": D$(5)="GK1": D$(6)="GK2": J%=6:GOTO 1695 'DRIVER
1689 D$(3)="M": D$(4)="H": J%=4: GOTO 1695                       'HHFXD
1690 D$(3)="ALPHAM": D$(4)="BETAM": D$(5)="ALPHAH": D$(6)="BETAH": J%=6: GOTO 1695 'HH
1691 J%=2: GOTO 1695                                             'SYNAPSE
1692 J%=2: GOTO 1695                                             'CHEMOX
1695 PRINT J$;: FOR I%=1 TO J%: PRINT USING "; ##=";I%;: PRINT D$(I%);: NEXT I%: INPUT DSPLYV%
1696 GOSUB 1600 : GOTO 820
1697 PRINT "ILLEGAL BRANCH TYPE": GOTO 1680
1699 '**************** 13: Options *********
1700 IF BAT$<>"" THEN INPUT #5, OM%,J%: GOTO 1760 ELSE PRINT "OPTIONS MENU"
1701 PRINT "  1=TIME RESET: Change U-variable reset flag"
1702 PRINT "  2=BELL: Turn bell on/off"
1703 PRINT "  3=ZERO-PLOT: Turn plot on/off"
1704 PRINT "  4=SPIKE-TIC: Turn on/off"
1705 PRINT "  5=Y_OFFSET: new value"
1706 PRINT "  6=DEBUG_MODE: turn on/off" 
1707 PRINT "  7=PRINT protocol flag on/off"
1710 INPUT OM%
1711 ON OM% GOTO 1722,1724,1726,1728,1730,1732,1734
1719 '---
1722 IF RST% THEN A$="ON" ELSE A$="OFF"
1723 PRINT "U-RESET IS ";A$;C$="; NEW STATUS (ON/OFF)": GOTO 1750
1724 IF BLF% THEN A$="ON" ELSE A$="OFF"
1725 PRINT "BELL IS ";A$;"; NEW STATUS (ON/OFF)": GOTO 1750
1726 IF ZPF% THEN A$="ON" ELSE A$="OFF"
1727 PRINT "ZERO-PLOT IS ";A$;"; NEW STATUS (ON/OFF)": GOTO 1750
1728 IF SPF% THEN A$="ON" ELSE A$="OFF"
1729 PRINT "SPIKE-PLOT IS ";A$;"; NEW STATUS (ON/OFF)": GOTO 1750
1730 PRINT "Y0=";Y0;"; NEW Y0": GOTO 1750
1732 IF DBF% THEN A$="ON" ELSE A$="OFF"
1733 PRINT "DEBUG FLAG IS ";A$;"; NEW STATUS (ON/OFF)": GOTO 1750
1734 IF PF% THEN A$="ON" ELSE A$="OFF"
1735 PRINT "PRINT FLAG IS ";A$;"; NEW STATUS (ON/OFF)": GOTO 1750
1749 '---
1750 INPUT A$
1755 IF A$="ON" OR A$="on" THEN J%=-1 ELSE J%=0
1759 '--- (BAT$ reentry)
1760 ON OM% GOTO 1762,1764,1766,1768,1770,1772,1774: GOTO 820
1762 RST%=J%: GOTO 820
1764 BLF%=J%: GOTO 820
1766 ZPF%=J%: GOTO 820
1768 SPF%=J%: GOTO 820
1770 Y0=VAL(A$): GOTO 820
1772 DBF%=J%: IF BAT$<>"" THEN INPUT #5,DBGI%: ELSE INPUT "DEBUG ITERATIONS:";DBGI%: GOTO 820
1773 GOTO 820
1774 PF%=J%: GOTO 820
1799 '**************** ONE TIME INCREMENT OF MODEL ***************************
1800 GOSUB 3000: IF VCF% THEN V(CPT%)=VC        'KINETIC CALCULATIONS
1805 GOSUB 2000                                 'PLOTS
1810 FOR I%=1 TO NSPF%: SPKFLG%(I%)=0: NEXT I%  'CLEAR SPIKE FLAGS
1820 if inkey$=chr$(27) then end
1830 RETURN
1899 '**************** Flag/Switch print-out subroutine ***********
1900 PRINT "UNBLOCKED BRANCH TYPES: "; :IF PF% THEN LPRINT "UNBLOCKED BRANCH TYPES: ";
1910 FOR J%=2 TO NCODE%
1920  IF NOT TXFLG%(J%) THEN GOSUB 150: PRINT J$;" ";: IF PF% THEN LPRINT J$;" ";
1930  NEXT J%: PRINT : IF PF% THEN LPRINT
1940 J%=DSPLYB%: GOSUB 150
1950 PRINT "DISPLAY/WRITE BRANCH-TYPE & VARIABLE:";J$;"/";D$(DSPLYV%)
1960 IF SF% AND PF% THEN LPRINT ".PRN FILE COLUMNS (Branch-type & variable):";J$;"/";D$(DSPLYV%)
1990 RETURN
1995 '                      ###############
1996 '#######################     PLOTS   ####################################
1997 '                      ###############
2000 SKPCNT%=SKPCNT%+1: IF SKPCNT%=SKIP% THEN SKPCNT%=0
2005 IF SKPCNT%=0 THEN GOSUB 2200                      'PLOT EVERY SKIPCOUNT

2015 IF N%(TRIGR%)=0 OR TXFLG%(TRIGR%) THEN GOTO 2050
2020 FOR I%=1 TO N%(TRIGR%)                            'PLOT TRIGR SPIKES
2025  J%=CP%(I%,TRIGR%)
2030  IF SPKFLG%(I%) THEN LINE (XXX, J%*(SCY%+1)/(N%+1)) - (XXX, 5+J%*(SCY%+1)/(N%+1)),scol%
2035  IF SPKFLG%(I%) AND SF% THEN PRINT #3, I%; X      'WRITE TIME TO .SPK FILE
2040  IF SPKFLG%(I%) AND SPF% THEN V(J%)=V(J%)+SPKHT: GOSUB 2200: V(J%)=V(J%)-SPKHT: GOSUB 2200: X%=X%-2
2045  NEXT I%

2050 IF N%(SPIKE%)=0 OR TXFLG%(SPIKE%) THEN GOTO 2075  'PLOT CODE SPIKE% SPIKES
2055 FOR I%=1 TO N%(SPIKE%)
2060  J%=CP%(I%,SPIKE%)
2065  IF SPKFLG%(SPF%(I%)) AND SPF% THEN V(J%)=V(J%)+SPKHT: GOSUB 2200: V(J%)=V(J%)-SPKHT: GOSUB 2200: X%=X%-2
2070  NEXT I%

2075 IF N%(POOL%)=0 THEN GOTO 2080
2076 LOCATE 1,1: PRINT USING "T= ##.### ";U;
2077 FOR K%=1 TO N%(POOL%): PRINT "POOL(";K%;:PRINT USING ")= ##.###; ";XPOOL(K%);: NEXT K%: PRINT "         "
3078 PRINT "          ";: FOR K%=1 TO N%(POOLX%): PRINT "TARG(";K%;:PRINT USING ")= ##.###; ";TARG(K%);: NEXT K%: PRINT "     "

2080 U= U+TINC: X=X+TINC                               'INCREMENT MODEL TIME
2085 IF X1 THEN RETURN  'ABORT END-OF-RUN DSPLY ON MULTIPLE SWPS
     if bat$<>"" THEN
      locate 24,1
      print "Press any key to display cursor.";
      st=timer
      foo%=0
      do
       ft=timer
       A$=inkey$
       if A$<>"" THEN           'go to cursor display if keypress
	 locate 24,1
	 print space$(40);
	 foo%=-1
       end if
       if (ft-st)>mdly then RETURN       'RETURN if too much time
      loop while not foo%                     'elapses
     end if
2096 IF BLF% THEN PRINT CHR$(7);CHR$(7);CHR$(7);CHR$(7);
2099 '**************** End-of-run cursor-accessed display **************
2100 I%=1: XXX=0: YYY=0: F%=2: M%=1: XF%=1: YF=0   'F%,M%=FIXED,MVBL CURSORS
2105 for k% = 1 to n%(dsplyb%)                'load appropriate Yscales.
      gosub 1600
      yscale(k%) = YSCALE
      pcol%(k%) = pcol%
     next k%
2109 locate 24,1: print space$(79);: locate 24,1

2110 PRINT "SWEEP COMPLETE:                                      TO MAIN MENU";
2130 A$ = INKEY$                              'Key-based cursor read-out mode
2135 IF A$ = "" THEN GOTO 2130                'I%= Trace#; X%= TimePoint#
2137 A$=RIGHT$(A$,1)                          'Lop off possible space character
2138 A%=ASC(A$)
2140 IF A%=5  OR A%=72 THEN I%=I%-1: IF I%<1 THEN I%=1: GOTO 2170 ELSE GOTO 2170  'ctrl-E or up arrow
2141 IF A%=73 THEN I%=1: GOTO 2170
2142 IF A%=24 OR A%=80 THEN I%=I%+1: IF I%>N%(DSPLYB%) THEN I%=N%(DSPLYB%): GOTO 2170 ELSE GOTO 2170   'ctrl-X or down arrow
2143 IF A%=81 THEN I%=N%(DSPLYB%): GOTO 2170
2144 IF A%=19 OR A%=75 THEN X%=X%-1: IF X%<0  THEN X%=0:  GOTO 2170 'Ctl-S or Left arrow
2146 IF A%=4  OR A%=77 THEN X%=X%+1: IF X%>XSCALE/TINC THEN X%=XSCALE/TINC: GOTO 2170 'Ctl-D or Right arrow
2148 IF A%=1  OR A%=115 THEN X%=X%-XSCALE/TINC/SKIP%/FRCT%: IF X%<1 THEN X%=0: GOTO 2170 'Ctl-A or Ctl-left-arrow
2150 IF A%=6  OR A%=116 THEN X%=X%+XSCALE/TINC/SKIP%/FRCT%: IF X%>XSCALE/TINC/SKIP% THEN X%=XSCALE/TINC/SKIP%: GOTO 2170 'Ctl-F or Ctl-right-arrow
2152 IF A%=27 THEN X=0: X%=0: GOTO 2195            ' TO RETURN
2154 IF A%=71 THEN X%=0                  'Ctl-Left arrow
2156 IF A%=79 THEN X%=XSCALE/TINC/SKIP%  'Ctl-Right arrow
2158 IF A%=22 OR A%=82 THEN SWAP X%,XF%: SWAP F%,M%: SWAP Y,YF: GOTO 2172 'Ctl-V or Ins
2160 IF A%=48 THEN FRCT%=FRCT%*10        '0
2161 IF A%=49 THEN FRCT%=2               '1
2162 IF A%=50 THEN FRCT%=5               '2
2163 IF A%=51 THEN FRCT%=10              '3
2164 IF A%=52 THEN FRCT%=20              '4
2165 IF A%=53 THEN FRCT%=50              '5
2166 IF A%=54 THEN FRCT%=100             '6
2167 IF A%=55 THEN FRCT%=200             '7
2168 IF A%=56 THEN FRCT%=500             '8
2169 IF A%=57 THEN FRCT%=1000            '9
2170 yscale = yscale(I%)                 'restore stored YSCALE
2172 LINE (XXX, YYY-5*M%)-(XXX, YYY+5*M%),0: PSET (XXX,YYY),pcol%  'Erase old line (not pt)
2173 X=(X%-1)*TINC*SKIP%: Y=Y(I%,X%)+Y0
2175 XXX= X*SCX%/XSCALE: YYY= I%*(SCY%+1)/(N%+1) - Y*SCY%/YSCALE
2177 LINE (XXX, YYY-5*M%) - (XXX, YYY+5*M%)
2180 LOCATE M%,1: PRINT USING "T= ###.#### ";U-XSCALE+X;: PRINT T$;": ";D$(DSPLYV%);: PRINT USING " ####.## ";Y-Y0;
2182 LOCATE 1,40: PRINT USING "DELTA-T= ###.#### ";SKIP%*TINC*ABS(X%-XF%);: IF X%<>XF% THEN PRINT USING "1/DELTA-T= ####.##     ";1/(TINC*ABS(X%-XF%)*SKIP%);
2184 LOCATE 2,40: PRINT USING "DELTA-Y= ####.## ";ABS(Y-YF);
2185 GOTO 2130
2195 RETURN
2198 '******* Display variable retrieval, file output, and plot-call *********
2200 IF SF% THEN PRINT #2, U;             'WRITE TIME VALUE ON DISK

     if zpf% then                         'plot zero line before..avoid
      for k%=1 to n%(dsplyb%)             'overwriting important stuff
       pset(XXX+1,(SCY%+1)*K%/(n%(dsplyb%)+1)),zcol%  'with a zero-line.
      next k%
     end if

2210 FOR K%=1 TO N%(DSPLYB%)              'DISPLAY FOR EACH OCCURRENCE OF VRBL
2220  GOSUB 1600                          'GET DISPLAY VARIABLE VALUE
2230  Y(K%,X%)=Y                          'PLACE IN DISPLAY BUFFER
2240  IF SF% THEN PRINT #2, Y;            'WRITE VARIABLE VALUE ON DISK
2250  GOSUB 2300                          'PLOT
2260 NEXT K%
2270 X%=X%+1
2290 IF SF% THEN PRINT #2, ""
2295 RETURN
2298 '**************** Plot subroutines ***************************
2300 if pcol%=0 then pcol%=ncol%    'use default color if none is specified.
2305 XXX= X*SCX%/XSCALE: YYY= K%*(SCY%+1)/(N%+1) - (Y+Y0)*SCY%/YSCALE     'NORMAL PLOT
2310 PSET (XXX, YYY),pcol%
2330 RETURN
' 2400 not used.
2400 LINE (XXX, YYY)-(XXX, (SCY%+1)-I%*50 - (Y+Y0+SPKHT)*SCY%/YSCALE),scol%  'SPIKE PLOT
2410 RETURN
2991 '
2993 '                        #######################
2995 '#########################  NETWRK SUBROUTINE  ##########################
2997 '                        #######################
3000 TRGFLG% = 0
3009 '##################################
3010 '# PATCH: SUM ALL BRANCH CURRENTS #
3011 '##################################
3020 FOR I% = 1 TO N%: GOSUB 4010: NEXT I%        'CURRENT FROM PRINCIPAL CMPT
3030 FOR J% = LOWBR% TO HIBR%           'STEP THROUGH ALL BRANCH CODES (>lowbr)
3040  IF N%(J%)=0 OR TXFLG%(J%) THEN GOTO 3100    'SKIP VACANT & BLOCKED BRNCHS
3050  FOR K% = 1 TO N%(J%)
3060   I% = CP%(K%, J%): IF I% = 0 THEN GOTO 3100 'SET I% TO CMPT #
3070   II(I%) = II(I%) + I(K%, J%)      'SUM COMPARTMENT CURRENTS FROM EA BRNCH
3080   GI(I%) = GI(I%) + G(K%, J%)      'SUM CONDUCTANCES FROM EACH BRANCH
3090   NEXT K%
3100  NEXT J%
3110 FOR I% = 1 TO N%                   'SUM I FROM OTHER CMPTS
3120  IM(I%) = IM0(I%)+INJ(I%)          'I FROM STIM + POOL-INJECTED
3125  IF TXFLG%(ELECTN%) THEN GOTO 3180
3130  FOR J% = 1 TO N%
3140   IF J% = I% THEN GOTO 3170
3150   IF GC(I%, J%) = 0 AND GC(J%, I%) = 0 THEN GOTO 3170
3160   IM(I%)=IM(I%) - (V(J%)>V(I%))*(V(J%)-V(I%))*GC(I%,J%) - (V(J%)<=V(I%))*(V(J%)-V(I%))*GC(J%,I%)
3170   NEXT J%
3180  NEXT I%
3190 FOR I%=1 TO N%                   'CHARGE CAPACITANCE
3200  DV(I%)=(IM(I%)-II(I%))*TINC/C(I%)
3210  IF DBF% <> 0 THEN PRINT "3210: PATCH: I%="; I%; "II="; II(I%); " GI="; GI(I%); " DV="; DV(I%); "V="; V(I%)
3220  NEXT I%
3228 '########################
3230 '# TRIGR BRANCH UPDATES #   TRIGGER ZONE KINETICS AND SPIKES
3232 '########################
3240 IF TXFLG%(TRIGR%) GOTO 3300
3250 FOR I%=1 TO N%(TRIGR%)
3260  VA(I%) = V(CP%(I%,TRIGR%))-VLK(CP%(I%,TRIGR%))
3270  GOSUB 4070                'TRIGR
3280  IF NOT SPKFLG%(I%) THEN GOTO 3295
3290  GOSUB 4590                'SPIKE
3295  NEXT I%
3296 '########################
3297 '# SPIKE BRANCH UPDATES #
3298 '########################
3300 IF TXFLG%(SPIKE%) THEN GOTO 3360
3310 FOR I%=1 TO N%(SPIKE%)           'SET SPKFLG% IF V JUST CROSSED ONTHR
3320  IF V(CP%(I%,SPIKE%))>ONTHR(I%) AND NOT REFR%(I%) THEN SPKFLG%(SPKF%(I%))=-1: REFR%(I%)=-1
3340  IF V(CP%(I%,SPIKE%))SUMTBL% THEN SUMTB0%= 1    'STROBE SUMTB
3950 RETURN                                     'END OF NETWRK SUBRTN
3992 '
3993 '               ########################################
3994 '################  SUBROUTINES FOR BRANCH-TYPE UPDATES ##################
3995 '               ########################################
3996 ' Subroutines to compute branch conductances, G(K%,J%), and
3997 ' ionic currents, I(K%,J%), from state variables, then update
3998 ' the variables with their assigned kinetics.
3999 '
4000 '******************** CODE CMPT: PRINCIPAL CELL CMPT *********************
4010 II(I%) = GL(I%)*(V(I%)-VLK(I%)): GI(I%) = GL(I%)
4020 IF DBF% <> 0 THEN PRINT "4020: CODE 1: I%="; I%
4030 RETURN
4040 '
4050 '******************** CODE TRIGR: TRIGGER ZONE BRANCH ********************
4060 'DESTROYS V,PMTHR,GM,DPM,DPG,DPL,DPH,XX,YY
4070 IF TXFLG%(TRIGR%)  THEN RETURN
4090 V = VM(I%): PMTHR = PMTHR(I%): PM = P(I%)
4100 IF DBF% <> 0 THEN PRINT "4100: I%="; I%; "VM="; VM(I%); "THR="; THR(I%)
4110 IF NOT TRGFLG% THEN GOTO 4130   'TRGFLG% TRUE CAUSES ANTIDROMIC RESETS
4120 IF SPKFLG%(I%) OR V>THR(I%) THEN GOSUB 4590: SPKFLG%(I%)=0
4130 XSS(I%) = THR(I%) - V
4140 GM = GE(I%) + GS(I%) + 1        'GS()=COND (Spike); GE()=CONDCT (Active)
4150 TAU = TAUM0(I%) / GM
4160 EX(I%) = E0(I%) + (VA(I%)+EI(I%)-A1(I%)-A2(I%)-AR(I%))/GM: EX=EX(I%)
4170 CHI=E0(I%) + (VA(I%)+EI(I%)+(NOT ADPFLG%)*(A1(I%)+A2(I%)+AR(I%)))/GM
4180 '
4190 '********* Perturbation calculation **********
4200 W(I%) = W(I%) - W(I%) * TINC / TAU
4210 '
4220 '********* Current Contrib Calculation *******
4230 'IF CURFLG% THEN DJ=(EI(I%)/GM-J(I%))*TINC/TAU: J(I%)=J(I%)+DJ: GOTO 4280 'V2.4 RELIC
4240 DJ = EI(I%) - J(I%): W(I%) = W(I%) - DJ
4250 J(I%) = EI(I%)
4260 '
4270 '********* PM Potential **********************
4280 DPM = (EX - PMTHR) * KPM(I%)
4290 IF DPM < 0 THEN DPM = 0
4300 DPM = DPM - PM
4310 IF DPM < 0 THEN TAUPM = TAU ELSE TAUPM = TAUPM(I%)
4320 DPM = DPM * TINC / TAUPM: DPL = -P(I%) * TINC / TAU
4330 '******* FINAL VOLTAGE & PM DET WITH COMP FOR MID-TINC PMTHR XING
4340 IF V <= PMTHR THEN DPG = DPM: DPH = DPL ELSE DPG = DPL: DPH = DPM
4350 P(I%) = P(I%) + DPG
4360 VM(I%) = EX(I%) + P(I%) + W(I%) + DJ
4370 IF TAUAR(I%) <> 0 THEN VM(I%) = VM(I%) - (KAR(I%) * CHI - AR(I%)) * TINC / TAUAR(I%)
4380 L = VM(I%) - PMTHR
4390 IF V = PMTHR THEN IF L <= 0 THEN GOTO 4470 ELSE GOTO 4410
4400 IF (PMTHR - V) * L < 0 THEN GOTO 4470           'IF CROSSING, FIX VM
4410 IF VM(I%) = V THEN GOTO 4470
4420 XX=DPG*DPL/(VM(I%)-V): YY=DPH*DPL/(VM(I%)-V)    'FRACTIONAL POST-XING TINC
4430 VM(I%) = VM(I%) - XX + YY
4440 P(I%) = PM - XX + YY
4450 '
4460 '********* Exponential Decays ****************
4470 IF TAUCOND(I%) <> 0 THEN GS(I%) = GS(I%) + (CHI * KCOND(I%) - GS(I%)) * TINC / TAUCOND(I%)
4480 IF GS(I%) <= -1 THEN GS(I%) = -1
4490 IF TAUAR(I%) <> 0 THEN AR(I%) = AR(I%) + (CHI * KAR(I%) - AR(I%)) * TINC / TAUAR(I%)
4500 IF TAUA1(I%) <> 0 THEN A1(I%) = A1(I%) + (CHI * KA1(I%) - A1(I%)) * TINC / TAUA1(I%)
4510 IF TAUA2(I%) <> 0 THEN A2(I%) = A2(I%) + (CHI * KA2(I%) - A2(I%)) * TINC / TAUA2(I%)
4520 IF TAUTHR(I%) <> 0 THEN THR(I%) = THR(I%) + (CHI * KTHR(I%) - THR(I%) + THRINF(I%)) * TINC / TAUTHR(I%)
4530 '
4540 '********* Test for Spike Conditions *********
4550 IF VM(I%)>THR(I%) THEN SPKFLG%(I%)=-1
4560 RETURN
4570 '
4580 '****************** SPIKE ********************
4590 'Requires I% set to cell #
4600 GOTO 4655                               'PATCH AROUND QUANTIZATION CORRN
4605 G = THR(I%)-VM(I%): IF G>0 THEN GOTO 4630
4610 T = XSS(I%)-THR(I%)+VM(I%)
4615 T = XSS(I%)-G: IF T=0 THEN GOTO 4635
4620 T = G/T: IF T>=0 THEN GOTO 4630    'FRACTIONAL INTERVAL OVERSHOOT
4625 IF T >=-1 THEN GOTO 4635           'T MUST BE >=-1
4630 T = 0
4635 T = T*TINC: TINC0=TINC: TINC=T     'SPI.2
4640 TRGFLG% = 0                        'DISARM SPIKE FIRING
4645 IF T = 0 THEN GOTO 4655
4650 GOSUB 4070                         'TRIGR (Run backwards to thr xing)
4655 P(I%) = 0
4660 IF MAXG(I%)<>0 THEN GS(I%)=GS(I%)+DG0(I%)*(MAXG(I%)-GS(I%))/MAXG(I%) ELSE GS(I%) = GS(I%) * DG0(I%)'IF MAX=0, IS FLAG FOR % SCALING
4665 IF MAXAR(I%)<>0 THEN DAR=DAR(I%)*(MAXAR(I%)-AR(I%))/MAXAR(I%) ELSE DAR=(DAR(I%)-1)*AR(I%)
4670 AR(I%) = AR(I%)+DAR                '(NEED DAR LATER TOO)
4675 IF MAXA1(I%)<>0 THEN A1(I%)=A1(I%)+DA1(I%)*(MAXA1(I%)-A1(I%))/MAXA1(I%) ELSE A1(I%)=A1(I%)*DA1(I%)
4680 IF MAXA2(I%)<>0 THEN A2(I%)=A2(I%)+DA2(I%)*(MAXA2(I%)-A2(I%))/MAXA2(I%) ELSE A2(I%) = A2(I%)*DA2(I%)
4685 IF MAXTHR(I%)<>0 THEN THR(I%)=THR(I%)+DTHR(I%)*(MAXTHR(I%)-THR(I%)+THRINF(I%))/MAXTHR(I%) ELSE THR(I%)=THRINF(I%)+(THR(I%)-THRINF(I%))*DTHR(I%)
4690 IF MAXV(I%)<>0 THEN VM(I%)=VM(I%)+DV0(I%)*(MAXV(I%)-VM(I%))/MAXV(I%)-DAR ELSE VM(I%)=VM(I%)*DV0(I%)-DAR
4695 W(I%)=VM(I%)-E0(I%)-(VA(I%)+EI(I%)-AR(I%)-A1(I%)-A2(I%))/GM
4696 RETURN
4698 '
4699 'COND: ************** CODE 7: FIXED CONDUCTANCE BRANCH *******************
4700 I(K%, COND%) = G(K%, COND%)*(V(I%)-VCOND(K%))
4710 RETURN
4797 '
4798 'DRIVER: ************ CODE 8: DRIVER POTENTIAL BRANCH *******************
4800 IF MUNA(K%)<>0 THEN GNA(K%)=GBARNA(K%)/(1+EXP((V0NA(K%)-V(I%))/MUNA(K%)))
4810 IF MUK(K%)<>0 THEN ACTK=1/(1+EXP((V0K(K%)-V(I%))/MUK(K%))) ELSE ACTK=0
4820 GK(K%)=GBARK(K%)*ACTK
4830 IF TAUK1(K%)<>0 THEN GK1(K%)=GK1(K%)+(GBARK1(K%)*ACTK-GK1(K%))*TINC/TAUK1(K%)
4840 IF TAUK2(K%)<>0 THEN GK2(K%)=GK2(K%)+(GBARK2(K%)*ACTK-GK2(K%))*TINC/TAUK2(K%)
4850 GKTOT(K%)=GK(K%)+GK1(K%)+GK2(K%)
4860 I(K%,DRIVER%)=GNA(K%)*(V(I%)-VNA(K%))+GKTOT(K%)*(V(I%)-VK(K%))
4870 G(K%,DRIVER%)=GNA(K%)+GKTOT(K%)
4880 IF DBF%<>0 THEN PRINT "4880: CODE 8: K%=";K%;" G=";G(K%, DRIVER%);" I="; I(K%, 8); " GK="; GK(K%); " GNA="; GNA(K%)
4890 RETURN
4898 '
4899 'ICALC: ************* CODE 9: FIXED TAU HH BRANCH ***********************
4900 IF QM(K%)=0 THEN M(K%)=1: GOTO 4930
4910 MINF = 1/(1+EXP((V0M(K%)-V(I%))/MUM(K%)))
4920 M(K%) = M(K%)+(MINF-M(K%))*TINC/TAUMA(K%)
4930 IF QH(K%)=0 THEN H(K%)=1: GOTO 4960
4940 HINF = 1/(1+EXP((V0H(K%)-V(I%))/MUH(K%)))
4950 H(K%) = H(K%)+(HINF-H(K%))*TINC/TAUH(K%)
4960 G(K%, HHFXD%) = GBAR(K%)*(M(K%)^QM(K%))*(H(K%)^QH(K%))
4970 I(K%, HHFXD%) = G(K%, HHFXD%)*(V(I%)-VEQ(K%))
4980 IF DBF%<>0 THEN PRINT "4980: CODE 9: K%="; K%; " G="; G(K%, HHFXD%); " I="; I(K%, 9); " M="; M(K%);" MINF=";MINF; "H="; H(K%);" HINF=";HINF
4990 RETURN
4998 '
4999 'HH: **************** CODE 10: FULL HH BRANCH ***************************
5000 IF QMHH(K%)=0 THEN MHH(K%)=1: GOTO 5040
5010 IF EAM(K%)=-1 AND V(I%)=-CAM(K%) THEN ALPHAM(K%)=BAM(K%)*DAM(K%) ELSE ALPHAM(K%)=(AAM(K%)+BAM(K%)*(V(I%)+CAM(K%)))/(EXP(-(V(I%)+CAM(K%))/DAM(K%))+EAM(K%))
5020 IF EBM(K%)=-1 AND V(I%)=-CBM(K%) THEN BETAM(K%)= BBM(K%)*DBM(K%) ELSE BETAM(K%) =(ABM(K%)+BBM(K%)*(V(I%)+CBM(K%)))/(EXP(-(V(I%)+CBM(K%))/DBM(K%))+EBM(K%))
5030 MHH(K%)=MHH(K%)+(ALPHAM(K%)*(1-MHH(K%))-BETAM(K%)*MHH(K%))*KTEMP(K%)*TINC
5040 IF QHHH(K%)=0 THEN HHH(K%)=1: GOTO 5080
5050 IF EAH(K%)=-1 AND V(I%)=-CAH(K%) THEN ALPHAH(K%)=AAH(K%)*DAH(K%) ELSE ALPHAH(K%)=(AAH(K%)+BAH(K%)*(V(I%)+CAH(K%)))/(EXP(-(V(I%)+CAH(K%))/DAH(K%))+EAH(K%))
5060 IF EBH(K%)=-1 AND V(I%)=-CBH(K%) THEN BETAH(K%)= BBH(K%)*DBH(K%) ELSE BETAH(K%) =(ABH(K%)+BBH(K%)*(V(I%)+CBH(K%)))/(EXP(-(V(I%)+CBH(K%))/DBH(K%))+EBH(K%))
5070 HHH(K%) = HHH(K%)+(ALPHAH(K%)*(1-HHH(K%))-BETAH(K%)*HHH(K%))*KTEMP(K%)*TINC
5080 G(K%,HH%) = GBARHH(K%)*(MHH(K%)^QMHH(K%))*(HHH(K%)^QHHH(K%))
5085 I(K%,HH%) = G(K%,HH%)*(V(I%)-VEQHH(K%))
5090 IF DBF% <> 0 THEN PRINT "5090: CODE 10: K%="; K%; " G="; G(K%, HH%); " I="; I(K%, 10); " AM="; ALPHAM(K%); " BM="; BETAM(K%); " AH="; ALPHAH(K%); " BH="; BETAH(K%)
5095 RETURN
5097 '
5098 'SYNAPSE: *********** CODE 11: SYNAPTIC INPUT BRANCH ********************
5189 '(destroys A; F; L%; LL%)
5100 XMTR=SUMTB(K%,SUMTB0%): G(K%,SYNAPSE%)=GBARS(K%)*XMTR/(KDS(K%)+XMTR)'G FROM BINDING EQ
5105 I(K%,SYNAPSE%)=G(K%,SYNAPSE%)*(V(CP%(K%,SYNAPSE%))-VREVS(K%))
5110 IF DBF%<>0 THEN PRINT "5110: CODE 11: K%=";K%;" G=";G(K%,SYNAPSE%);" I=";I(K%,SYNAPSE%)
5115 IF NOT SPKFLG%(CPS%(K%)) THEN RETURN
5120 F=0                                'CLEAR FACILITATION
5122 IF NF%(K%)=0 THEN GOTO 5135        'IF NO FACIL, GOTO PSP
5124 FOR L%=FLOC%(K%) TO FLOC%(K%)+NF%(K%)-1
5126  XF(L%) = 1+(XF(L%)-1)*EXP((TPREV(K%)-T)/TAUF(L%))
5128  F = F+XF(L%)^NF(L%)-1
5130  XF(L%) = XF(L%)+C1F(L%)-C2F(L%)*XF(L%)
5132  NEXT L%
5135 TPREV(K%)=U: T%=0
5140 A = A0S(K%)*(1+F)              'TRANSMITTER RELEASE SCALED UP BY FACIL
5145 LL% = SUMTB0%+INT(DLY(K%)/TINC)'START PSP SUMMATION AT POINTER + DELAY
5150 IF LL%>=SUMTBL% THEN LL% = LL%-SUMTBL%
5155 FOR L%=LL% TO SUMTBL%          'CARRY SUM TO END OF SUMTB ...
5160  SUMTB(K%,L%) = SUMTB(K%,L%)+A*VPSP(PSPSHP%(K%),T%)
5165  T% = T%+1: IF T%>PSPL% THEN GOTO 5195
5170  NEXT L%
5175 IF LL% = 0 THEN GOTO 5195
5180 FOR L% = 0 TO LL%-1              '... THEN WRAP AROUND TO BEGINNING
5185  SUMTB(K%, L%) = SUMTB(K%,L%)+A*VPSP(PSPSHP%(K%),T%)
5187  T% = T%+1: IF T%>PSPL% THEN GOTO 5195
5190  NEXT L%
5193 IF DBF%<>0 THEN PRINT "5193: SPIKE IN UNIT";CPS%(K%);" AMPL=";A
5195 RETURN
5198 '
5199 'CHEMOX: ************ CODE 12: EXPONENTIAL CHEMOTONIC INPUT BRANCH  *****
5200 IF KS(K%)=0 THEN S(K%)=S0(K%)*EXP(V(CPC%(K%))/MUC(K%)): GOTO 5250
5210 S(K%)=S(K%) + S0(K%)*EXP(V(CPC%(K%))/MUC(K%))*TINC - KS(K%)*S(K%)*TINC
5250 G(K%,CHEMOX%) = GBARC(K%)*S(K%)/(KDC(K%)+S(K%))
5260 I(K%,CHEMOX%) = G(K%,CHEMOX%)*(V(I%)-VREVC(K%))
5270 IF DBF%<>0 THEN PRINT "5230: CODE CHEMOX: K%="; K%; " G="; G(K%, CHEMOX%); " I="; I(K%, CHEMOX%); " CPC%="; CPC%(K%); " V(PRE)="; V(CPC%(K%)); " XMTR="; XMTR
5280 RETURN
5290 '            ************************************************
5291 '            * LINES 5300 - 5900 RESERVED FOR CODES 13 - 19 *
5292 '            ************************************************
5300 L%=5300: GOTO 5990    'Code 13
5399 'CONNOR: ************ CODE 14: MODIFIED HH KINETICS (Connor et al 1977)
5400 IF QMC(K%)=0 THEN MC(K%)=1: GOTO 5430
5410 MCINF = (MCA(K%)*EXP((V(I%)+MCB(K%))/MCC(K%))/(1+EXP((V(I%)-V0MC(K%))/MUMC(K%))))^(1/QMC(K%))
5415 TAUMC(K%)= TMC0(K%)+TMCA(K%)/(1+EXP((V(I%)-V0TM(K%))/MUTM(K%)))
5420 MC(K%) = MC(K%)+(MCINF-MC(K%))*KTEMPC(K%)*TINC/TAUMC(K%)
5430 IF QHC(K%)=0 THEN HC(K%)=1: GOTO 5460
5440 HCINF = 1/(1+EXP((V(I%)-V0HC(K%))/MUHC(K%)))^QHC(K%)
5445 TAUHC(K%)=THC0(K%)+THCA(K%)/(1+EXP((V(I%)-V0TH(K%))/MUTH(K%)))
5450 HC(K%) = HC(K%)+(HCINF-HC(K%))*KTEMPC(K%)*TINC/TAUHC(K%)
5460 G(K%, CONNOR%) = GBARCON(K%)*(MC(K%)^QMC(K%))*HC(K%)
5470 I(K%, CONNOR%) = G(K%, CONNOR%)*(V(I%)-VEQC(K%))
5490 RETURN
5500 L%=5500: GOTO 5990    'Code 15
5600 L%=5600: GOTO 5990    'Code 16
5700 L%=5700: GOTO 5990    'Code 17
5800 L%=5800: GOTO 5990    'Code 18
5900 L%=5900: GOTO 5990    'Code 19
5990 PRINT L%;": ILLEGAL BRANCH CODE CALL IN KINETICS"
5991 RETURN
5992 '
5993 '              ###########################################
5994 '###############  SUBROUTINES FOR BRANCH PARAMETER INPUT ################
5995 '              ###########################################
5996 ' Subroutines to read branch parameters from the Parameter File, PFILE$
5997 ' Entries at 6000 + 10x where x=Code#
5998 '******************* CODE CMPT (1): INPUT OF PRINCIPAL CMPT PARAMS *******
5999 '8 file entries per branch; g (in umho) = gdens (mmho/uf) * C (uf) * 1000
6010 INPUT #1, CELL%(K%), CELL$(K%), C(K%), VLK(K%), GL(K%), GAMMA
6011 IF GL(K%)=0 THEN GL(K%)=GAMMA*C(K%)*1000   
6012 RETURN
6018 '******************* CODE TRIGR (2): INPUT OF TRIGR PARAMETERS ***********
6019 '31 file entries per branch
6020 INPUT #1, CP%(K%, TRIGR%), E0(K%), TAUM0(K%), PMTHR(K%), KPM(K%), TAUPM(K%), KCOND(K%)
6021 INPUT #1, TAUCOND(K%), KAR(K%), TAUAR(K%), KA1(K%), TAUA1(K%)
6022 INPUT #1, KA2(K%), TAUA2(K%), THRINF(K%), KTHR(K%), TAUTHR(K%), DV0(K%)
6023 INPUT #1, MAXV(K%), DG0(K%), MAXG(K%), GAMMA, DAR0(K%), MAXAR(K%)
6024 INPUT #1, DA10(K%), MAXA1(K%), DA20(K%), MAXA2(K%), DTHR0(K%), MAXTHR(K%)
6025 THR(K%) = THRINF(K%): IF K%>NSPF% THEN NSPF%=K%      'UPDATE # SPK FLGS
6026 IF MAXG(K%)=0 THEN MAXG(K%)=GAMMA*C(CP%(K%,TRIGR%))*1000: DG0(K%)=DG0(K%)*C(CP%(K%,TRIGR%))*1000
6028 RETURN
6029 '***************** CODE ELECTN (3): COMPARTMENT COUPLING CONDUCTANCES ****
6030 INPUT #1, I%, GC(K%,I%): IF K%=I% THEN PRINT "ILLEGAL COUPLING"
6031 GC(I%,K%) = GC(K%,I%)
6032 RETURN
6039 '***************** CODE DIODE (4): COMPARTMENT COUPLING CONDUCTANCES ****
6040 INPUT #1, I%, GC(K%,I%): IF K%=I% THEN PRINT "ILLEGAL COUPLING"
6042 RETURN
6049 '***************** CODE SPIKE (5): VOLTAGE-TRIGGERED SPIKE ***************
6050 INPUT #1, CP%(K%,SPIKE%), SPKF%(K%), ONTHR(K%), OFFTHR%(K%)
6051 IF SPKF%(K%)>NSPF% THEN NSPF%=SPKF%(K%)
6052 RETURN
6059 '***************** CODE UNDEFINED (6) **********************************
6060 GOTO 6190    'Code 6
6069 '***************** CODE COND (7): FIXED CONDUCTANCE AND BATTERY **********
6070 INPUT #1, CP%(K%,COND%), VCOND(K%), G(K%, COND%), GAMMA
6071 IF G(K%,COND%)=0 THEN G(K%,COND%)=GAMMA*C(CP%(K%,COND%))*1000
6072 RETURN
6079 '***************** CODE DRIVER (8): INPUT DRIVER POTENTIAL PARAMETERS ****
6080 INPUT #1, CP%(K%, DRIVER%), VNA(K%), GBARNA(K%), GAMMA, V0NA(K%), MUNA(K%)
6081 INPUT #1, VK(K%), GBARK(K%), GAMMAK, V0K(K%), MUK(K%)
6082 INPUT #1, GBARK1(K%), GAMMAK1, TAUK1(K%), GBARK2(K%), GAMMAK2, TAUK2(K%)
6083 IF GBARNA(K%)=0 THEN GBARNA(K%) = GAMMA*C(CP%(K%,DRIVER%))*1000
6084 IF GBARK(K%)=0  THEN GBARK(K%)  = GAMMAK*C(CP%(K%,DRIVER%))*1000
6085 IF GBARK1(K%)=0 THEN GBARK1(K%) = GAMMAK1*C(CP%(K%,DRIVER%))*1000
6086 IF GBARK2(K%)=0 THEN GBARK2(K%) = GAMMAK2*C(CP%(K%,DRIVER%))*1000
6087 RETURN
6089 '***************** CODE HHFXD (9): INPUT OF FIXED TAU HH PARAMETERS ******
6090 INPUT #1, CP%(K%, HHFXD%), VEQ(K%), GBAR(K%), GAMMA
6091 INPUT #1, QM(K%), V0M(K%), MUM(K%), TAUMA(K%)
6092 INPUT #1, QH(K%), V0H(K%), MUH(K%), TAUH(K%)
6093 IF GBAR(K%)=0 THEN GBAR(K%)=GAMMA*C(CP%(K%,HHFXD%))*1000
6094 RETURN
6099 '***************** CODE HH(10): INPUT OF FULL HH BRANCH PARAMETERS *******
6100 INPUT #1, CP%(K%, HH%), VEQHH(K%), GBARHH(K%), GAMMA
6101 INPUT #1, KTEMP(K%), QMHH(K%), QHHH(K%)
6102 INPUT #1, AAM(K%), BAM(K%), CAM(K%), DAM(K%), EAM(K%)
6103 INPUT #1, ABM(K%), BBM(K%), CBM(K%), DBM(K%), EBM(K%)
6105 INPUT #1, AAH(K%), BAH(K%), CAH(K%), DAH(K%), EAH(K%)
6106 INPUT #1, ABH(K%), BBH(K%), CBH(K%), DBH(K%), EBH(K%)
6107 IF GBARHH(K%)=0 THEN GBARHH(K%)=GAMMA*C(CP%(K%,HH%))*1000 
6108 RETURN
6109 '************ CODE SYNAPSE (11): INPUT OF CONVENTIONAL PSP PARAMETERS ****
6110 INPUT #1, CP%(K%,SYNAPSE%),VREVS(K%),GBARS(K%), GAMMA, KDS(K%),CPS%(K%)
6111 INPUT #1, PSPSHP%(K%),DLY(K%),A0S(K%)
6112 INPUT #1, TAUF(FLOC%): IF TAUF(FLOC%) = 0 THEN GOTO 6116  'CHK FOR FACIL
6113 FLOC%(K%) = FLOC%
6114 INPUT #1, NF(FLOC%), C2F(FLOC%), C1F(FLOC%)
6115 FLOC% = FLOC%+1: GOTO 6111
6116 IF CPS%(K%)>NSPF% THEN NSPF%=CPS%(K%) 'KEEP TRACK OF HIGHEST SPIKE FLAG
6117 IF GBARS(K%)=0 THEN GBARS(K%)=GAMMA*C(CP%(K%,SYNAPSE%))*1000
6118 RETURN
6119 '***************** CODE CHEMOX (12): INPUT OF CHEMOTONIC (EXP) PARAMS ****
6120 INPUT #1, CP%(K%,CHEMOX%),VREVC(K%),GBARC(K%),GAMMA,KDC(K%)
6121 INPUT #1, CPC%(K%),S0(K%),MUC(K%),KS(K%)
6122 IF GBARC(K%)=0 THEN GBARC(K%)=GAMMA*C(CP%(K%,CHEMOX%))*1000
6123 RETURN
6130 GOTO 6192        'Code 13 = dynamic chemotonic conn
6139 '***************** CODE CONNOR (14): CONNOR-MODIFIED HH PARAMS
6140 INPUT #1, CP%(K%, CONNOR%), VEQC(K%), GBARCON(K%), GAMMA, KTEMPC(K%)
6141 INPUT #1, QMC(K%),  MCA(K%),  MCB(K%),  MCC(K%), V0MC(K%), MUMC(K%)
6142 INPUT #1, TMC0(K%), TMCA(K%), V0TM(K%), MUTM(K%)
6143 INPUT #1, QHC(K%),  V0HC(K%), MUHC(K%)
6144 INPUT #1, THC0(K%), THCA(K%), V0TH(K%), MUTH(K%)
6145 IF GBARCON(K%)=0 THEN GBARCON(K%)=GAMMA*C(CP%(K%,CONNOR%))*1000
6146 RETURN
6149 '***************** CODES not implemented:  15-19 *************************
6150 GOTO 6192
6160 GOTO 6192
6170 GOTO 6192    'Code 17: Reserved for user additions
6180 GOTO 6192    'Code 18: Reserved for user additions
6190 GOTO 6192    'Code 19: Reserved for user additions
6192 PRINT "6192: INPUT OF CODE "; J%; " NOT IMPLEMENTED": RETURN
6193 '
6194 '****************** CODE POOL (20): INPUT OF POOL PARAMETERS *************
6195 'Pool types:
6196 ' 1=bound transmitter-eqivalent: dpool0= sumtb(pprm1,sumtb0)*pprm3/(pprm2+sumtb(pprm1,sumtb0) - pool
6197 ' 2=transmitter-dependent: dpool0=sumtb(pprm1,sumtb0)*tinc*pprm3/(pprm2+sumtb(pprm1,sumtb0)
6198 ' 3=current-dependent: dpool0=I(pprm1,pprm2)*tinc*pprm3
6199 ' 4=general 1st-order; 5=bound CHEMOX transmitter dependent
6200 INPUT #1, CP%(K%, POOL%), XTYPE%(K%), XNAME$(K%), XVOL(K%), XPOOL0(K%)
6201 INPUT #1, PPRM1(K%), PPRM2(K%), PPRM3(K%), PPRM4(K%)
6202 RETURN
6204 '***************** CODE POOLK (21): INPUT DIFFUSION RATE CONSTANTS **********
6205 INPUT #1, L%, K(K%, L%)
6206 RETURN
6207 '***************** CODE POOLX (22): INPUT POOL INTERACTIONS **************
6208 'Interactions (XINTYP%): XPOOL(XSRC%) on XPOOL(XTARG%) or Branch(XTARG%)
6209 ' 1=Constant multiplier: Xtarg=Xtarg0+Xprm1*(Xsrc+Xsrc0)
6210 GOTO 6205
6211 ' 2=Equilibrium receptor-binding: Xtarg=Xtarg0+Xprm1*Xsrc/(Xprm2+dXsrc)
6212 ' 3=Pseudo first order kinetic: dXtarg=(Xprm1*Xsrc*(Xprm3-Xtarg)-Xprm2*Xtarg)*tinc
6213 ' 4=Vrev ion dependence: Xtarg=26*ln(Xsrc/Xprm1)
6214 ' 5=Synthesis rate modulation: dXtarg=Xprm1*Xsrc*tinc
6215 ' 6=Coupling-conductance modulation: GC(Xtarg%,Xprm2)=Xprm1*Xsrc + Xtarg0
6216 ' 7=Diffusion-constant modulation:    K(Xtarg%,Xprm2)=Xprm1*Xsrc + Xtarg0
6217 '
6220 INPUT #1, XTARG%(K%), XSRC%(K%), XINTYP%(K%)
6221 INPUT #1, XPRM1(K%), XPRM2(K%), XPRM3(K%), XPRM4(K%)
6222 INPUT #1, XBRN%(K%), XPRM%(K%) 'BRANCH INDX, VRBL PRM#
6223 RETURN
6993 '
6994 '                  *******************************************
6995 '******************* SUBROUTINES TO SAVE STATE VARIABLES     ************
6996 '                  * (lines 7000+NAME%*10; called from 1450) *
9097 '                  *******************************************
7010 PRINT #1, V(K%);: RETURN                            'PRINCIPAL BRANCH
7020 PRINT #1, VM(K%), W(K%), P(K%), EI(K%), GS(K%)     'TRIGR
7022  PRINT #1, AR(K%), A1(K%), A2(K%), THR(K%), XSS(K%);
7024  RETURN
7030 RETURN
7040 RETURN
7050 RETURN
7060 RETURN
7070 RETURN
7080 PRINT #1, GK1(K%), GK2(K%);: RETURN                'TYPE DRIVER
7090 PRINT #1, M(K%), H(K%);: RETURN                    'TYPE HHFXD
7100 PRINT #1, MHH(K%), HHH(K%);: RETURN                'TYPE HH
7110 PRINT #1, NF%(K%), FLOC%, TPREV(K%);               'TYPE SYNAPSE
7112  FOR L% = FLOC% TO NF%(K%) + FLOC%: PRINT #1, XF(L%),: NEXT L%
7120 RETURN
7130 RETURN
7140 PRINT #1, MC(K%), HC(K%);: RETURN                  'TYPE CONNOR
7150 RETURN
7160 RETURN
7170 RETURN
7180 RETURN
7190 RETURN
7200 PRINT #1, XPOOL(K%);: RETURN
7210 RETURN
7220 RETURN
7493 '
7494 '                  ******************************************
7495 '******************* SUBROUTINES TO PRELOAD STATE VARIABLES *************
7496 '                  * (lines 7500+NAME%*10; called from )           *
7497 '                  ******************************************
7510 INPUT #1, V(K%): RETURN                            'PRINCIPAL BRANCH
7520 INPUT #1, VM(K%), W(K%), P(K%), EI(K%), GS(K%)     'TRIGR
7522  INPUT #1, AR(K%), A1(K%), A2(K%), THR(K%), XSS(K%)
7524  RETURN
7530 RETURN                                             'Code 3
7540 RETURN                                             'Code 4
7550 RETURN                                             'Code 5
7560 RETURN                                             'Code 6
7570 RETURN                                             'Code 7
7580 INPUT #1, GK1(K%), GK2(K%): RETURN                 'TYPE DRIVER
7590 INPUT #1, M(K%), H(K%): RETURN                     'TYPE HHFXD
7600 INPUT #1, MHH(K%), HHH(K%): RETURN                 'TYPE HH
7610 INPUT #1, NF%(K%), FLOC%, TPREV(K%)                'TYPE SYNAPSE
7612  FOR L% = FLOC% TO NF%(K%) + FLOC%: INPUT #1, XF(L%): NEXT L%
7614  RETURN
7620 RETURN
7630 RETURN
7640 INPUT #1, MC(K%), HC(K%): RETURN                   'TYPE CONNOR
7650 RETURN
7660 RETURN
7670 RETURN
7680 RETURN
7690 RETURN
7700 INPUT #1, XPOOL(K%): RETURN                        'TYPE POOL
7710 RETURN
7720 RETURN
10991 '
10992 '                   ###############################
10993 '####################           POOLS             ####################
10994 '                   ###############################
10995 '
10996 ' Routines handling filling, diffusion, and modulation in pools
10997 '
10998 '**************** INTER-POOL DIFFUSION  ******************************
11000 FOR K% = 1 TO N%(POOL%)
11140  IF CP%(K%, POOL%) = 0 THEN GOTO 11270            'SKIP EMPTY SLOTS
11150  ON XTYPE%(K%) GOSUB 11310, 11320, 11330, 11340, 11350'INPUT SPRING INPUT OF DPOOL
11160  IF TXFLG%(POOLK%) THEN K = K(0, K%): GOTO 11260  'FLG BLOCKS DIFFUSION
11170  FOR L% = 0 TO N%(POOL%)                     'INFLOW FROM OTHER POOLS
11180   IF L% = K% OR CP%(L%,POOL%) = 0 THEN GOTO 11200
11190   DPOOL = DPOOL + K(K%,L%)*XPOOL(L%)*TINC/XVOL(L%)
11200   NEXT L%
11210  K = 0
11220  FOR L% = 0 TO N%(POOL%)         'OUTFLOW TO OTHER POOLS & DESTROYED
11230   IF L% = K% OR CP%(L%,POOL%) = 0 THEN GOTO 11250
11240   K = K + K(L%,K%)               '[K(0,K%) IS BASE DECAY RATE]
11250   NEXT L%
11260  DPOOL(K%) = DPOOL - K * XPOOL(K%) * TINC / XVOL(K%)'NET POOL CHANGE
11265  IF DBF%<>0 THEN PRINT "11265: CODE POOL: POOL#";K%;" SPRING=";DPOOL;"DIFFUSED=";DPOOL-DPOOL(K%)
11270  NEXT K%
11290 RETURN
11299 '**************** CODE POOL: POOL SPRING SUBROUTINES ***********************
11310 DPOOL = SUMTB(PPRM1(K%), SUMTB0%) * PPRM3(K%) / (PPRM2(K%) + SUMTB(PPRM1(K%), SUMTB0%)) - XPOOL(K%): RETURN
11320 DPOOL = (SUMTB(PPRM1(K%), SUMTB0%) * PPRM3(K%) / (PPRM2(K%) + SUMTB(PPRM1(K%), SUMTB0%)) - PPRM4(K%)*XPOOL(K%)) * TINC: RETURN
11330 DPOOL = (I(PPRM1(K%), PPRM2(K%)) * PPRM3(K%) - PPRM4(K%)*XPOOL(K%)) * TINC: RETURN
11340 DPOOL = (PPRM1(K%) - PPRM2(K%) * XPOOL(K%)) * TINC: RETURN
11350 DPOOL = S(PPRM1%) * PPRM3(K%) / (PPRM2(K%) + S(PPRM1%) - XPOOL(K%)): RETURN
11991 '
11992 '**************** CODE POOLX: GENERATION OF POOL INTERACTIONS  **************
12000 FOR K% = 1 TO N%(POOLX%)
12050 L% = XSRC%(K%)                                'SOURCE POOL
12055 XTARG% = XTARG%(K%)                           'TARGET POOL
12060 IF XTARG%<0 THEN I%=-XTARG%: XBRN% = XBRN%(K%): XPRM% = XPRM%(K%): GOSUB 13000: GOTO 12080   'FETCH K (Current value of target parameter)
12070 K = XPOOL(XTARG%)                             'FETCH TARGET POOL VALUE
12080 ON XINTYP%(K%) GOSUB 12150, 12200, 12300, 12400, 12500,12600,12700
12085 TARG(K%)=K
12090 IF XTARG% < 0 THEN GOSUB 16000: GOTO 12105    'IF BRANCH, SAVE RESULT
12095 IF XINTYP%(K%)=6 OR XINTYP%(K%)=7 THEN GOTO 12105 'Types 6 & 7 different
12100 XPOOL(XTARG%) = K
12105 IF DBF%<>0 THEN PRINT "12105: CODE 22: K%=";K%;" SRC POOL=";L%; " XINTYP=";XINTYP%(K%);" XTARG=";XTARG%;"K=";K;: IF XTARG%<0 THEN PRINT " XBRN=";XBRN%;" XPRM=";XPRM%: ELSE PRINT
12110 NEXT K%
12120 RETURN
12148 '
12149 '      Type 1: Constant multiplier
12150 K = XPRM1(K%) * (XPOOL(L%) + XPOOL0(L%)) + XTARG0(K%)
12160 RETURN
12198 '
12199 '      Type 2: Equilibrium binding
12200 K = XPRM1(K%) * (XPOOL(L%)+XPOOL0(L%)) / (XPRM2(K%) + XPOOL(L%) + XPOOL0(L%)) + XTARG0(K%)
12210 RETURN
12298 '
12299 '      Type 3: Pseudo first-order kinetics
12300 DXTARG = (XPRM1(K%)*(XPOOL(L%)+XPOOL0(L%))*(XPRM3(K%) - K) - XPRM2(K%)*K )*TINC
12310 K = K + DXTARG '(IMPROPERLY DONE INCREMENT)
12320 RETURN
12398 '
12399 '      Type 4: Vrev ion dependence
12400 K = 26 * LOG((XPOOL(L%)+XPOOL0(L%)) / XPRM1(K%))
12410 RETURN
12498 '
12499 '      Type 5: Synthesis rate modulation
12500 K = K + XPRM1(K%) * (XPOOL(L%)+XPOOL0(L%)) * TINC
12510 RETURN
12598 '
12599 '      Type 6: Coupling-conductance modulation
12600 K = XPRM1(K%)*(XPOOL(L%)+XPOOL0(L%)) + XTARG0(K%)
12610 GC(XTARG%,XPRM2(K%)) = K
12620 RETURN
12698 '
12699 '      Type 7: Diffusion/Reaction constant modulation
12700 K = XPRM1(K%)*(XPOOL(L%)+XPOOL0(L%)) + XTARG0(K%)
12710 K(XTARG%,XPRM2(K%)) = K
12720 RETURN
12995 '
12996 '**************** FETCH BRANCH PARAMETER VIA K *******************      
13000 ON I% GOTO 13100, 13200, 13300, 13400, 13500, 13600, 13700, 13800, 13900, 14000, 14100, 14200, 14300, 14400, 14500, 14600, 14700, 14800, 14900, 15000, 15100, 15200
13099 '----> CODE 1:
13100 ON XPRM% GOTO 13110, 13120, 13130, 13140
13105 GOTO 19100
13110 K = C(XBRN%):  RETURN     '1
13120 K = VLK(XBRN%): RETURN     '2
13130 K = GL(XBRN%): RETURN     '3
13140 K = INJ(XBRN%): RETURN    '4 (= code for pool-injection current)
13190 '----> CODE 2
13200 ON XPRM% GOTO 13210, 13215,13220,13225,13230,13235
13205 GOTO 19100
13210 K = E0(XBRN%):    RETURN  '1
13215 K = TAUM0(XBRN%): RETURN  '2
13220 K = PMTHR(XBRN%): RETURN  '3
13225 K = KPM(XBRN%):   RETURN  '4
13230 K = TAUPM(XBRN%): RETURN  '5
13235 K = KCOND(XBRN%): RETURN  '6
13287 'TAUCOND(K%),KAR(K%),TAUAR(K%),KA1(K%),TAUA1(K%) 'For future expansion
13288 'KA2(K%),TAUA2(K%),THRINF(K%),KTHR(K%),TAUTHR(K%)
13289 'DV0(K%),MAXV(K%),DG0(K%),MAXG(K%),DAR0(K%),MAXAR(K%)
13290 'DA10(K%),MAXA1(K%),DA20(K%),MAXA2(K%),DTHR0(K%),MAXTHR(K%)
13299 '---> (Code 3 modulation by Type 6 interaction needs special treatment)
13300 GOTO 19000 'CODE 3
13400 GOTO 19000 'CODE 4
13500 GOTO 19000 'CODE 5
13600 GOTO 19000 'CODE 6
13699 '----> CODE 7
13700 ON XPRM% GOTO 13710, 13720
13705 GOTO 19100
13710 K=VCOND(XBRN%): RETURN
13720 K=G(XBRN%, COND%): RETURN
13790 '----> CODE 8
13800 ON XPRM% GOTO 13805, 13810, 13815, 13820, 13825, 13830, 13835, 13840, 13845, 13850, 13855, 13860
13803 GOTO 19100
13805 K = VNA(XBRN%):    RETURN  '1
13810 K = GBARNA(XBRN%): RETURN  '2
13815 K = V0NA(XBRN%):   RETURN  '3
13820 K = MUNA(XBRN%):   RETURN  '4
13825 K = VK(XBRN%):     RETURN  '5
13830 K = GBARK(XBRN%):  RETURN  '6
13835 K = V0K(XBRN%):    RETURN  '7
13840 K = MUK(XBRN%):    RETURN  '8
13845 K = GBARK1(XBRN%): RETURN  '9
13850 K = TAUK1(XBRN%):  RETURN  '10
13855 K = GBARK2(XBRN%): RETURN  '11
13860 K = TAUK2(XBRN%):  RETURN  '12
13899 '----> CODE 9
13900 ON XPRM% GOTO 13910, 13920, 13930, 13940, 13950, 13960, 13970, 13980, 13990, 13995
13905 GOTO 19100
13910 K = VEQ(XBRN%):  RETURN    '1
13920 K = GBAR(XBRN%): RETURN    '2
13930 K = QM(XBRN%):   RETURN    '3
13940 K = V0M(XBRN%):  RETURN    '4
13950 K = MUM(XBRN%):  RETURN    '5
13960 K = TAUMA(XBRN%):RETURN    '6
13970 K = QH(XBRN%):   RETURN    '7
13980 K = V0H(XBRN%):  RETURN    '8
13990 K = MUH(XBRN%):  RETURN    '9
13995 K = TAUH(XBRN%): RETURN    '10
13999 '----> CODE 10
14000 ON XPRM% GOTO 14010,14020
14005 GOTO 19100
14010 K = VEQHH(XBRN%):  RETURN  '1
14020 K = GBARHH(XBRN%): RETURN  '2
14090 'KTEMP(XBRN%),QMHH(XBRN%),QHHH(XBRN%)
14091 'AAM(XBRN%),BAM(XBRN%),CAM(XBRN%),DAM(XBRN%),EAM(XBRN%)
14092 'ABM(XBRN%),BBM(XBRN%),CBM(XBRN%),DBM(XBRN%),EBM(XBRN%)
14093 'AAH(XBRN%),BAH(XBRN%),CAH(XBRN%),DAH(XBRN%),EAH(XBRN%)
14094 'ABH(XBRN%),BBH(XBRN%),CBH(XBRN%),DBH(XBRN%),EBH(XBRN%)
14099 '----> CODE 11
14100 ON XPRM% GOTO 14110, 14120, 14130, 14140
14105 GOTO 19100
14110 K = VREVS(XBRN%): RETURN   '1
14120 K = GBARS(XBRN%): RETURN   '2
14125 K = KDS(XBRN%):   RETURN   '3
14130 K = DLY(XBRN%):   RETURN   '4
14140 K = A0S(XBRN%):   RETURN   '5
14199 '----> CODE 12
14200 ON XPRM% GOTO 14210, 14220, 14230, 14240, 14250, 14260
14205 GOTO 19100
14210 K = VREVC(XBRN%): RETURN   '1
14220 K = GBARC(XBRN%): RETURN   '2
14230 K = KDC(XBRN%):   RETURN   '3
14240 K = S0(XBRN%):    RETURN   '4
14250 K = MUC(XBRN%):   RETURN   '5
14260 K = KS(XBRN%):    RETURN   '6
14299 '----> CODES 13-19 FOR FUTURE EXPANSION
14300 GOTO 19000        'TO IMPLEMENT, FOLLOW ABOVE FORMAT
14399 '----> CODE 14 (Connor HH)
14400 ON XPRM% GOTO 14410, 14420
14405 GOTO 19100
14410 K = VEQC(XBRN%)    : RETURN
14420 K = GBARCON(XBRN%) : RETURN
14500 GOTO 19000
14600 GOTO 19000
14700 GOTO 19000
14800 GOTO 19000
14900 GOTO 19000
14999 '---> CODE 20
15000 ON XPRM% GOTO 15010,15020,15030,15040,15050,15060
15005 GOTO 19100
15010 K=XVOL(XBRN%)  : RETURN    '1
15020 K=XPOOL0(XBRN%): RETURN    '2
15030 K=PPRM1(XBRN%) : RETURN    '3
15040 K=PPRM2(XBRN%) : RETURN    '4
15050 K=PPRM3(XBRN%) : RETURN    '5
15060 K=PPRM4(XBRN%) : RETURN    '6
15099 '---> CODE 21 (Diffusion modulation is via Type 7)
15100 GOTO 19000
15199 '---> CODE 22
15200 ON XPRM% GOTO 15210,15220,15230,15240
15205 GOTO 19100
15210 K=XPRM1(XBRN%) : RETURN    '1
15220 K=XPRM2(XBRN%) : RETURN    '2
15230 K=XPRM3(XBRN%) : RETURN    '3
15240 K=XPRM4(XBRN%) : RETURN    '4
15998 '
15999 '********** SET BRANCH PARAMETER FROM K **********
16000 ON I% GOTO 16100, 16200, 16300, 16400, 16500, 16600, 16700, 16800, 16900, 17000, 17100, 17200, 17300, 17400, 17500, 17600, 17700, 17800, 17900, 18000, 18100, 18200
16009 '----> CODE 1
16100 ON XPRM% GOTO 16110, 16120, 16130, 16140
16105 GOTO 19300
16110 C(XBRN%)  = K: RETURN
16120 VLK(XBRN%)= K: RETURN
16130 GL(XBRN%) = K: RETURN
16140 INJ(XBRN%)= K: RETURN
16190 '----> CODE 2
16200 ON XPRM% GOTO 16210, 16215,16220,16225,16230,16235
16205 GOTO 19300
16210 E0(XBRN%) = K:    RETURN
16215 TAUM0(XBRN%) = K: RETURN
16220 PMTHR(XBRN%) = K: RETURN
16225 KPM(XBRN%) = K:   RETURN
16230 TAUPM(XBRN%) = K: RETURN
16235 KCOND(XBRN%) = K: RETURN
16287 'TAUCOND(K%),KAR(K%),TAUAR(K%),KA1(K%),TAUA1(K%) 'For future expansion
16288 'KA2(K%),TAUA2(K%),THRINF(K%),KTHR(K%),TAUTHR(K%)
16289 'DV0(K%),MAXV(K%),DG0(K%),MAXG(K%),DAR0(K%),MAXAR(K%)
16290 'DA10(K%),MAXA1(K%),DA20(K%),MAXA2(K%),DTHR0(K%),MAXTHR(K%),ESF(K%)
16299 '----> CODE 3 ILLEGAL; CODES 4-7 FOR FUTURE EXP
16300 GOTO 19200 'CODE 3
16400 GOTO 19200 'CODE 4
16500 GOTO 19200 'CODE 5
16600 GOTO 19200 'CODE 6
16699 '----> CODE 7
16700 ON XPRM% GOTO 16710, 16720
16705 GOTO 19300
16710 VCOND(XBRN%)=K: RETURN
16720 G(XBRN%, COND%)=K: RETURN
16790 '----> CODE 8
16800 ON XPRM% GOTO 16805, 16810, 16815, 16820, 16825, 16830, 16835, 16840, 16845, 16850, 16855, 16860
16803 GOTO 19300
16805 VNA(XBRN%) = K: RETURN
16810 GBARNA(XBRN%) = K: RETURN
16815 V0NA(XBRN%) = K: RETURN
16820 MUNA(XBRN%) = K: RETURN
16825 VK(XBRN%) = K: RETURN
16830 GBARK(XBRN%) = K: RETURN
16835 V0K(XBRN%) = K: RETURN
16840 MUK(XBRN%) = K: RETURN
16845 GBARK1(XBRN%) = K: RETURN
16850 TAUK1(XBRN%) = K: RETURN
16855 GBARK2(XBRN%) = K: RETURN
16860 TAUK2(XBRN%) = K: RETURN
16899 '----> CODE 9
16900 ON XPRM% GOTO 16910, 16920, 16930, 16940, 16950, 16960, 16970, 16980, 16990, 16995
16905 GOTO 19300
16910 VEQ(XBRN%) = K: RETURN
16920 GBAR(XBRN%) = K: RETURN
16930 QM(XBRN%) = K: RETURN
16940 V0M(XBRN%) = K: RETURN
16950 MUM(XBRN%) = K: RETURN
16960 TAUMA(XBRN%) = K: RETURN
16970 QH(XBRN%) = K: RETURN
16980 V0H(XBRN%) = K: RETURN
16990 MUH(XBRN%) = K: RETURN
16995 TAUH(XBRN%) = K: RETURN
16999 '----> CODE 10
17000 ON XPRM% GOTO 17010, 17015
17005 GOTO 19300
17010 VEQHH(XBRN%) = K:  RETURN
17015 GBARHH(XBRN%)= K:  RETURN
17090 'KTEMP(XBRN%)=K,QMHH(XBRN%)=K,QHHH(XBRN%)=K
17091 'AAM(XBRN%)=K,BAM(XBRN%)=K,CAM(XBRN%)=K,DAM(XBRN%)=K,EAM(XBRN%)=K
17092 'ABM(XBRN%)=K,BBM(XBRN%)=K,CBM(XBRN%)=K,DBM(XBRN%)=K,EBM(XBRN%)=K
17093 'AAH(XBRN%)=K,BAH(XBRN%)=K,CAH(XBRN%)=K,DAH(XBRN%)=K,EAH(XBRN%)=K
17094 'ABH(XBRN%)=K,BBH(XBRN%)=K,CBH(XBRN%)=K,DBH(XBRN%)=K,EBH(XBRN%)=K
17099 '----> CODE 11
17100 ON XPRM% GOTO 17110, 17120, 17130, 17140
17105 GOTO 19300
17110 VREVS(XBRN%) = K: RETURN
17120 GBARS(XBRN%) = K: RETURN
17125 KDS(XBRN%)   = K: RETURN
17130 DLY(XBRN%)   = K: RETURN
17140 A0S(XBRN%)   = K: RETURN
17199 '----> CODE 12
17200 ON XPRM% GOTO 17210, 17220, 17230, 17240, 17250, 17260
17205 GOTO 19300
17210 VREVC(XBRN%) = K: RETURN
17220 GBARC(XBRN%) = K: RETURN
17230 KDC(XBRN%)   = K: RETURN
17240 S0(XBRN%)    = K: RETURN
17250 MUC(XBRN%)   = K: RETURN
17260 KS(XBRN%)    = K: RETURN
17299 '----> CODES 13-19 FOR FUTURE EXPANSION
17300 GOTO 19200   'CODE 13
17400 ON XPRM% GOTO 17410, 17420
17405 GOTO 19300
17410 VEQC(XBRN%)  = K: RETURN
17420 GBARCON(XBRN%)=K: RETURN
17500 GOTO 19200   'CODE 15
17600 GOTO 19200   'CODE 16
17700 GOTO 19200   'CODE 17
17800 GOTO 19200   'CODE 18
17900 GOTO 19200   'CODE 19
17999 '---> CODE 20
18000 ON XPRM% GOTO 18010,18020,18030,18040,18050,18060
18005 GOTO 19300
18010 XVOL(XBRN%) = K: RETURN
18020 XPOOL0(XBRN%)=K: RETURN
18030 PPRM1(XBRN%) =K: RETURN
18040 PPRM2(XBRN%) =K: RETURN
18050 PPRM3(XBRN%) =K: RETURN
18060 PPRM4(XBRN%) =K: RETURN
18099 '---> CODE 21
18100 GOTO 19200    '(Modulation achieved by Type 7 interaction)
18199 '---> CODE 22
18200 ON XPRM% GOTO 18210,18220,18230,18240
18205 GOTO 19300
18210 XPRM1(XBRN%)=K: RETURN
18220 XPRM2(XBRN%)=K: RETURN
18230 XPRM3(XBRN%)=K: RETURN
18240 XPRM4(XBRN%)=K: RETURN
19000 PRINT "19000: TARGET-FETCH ";
19050 PRINT "CALLED ILLEGAL BRANCH CODE ";I%: ER%=-1: RETURN
19100 PRINT "19100: TARGET-FETCH ";
19150 PRINT "INVALID TARGET PARAMETER ";XPRM%(K%);"OF BRANCH ";I%;"FOR INTERACTION ";K%: ER%=-1: RETURN
19200 PRINT "19200: TARGET-SAVE ";: GOTO 19050
19300 PRINT "19300: TARGET-SAVE ";: GOTO 19150



#########################################################