! ! DEMO72.bas - AM72 & MOUSE Demo Program ! Works with 480 line or 350 line monitors ! PROGRAM DEMO72,1.0 ++INCLUDE AMGSYM.BSI ++INCLUDE FILES.MAP MAP1 GCB , X,56000 MAP1 DSP'MAX , F, 6, 100 MAP1 DSP'ARRAY MAP2 DSP'COUNT , B, 2 MAP2 DSP'XY(100) MAP3 DSP'X , B, 2 MAP3 DSP'Y , B, 2 MAP1 POINT'MAX , F, 6, 100 MAP1 POINT'ARRAY MAP2 POINT'COUNT , B, 2 MAP2 POINTS(100) MAP3 POINT'X , B, 2 MAP3 POINT'Y , B, 2 MAP1 MAX'ZONES , F, 6, 20 MAP1 ZONES(20) MAP2 ZONES'X(2) , F, 6 MAP2 ZONES'Y(2) , F, 6 MAP1 TEXT'X(20) , F, 6 MAP1 TEXT'Y(20) , F, 6 MAP1 STATUS , F, 6 !Status retruned from AMIGOS calls MAP1 TEXT$ , S, 80 MAP1 FIL'STAT , S, 3 ! FILE STATUS MAP1 LEVEL , F, 6 MAP1 INDEX , F, 6 MAP1 ICONS , F, 6 MAP1 COMMAND , S,100 ! CHAINING COMMAND MAP1 CRLF , S, 2 ! CARRIAGE RETURN & LINE FEED FOR COMMAND MAP1 DO'FILE , S, 16 ! COMMAND FILE USED IN MEM0: MAP1 IPF'FILE , S, 16 ! CONFIG. FILE FOR LEVEL POSITIONING MAP1 FILES(20) MAP2 F'LEVEL , X, 2 ! Level: MAP2 F'DESC , X, 30 ! Description: MAP2 F'TYPE , S, 1 ! Type: MAP2 F'CMND'2 , S, 30 ! Command Line 2 MAP2 F'CMND'1 , S, 30 ! Command Line 1 MAP2 F'CMND'3 , S, 30 ! Command Line 3 MAP2 F'CMND'4 , S, 30 ! Command Line 4 MAP2 F'CMND'5 , S, 30 ! Command Line 5 MAP2 F'CMND'6 , S, 30 ! Command Line 6 MAP2 F'NEW'LEVEL , B, 1 ! New Level ! FOR XCALL "TRMCHR" MAP1 TRMCHR'MAP MAP2 TRMCHR'FLAGS , F, 6 MAP2 TRMCHR'ROWS , F, 6 MAP2 TRMCHR'COLS , F, 6 MAP2 TRMCHR'COLORS , F, 6 MAP2 TRMCHR'FORE , F, 6 MAP2 TRMCHR'BACK , F, 6 MAP2 TRMCHR'WINROW , F, 6 MAP2 TRMCHR'WINCOL , F, 6 !***********************************************! DEMO72: ! ON ERROR GOTO ERROR'ROUTINE SIGNIFICANCE 11 XCALL TRMCHR, STATUS,TRMCHR'MAP PRINT TAB(-2,1); TAB(-3,0); LEVEL = 1 DO'FILE = "MEM0:DEMO72.DO" PRINT TAB(-1,0); CRLF = CHR(13) + CHR(10) GOSUB DO'OVERHEAD ! SET DEFAULTS RQLC2: GOSUB DO'EXIT'BOX ! WRITE EXIT BOX GOSUB CREATE'ZONES ! CREATE THE ZONES FOR ICONS GOSUB FILL'ZONES ! FILL ZONES BASED ON FILES.IDA GOSUB DO'SELECTION ! GET THE SELECTION END'IT: GOSUB CLOSE'FILES XCALL AMGSBR,G'CLWK,GCB,STATUS PRINT TAB(-1,0); END !***********************************************! DO'OVERHEAD: ! Set Mouse Cursor Shape PRINT TAB(-1,29); PRINT TAB(-1,160);CHR(32+3); ! Open the workstation XCALL AMGSBR,G'OPWK,GCB,"",STATUS ! Clear the workstation XCALL AMGSBR,G'CLRW,GCB,STATUS ! Text Overhead XCALL AMGSBR,G'STXF,GCB,1001,STATUS ! font XCALL AMGSBR,G'STXC,GCB,7,STATUS ! color XCALL AMGSBR,G'SCHH,GCB,1500,STATUS ! height XCALL AMGSBR,G'SCHR,GCB,300,STATUS ! rotation ! Fill Area Overhead XCALL AMGSBR,G'SFAC,GCB,4,STATUS ! color XCALL AMGSBR,G'SFAS,GCB,2,STATUS ! style XCALL AMGSBR,G'SFAI,GCB,55,STATUS ! index RETURN ! !***********************************************! DO'EXIT'BOX: ! Exit Box COLOR = 7 XMIN =300 XMAX =3500 YMIN =23000 YMAX =24500 EXIT'X1 =300 EXIT'Y1 =23000 EXIT'X2 =3500 EXIT'Y2 =24500 GOSUB DISP'BOX ! exit box XCALL AMGSBR,G'STXF,GCB,1001,STATUS ! font XCALL AMGSBR,G'STXC,GCB,2,STATUS ! color XCALL AMGSBR,G'SCHH,GCB,900,STATUS ! height XCALL AMGSBR,G'SCHR,GCB,0,STATUS ! rotation TEXT$ ="EXIT" XVAL =900 YVAL =23500 GOSUB DISP'TEXT XCALL AMGSBR,G'STXF,GCB,1003,STATUS ! font XCALL AMGSBR,G'STXC,GCB,4,STATUS ! color XCALL AMGSBR,G'SCHH,GCB,1200,STATUS ! height XCALL AMGSBR,G'SCHR,GCB,0,STATUS ! rotation TEXT$ = "AM72 DEMO SOFTWARE" XVAL = 8100 YVAL = 23000 GOSUB DISP'TEXT XCALL AMGSBR,G'STXF,GCB,1006,STATUS ! font XCALL AMGSBR,G'STXC,GCB,4,STATUS ! color XCALL AMGSBR,G'SCHH,GCB,1100,STATUS ! height XCALL AMGSBR,G'SCHR,GCB,0,STATUS ! rotation TEXT$ = "- with mouse interface - " XVAL = 7500 YVAL = 22000 GOSUB DISP'TEXT RETURN !***********************************************! CREATE'ZONES: ! Screen Frame COLOR = 7 POINT'X(1) = 300 POINT'Y(1) = 300 POINT'X(2) = 300 POINT'Y(2) = 31000 POINT'X(3) = 31000 POINT'Y(3) = 31000 POINT'X(4) = 31000 POINT'Y(4) = 300 POINT'X(5) = POINT'X(1) POINT'Y(5) = POINT'Y(1) XCALL AMGSBR,G'SPLC,GCB,1,STATUS POINT'COUNT =5 XCALL AMGSBR,G'PL,GCB,POINT'ARRAY,STATUS IF (TRMCHR'ROWS = 24) & YVAL = 19200 & ELSE & YVAL = 19800 ZONES'KTR= 0 FOR I = 1 TO 10 XVAL = 500 FOR X = 1 TO 2 ZONES'KTR=ZONES'KTR+1 ZONES'X(ZONES'KTR,1)=XVAL ZONES'Y(ZONES'KTR,1)=YVAL ZONES'X(ZONES'KTR,2)=XVAL+1500 ZONES'Y(ZONES'KTR,2)=YVAL+1500 TEXT'X(ZONES'KTR) =XVAL+2000 TEXT'Y(ZONES'KTR) =YVAL+460 XVAL = XVAL + 16000 NEXT X IF (TRMCHR'ROWS = 24) & YVAL = YVAL - 1825 & ELSE & YVAL = YVAL - 2000 NEXT I RETURN !***********************************************! FILL'ZONES: GOSUB CLEAR'FILES'ARRAY GOSUB OPEN'FILES FILES'KEY1 = SPACE(32) ICONS = 0 IF (TRMCHR'ROWS = 24) & ROW = 5 & ELSE & ROW = 6 GOSUB LOAD'ZONES'ARRAY FOR I = 1 TO ICONS XCALL AMGSBR,G'SWKV,GCB,ZONES'X(I,1),ZONES'Y(I,1),ZONES'X(I,2),ZONES'Y(I,2),STATUS GOSUB DO'BOX XCALL AMGSBR,G'SWKV,GCB,1,1,32000,32000,STATUS XCALL AMGSBR,G'STXF,GCB,1001,STATUS ! font XCALL AMGSBR,G'STXC,GCB,7,STATUS ! color XCALL AMGSBR,G'SCHH,GCB,600,STATUS ! height XCALL AMGSBR,G'SCHR,GCB,0,STATUS ! rotation XVAL =TEXT'X(I) YVAL =TEXT'Y(I) ! TEXT$ = F'DESC(I) ! GOSUB DO'TEXT ! 480 line IF (TRMCHR'ROWS <> 24) & IF (INT(I/2) <> I/2) & PRINT TAB(ROW,05);F'DESC(I); & ELSE & PRINT TAB(ROW,45);F'DESC(I); : & ROW = ROW + 3 ! 350 line IF (TRMCHR'ROWS = 24) & IF (INT(I/2) <> I/2) & PRINT TAB(ROW,05);F'DESC(I); & ELSE & PRINT TAB(ROW,45);F'DESC(I); : & ROW = ROW + 2 NEXT I RETURN !***********************************************! DO'SELECTION: GOSUB GETCOR ! mouse input GOSUB CHECK'EXIT IF EXIT'FLAG=1 & ZONES'PNTR = 0 : & RETURN GOSUB CHECK'ZONES IF (ZONES'FLAG = 1) & GOSUB CHAIN'SELECTION : & RETURN GOTO DO'SELECTION CHECK'EXIT: EXIT'FLAG=0 IF XVAL<(EXIT'X1-25) THEN RETURN IF XVAL>(EXIT'X2+25) THEN RETURN IF YVAL<(EXIT'Y1-25) THEN RETURN IF YVAL>(EXIT'Y2+25) THEN RETURN EXIT'FLAG=1 RETURN CHECK'ZONES: ZONES'FLAG=0 FOR SELECT = 1 TO ICONS IF XVAL<(ZONES'X(SELECT,1)-25) GOTO CHECK'ZONES'10 IF XVAL>(ZONES'X(SELECT,2)+25) GOTO CHECK'ZONES'10 IF YVAL<(ZONES'Y(SELECT,1)-25) GOTO CHECK'ZONES'10 IF YVAL>(ZONES'Y(SELECT,2)+25) GOTO CHECK'ZONES'10 ZONES'FLAG = 1 ZONES'PNTR = SELECT SELECT = ICONS CHECK'ZONES'10: NEXT SELECT RETURN ! ***************************************************** DO'BOX: COLOR = VAL(F'TYPE(I)) XMIN =1500 XMAX =20000 YMIN =1500 YMAX =22000 GOSUB DISP'BOX RETURN ! ******************************************************* DISP'BOX: POINT'X(1) =XMIN POINT'Y(1) =YMIN POINT'X(2) =XMIN POINT'Y(2) =YMAX POINT'X(3) =XMAX POINT'Y(3) =YMAX POINT'X(4) =XMAX POINT'Y(4) =YMIN POINT'X(5) =POINT'X(1) POINT'Y(5) =POINT'Y(1) XCALL AMGSBR,G'SPLC,GCB,1,STATUS XCALL AMGSBR,G'SFAC,GCB,COLOR,STATUS ! color POINT'COUNT = 4 XCALL AMGSBR,G'FA,GCB,POINT'ARRAY,STATUS POINT'COUNT = 5 XCALL AMGSBR,G'PL,GCB,POINT'ARRAY,STATUS RETURN DISP'LINE: POINT'X(1) =XMIN POINT'Y(1) =YMIN POINT'X(2) =XMIN POINT'Y(2) =YMAX POINT'X(3) =XMAX POINT'Y(3) =YMAX POINT'X(4) =XMAX POINT'Y(4) =YMIN POINT'X(5) =POINT'X(1) POINT'Y(5) =POINT'Y(1) DISP'LINE'10: POINT'COUNT =5 XCALL AMGSBR,G'SPLC,GCB,COLOR,STATUS XCALL AMGSBR,G'PL,GCB,POINT'ARRAY,STATUS RETURN !***********************************************! DO'TEXT: XCALL AMGSBR,G'TX,GCB,XVAL,YVAL,TEXT$,STATUS RETURN DISP'TEXT: XCALL AMGSBR,G'TX,GCB,XVAL,YVAL,TEXT$,STATUS RETURN !***********************************************! GETCOR: XCALL AMGSBR,G'RQLC,GCB,0,0,0,XVAL,YVAL,CHAR,VALID RETURN GETCOR1: XCALL AMGSBR,G'RQLC,GCB,XVAL,YVAL,2,XVAL,YVAL,CHAR,VALID RETURN END CLEAR'FILES'ARRAY: FOR ZIP = 1 TO 20 F'LEVEL = SPACE(2) F'DESC = SPACE(30) F'TYPE = SPACE(1) F'CMND'2 = SPACE(30) F'CMND'1 = SPACE(30) F'CMND'3 = SPACE(30) F'CMND'4 = SPACE(30) F'CMND'5 = SPACE(30) F'CMND'6 = SPACE(30) F'NEW'LEVEL = 0 NEXT ZIP RETURN LOAD'ZONES'ARRAY: GOSUB FILES'GET'NEXT IF (FIL'STAT <> " ") & OR (VAL(FILES'LEVEL) <> LEVEL) & RETURN ICONS = ICONS + 1 FILES(ICONS) = FILES'RECORD GOTO LOAD'ZONES'ARRAY CHAIN'SELECTION: LOOKUP DO'FILE,Q IF (Q = 0) & GOTO CONT'CHAIN KILL DO'FILE GOTO CHAIN'SELECTION CONT'CHAIN: COMMAND = SPACE(100) OPEN #555,DO'FILE,OUTPUT PRINT #555,":R" XCALL STRIP, F'CMND'1(ZONES'PNTR) IF (LEN(F'CMND'1(ZONES'PNTR)) > 0) & PRINT #555,F'CMND'1(ZONES'PNTR) XCALL STRIP, F'CMND'2(ZONES'PNTR) IF (LEN(F'CMND'2(ZONES'PNTR)) > 0) & PRINT #555,F'CMND'2(ZONES'PNTR) XCALL STRIP, F'CMND'3(ZONES'PNTR) IF (LEN(F'CMND'3(ZONES'PNTR)) > 0) & PRINT #555,F'CMND'3(ZONES'PNTR) XCALL STRIP, F'CMND'4(ZONES'PNTR) IF (LEN(F'CMND'4(ZONES'PNTR)) > 0) & PRINT #555,F'CMND'4(ZONES'PNTR) XCALL STRIP, F'CMND'5(ZONES'PNTR) IF (LEN(F'CMND'5(ZONES'PNTR)) > 0) & PRINT #555,F'CMND'5(ZONES'PNTR) XCALL STRIP, F'CMND'6(ZONES'PNTR) IF (LEN(F'CMND'6(ZONES'PNTR)) > 0) & PRINT #555,F'CMND'6(ZONES'PNTR) PRINT #555,"RUN DEMO72" CLOSE #555 CHAIN DO'FILE ! ************************************************** ! ISAM FILE ACCESSING ! ************************************************** OPEN'FILES: FIL'STAT = SPACE(3) OPEN #FILES'CHN, FILES'FL$, INDEXED, FILES'RSZ, RECNO IF (ERF(FILES'CHN) > 0) & GOTO REPORT'ERRORS RETURN FILES'GET: FIL'STAT = SPACE(3) ISAM #FILES'CHN, 1, FILES'KEY1 IF (ERF(FILES'CHN) = 33) & FIL'STAT = "NOF" : & RETURN IF (ERF(FILES'CHN) > 0) & GOTO REPORT'ERRORS GOSUB READ'FILES RETURN FILES'GET'NEXT: FIL'STAT = SPACE(3) ISAM #FILES'CHN, 2, FILES'KEY1 IF (ERF(FILES'CHN) = 38) & FIL'STAT = "EOF" : & RETURN IF (ERF(FILES'CHN) = 33) & FIL'STAT = "NOF" : & RETURN IF (ERF(FILES'CHN) > 0) & GOTO REPORT'ERRORS GOSUB READ'FILES RETURN READ'FILES: READ #FILES'CHN, FILES'RECORD RETURN CLOSE'FILES: CLOSE #FILES'CHN RETURN REPORT'ERRORS: PRINT TAB(24,1);"ERROR # ";ERF(FILES'CHN);" -- ABORTING JOB" GOTO END'IT !++INCLUDE BAS:ERROR.BSI