ASMB,A,B,T,L,C HED ** RUN-TIME DATA INPUT TO BASIC ** * * D. R. MCCLELLAN * FOR BASIC VERSION HP24000A * * * THIS FREE-FIELD SCANNER WILL ACCEPT RECORDS OF UP TO * 72 CHARACTERS IN LENGTH. THE SYNTAX OF THE RECORDS IS * THAT OF A 'DATA' STATEMENT (WITHOUT THE 'DATA' KEYWORD * AND STATEMENT NUMBER), IE., ANY NUMBER OF DATA ITEMS * SEPARATED BY COMMAS, AND TERMINATED BY A CARRIAGE RETURN. * AN 'ESC' (ALTERNATE MODE KEY) ANY WHERE IN A RECORD WILL * DELETE THE ENTIRE LINE WITH EITHER TTY OR PHOTOREADER * INPUT. AN ERROR IN THE DATA, OR AN IMPROPER CALL, WILL * RESULT IN AN 'ERROR 18 IN LINE XX' MESSAGE, AND BASIC * WILL RETURN TO THE SYNTAX MODE. THE SCANNER IS * IMPLEMENTED BY A CALL TO BASIC: * * CALL (1,X,1,D) READ A SINGLE VALUE FROM THE INPUT * DEVICE AND RETURN IN THE VARIABLE * 'X'. IF D>0 (DEVCE TYPE), THEN * INPUT IS VIA THE TELEPRINTER - IF * D<0, THEN INPUT IS VIA THE PHOTO- * READER. * * CALL (1,A(1),N,D) READ N VALUES INTO THE ARRAY 'A'. * 'A' IS DIMENSIONED A(I), WHERE * I=N , OR A(I,J), WHERE I+J=N. * CALL (1,A(1,1),N,D) THIS CALL CAN BE INTERPRETED AS * A 'MAT INPUT' COMMAND TO BASIC. * * TO TERMINATE AN INPUT LOOP , RESPOND WITH A SOLITARY SIGN, * I.E., A '+' OR '-'. THIS WILL RESULT IN 'ERROR 18'. * * THIS VERSION DOES NOT OVERLAY MATRIX OPERATIONS * ORG 13142B SBTBL OCT 1401 SUBR. #1 HAS 3 PARAMS. DEF SCANR ENDTB EQU * ORG 110B DEF LSTWD ENDING SERVICE TABLE - FWAM ORG 121B DEF SBTBL SUB-TABLE START/END DEF ENDTB SPC 1 * PARAMETER TRANSFER ROUTINE - .ENTR SPC 1 ORG 30B .ENTR NOP ENTRY POINT - .ENTR STA SAVE SAVE PARM. LIST POINTER LDB .ENTR,I GET POINTER TO USER'S LIST STB SAVE+1 CMB,INB ADB .ENTR ADB M2 CMB,INB GET -COUNT OF NO. OF PARMS ISZ .ENTR JUMP AROUND 'DEF' .E1 LDA SAVE,I STA SAVE+1,I TRANSFER PARM. ADDRESSES LDA SAVE ADA M1 STA SAVE ISZ SAVE+1 ADJUST POINTERS INB,SZB END OF LIST? JMP .E1 NO - CONTINUE JMP .ENTR,I YES - RETURN SPC 1 * BASE PAGE CONSTANTS AND EQUATES SPC 1 SAVE BSS 2 .ENTR WORKING BUFFER VALUE BSS 2 VALUE RETURNED FROM 'CONST' STORA STA VALUE MODIFICATIONS TO BASIC STORB STB VALUE+1 I OCT 34135,170135,34135 OCT 174135,34135 ICNT NOP INTERNAL DATA ITEM COUNTER EOTF NOP SOT/EOT FLAG M1 EQU 431B -1 M2 EQU 432B -2 M3 EQU 433B -3 .72 EQU 366B 72 WRITE EQU 102B WRITE LINK - TTY REED EQU 104B READ LINK - TTY PREAD EQU 101B READ LINK - PHOTOREADER IFIX EQU 247B IFIX CONST EQU 214B THIS ROUTINE FETCHES A CONSTANT .BUFA EQU 131B BUFFER ADDRESS CCNT EQU 133B CHARACTER COUNT BADDR EQU 132B CHARACTER ADDRESS IMOFF EQU 123B KEYB'D INTERRUPT OFF LINK IMON EQU 124B KEYB'D INTERRUPT ON LINK SKP * EXECUTION LOGIC FOR CALL #1 SPC 1 ORG ENDTB BUFAD BSS 1 ARRAY (VARIABLE) ADDRESS - P1 DCNT BSS 1 DATA ITEM COUNT - P2 DFLAG BSS 1 DEVICE TYPE FLAG - P3 SPC 1 SCANR NOP ENTRY POINT FOR CALL #1 JSB .ENTR PASS PARAMETER ADDRESSES DEF BUFAD LDA DCNT,I GET NUMBER OF DATA ITEMS ISZ DCNT LDB DCNT,I JSB IFIX,I CONVERT TO FIXED POINT JMP ERR18 IFIX ERROR - EXIT TO SYNTAX SZB,RSS PROTECT AGAINST ZERO COUNT JMP ERR18 CMB,INB STB ICNT POST INTERNAL COUNTER CLA STA EOTF SET EOT/SOT FLAG TO SOT LDA DFLAG,I GET DEVICE TYPE FLAG SSA JMP PHOTO INPUT VIA PHOTO READER SPC 1 * INPUT VIA TELEPRINTER SPC 1 RDTTY JSB IMOFF,I TURN OFF KEYB'D INTERRUPT LDA .72 MAXIMUM RECORD LENGTH = 72 LDB .BUFA JSB REED,I GO READ FROM TTY CPA M2 JMP RBOUT 'ESC' OCCURRED IN RECORD SPC 1 * PROCESS THE RECORD SPC 1 PROCS CMA,SSA,RSS CHECK FOR A LONG RECORD JMP ERR18 IF TOO LONG, RETURN TO SYNTAX STA CCNT POST COUNT FOR 'GETCR' LDA .BUFA ALS STA BADDR SET LEFT/REGHT FLAG TO LEFT SPC 1 * MODIFY 'NUMCK' TO RETURN VALUES TO US SPC 1 LDA STORA STA 1006B LDA STORB STA 1007B CLA STA 1010B STA 1011B STA 1012B SPC 1 * FETCH A CONSTANT FROM STRING AND CONVERT IT SPC 1 BEGIN JSB CONST,I LET BASIC DO THE WORK JMP ERR18 SYNTAX ERROR IN LINE LDA VALUE LDB VALUE+1 STA BUFAD,I RETURN VALUES TO BASIC ISZ BUFAD STB BUFAD,I ISZ BUFAD ISZ ICNT END OF THE LINE? JMP BEGIN NO - CONTINUE JSB RESTR RESTORE BASIC COMPILER JMP SCANR,I RETURN SPC 1 * THIS ROUTINE RESTORES BASIC SPC 1 RESTR NOP RESTORE 'NUMCK' ROUTINE SPC 1 LDA I STA 1006B LDA I+1 STA 1007B LDA I+2 STA 1010B LDA I+3 STA 1011B LDA I+4 STA 1012B JSB IMON,I TURN ON KEYB'D INTERRUPT JMP RESTR,I RETURN SPC 1 * PHOTO READER INPUT LOGIC SPC 1 PHOTO LDA .72 LDB .BUFA JSB PREAD,I INPUT A RECORD CPA M2 EOT OR SOT DETECTED? JMP EOTR YES - GO DETERMINE WHICH CPA M3 IS READER READY? JMP ERR18 NO - MAKE IT READY SZA,RSS 'ESC' IN INPUT LINE JMP PHOTO YES - READ AGAIN STA EOTF NO - SET EOT/SOT TO EOT JMP PROCS GO PROCESS RECORD SPC 1 * TEST EOT/SOT SPC 1 EOTR LDB EOTF GET EOT/SOT FLAG SZB,RSS JMP PHOTO SOT - READ AGAIN JMP ERR18 UNEXPECTED EOT SPC 1 ASC 1,\ DEF *-1 RBOUT LDB *-1 CLA,INA 'ESC' IN LINE - OUTPUT A JSB WRITE,I '\', CR,LF JMP RDTTY READ NEXT RECORD SPC 1 * PRODUCE A SYNTAX ERROR (ERROR 18) SPC 1 ERR18 JSB RESTR RESTORE BASIC JMP 613B GO TO SYNTAX ERROR ENTRY LSTWD EQU * END