Example #1
0
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 );
   }
}
Example #2
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);
}
Example #3
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 );
}
Example #4
0
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);
}
Example #5
0
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);
}