REM 1229 4APRIL84 * * RWLOC.BAS * * REM COPYRIGHT 1984 BY DISCO-TECH REM FUNCTIONS TO READ THE LOC00X01.DAT AND LOC00X03.DAT FILES REM WHICH CONTAIN THE POINT NUMBERS, NORTHINGS, EASTINGS, ELEVATIONS, REM AND POINT DESCRIPTIONS FOR SURVEY2000 PROGRAMS. ALSO, ROUTINES REM FOR READING JOBLOG83.LOG, WHICH IS THE LOG OF ALL JOBS AVAILABLE REM ON THE DISK. DEF RDPTUD( FILE, POINT.NUMBER ) PUBLIC REM READ A RECORD TO SEE IF IT IS USED.\ (THERE IS ONE RECORD FOR EACH POINT CREATED BY JOBLOG) INTEGER RDPTUD, FILE, POINT.NUMBER REM POSITION FILE POINTER DUM% = GET(FILE) READ # FILE, POINT.NUMBER ; RDPTUD = GET( FILE ) RETURN FEND DEF RDPTNG( FILE ) PUBLIC REM READ CURRENT POINT NORTHING REM MUST BE USED AFTER RDPTUD REAL RDPTNG, NORTHING INTEGER FILE, INDEX FOR INDEX = 1 TO 8 POKE ( VARPTR( NORTHING ) + INDEX - 1 ), GET( FILE ) NEXT INDEX RDPTNG = NORTHING RETURN FEND DEF RDPTEG( FILE ) PUBLIC REM READ CURRENT POINT EASTING REM MUST BE USED AFTER RDPTNG REAL RDPTEG, EASTING INTEGER FILE, INDEX FOR INDEX = 1 TO 8 POKE ( VARPTR( EASTING ) + INDEX - 1 ), GET( FILE ) NEXT INDEX RDPTEG = EASTING RETURN FEND DEF RDPTEV( FILE ) PUBLIC REM READ CURRENT POINT ELEVATION REM MUST BE USED AFTER RDPTEG REAL RDPTEV, ELEVATION INTEGER FILE, INDEX FOR INDEX = 1 TO 8 POKE ( VARPTR( ELEVATION ) + INDEX - 1 ), GET( FILE ) NEXT INDEX RDPTEV = ELEVATION RETURN FEND DEF RDPDSC( FILE ) PUBLIC REM READ CURRENT POINTER PTTR REM IF POINTER IS NOT 0 THEN READ THE POINT DESC FROM LOC00X02.DAT REM MUST BE USED AFTER RDPTEV STRING RDPDSC, PD$ INTEGER FILE, INDEX, PTTR FOR INDEX = 1 TO 2 POKE ( VARPTR( PTTR ) + INDEX - 1 ), GET( FILE ) NEXT INDEX IF PTTR = 0\ THEN PD$ = ""\ ELSE READ # F03.DAT%, PTTR; PD$ RDPDSC = PD$ RETURN FEND DEF RDPTTR( FILE ) PUBLIC REM READ CURRENT POINTER PTTR REM MUST BE USED AFTER RDPTEV INTEGER FILE, INDEX, RDPTTR, PTTR FOR INDEX = 1 TO 2 POKE ( VARPTR( PTTR ) + INDEX - 1 ), GET( FILE ) NEXT INDEX RDPTTR = PTTR RETURN FEND DEF STRREC( FILE, POINT.NUMBER, NORTHING, EASTING, ELEVATION,\ PTTR, POINT.USED ) PUBLIC REM STORE A POINT RECORD INTEGER STRREC, FILE, POINT.NUMBER, POINT.USED, INDEX, PTTR,\ LR, BL, SS REAL NORTHING, EASTING, ELEVATION IF PTTR > -1 THEN GOTO PD.DELETED : REM ELSE DELETE POINT DESC$ IF NOT RDPTUD( FILE, POINT.NUMBER )\ THEN GOTO PD.DELETED\ : REM POINT # HAS BEEN PREVIOUSLY DELETED ELSE FOR I=1 TO 24 : DUM=GET(FILE) : NEXT I\ : PTTR = RDPTTR(FILE)\ : IF PTTR < 1\ THEN GOTO PD.DELETED\ : REM POINT HAS NO PT DESC$ ELSE PRINT # F03.DAT%, PTTR; ""\ : REM DELETE PD$ : READ #F03.DAT%, 1; LR, BL, SS\ : IF BL=0\ : REM NO BLANK RECORDS THEN BL=1\ : SS=PTTR\ ELSE BL = BL+1\ : IF SS > PTTR\ : REM SS IS FIRST POSSIBLY BLANK REC THEN SS=PTTR PRINT #F03.DAT%, 1; LR, BL, SS PD.DELETED: REM POSITION FILE POINTER DUM% = GET(FILE) READ # FILE, POINT.NUMBER ; PUT FILE, POINT.USED FOR INDEX = 1 TO 8 PUT FILE, PEEK( VARPTR( NORTHING ) + INDEX - 1 ) NEXT INDEX FOR INDEX = 1 TO 8 PUT FILE, PEEK( VARPTR( EASTING ) + INDEX - 1 ) NEXT INDEX FOR INDEX = 1 TO 8 PUT FILE, PEEK( VARPTR( ELEVATION ) + INDEX - 1 ) NEXT INDEX FOR INDEX = 1 TO 2 PUT FILE, PEEK( VARPTR( PTTR ) + INDEX - 1 ) NEXT INDEX STRREC = 0 RETURN FEND DEF STRPNT ( FILE, POINT.NUMBER, NORTHING, EASTING, ELEVATION, PD$ ) PUBLIC REM STORE A POINT TO THE FILE STRING PD$, D$ INTEGER STRPNT, FILE, POINT.NUMBER, PTTR, I, DUM,\ LAST.REC, BLANK.RECS, START.SEARCH REAL NORTHING, EASTING, ELEVATION IF PD$ = "" THEN PTTR = 0 : GOTO PD.STORED IF RDPTUD( FILE, POINT.NUMBER )\ THEN FOR I=1 TO 24 : DUM=GET(FILE) : NEXT I\ : PTTR = RDPTTR(FILE)\ : IF PTTR > 0\ THEN PRINT # F03.DAT%, PTTR; PD$\ : GOTO PD.STORED READ # F03.DAT%, 1; LAST.REC, BLANK.RECS, START.SEARCH IF NOT BLANK.RECS THEN GOTO STORE.PD WHILE START.SEARCH<=LAST.REC READ #F03.DAT%, START.SEARCH; D$ IF D$ = ""\ THEN PTTR = START.SEARCH\ : PRINT # F03.DAT%, PTTR; PD$\ : PRINT #F03.DAT%, 1; LAST.REC, NB-1, START.SEARCH+1\ : GOTO PD.STORED START.SEARCH = START.SEARCH+1 WEND STORE.PD: READ #F03.DAT%, 1; LAST.REC, BLANK.RECS, START.SEARCH PTTR = LAST.REC+1 PRINT #F03.DAT%, 1; PTTR, BLANK.RECS, START.SEARCH PRINT #F03.DAT%, PTTR; PD$ PD.STORED: STRPNT = STRREC( FILE, POINT.NUMBER, NORTHING, EASTING,\ ELEVATION, PTTR, 1 ) RETURN FEND REM END OF READ AND STORE POINTS FUNCTIONS FOR VERTICAL COORD. PTS REM DATA.DISK$ IS THE DRIVE LETTER OF THE DATA DISK INPUT"DATA DISK IS ON DRIVE:";DATA.DISK$ OPEN DATA.DISK$ + ":JOBLOG83.LOG" RECL 290 AS 1 REM GET JOB FILE GOSUB 900 REM OPEN THE COORDINATE POINTS FILE OPEN F01.DAT$ RECL 27 AS 2 DUMMY% = GET(2) : REM DO NOT REMOVE. THIS CORRECTS AN ERROR IN CB80 REM VERSION 1.4. IF A FILE IS TO BE ACCESSED USING THE GET FUNCTION REM THIS LINE MUST BE INCLUDED WHEN THE FILE IS OPENED OR THE GET REM POINTER WILL ALWAYS POINT TO THE FIRST RECORD IN THE FILE REM OPEN THE POINT DESCRIPTION FILE F03.DAT% = 3 IF SIZE( F03.DAT$ )\ THEN OPEN F03.DAT$ RECL 22 AS F03.DAT%\ ELSE CREATE F03.DAT$ RECL 22 AS F03.DAT%\ : PRINT #F03.DAT%, 1; 1,0,0 REM 1=LAST USED REC, 0=NUMBER OF BLANKED RECORDS, 0=FIRST BLANK REC 10 INPUT"1 = READ, 2 = WRITE, 3 = DELETE";C% PRINT ON C% GOSUB 100, 200, 300 GOTO 10 REM G E T A P O I N T 100 INPUT"POINT # "; JP% POINT.USED% = RDPTUD( 2, JP% ) IF POINT.USED% THEN\ Y1 = RDPTNG( 2 )\ : X1 = RDPTEG( 2 )\ : Z1 = RDPTEV( 2 )\ : D$ = RDPDSC( 2 )\ : PRINT"NORTHING =";Y1\ : PRINT"EASTING =";X1\ : PRINT"ELEVATION=";Z1\ : PRINT"PT DESC. =";D$\ ELSE PRINT"POINT HAS NO COORDINATES" RETURN REM S T O R E A P O I N T 200 INPUT"POINT # "; JP% INPUT"NORTHING "; Y1 INPUT"EASTING "; X1 INPUT"ELEVATION"; Z1 INPUT"PT DESC. "; D$ DUM = STRPNT( 2, JP%, Y1, X1, Z1, D$ ) RETURN REM DELETE A P O I N T 300 INPUT"DELETE POINT # "; JP% DUM = STRREC( 2, JP%, 0, 0, 0, 0, 0 ) RETURN REM PRINT JOB FILE DESCRIPTION 600 PRINT "JOB NUMBER:"; JOB.NUMBER$;\ " JOB SIZE:";NUMBER.OF.POINTS% PRINT JOB.DESC1$ PRINT JOB.DESC2$ PRINT JOB.DESC3$ RETURN REM GET JOB.NUMBER$ FROM JOBLOG80.DAT 900 PRINT "ENTER JOB NUMBER (0 TO EXIT)" REM INPUT JOB.NUMBER$ INPUT"JOB NUMBER ="; JOB.NUMBER$ IF JOB.NUMBER$ ="0" THEN STOP GOSUB 950 : REM GET JOB FROM JOBLOG80.DAT REM JOB NOT FOUND IF JOB.FILE.FOUND% = 0\ THEN PRINT "THIS JOB NUMBER DOESN'T EXIST"\ : GOTO 900 REM JOB FILE WAS FOUND GOSUB 600 : REM PRINT JOB FILE DESCRIPTION GOSUB 990 : REM MAKE FILE NAME STRINGS 930 RETURN REM GET JOBFILE DESCRIPTION FOR A PARTICULAR JOB.NUMBER$ 950 IF END #1 THEN 980 READ #1, 1; NO.OF.JOBS.PLUS1% FOR RECORD.NUMBER% = 2 TO NO.OF.JOBS.PLUS1% READ #1, RECORD.NUMBER%;\ JOB.NUMBER.X$, NUMBER.OF.POINTS%,\ JOB.FILE$, JOB.DESC1$, JOB.DESC2$, JOB.DESC3$,\ DIRECTION.FORMAT%, AREA.TYPE% IF JOB.NUMBER.X$= JOB.NUMBER$\ THEN JOB.FILE.FOUND% = -1\ : GOTO 980 NEXT RECORD.NUMBER% REM JOB.NUMBER WAS NOT FOUND JOB.FILE.FOUND% = 0 980 RETURN REM MAKE FILE STRING VARIABLES 990 LOC00X$ = MID$(JOB.FILE$,4,3) F01.DAT$ = DATA.DISK$ + ":LOC" + LOC00X$+"01.DAT" F03.DAT$ = DATA.DISK$ + ":LOC" + LOC00X$+"03.DAT" RETURN REM END OF RWLOC.BAS