- unsigned char status;
- if ((status = cbm_open (lfn, device, CBM_READ, "$")) == 0) {
- if (cbm_k_chkin (lfn) == 0) {
- if (cbm_k_basin () == 0x01) { /* Start address */
- if (cbm_k_basin () == 0x04) {
- cbm_k_clrch ();
- return 0;
- }
- } else {
- cbm_close (lfn);
- cbm_k_clrch ();
- return 2;
+ va_list ap;
+ const char* name = "$";
+
+ /* The name used in cbm_open may optionally be passed */
+ if (__argsize__ == 4) {
+ va_start (ap, device);
+ name = va_arg (ap, const char*);
+ va_end (ap);
+ }
+
+ /* Open the directory */
+ if (cbm_open (lfn, device, CBM_READ, name) == 0) {
+ if ((_oserror = cbm_k_chkin (lfn)) == 0) {
+ /* Ignore start address */
+ cbm_k_basin();
+ cbm_k_basin();
+ cbm_k_clrch();
+ if (cbm_k_readst()) {
+ cbm_close(lfn);
+ _oserror = 4; /* directory cannot be read */