TIP: Click on subject to list as thread! ANSI
echo: cbm
to: HARRY POTTER
from: TILMANN HENTZE
date: 2018-02-12 02:29:00
subject: Re: Porting DirMenu to PE

Harry Potter  schrieb:
> having a problem: when I try to read the directory,
> I get a ?Syntax Error.

It means KERNAL OPEN failed, because the file number is zero
according to "Compute's Programming The PET/CBM".

> I don't know what's causing this, but the following code seems to
> cause the problem (I'm using cc65):
> ----------------------------
>  __asm__ (
>   //Set LFNs.
>   "\tlda\t#1\n"
>   "\tldx\t#8\n"
>   "\tldy\t#0\n"
>   "\tsty\t_c\n"
>   "\tsty\t_e\n"
>   "\tjsr\t$FFBA\n"
This calls the SCRATCH routine in BASIC 4.
>   //Set name ("$", as above in dire).
>   "\tldx\t#<_dire\n"
>   "\tldy\t#>_dire\n"
>   "\tjsr\t$FFBD\n"
This reads the disk device status.
>   //Open directory.
>   "\tjsr\t$FFC0\n"
>   );
> ----------------------------
> Can you help me out?

Use cc65's cbm_opendir and cbm_readdir declared in cbm.h
e.g:

#include 
#include 
#include 

int main(int argc, unsigned char **argv)
{

 struct cbm_dirent dire;
 unsigned char result = 0;
 unsigned char lfn = 1;
 unsigned char device = 8;
 unsigned char dirname[17] = "$";

 result = cbm_opendir(lfn, device, dirname);
 if (result)
 {
  printf("error: %hhd\n", result);
  return result;
 }

 while (result == 0)
 {
  result = cbm_readdir(lfn, &dire);
  switch (result)
  {
   case 0:
    printf("%3hd %-16s %#hhx %#hhx\n",
      dire.size,
      dire.name,
      dire.type,
      dire.access
    );
    break;
   case 2:
    printf("%3hd blocks free.\n", dire.size);
    break;
   default:
    break;
  }
 }
 cbm_closedir(lfn);
 return 0;
}

--- SoupGate-Win32 v1.05
* Origin: Agency HUB, Dunedin - New Zealand | FidoUsenet Gateway (3:770/3)

SOURCE: echomail via QWK@docsplace.org

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.