home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / RGETS.ARC / RGETS.C
Encoding:
C/C++ Source or Header  |  2019-04-13  |  2.0 KB  |  122 lines

  1. #INCLUDE <STDIO.H>
  2. /*
  3.  CHANNEL 15. POINTER ROUTINES.
  4.  RGETS GET A STRING FROM REL FILE.
  5. */
  6. #DEFINE PEEK(X)   *((CHAR *)X)
  7. #DEFINE POKE(X,Y) *((CHAR *)X)=Y
  8.  
  9. MAIN()/* DRIVER */
  10. UNSIGNED I, J, FIELDS;
  11. INT ERR;
  12. INT DEV;
  13. CHAR BUFF[255];
  14. CHAR HI;
  15. CHAR LO;
  16. INT FILE=5;
  17.  
  18. DEV=OPEN(9,8,15,"U9");
  19. /*OPEN COMMAND CHANNEL*/
  20.  IF(DEV==╬╒╠╠)
  21.   ABORT();
  22.  
  23. PRINTF("┼NTER NAME OF RELATIVE FILE >");
  24. GETS(BUFF);
  25. PRINTF("┼NTER NUMBER OF FIELDS PER RECORD >");
  26. SCANF("%D",&FIELDS);
  27.  
  28. DEV=OPEN(FILE,8,5,BUFF); 
  29. /* OPEN REL FILE */
  30.  IF(DEV==╬╒╠╠)
  31.   ABORT();
  32.  
  33. FOR(;;)
  34.   █
  35.    PRINTF("╥ECORD ╬UMBER TO READ. 0=EXIT >");
  36.    SCANF("%D",&I);
  37.    IF(I==0)
  38.     BREAK;
  39.    
  40.    ERR=POINT(9,I,1);
  41.    
  42.    IF(ERR)
  43.      PUTS("┼╥╥╧╥ - RECORD OUTSIDE RANGE.");
  44.  
  45.    ELSE
  46.      FOR(J=1; J<=FIELDS; J++)
  47.       █
  48.        ERR=RGETS(BUFF,255,5);
  49.        IF(ERR▀▀FERROR())
  50.         BREAK;
  51.        PUTS(BUFF);
  52.       ▌       
  53.  
  54.     PUTS("─ISK ERROR.");
  55.     
  56.   ▌
  57.  
  58.  ABORT();
  59.  
  60.  
  61.   
  62. INT RGETS(STR, MAX ,FILE)
  63. /*
  64.    ╟ET STRING FROM REL FILE. ╥EADS PAST
  65.    ┼╧╞ UNLIKE FGETS GETC FGETC.
  66. */
  67. CHAR *STR;    /*STRING TO FILL*/
  68. UNSIGNED MAX; /*MAXIMUM CHARACTERS*/
  69. UNSIGNED FILE;/*FILE NUMBER*/
  70.  CHAR A, Y;     /*6510*/
  71.  CHAR X = FILE; /*REGISTERS*/
  72.  UNSIGNED COUNT;
  73.  
  74.  SYS(0XFFC6, &A, &X, &Y);/* CHKIN */
  75.  
  76.   IF((PEEK(783)&1)==1) /*KERNAL ERROR*/
  77.    RETURN(1);          /*RETURN ON ERROR*/
  78.  
  79.  FOR(COUNT=0; COUNT<MAX; COUNT++)
  80.    █
  81.    SYS(0XFFE4, &A, &X, &Y);/* GETIN */
  82.    IF(A == '\N' ▀▀ A == '\0')
  83.     BREAK;
  84.    STR[COUNT] = A;
  85.    ▌
  86.    
  87.   STR[COUNT]='\0';
  88.  
  89.   SYS(0XF333); /* CLRCHN */
  90.  
  91.  RETURN(0);
  92.  
  93.  
  94. INT POINT(FILE,REC,BYTE)
  95. /* POINT TO RECORD WITHIN FILE */
  96. INT FILE; /*FILE NUMBER*/
  97. UNSIGNED REC;  /*RECORD NUMBER*/
  98. CHAR BYTE;/*BYTE NUMBER WITHIN RECORD*/
  99.  STATIC CHAR POINTER[]=█'P',101,0,0,0,'\0'▐ER N¿HI,LO;
  100.  INT ERROR;
  101.  
  102.    HI=REC/256;
  103.    LO=REC-(HI*256);
  104.  
  105.    POINTER[2]=LO;
  106.    POINTER[3]=HI;      
  107.    POINTER[4]=BYTE;
  108.  
  109.    FPUTS(POINTER,FILE);/*POINT TWICE*/  
  110.    ERROR=FERROR(); /*GET STATUS EACH TIME*/
  111.    FPUTS(POINTER,FILE);/*1541 INSURANCE*/
  112.    ERROR=FERROR();
  113.  
  114.  RETURN(ERROR);  
  115.  
  116.