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