Reprinted from Commodore World Issue #7
100 REM--------------------------------
105 REM COMMODORE WORLD MAGAZINE
110 REM BASIC INSTINCTS W/GENE BARKER
115 REM SCREEN I/O TECHNIQUES PART I
120 REM
125 REM (C)1995 CREATIVE MICRO DESIGNS
130 REM--------------------------------
135 REM-
140 REM INPUT STRING SUB EXAMPLE
145 REM-
150 PRINT"{CRSR DN}* INPUT STRING SUB EXAMPLE"
152 PRINT"{2 SPACES}UPTO 10 CH'S"
154 PRINT"{2 SPACES}({BACK ARROW}) TO ABORT"
156 PRINT"{CRSR DN}{2 SPACES}STRING:";
158 XM=10:GOSUB 10000
160 PRINT
162 IF XS$="" THEN 200
164 PRINT"{CRSR DN}{2 SPACES}YOU ENTERED:"XS$
200 REM-
205 REM INPUT INT STRING SUB EXAMPLE
210 REM-
215 PRINT"{CRSR DN}* INPUT INTEGER STRING SUB EXAMPLE"
220 PRINT"{2 SPACES}UPTO 4 DIGITS"
222 PRINT"{2 SPACES}({BACK ARROW}) TO ABORT"
224 PRINT"{CRSR DN}{2 SPACES}INTEGER:";
226 XM=4:GOSUB 10200
228 PRINT
230 IF XN<0 THEN 300 235 PRINT"{CRSR DN}{2 SPACES}YOU ENTERED:"XN
300 REM-
305 REM INPUT RANGED INT SUB EXAMPLE
310 REM-
315 PRINT"{CRSR DN}* INPUT RANGED INTEGER SUB EXAMPLE"
320 PRINT"{2 SPACES}VALID RANGE IS 8 TO 16"
322 PRINT"{2 SPACES}DEFAULT INTEGER IS 12"
324 PRINT"{2 SPACES}USE (+,-) TO CHANGE #"
326 PRINT"{2 SPACES}USE RETURN TO ENTER #"
328 PRINT"{2 SPACES}({BACK ARROW}) TO ABORT"
330 PRINT"{CRSR DN}{2 SPACES}INTEGER:";
332 XL="8:XH=16:XD=12:GOSUB" 10400
334 PRINT
336 IF XN<0 THEN 400
338 PRINT"{CRSR DN}{2 SPACES}YOU ENTERED:"XN
400 :
999 END
10000 REM------------------------------
10005 REM INPUT STRING (SUB)
10010 REM
10015 REM GIVEN XM - MAX LENGTH OF STR
10020 REM RETURNS XS$ - STRING
10025 REM
10030 REM NOTE: IF XS$ THEN NO
10035 REM STRING WAS ENTERED
10040 REM------------------------------
10045 XS$ :XL="0"
10050 POKE 204,0:REM TURN CURSOR ON
10055 GET XX$:IF XX$ THEN 10055
10060 : IF XX$<>"{BACK ARROW}" THEN 10070
10062 : XS$=""
10064 : POKE 204,1:REM TURN CURSR OFF
10066 : RETURN
10070 : IF XX$<>CHR$(13) THEN 10080
10072 : POKE 204,1
10074 : RETURN
10080 : IF XX$<>CHR$(20) THEN 10100
10082 : IF XL=0 THEN 10055
10084 : PRINT XX$;
10086 : XL=XL-1
10088 : XS$=MID$(XS$,1,XL)
10090 : GOTO 10055
10100 : IF XL=XM THEN 10055
10102 : IF XX$CHR$(218) THEN 10055
10110 : PRINT XX$;
10112 : XL=XL+1
10114 : XS$=XS$+XX$
10116 : GOTO 10055
10200 REM------------------------------
10205 REM INPUT INT STRING (SUB)
10210 REM
10215 REM GIVEN XM - MAX NUM OF DIGITS
10220 REM RETURNS XN,XS$ - NUMBER
10225 REM
10230 REM NOTE: IF XN<0 THEN NO NUMBER
10235 REM WAS ENTERED
10240 REM------------------------------
10245 XS$ :XL="0:XN=-1"
10250 POKE 204,0:REM TURN CURSOR ON
10255 GET XX$:IF XX$ THEN 10255
10260 : IF XX$<>"{BACK ARROW}" THEN 10270
10262 : POKE 204,1:REM TURN CURSR OFF
10264 : RETURN
10270 : IF XX$<>CHR$(13) THEN 10280
10272 : IF XL=0 THEN 10276
10274 : XN=VAL(XS$)
10276 : POKE 204,1
10278 : RETURN
10280 : IF XX$<>CHR$(20) THEN 10300
10282 : IF XL=0 THEN 10255
10284 : PRINT XX$;
10286 : XL=XL-1
10288 : XS$=MID$(XS$,1,XL)
10290 : GOTO 10255
10300 : IF XL=XM THEN 10255
10302 : IF XX$<"0" OR XX$>"9" THEN 10255
10304 : PRINT XX$;
10306 : XL=XL+1
10308 : XS$=XS$+XX$
10310 : GOTO 10255
10400 REM------------------------------
10405 REM INPUT RANGED INT (SUB)
10410 REM
10415 REM GIVEN
10420 REM
10425 REM XL - LOW INTEGER
10430 REM XH - HIGH INTEGER
10435 REM XD - DEFAULT VAL
10440 REM
10445 REM RETURNS XN,XS$ - NUMBER
10450 REM
10455 REM ALLOWS INPUT OF NUMBER
10460 REM THROUGH THE USE OF THE (+,-)
10465 REM AND RETURN KEYS
10470 REM
10475 REM NOTE: IF XN<0 THEN NO NUMBER
10480 REM WAS ENTERED
10485 REM------------------------------
10490 XN="-1:XM=LEN(STR$(XH))-1"
10492 X1$ :X2$
10494 FOR XI="1" TO XM
10496 : X1$='X1$+"0"'
10498 : X2$="X2$+CHR$(157)"
10500 NEXT
10502 XS$="RIGHT$(X1$+MID$(STR$(XD),2),XM)"
10504 PRINT XS$;X2$;
10506 GET XX$: IF XX$ THEN 10506
10508 : IF XX$<>"{BACK ARROW}" THEN 10520
10510 : RETURN
10520 : IF XX$<>CHR$(13) THEN 10530
10522 : XN=VAL(XS$)
10524 : RETURN
10530 : IF XX$<>"+" THEN 10540
10532 : IF VAL(XS$)=XH THEN XD=XL-1
10534 : XD=XD+1
10536 : GOTO 10502
10540 : IF XX$<>"-" THEN 10506
10542 : IF VAL(XS$)=XL THEN XD=XH+1
10544 : XD=XD-1
10546 : GOTO 10502