1000 ! TSTINF - Display Return Codes for INFLD.SBR From Microsabio
1005
1010 ! **** Written 12/87 by Brion Norton ****
1015 ! **** Seattle Refrigeration & Manufacturing ****
1020 ! **** Seattle, Washington ****
1025
1030 ! This program is intended as an instructional tool for teaching
1035 ! programmers the basics of using INFLD.SBR to enter data in a
1040 ! BASIC program. INFLD has many features beyond those that can
1045 ! be tested in this program.
1050
1055 ! Program uses INFLD.SBR to enter parameters for INFLD.SBR
1060 ! No other external subroutines are called
1065
1070 MAP1 INPUT'PARMS
1075 MAP2 EXCODE,F ! Exit Code
1080 MAP2 INXCTL,F ! Input Control (see AlphaAccounting INPUT)
1085 MAP2 REPEAT,F,,0 ! Default Control
1090 MAP2 TIMER,F,,0 ! Time-out Value (seconds)
1095 MAP2 ENTRY,S,50 ! Input Buffer
1100 MAP1 I'CTLX
1105 MAP2 IROW,S,2 ! Screen Row
1110 MAP2 COM1,S,1 ! Delimiter
1115 MAP2 ICOL,S,2 ! Screen Column
1120 MAP2 COM2,S,1 ! Delimiter
1125 MAP2 IMAX,S,2 ! Maximum Field Length
1130 MAP2 COM3,S,1 ! Delimiter
1135 MAP2 IMIN,S,2 ! Minimum Field Length
1140 MAP2 COM4,S,1 ! Delimiter
1145 MAP2 ITYP,S,24 ! Data Field Type Code(s)
1150 MAP1 ICTL,S,36,@I'CTLX ! Entry Control Variable
1155
1160 MAP1 MISCELLANY
1165 MAP2 DTIM,F ! Data Entry Time-out (seconds)
1170 MAP2 L,F ! String Length
1175 MAP2 X,F ! Work Variable
1180 MAP2 BLNK15,S,15,SPACE$(15)
1185 MAP2 DMAX,S,2 ! Data Field Maximum Size
1190 MAP2 DMIN,S,2 ! Data Field Minimum size
1195 MAP2 DTYP,S,10 ! Data Field Type Code(s)
1200
1205 ! =======================[ BEGIN PROGRAM ]========================
1210
1215 BEGIN:
1220 PRINT TAB(-1,0); TAB(1,21); "INFLD.SBR Return Codes and Data Formats";
1225 PRINT TAB(1,63); TAB(-1,33); TAB(1,18); TAB(-1,32);
1230 TIMER = 0
1235 TYP:
1240 PRINT TAB(4,24); " DATA TYPE: "; TAB(-1,9);
1245 REPEAT = 1 : ENTRY = DTYP ! load default type
1250 ICTL = "04,41,10,01,A]:" : CALL INPUT ! position cursor, enter data
1255 DTYP = ENTRY ! load type variable
1260 MAX:
1265 PRINT TAB(6,24); "MAX FIELD SIZE: "; TAB(-1,9);
1270 REPEAT = 1 : ENTRY = STR(VAL(DMAX)) ! load default maximum size
1275 ICTL = "06,41,02,00,#3:" : CALL INPUT ! position cursor, enter data
1280 X = VAL(ENTRY) : IF (X > 38) THEN &
CALL TOO'BIG : GOTO MAX ! too big for screen display
1285 DMAX = STR(X) USING "#Z" ! load maximum size variable
1290 IF (EXCODE = 3) THEN GOTO TYP ! up arrow to data type
1295 MIN:
1300 PRINT TAB(7,24); "MIN FIELD SIZE: "; TAB(-1,9);
1305 REPEAT = 1 : ENTRY = STR(VAL(DMIN)) ! load dafult minimum size
1310 ICTL = "07,41,02,00,#3:" : CALL INPUT ! position cursor, enter data
1315 X = VAL(ENTRY)
1320 DMIN = STR(X) USING "#Z" ! load minimum size variable
1325 IF (EXCODE = 3) THEN GOTO MAX ! up arrow to maximum size
1330 TIM:
1335 PRINT TAB(9,24); " TIME-OUT TIME: "; TAB(-1,9);
1340 REPEAT = 1 : ENTRY = STR(DTIM) ! load dafault time-out
1345 ICTL = "09,41,03,00,#3:" : CALL INPUT ! position cursor, enter data
1350 DTIM = VAL(ENTRY) ! load time-out variable
1355 IF (EXCODE = 3) THEN GOTO MIN ! up arrow to minimum size
1360 ICTL = "13,41,00,00," ! start loading control field
1365 IMAX = DMAX : IMIN = DMIN : ITYP = DTYP : TIMER = DTIM
1370 PRINT TAB(11,24); " CONTROL CODE: "; ICTL; TAB(-1,9);
1375 PRINT TAB(13,24); "KEYBOARD ENTRY: "; TAB(-1,9);
1380 IF (TIMER => 1) THEN CALL INPTIM ELSE CALL INPUT
1385 L = LEN(ENTRY)
1390 PRINT TAB(15,4); "( Length = "; STR(L); " )";
1395 PRINT TAB(15,24); " INPUT BUFFER: "; ENTRY;
1400 PRINT TAB(17,24); " INPUT CONTROL: "; STR(INXCTL);
1405 PRINT TAB(19,24); " EXIT CODE: "; STR(EXCODE);
1410 PRINT TAB(23,17); "Press RETURN To Continue "; &
"or ESCAPE To Quit"; TAB(-1,10); &
TAB(23,55); TAB(-1,33); TAB(23,46); TAB(-1,32); &
TAB(23,31); TAB(-1,33); TAB(23,22); TAB(-1,32);
1415 ICTL = "23,65,01,00,CI1:" : CALL INPUT
1420 IF (EXCODE = 1) THEN GOTO FINISH
1425 PRINT TAB(19,41); TAB(-1,9);
1430 PRINT TAB(17,41); TAB(-1,9);
1435 PRINT TAB(15,4); BLNK15; TAB(15,41); TAB(-1,9);
1440 GOTO TYP
1445
1450 ! =======================[ END OF PROGRAM ]=======================
1455
1460 FINISH:
1465 PRINT TAB(21,1); TAB(-1,10);
1470 PRINT TAB(22,31); "<<<< FINISH >>>>"; &
TAB(22,44); TAB(-1,33); TAB(22,35); TAB(-1,32)
1475 END
1480
1485 ! ====================[ UTILITY SUBROUTINES ]=====================
1490
1495 ! * Call External INFLD.SBR For Data Input *
1500
1505 INPUT:
1510 XCALL INFLD,IROW,ICOL,IMAX,IMIN,ITYP,ENTRY,INXCTL,1,REPEAT,EXCODE
1515 REPEAT = 0
1520 RETURN
1525
1530 ! * Data Entry With Time-Out *
1535
1540 INPTIM:
1545 XCALL INFLD,IROW,ICOL,IMAX,IMIN,ITYP,ENTRY,INXCTL,1,REPEAT,EXCODE,TIMER
1550 REPEAT = 0
1555 RETURN
1560
1565 ! * Message: Field Size Is Too Big For Screen *
1570
1575 TOO'BIG:
1580 PRINT TAB(24,5); "SORRY, IT WON'T FIT ON THE SCREEN"; CHR$(7);
1585 PRINT TAB(24,51); "Press RETURN To Continue"; CHR$(7);
1590 ICTL = "24,77,01,00,C:" : CALL INPUT
1595 PRINT TAB(24,1); TAB(-1,9);
1600 RETURN
1605
1610 ! End of Program