int tjDirPick( char filename[13], char *mask, tjPickOpts Opts ) // Pick a directory entry. Conveeeenient. { ffblk ffblk; int done; Opts.PickMe = mkFlist( (size_t) 13, 0 ); Opts.width = 12; Opts.topline = Opts.current = 1; Opts.dispfun = &strdispfun; done = findfirst( mask, &ffblk, 0); while (!done) { iquedptr( Opts.PickMe, &ffblk.ff_name ); done = findnext(&ffblk); } if( done = tjPick( Opts ) ) { rcld( Opts.PickMe, filename, done ); rmFlist( &Opts.PickMe ); return( 1 ); } else { strcpy( filename, "" ); rmFlist( &Opts.PickMe ); return( 0 ); } }
static int dcltype_read_sysinput(char *buf) { if (buf == NULL) return(DCL_ERROR); (void) memset(buf,0,MAX_TOKEN); if (C == 1){ (void) kbdread(buf,MAX_TOKEN,data_stack,INFINITE_TIMEOUT); } else { (void) rcld(cmd[C].cmd,buf,(unsigned int)cmd[C].ln); if (*buf == '$') *buf = 0; else NEXT_LINE(); } if (buf[strlen(buf)-1] == '\n' || buf[strlen(buf)-1] == '\r') buf[strlen(buf)-1] = 0; return(0); }
void strdispfun( tjPickOpts Opts, int linenum ) // Just a string display function, in case you need it! { char *item = new( char[Opts.width+1] ); if( rcld( Opts.PickMe, item, linenum ) ) { tjStrPad( item, Opts.width ); if( linenum == Opts.current ) tjWriteAt( Opts.ux, Opts.uy+(linenum-Opts.topline), Opts.hifore, Opts.hiback, item ); else tjWriteAt( Opts.ux, Opts.uy+(linenum-Opts.topline), Opts.fore, Opts.back, item ); } else { strcpy( item, "" ); tjStrPad( item, Opts.width ); tjWriteAt( Opts.ux, Opts.uy+(linenum-Opts.topline), Opts.fore, Opts.back, item ); } delete( item ); }
int dcl_call(PARAM_T *p,PARAM_T *q) { char label[MAX_LABEL]; char outfile[MAX_TOKEN]; CMD_LABEL LABEL; char *parm[8] = {NULL}; int l = 0; unsigned int i = 0; int found = 0; char subr = 0; int retcod = DCL_OK; if (cmd[C].subr) { NEXT_LINE(); return(DCL_OK); } if (!dcl[D].cc[dcl[D].ccl]) { NEXT_LINE(); return(DCL_OK); } if (C <= 1) { (void) dcl_printf(dcl[D].SYS_OUTPUT,"Invalid use of CALL command.\n"); _SEVERITY = 2; _STATUS = 19; return(DCL_ERROR); } if (p == NULL || q == NULL) return(DCL_ERROR); *label = 0; *outfile = 0; retcod = cmd_parse_line(dcl_line,CALL_PARAM,CALL_QUAL,p,q); if (retcod == DCL_OK) { if (q[0].flag & PRESENT) { dcl_string(q[0].value,outfile,MAX_TOKEN); if (*outfile == 0){ NEXT_LINE(); (void) dcl_printf(dcl[D].SYS_OUTPUT,"Invalid argument\n"); _SEVERITY = 2; _STATUS = 19; retcod = DCL_ERROR; goto exit_label; } } dcl_string(p[0].value,label,MAX_LABEL-1); strcat(label,":"); while (!found && i <= nempty(cmd[C].label)) { if (rcld(cmd[C].label,&LABEL,i)) { if (strcasecmp(label,LABEL.name) == 0) { l = LABEL.line; subr = LABEL.subr; found = 1; } } i++; } if (!found) { NEXT_LINE(); (void) dcl_printf(dcl[D].SYS_OUTPUT,"CALL target not found.\n"); _SEVERITY = 2; _STATUS = 19; retcod = DCL_ERROR; goto exit_label; } if (!subr) { NEXT_LINE(); (void) dcl_printf(dcl[D].SYS_OUTPUT,"CALL target not a subroutine.\n"); _SEVERITY = 2; _STATUS = 19; retcod = DCL_ERROR; goto exit_label; } for (i = 0; i < 8; i++) { parm[i] = (char *) malloc(MAX_TOKEN); if (parm[i] == NULL) { NEXT_LINE(); (void) dcl_printf(dcl[D].SYS_OUTPUT,"ERROR - CA0002\n"); _SEVERITY = 4; _STATUS = 8; retcod = DCL_ERROR; goto exit_label; } *parm[i] = 0; } for (i = 1; i <= 8; i++) if (p[i].flag & PRESENT) strcpy(parm[i-1],p[i].value); i = (unsigned)cmd[C].ln + 1; (void) pushdptr(cmd[C].stack,&i); cmd[C].ln = l; dcl_subr++; retcod = dcl_enter_proc_level(outfile,parm); } exit_label: for (l = 0;l < 8; l++) if (parm[l] != NULL) free(parm[l]); return(retcod); }
int dcl_recall(PARAM_T *p,PARAM_T *q) { char token[MAX_TOKEN]; char sel[MAX_TOKEN]; int i = 0; int retcod = 0; int f_all = 0; int f_erase = 0; int f_save = 0; NEXT_LINE(); if (cmd[C].subr) return(0); if (!dcl[D].cc[dcl[D].ccl]) return(0); if (mode != MODE_INTERACTIVE || D != 1) return(0); if (p == NULL || q == NULL) return(DCL_ERROR); (void)mkcdptr(cmd_stack,1); (void)deln(cmd_stack); *token = 0; *sel = 0; (void)cmd_parse_line(dcl_line,RECALL_PARAM,RECALL_QUAL,p,q); for (i = 0; q[i].tag; i++) { if (q[i].flag & PRESENT) switch (q[i].tag) { case 1: /* /ALL */ f_all = TRUE; break; case 2: /* /ERASE */ f_erase = TRUE; break; case 3: /* /SAVE */ f_save = TRUE; break; default: ; } /* end switch */ } /* end for */ dcl_string(p[0].value,sel,MAX_TOKEN); if (f_all){ (void)mkcdptr(cmd_stack,0); while (nextdptr(cmd_stack,token)) { (void) dcl_printf(dcl[D].SYS_OUTPUT,"%3d %s\n",ncur(cmd_stack),token); } goto exit_label; } if (f_save){ FILE *fp = fopen(history_filename, "w"); char buffer[1024]; if (fp != NULL) { (void)mkcdptr(cmd_stack,0); //cmd_stack->nodes while(prevdptr(cmd_stack,buffer)) { fprintf(fp, "%s\n", buffer); } (void)fclose(fp); } goto exit_label; } if (f_erase){ (void) clrFlist(cmd_stack); goto exit_label; } i = 1; if (*sel){ i = atoi(sel); if (i) { if (i < 1 || i > MAX_KBD_STACK){ (void) dcl_printf(dcl[D].SYS_OUTPUT,"Invalid value\n"); _SEVERITY = 2; _STATUS = 19; retcod = -1; goto exit_label; } if (i > (int) nempty(cmd_stack)) i = (int) nempty(cmd_stack); } else { (void) mkcdptr(cmd_stack,0); while (nextdptr(cmd_stack,token)) { if (strncasecmp(token,sel,strlen(sel)) == 0) { i = (int)ncur(cmd_stack); break; } } if (i == 0) { (void) dcl_printf(dcl[D].SYS_OUTPUT,"No command found\n"); _SEVERITY = 2; _STATUS = 19; retcod = -1; goto exit_label; } } } if (rcld(cmd_stack,dcl_line,(unsigned int)i)){ recall = 1; } else { dcl_line[0] = 0; } exit_label: return(retcod); }