#INCLUDE /* CHANNEL 15. POINTER ROUTINES. RGETS GET A STRING FROM REL FILE. */ #DEFINE PEEK(X) *((CHAR *)X) #DEFINE POKE(X,Y) *((CHAR *)X)=Y MAIN()/* DRIVER */ Û UNSIGNED I, J, FIELDS; INT ERR; INT DEV; CHAR BUFF[255]; CHAR HI; CHAR LO; INT FILE=5; DEV=OPEN(9,8,15,"U9"); /*OPEN COMMAND CHANNEL*/ IF(DEV==ÎÕÌÌ) ABORT(); PRINTF("ÅNTER NAME OF RELATIVE FILE >"); GETS(BUFF); PRINTF("ÅNTER NUMBER OF FIELDS PER RECORD >"); SCANF("%D",&FIELDS); DEV=OPEN(FILE,8,5,BUFF); /* OPEN REL FILE */ IF(DEV==ÎÕÌÌ) ABORT(); FOR(;;) Û PRINTF("ÒECORD ÎUMBER TO READ. 0=EXIT >"); SCANF("%D",&I); IF(I==0) BREAK; ERR=POINT(9,I,1); IF(ERR) PUTS("ÅÒÒÏÒ - RECORD OUTSIDE RANGE."); ELSE FOR(J=1; J<=FIELDS; J++) Û ERR=RGETS(BUFF,255,5); IF(ERRßßFERROR()) BREAK; PUTS(BUFF); Ý PUTS("ÄISK ERROR."); Ý ABORT(); Ý INT RGETS(STR, MAX ,FILE) /* ÇET STRING FROM REL FILE. ÒEADS PAST ÅÏÆ UNLIKE FGETS GETC FGETC. */ CHAR *STR; /*STRING TO FILL*/ UNSIGNED MAX; /*MAXIMUM CHARACTERS*/ UNSIGNED FILE;/*FILE NUMBER*/ Û CHAR A, Y; /*6510*/ CHAR X = FILE; /*REGISTERS*/ UNSIGNED COUNT; SYS(0XFFC6, &A, &X, &Y);/* CHKIN */ IF((PEEK(783)&1)==1) /*KERNAL ERROR*/ RETURN(1); /*RETURN ON ERROR*/ FOR(COUNT=0; COUNT